Moved domain, persist docker volumes.
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
nassella.thintz.com {
|
mycluster-mynode.nassella.cc {
|
||||||
reverse_proxy http://wg-easy:80
|
reverse_proxy http://wg-easy:80
|
||||||
|
|
||||||
# tls internal
|
# tls internal
|
||||||
|
# x
|
||||||
log
|
log
|
||||||
}
|
}
|
||||||
@@ -7,12 +7,12 @@ passwd:
|
|||||||
- ""
|
- ""
|
||||||
systemd:
|
systemd:
|
||||||
units:
|
units:
|
||||||
- name: appstorage.mount
|
- name: var-lib-docker-volumes.mount
|
||||||
enabled: true
|
enabled: true
|
||||||
contents: |
|
contents: |
|
||||||
[Mount]
|
[Mount]
|
||||||
What=/dev/disk/by-label/appstorage
|
What=/dev/disk/by-label/appstorage
|
||||||
Where=/appstorage
|
Where=/var/lib/docker/volumes
|
||||||
Type=ext4
|
Type=ext4
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
|
|||||||
65
main.tf
65
main.tf
@@ -12,6 +12,14 @@ terraform {
|
|||||||
source = "hashicorp/null"
|
source = "hashicorp/null"
|
||||||
version = "3.2.4"
|
version = "3.2.4"
|
||||||
}
|
}
|
||||||
|
time = {
|
||||||
|
source = "hashicorp/time"
|
||||||
|
version = "0.13.1"
|
||||||
|
}
|
||||||
|
cloudflare = {
|
||||||
|
source = "cloudflare/cloudflare"
|
||||||
|
version = "5.8.2"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,10 +59,34 @@ variable "flatcar_stable_version" {
|
|||||||
description = "The Flatcar Stable release you want to use for the initial installation, e.g., 2605.12.0"
|
description = "The Flatcar Stable release you want to use for the initial installation, e.g., 2605.12.0"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
variable "cloudflare_zone_id" {
|
||||||
|
type = string
|
||||||
|
description = "Cloudflare zone ID"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "cloudflare_account_id" {
|
||||||
|
type = string
|
||||||
|
description = "Cloudflare account id"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "cloudflare_api_token" {
|
||||||
|
type = string
|
||||||
|
description = "Cloudflare api token"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "domain" {
|
||||||
|
type = string
|
||||||
|
description = "Root domain to use"
|
||||||
|
}
|
||||||
|
|
||||||
provider "digitalocean" {
|
provider "digitalocean" {
|
||||||
token = var.do_token
|
token = var.do_token
|
||||||
}
|
}
|
||||||
|
|
||||||
|
provider "cloudflare" {
|
||||||
|
api_token = var.cloudflare_api_token
|
||||||
|
}
|
||||||
|
|
||||||
resource "digitalocean_ssh_key" "first" {
|
resource "digitalocean_ssh_key" "first" {
|
||||||
name = var.cluster_name
|
name = var.cluster_name
|
||||||
public_key = var.ssh_keys.0
|
public_key = var.ssh_keys.0
|
||||||
@@ -71,6 +103,16 @@ resource "digitalocean_reserved_ip" "machine" {
|
|||||||
region = digitalocean_droplet.machine[each.key].region
|
region = digitalocean_droplet.machine[each.key].region
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resource "cloudflare_dns_record" "machine" {
|
||||||
|
for_each = toset(var.machines)
|
||||||
|
zone_id = var.cloudflare_zone_id
|
||||||
|
name = "${var.cluster_name}-${each.key}"
|
||||||
|
content = digitalocean_reserved_ip.machine[each.key].ip_address
|
||||||
|
type = "A"
|
||||||
|
proxied = false
|
||||||
|
ttl = 300
|
||||||
|
}
|
||||||
|
|
||||||
resource "digitalocean_volume" "machine" {
|
resource "digitalocean_volume" "machine" {
|
||||||
for_each = toset(var.machines)
|
for_each = toset(var.machines)
|
||||||
region = var.datacenter
|
region = var.datacenter
|
||||||
@@ -95,10 +137,17 @@ resource "digitalocean_droplet" "machine" {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resource "time_sleep" "wait_5_seconds" {
|
||||||
|
create_duration = "5s"
|
||||||
|
}
|
||||||
|
|
||||||
resource "digitalocean_reserved_ip_assignment" "machine" {
|
resource "digitalocean_reserved_ip_assignment" "machine" {
|
||||||
for_each = toset(var.machines)
|
for_each = toset(var.machines)
|
||||||
ip_address = digitalocean_reserved_ip.machine[each.key].ip_address
|
ip_address = digitalocean_reserved_ip.machine[each.key].ip_address
|
||||||
droplet_id = digitalocean_droplet.machine[each.key].id
|
droplet_id = digitalocean_droplet.machine[each.key].id
|
||||||
|
# sometimes digital ocean throws an error for this resource
|
||||||
|
# saying the droplet has a pending event so we delay a few seconds
|
||||||
|
depends_on = [time_sleep.wait_5_seconds]
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "digitalocean_volume_attachment" "machine" {
|
resource "digitalocean_volume_attachment" "machine" {
|
||||||
@@ -116,16 +165,16 @@ resource "digitalocean_volume_attachment" "machine" {
|
|||||||
# strict = true
|
# strict = true
|
||||||
# }
|
# }
|
||||||
|
|
||||||
output "ip-addresses" {
|
# output "ip-addresses" {
|
||||||
value = {
|
# value = {
|
||||||
for key in var.machines :
|
# for key in var.machines :
|
||||||
"${var.cluster_name}-${key}" => digitalocean_droplet.machine[key].ipv4_address
|
# "${var.cluster_name}-${key}" => digitalocean_droplet.machine[key].ipv4_address
|
||||||
}
|
# }
|
||||||
}
|
# }
|
||||||
|
|
||||||
output "reserved-ip-addresses" {
|
output "domain-mappings" {
|
||||||
value = {
|
value = {
|
||||||
for key in var.machines :
|
for key in var.machines :
|
||||||
"${var.cluster_name}-${key}" => digitalocean_reserved_ip.machine[key].ip_address
|
"${var.cluster_name}-${key}.${var.domain}" => digitalocean_reserved_ip.machine[key].ip_address
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,11 @@
|
|||||||
|
domain = ""
|
||||||
|
|
||||||
do_token = "" # token from "API" settings on DigitalOcean
|
do_token = "" # token from "API" settings on DigitalOcean
|
||||||
|
|
||||||
|
cloudflare_api_token = ""
|
||||||
|
cloudflare_zone_id = ""
|
||||||
|
cloudflare_account_id = ""
|
||||||
|
|
||||||
cluster_name = "mycluster"
|
cluster_name = "mycluster"
|
||||||
machines = ["mynode"]
|
machines = ["mynode"]
|
||||||
datacenter = "sfo3"
|
datacenter = "sfo3"
|
||||||
|
|||||||
Reference in New Issue
Block a user