feat(quadlets): add reusable podman network quadlet module
Introduce quadlets/network, a null_resource-based module that renders a .network quadlet on the target host and reloads the user systemd session, returning the network name for downstream modules to consume.
This commit is contained in:
parent
4d85473223
commit
116e55545d
|
|
@ -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]
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue