pulumi-templates/libvirt-ansible-python/__main__.py

76 lines
2.2 KiB
Python
Raw Normal View History

2022-08-20 00:45:47 +02:00
"""A Pulumi-based infrastructure with libvirt and Python"""
import pulumi
import pulumi_libvirt as lv
import pulumi_command as command
config = pulumi.Config()
pool = lv.Pool("default",
type = "dir",
path = "/var/tmp/libvirt/pulumi"
)
baseimg = lv.Volume("base-image",
pool = pool.name,
source = config.require("image_url")
#source = "https://cdimage.debian.org/images/cloud/bullseye-backports/20220711-1073/debian-11-backports-generic-amd64-20220711-1073.qcow2"
)
volume = lv.Volume("disk",
base_volume_id = baseimg.id,
pool = pool.name,
size = int(config.require("disksize")) * 1024 ** 3
)
# Stream configuration files
userdata = open("./cloud-init/user-data", "r").read()
metadata = open("./cloud-init/meta-data", "r").read()
networkconfig = open("./cloud-init/network-config", "r").read()
cloudinit = lv.CloudInitDisk("cloud-init",
meta_data = metadata,
user_data = userdata,
network_config = networkconfig
)
vm = lv.Domain("debian11",
boot_devices = [ lv.DomainBootDeviceArgs(
devs = [ "hd", "cdrom" ]
) ],
cloudinit = cloudinit.id,
disks = [ lv.DomainDiskArgs(volume_id = volume.id) ],
memory = int(config.require("memory")),
network_interfaces = [ lv.DomainNetworkInterfaceArgs(
network_name = "default",
wait_for_lease = True
) ],
consoles = [ lv.DomainConsoleArgs(
type = "pty",
target_port = 0,
target_type = "serial"
) ],
opts = pulumi.ResourceOptions(
custom_timeouts = pulumi.CustomTimeouts(create = "3m")
)
)
# Creating the inventory file
inventory = command.local.Command("a-inventory",
create = vm.network_interfaces[0]['addresses'][0].apply(
lambda ipaddr: f"echo '{vm_name} ansible_host={ipaddr} ansible_user=syntaxerrormm' >./inventory"
),
delete = "rm -f ./inventory",
opts = pulumi.ResourceOptions(depends_on = [ vm ])
)
# Applying the command
2022-08-20 00:48:20 +02:00
ansible_playbook = config.require("ansible_playbook")
2022-08-20 00:45:47 +02:00
execute_ansible = command.local.Command("a-deploy",
create = f"ansible-playbook {ansible_playbook}",
delete = "rm -f ./ansible.log",
opts = pulumi.ResourceOptions(depends_on = [ inventory ])
)
pulumi.export("ip", vm.network_interfaces[0]['addresses'][0])