53 lines
2.0 KiB
Python
53 lines
2.0 KiB
Python
#!/usr/bin/env python3
|
|
# encoding: utf-8
|
|
|
|
import pulumi
|
|
from pulumi_command.local import Command
|
|
|
|
class AnsibleDeployment():
|
|
|
|
def __init__(self, virtual_machine, environment, additionals = None, deploy = None):
|
|
"""Creates an ansible deployment and attaches resources."""
|
|
|
|
self.inventory = 'inventory'
|
|
self.virtual_machine = virtual_machine
|
|
self.environment = environment
|
|
self.deploy = str(deploy) or 'deploy.yml'
|
|
self.additionals = str(additionals) or ''
|
|
|
|
def create_inventory(self, dependencies = []):
|
|
"""Returns a basic inventory from a virtual_machine object."""
|
|
deps = []
|
|
if len(dependencies) == 0:
|
|
deps.append(self.virtual_machine)
|
|
else:
|
|
deps.extend(dependencies)
|
|
|
|
self.inventory = Command("a inventory",
|
|
create = self.virtual_machine.ip_address.apply(
|
|
lambda ipaddr: f"echo '{self.environment['name']} ansible_host={ipaddr} ansible_user=root hostname={self.environment['hostname']} fqdn={self.environment['hostname']}' >./inventory"
|
|
),
|
|
delete = "rm -f ./inventory",
|
|
opts = pulumi.ResourceOptions(depends_on = dependencies)
|
|
)
|
|
|
|
def run_playbooks(self):
|
|
"""Execute the rest of the playbooks."""
|
|
|
|
self.deploy_resource = Command("ap deploy",
|
|
create = "ansible-playbook deploy.yml",
|
|
delete = "rm -f ansible.log",
|
|
opts = pulumi.ResourceOptions(depends_on = [ self.inventory ])
|
|
)
|
|
|
|
# Running additionals if present
|
|
if len(self.additionals) != 0:
|
|
|
|
for playbook in sorted(self.additionals.split(',')):
|
|
name = playbook.split('.')[0]
|
|
Command(f"ap {name}",
|
|
create = f"ansible-playbook {playbook}",
|
|
delete = "rm -f ansible.log",
|
|
opts = pulumi.ResourceOptions(depends_on = [ self.inventory, self.deploy_resource ])
|
|
)
|