homelab-nomad/services.tf

102 lines
1.8 KiB
Terraform
Raw Normal View History

2022-02-16 17:56:18 +00:00
# Configure Consul provider
variable "consul_address" {
2022-02-17 22:03:42 +00:00
type = string
default = "http://nomad0.thefij:8500"
2022-02-16 17:56:18 +00:00
}
2022-02-28 20:07:25 +00:00
variable "base_hostname" {
type = string
description = "Base hostname to serve content from"
default = "dev.homelab"
}
2022-02-16 17:56:18 +00:00
provider "consul" {
2022-02-17 22:03:42 +00:00
address = var.consul_address
2022-02-16 17:56:18 +00:00
}
# Get Nomad client from Consul
data "consul_service" "read-nomad-cluster" {
2022-02-17 22:03:42 +00:00
name = "nomad-client"
2022-02-16 17:56:18 +00:00
}
locals {
2022-03-13 17:13:19 +00:00
nomad_node = data.consul_service.read-nomad-cluster.service[0]
2022-02-16 17:56:18 +00:00
nomad_node_address = "http://${local.nomad_node.node_address}:${local.nomad_node.port}"
}
2022-02-27 23:22:09 +00:00
# Configure the Nomad provider
2022-02-16 17:56:18 +00:00
provider "nomad" {
2022-02-17 22:03:42 +00:00
address = local.nomad_node_address
2022-02-16 17:56:18 +00:00
region = "global"
}
2022-02-27 23:22:09 +00:00
# Define services as modules
2022-02-16 17:56:18 +00:00
module "mysql-server" {
source = "./mysql"
}
module "redis" {
source = "./redis"
}
2022-02-16 17:56:18 +00:00
2022-02-28 20:07:34 +00:00
module "blocky" {
source = "./blocky"
base_hostname = var.base_hostname
depends_on = [module.mysql-server, module.redis]
2022-02-28 20:07:34 +00:00
}
2022-02-27 23:22:09 +00:00
module "traefik" {
source = "./traefik"
2022-02-16 17:56:18 +00:00
2022-02-27 23:22:09 +00:00
consul_address = var.consul_address
2022-02-28 20:07:25 +00:00
base_hostname = var.base_hostname
2022-02-16 17:56:18 +00:00
}
module "metrics" {
source = "./metrics"
2022-02-16 17:56:18 +00:00
consul_address = var.consul_address
2022-02-16 17:56:18 +00:00
}
module "nextcloud" {
source = "./nextcloud"
depends_on = [module.mysql-server]
}
2022-02-16 17:56:18 +00:00
resource "nomad_job" "whoami" {
hcl2 {
enabled = true
vars = {
2022-02-28 20:07:25 +00:00
"count" = "${2 * length(data.consul_service.read-nomad-cluster.service)}",
}
2022-02-16 17:56:18 +00:00
}
jobspec = file("${path.module}/whoami.nomad")
}
2022-03-14 22:58:47 +00:00
resource "consul_config_entry" "global_access" {
name = "*"
kind = "service-intentions"
config_json = jsonencode({
Sources = [
{
Action = "allow"
Name = "traefik"
Precedence = 6
Type = "consul"
},
{
Action = "deny"
Name = "*"
Precedence = 5
Type = "consul"
},
]
})
}