diff options
-rwxr-xr-x | hetznertool | 40 |
1 files 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 @@ -198,15 +214,21 @@ def create_parser(config): 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', required='ssh-key' not in 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) |