diff --git a/.gitignore b/.gitignore index a907ef5..e4d60d0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ terraform.tfvars .terraform terraform.tfstate -terraform.tfstate.backup \ No newline at end of file +terraform.tfstate.backup diff --git a/GNUmakefile b/GNUmakefile new file mode 100644 index 0000000..810763a --- /dev/null +++ b/GNUmakefile @@ -0,0 +1,22 @@ +TF:=terraform +SSH:=ssh +USER_SSH_OPTS:= +SSH_OPTS:=-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $(USER_SSH_OPTS) + +.PHONY: all +all: up + +.PHONY: rebuild +rebuild: down up + +.PHONY: up +up: + $(TF) apply -auto-approve + +.PHONY: down +down: + $(TF) destroy -auto-approve + +.PHONY: ssh +ssh: + $(SSH) $(SSH_OPTS) root@`$(TF) output ipv4` diff --git a/functionalidiot.com.tf b/functionalidiot.com.tf new file mode 100644 index 0000000..735510f --- /dev/null +++ b/functionalidiot.com.tf @@ -0,0 +1,91 @@ +# gitea is a PITA to automate installation of, watch this pr for when it'll be +# fully setup-able from the cli https://github.com/go-gitea/gitea/issues/9210 +variable "gitea_db_passwd" { + type = string +} + +variable "cloudflare_functionalidiot_zoneid" { + type = string +} + +resource "cloudflare_record" "www" { + depends_on = [ + cloudflare_record.root, + cloudflare_record.splat ] + zone_id = var.cloudflare_functionalidiot_zoneid + name = "www" + value = "functionalidiot.com" + type = "CNAME" + ttl = 1 + proxied = true +} + +resource "cloudflare_record" "root" { + depends_on = [ + linode_instance.prod, + cloudflare_record.functionalidiot_com_ns1, + cloudflare_record.functionalidiot_com_ns2 ] + zone_id = var.cloudflare_functionalidiot_zoneid + name = "@" + value = linode_instance.prod.ip_address + type = "A" + ttl = 1 + proxied = true +} + +resource "cloudflare_record" "splat" { + depends_on = [ + linode_instance.prod, + cloudflare_record.functionalidiot_com_ns1, + cloudflare_record.functionalidiot_com_ns2 ] + zone_id = var.cloudflare_functionalidiot_zoneid + name = "*" + value = linode_instance.prod.ip_address + type = "A" + ttl = 1 + proxied = true +} + +resource "cloudflare_record" "functionalidiot_com_ns1" { + zone_id = var.cloudflare_functionalidiot_zoneid + name = "@" + value = "mitch.ns.cloudflare.com" + type = "NS" +} + +resource "cloudflare_record" "functionalidiot_com_ns2" { + zone_id = var.cloudflare_functionalidiot_zoneid + name = "@" + value = "tegan.ns.cloudflare.com" + type = "NS" +} + +resource "null_resource" "functionalidiot_com_setup" { + depends_on = [ null_resource.post_setup ] + connection { + host = linode_instance.prod.ip_address + user = "root" + private_key = file("~/.ssh/id_rsa") + } + provisioner "file" { + source = "setup_gitea.sh" + destination = "/tmp/setup_gitea.sh" + } + provisioner "remote-exec" { + inline = [< {} +}: pkgs.mkShell { + buildInputs = [ + pkgs.terraform + pkgs.terraform-providers.cloudflare + pkgs.terraform-providers.linode + pkgs.terraform-providers.null + ]; +} diff --git a/variables.tf b/variables.tf deleted file mode 100644 index 60003c2..0000000 --- a/variables.tf +++ /dev/null @@ -1,11 +0,0 @@ -variable "ssh_pub_key" { - type = string -} - -variable "linode_token" { - type = string -} - -variable "root_password" { - type = string -} \ No newline at end of file