From c70f629eda6caa61da27881b112dec9882df273d Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Thu, 17 May 2018 18:52:50 +0300 Subject: Change: update Ansible inventory files, DNS zone; also on delete --- hetznertool | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/hetznertool b/hetznertool index dc75e91..43360c2 100755 --- a/hetznertool +++ b/hetznertool @@ -115,6 +115,7 @@ def create_func(args): '--ssh-key', args['ssh_key'], ) update_zone_file(args) + write_inventory_files(args) def list_func(args): @@ -134,6 +135,8 @@ def delete_func(args): 'deleting {} ({} in {})'.format( domain, info['name'], args['context'])) hcloud('server', 'delete', info['name']) + update_zone_file(args) + write_inventory_files(args) def update_zone_file(args): @@ -181,6 +184,19 @@ $ORIGIN dev.qvarnlabs.eu. stream.write('{} IN A {}\n'.format(domain, info['ipv4'])) +def write_inventory_files(args): + dirname = args['ansible_inventory_dir'] + for context in list_contexts(): + use_context(context) + filename = os.path.join(dirname, 'hosts.{}'.format(context)) + print('Writing Ansible inventory file {}'.format(filename)) + with open(filename, 'w') as f: + for info in list_servers(): + f.write( + '{} ansible_ssh_host={}\n'.format( + info['name'], info['ipv4'])) + + def read_config(): config = copy.deepcopy(default_config) filename = CONFIG_FILENAME @@ -197,6 +213,10 @@ def create_parser(config): factory = parser.add_subparsers() create = factory.add_parser('create') + create.add_argument( + 'context', help='hcloud context to create VMs in') + create.add_argument( + 'specfile', help='file to read VM specifications from') create.add_argument( '--ssh-key', metavar='KEYNAME', @@ -204,9 +224,11 @@ def create_parser(config): default=config['ssh-key'], help='create VM so it allow login via ssh key uploaded as KEYNAME') create.add_argument( - 'context', help='hcloud context to create VMs in') - create.add_argument( - 'specfile', help='file to read VM specifications from') + '--ansible-inventory-dir', + metavar='DIR', + required='ansible-inventory-dir' not in config, + default=config['ansible-inventory-dir'], + help='create Ansible inventory files in DIR') create.add_argument( '--dnszone-dir', default=config['dnszone-dir'], metavar='DIR', help='write DNS zone directory into DIR') @@ -219,6 +241,18 @@ def create_parser(config): delete = factory.add_parser('delete') delete.add_argument( 'context', help='hcloud context to delete all VMs from') + delete.add_argument( + '--ansible-inventory-dir', + metavar='DIR', + required='ansible-inventory-dir' not in config, + default=config['ansible-inventory-dir'], + help='create Ansible inventory files in DIR') + delete.add_argument( + '--dnszone-dir', default=config['dnszone-dir'], + metavar='DIR', help='write DNS zone directory into DIR') + delete.add_argument( + '--dnszone-file', default=config['dnszone-file'], + metavar='FILE', help='write DNS zone directory into FILE') create.set_defaults(func=create_func) servers.set_defaults(func=list_func) -- cgit v1.2.1