diff --git a/linode-ansible/__main__.py b/linode-ansible/__main__.py index b07fc56..a84aea2 100644 --- a/linode-ansible/__main__.py +++ b/linode-ansible/__main__.py @@ -4,22 +4,21 @@ import pulumi import pulumi_linode import pulumi_command as command import pulumi_cloudflare as cloudflare -import additional_configs -import ansible +import yaml +from dotmap import DotMap -config = pulumi.Config() - -hostname = config.require("hostname") -domainname = config.require("domainname") +config = DotMap(yaml.safe_load(open("input.yaml").read())) +hostname = pulumi.Config().require("hostname") +domainname = pulumi.Config().require("domainname") # Create a Linode resource (Linode Instance) instance = pulumi_linode.Instance(hostname, - type=config.require("linodeType"), - region=config.require("linodeRegion"), - image=config.require("linodeImage"), + type=pulumi.Config().require("linodeType"), + region=pulumi.Config().require("linodeRegion"), + image=pulumi.Config().require("linodeImage"), label=hostname, - root_pass=additional_configs.DEFAULT_ROOT_PASSWORD, - authorized_keys=additional_configs.SSH_KEYS, + root_pass=config.rootpassword, + authorized_keys=config.sshkeys, opts=pulumi.ResourceOptions( custom_timeouts=pulumi.CustomTimeouts(create="2m") ) @@ -34,14 +33,23 @@ dnsrecord = cloudflare.Record(hostname, comment=f"Pulumi-generated linode" ) -environment = { - 'name': hostname, - 'hostname': hostname + '.' + domainname, -} +# Creating the inventory file +inventory = command.local.Command("a-inventory", + create = instance.ip_address.apply( + lambda ipaddr: f"echo '{hostname} ansible_host={ipaddr} ansible_user=root hostname={hostname}.{domainname}' >./inventory" + ), + delete = "rm -f ./inventory", + opts = pulumi.ResourceOptions(depends_on = [ instance ]) +) -adeploy = ansible.AnsibleDeployment(instance, environment, config.get('playbooks')) -adeploy.create_inventory() -adeploy.run_playbooks() +for playbook in config.playbooks: + shortname = playbook.split('.')[0] + # Applying the command + command.local.Command(f"a-deploy-{shortname}", + create = f"ansible-playbook {playbook}", + delete = "rm -f ./ansible.log", + opts = pulumi.ResourceOptions(depends_on = [ inventory ]) + ) # Export the Instance label of the instance pulumi.export('ip_address', instance.ip_address) diff --git a/linode-ansible/additional_configs.py b/linode-ansible/additional_configs.py deleted file mode 100644 index f9fe0c7..0000000 --- a/linode-ansible/additional_configs.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python3 -# encoding: utf-8 - -DEFAULT_ROOT_PASSWORD = 'cicciopasticcio' - -SSH_KEYS = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFioHkaV1NhX6NCqsJakJw8EVBOcDHm1MEbpY499CPtG syntaxerrormmm@fisso", - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILu91hBh8pNRt4eE1pug0Y4jCHZDCcMJ+vj3CiF5EQHV syntaxerrormmm@syntaxxps", - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILH5q/ObtC4VhNT88gebezP/svpvCoQLoZCh4DvUn4xq syntaxerrormmm@taz", - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGdTHkPCPUhvrcGgU9M6/BaEeirStM/kBnFxsLyXyelt syntaxerrormmm@kurotsuchi" -] diff --git a/linode-ansible/ansible.py b/linode-ansible/ansible.py deleted file mode 100644 index 552c690..0000000 --- a/linode-ansible/ansible.py +++ /dev/null @@ -1,52 +0,0 @@ -#!/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 ]) - ) diff --git a/linode-ansible/deploy.yml b/linode-ansible/deploy.yml index 8de75a3..e291772 100644 --- a/linode-ansible/deploy.yml +++ b/linode-ansible/deploy.yml @@ -1,7 +1,6 @@ --- - hosts: all roles: - - fixhostname - base become: yes become_user: root diff --git a/linode-ansible/fixhostname.yml b/linode-ansible/fixhostname.yml new file mode 100644 index 0000000..1e33c1d --- /dev/null +++ b/linode-ansible/fixhostname.yml @@ -0,0 +1,6 @@ +--- +- hosts: all + roles: + - fixhostname + become: yes + become_user: root