mirror of
https://github.com/kelseyhightower/kubernetes-the-hard-way.git
synced 2025-12-16 09:48:57 +03:00
wip ansible inventory
This commit is contained in:
51
inventory/vagrant.py
Executable file
51
inventory/vagrant.py
Executable file
@@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env python
|
||||
# Shameless copy of https://gist.github.com/d-a-n/baabf3b010a6851f0e84
|
||||
import argparse
|
||||
import json
|
||||
import paramiko
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
|
||||
def parse_args():
|
||||
parser = argparse.ArgumentParser(description="Vagrant inventory script")
|
||||
group = parser.add_mutually_exclusive_group(required=True)
|
||||
group.add_argument('--list', action='store_true')
|
||||
group.add_argument('--host')
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def list_running_hosts():
|
||||
cmd = "vagrant status --machine-readable"
|
||||
status = subprocess.check_output(cmd.split()).rstrip()
|
||||
hosts = []
|
||||
for line in status.split('\n'):
|
||||
(_, host, key, value) = line.split(',',3)
|
||||
if key == 'state' and value == 'running':
|
||||
hosts.append(host)
|
||||
return hosts
|
||||
|
||||
|
||||
def get_host_details(host):
|
||||
cmd = "vagrant ssh-config {}".format(host)
|
||||
p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE)
|
||||
config = paramiko.SSHConfig()
|
||||
config.parse(p.stdout)
|
||||
c = config.lookup(host)
|
||||
return {'ansible_ssh_host': c['hostname'],
|
||||
'ansible_ssh_port': c['port'],
|
||||
'ansible_ssh_user': c['user'],
|
||||
'ansible_ssh_private_key_file': c['identityfile'][0]}
|
||||
|
||||
|
||||
def main():
|
||||
args = parse_args()
|
||||
if args.list:
|
||||
hosts = list_running_hosts()
|
||||
json.dump({'vagrant': hosts}, sys.stdout)
|
||||
else:
|
||||
details = get_host_details(args.host)
|
||||
json.dump(details, sys.stdout)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user