Skip to content

Commit

Permalink
Merge branch 'main' into chore/update-community
Browse files Browse the repository at this point in the history
  • Loading branch information
klejejs authored Sep 30, 2024
2 parents 9035b5f + 3fb6b0f commit e5af2bf
Show file tree
Hide file tree
Showing 15 changed files with 223 additions and 4 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.0

- name: Setup Terraform
uses: hashicorp/[email protected]
Expand Down
3 changes: 2 additions & 1 deletion os-builds/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@ terraform {
}
}

required_version = "= 1.9.6"

required_providers {
cloudflare = {
source = "cloudflare/cloudflare"
version = "~> 4"
version = "~> 4.0"
}
}
}
4 changes: 3 additions & 1 deletion static_dns/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@ terraform {
}
}

required_version = "= 1.9.6"

required_providers {
cloudflare = {
source = "cloudflare/cloudflare"
version = "~> 3.0"
version = "~> 4.0"
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion static_dns/record._checkdns.tf
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
resource "cloudflare_record" "_checkdns" {
zone_id = data.cloudflare_zone.dns_zone.id
name = "_checkdns"
value = "1.1.1.1"
content = "1.1.1.1"
type = "A"
ttl = 1
proxied = false
Expand Down
37 changes: 37 additions & 0 deletions stun_server/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
terraform {
cloud {
organization = "home_assistant"

workspaces {
name = "stun_server"
}
}
}

provider "aws" {
region = "us-east-1"
}

module "us_east_1" {
source = "./region"

region = "us-east-1"
domain_name = var.domain_name
image_tag = var.image_tag
}

module "eu_central_1" {
source = "./region"

region = "eu-central-1"
domain_name = var.domain_name
image_tag = var.image_tag
}

module "ap_southeast_1" {
source = "./region"

region = "ap-southeast-1"
domain_name = var.domain_name
image_tag = var.image_tag
}
8 changes: 8 additions & 0 deletions stun_server/outputs.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
output "ip" {
description = "The public IP address of the stun server"
value = {
"us-east-1" = module.us_east_1.stun_server_ip
"eu-central-1" = module.eu_central_1.stun_server_ip
"ap-southeast-1" = module.ap_southeast_1.stun_server_ip
}
}
12 changes: 12 additions & 0 deletions stun_server/region/dns.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
data "cloudflare_zone" "dns_zone" {
name = var.domain_name
}

resource "cloudflare_record" "instance_dns" {
zone_id = data.cloudflare_zone.dns_zone.id
name = join("-", ["stun", data.aws_region.current.name])
content = data.aws_network_interface.stun_server_interface.association[0].public_ip
type = "A"
proxied = true
depends_on = [data.aws_network_interface.stun_server_interface]
}
32 changes: 32 additions & 0 deletions stun_server/region/ecs.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
resource "aws_ecs_service" "stun-server" {
name = local.service_name
cluster = local.infrastructure_region_outputs.ecs_cluster
task_definition = module.stun_server.task_definition
desired_count = 1
deployment_minimum_healthy_percent = 100
deployment_maximum_percent = 200
health_check_grace_period_seconds = 90
launch_type = "FARGATE"

# Required to fetch the public IP address of the ECS service
enable_ecs_managed_tags = true
wait_for_steady_state = true

network_configuration {
assign_public_ip = true
security_groups = [aws_security_group.stun_sg.id]
subnets = local.infrastructure_region_outputs.public_subnets
}

tags = {
region = data.aws_region.current.name
}
}

data "aws_network_interface" "stun_server_interface" {
filter {
name = "tag:aws:ecs:serviceName"
values = [aws_ecs_service.stun-server.name]
}
depends_on = [aws_ecs_service.stun-server]
}
41 changes: 41 additions & 0 deletions stun_server/region/module.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
locals {
service_name = "stun-server"
infrastructure_region_outputs = data.tfe_outputs.infrastructure.values[data.aws_region.current.name]
}

provider "aws" {
region = var.region
}

data "tfe_outputs" "infrastructure" {
organization = "home_assistant"
workspace = "infrastructure"
}

data "aws_region" "current" {}

module "stun_server" {
source = "../../.modules/service"

service_name = local.service_name
container_image = "ghcr.io/home-assistant/stun"
container_version = var.image_tag
region = data.aws_region.current.name
ecs_cpu = 512
ecs_memory = 1024
container_definitions = {
portMappings = [
{
containerPort = 3478
hostPort = 3478
protocol = "tcp"
},
{
containerPort = 3478
hostPort = 3478
protocol = "udp"
}
],
}
webservice = true
}
30 changes: 30 additions & 0 deletions stun_server/region/network.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
resource "aws_security_group" "stun_sg" {
vpc_id = local.infrastructure_region_outputs.network_id

egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}

ingress {
description = "Allow STUN traffic TCP"
from_port = 3478
to_port = 3478
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}

ingress {
description = "Allow STUN traffic UDF"
from_port = 3478
to_port = 3478
protocol = "udp"
cidr_blocks = ["0.0.0.0/0"]
}

tags = {
region = data.aws_region.current.name
}
}
4 changes: 4 additions & 0 deletions stun_server/region/outputs.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
output "stun_server_ip" {
description = "The public IP address of the stun server"
value = data.aws_network_interface.stun_server_interface.association[0].public_ip
}
14 changes: 14 additions & 0 deletions stun_server/region/variables.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
variable "region" {
description = "The region to deploy the STUN server to"
type = string
}

variable "domain_name" {
description = "The base domain name"
type = string
}

variable "image_tag" {
description = "Version of the Stun server to deploy"
type = string
}
19 changes: 19 additions & 0 deletions stun_server/region/versions.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
terraform {

required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}

tfe = {
source = "hashicorp/tfe"
version = "~> 0.58.0"
}

cloudflare = {
source = "cloudflare/cloudflare"
version = "~> 4.0"
}
}
}
9 changes: 9 additions & 0 deletions stun_server/variables.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
variable "domain_name" {
description = "The base domain name"
type = string
}

variable "image_tag" {
description = "Version of the Stun server to deploy"
type = string
}
10 changes: 10 additions & 0 deletions stun_server/versions.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
terraform {
required_version = "= 1.9.6"

required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}

0 comments on commit e5af2bf

Please sign in to comment.