60 lines
1.9 KiB
Python
60 lines
1.9 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.network_interfaces[0]['addresses'][0].apply(
|
||
|
lambda ipaddr: f"echo '{self.environment['name']} ansible_host={ipaddr} ansible_user={self.environment['username']}' >./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 ])
|
||
|
)
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|