diff --git a/quadlets/network/main.tf b/quadlets/network/main.tf new file mode 100644 index 0000000..715679c --- /dev/null +++ b/quadlets/network/main.tf @@ -0,0 +1,94 @@ +variable "wait_on" { + type = any + description = "Resources to wait on" + default = true +} + +variable "server_ip" { + description = "Target server IP" + type = string +} + +variable "ssh_private_key_path" { + description = "Path to SSH private key" + type = string + default = "~/.ssh/id_rsa" +} + +variable "name" { + description = "Name of the network" + type = string +} + +resource "null_resource" "deploy_network" { + depends_on = [var.wait_on] + triggers = { + name = var.name + server_ip = var.server_ip + ssh_private_key_path = var.ssh_private_key_path + } + + provisioner "remote-exec" { + inline = compact(flatten([ + [ + + # Create base quadlet file + "cat > /tmp/${var.name}.network << 'EOF'", + "[Network]", + "Description=${var.name} network", + "", + "[Install]", + "WantedBy=default.target", + "EOF", + + "test -d ~/.config/containers/systemd || mkdir -p ~/.config/containers/systemd", + "cp /tmp/${var.name}.network ~/.config/containers/systemd/${var.name}.network", + "systemctl --user daemon-reload", + ] + ])) + + + connection { + type = "ssh" + host = var.server_ip + user = "fourlights" + agent = true + agent_identity = var.ssh_private_key_path + } + } + + provisioner "remote-exec" { + when = destroy + inline = [ + # Remove the .container file + "rm -f ~/.config/containers/systemd/${self.triggers.name}.network", + + # Reload systemd to remove the generated service + "systemctl --user daemon-reload", + + # Force remove any lingering containers + "podman network rm -f ${self.triggers.name} || true" + ] + connection { + type = "ssh" + host = self.triggers.server_ip + user = "fourlights" + agent = true + agent_identity = self.triggers.ssh_private_key_path + } + + } +} + +output "name" { + value = var.name +} + +output "service_status" { + value = "${var.name} deployed" +} + +output "installed" { + value = true + depends_on = [null_resource.deploy_network] +} \ No newline at end of file