--- /dev/null
+[production]
+delaware.example.com
+georgia.example.com
+maryland.example.com
+newhampshire.example.com
+newjersey.example.com
+newyork.example.com
+northcarolina.example.com
+pennsylvania.example.com
+rhodeisland.example.com
+virginia.example.com
+
+[staging]
+ontario.example.com
+quebec.example.com
+
+[vagrant]
+vagrant1 ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222
+vagrant2 ansible_ssh_host=127.0.0.1 ansible_ssh_port=2200
+vagrant3 ansible_ssh_host=127.0.0.1 ansible_ssh_port=2201
+
+[lb]
+delaware.example.com
+
+[web]
+georgia.example.com
+newhampshire.example.com
+newjersey.example.com
+ontario.example.com
+vagrant1
+
+[task]
+newyork.example.com
+northcarolina.example.com
+maryland.example.com
+ontario.example.com
+vagrant2
+
+[redis]
+pennsylvania.example.com
+quebec.example.com
+vagrant3
+
+[db]
+rhodeisland.example.com
+virginia.example.com
+quebec.example.com
+vagrant3
--- /dev/null
+#!/usr/bin/env python
+# Adapted from Mark Mandel's implementation
+# https://github.com/ansible/ansible/blob/devel/plugins/inventory/vagrant.py
+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(',')
+ 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()
+