dynamic inventory from puppetdb in docker
444
Leverage Puppet facts and PuppetDB to generate a dynamic Ansible inventory
./puppetdb.py -h
usage: puppetdb.py [-h] (--list | --host HOST)
PuppetDB Inventory Module
optional arguments:
-h, --help show this help message and exit
--refresh Refreshes cached information
--list List servers known by PuppetDB
--host HOST List details about specified host
See in-file documentation provided in puppetdb.yml
If you are dealing with a large(r) amount of hosts in a single PuppetDB instance, what becomes important for improving performance is:
The script will automatically attempt to load, in order of performance: ujson > simplejson > json (stdlib). For best results, try to install ujson.
Try to run the inventory somewhere with as little latency as you can to your PuppetDB instance.
Performance of the server the inventory is run on
Performance of the PuppetDB server
./puppetdb.py --host node.domain.tld
{
"node.domain.tld": {
"_timestamp": "Fri Mar 13 20:05:48 -0400 2015",
"ansible_ssh_host": "node.domain.tld",
"architecture": "amd64",
"augeasversion": "0.10.0",
"bios_release_date": "03/31/2014",
"bios_vendor": "American Megatrends Inc.",
"bios_version": "3.0a",
"blockdevice_sda_model": "SMC2108",
"blockdevice_sda_size": "955999322112",
"blockdevice_sda_vendor": "SMC",
"blockdevices": "sda",
"boardmanufacturer": "Supermicro",
"boardproductname": "X9DR3-F",
"boardserialnumber": "VM138S020078",
"clientcert": "node.domain.tld",
"clientnoop": "false",
"clientversion": "3.7.4",
"concat_basedir": "/var/lib/puppet/concat",
"domain": "domain.tld",
"facterversion": "2.0.1",
"filesystems": "ext3,ext4,vfat",
"fqdn": "node.domain.tld",
"hardwareisa": "x86_64",
"hardwaremodel": "x86_64",
"hostname": "node05",
"id": "root",
"interfaces": "bond0,eth0,eth1,lo",
"ip6tables_version": "1.4.12",
"ipaddress": "192.168.1.2",
"ipaddress_bond0": "192.168.1.2"
"ipaddress_lo": "127.0.0.1",
"iptables_version": "1.4.12",
"is_pe": "false",
"is_virtual": "false",
"kernel": "Linux",
"kernel_ipv6_disable": "false",
"kernelmajversion": "3.11",
"kernelrelease": "3.11.0-20-generic",
"kernelversion": "3.11.0",
"lsbdistcodename": "precise",
"lsbdistdescription": "Ubuntu 12.04.4 LTS",
"lsbdistid": "Ubuntu",
"lsbdistrelease": "12.04",
"lsbmajdistrelease": "12",
"macaddress": "00:25:90:ca:43:d8",
"macaddress_bond0": "00:25:90:ca:43:d8",
"macaddress_eth0": "00:25:90:CA:43:D8",
"macaddress_eth1": "00:25:90:CA:43:D9",
"manufacturer": "Supermicro",
"memoryfree": "124.62 GB",
"memoryfree_mb": "127615.09",
"memorysize": "125.89 GB",
"memorysize_mb": "128908.46",
"mtu_bond0": "1500",
"mtu_eth0": "1500",
"mtu_eth1": "1500",
"mtu_lo": "65536",
"netmask": "255.255.255.0",
"netmask_lo": "255.0.0.0",
"netmask_bond0": "255.255.255.0"
"network_lo": "127.0.0.0",
"network_bond0": "192.168.1.0"
"operatingsystem": "Ubuntu",
"operatingsystemrelease": "12.04",
"osfamily": "Debian",
"path": "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin",
"physicalprocessorcount": "2",
"processor0": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor1": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor10": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor11": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor12": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor13": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor14": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor15": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor16": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor17": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor18": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor19": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor2": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor20": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor21": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor22": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor23": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor24": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor25": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor26": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor27": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor28": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor29": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor3": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor30": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor31": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor4": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor5": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor6": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor7": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor8": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processor9": "Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz",
"processorcount": "32",
"productname": "X9DR3-F",
"ps": "ps -ef",
"puppet_vardir": "/var/lib/puppet",
"puppetversion": "3.7.4",
"root_home": "/root",
"rubysitedir": "/usr/local/lib/site_ruby/1.8",
"rubyversion": "1.8.7",
"selinux": "false",
"serialnumber": "0123456789",
"sshdsakey": "AAAAB3NzaC1kc3MAAACBAJp0queeP6ygTExbmJZ+oF67DqTIrYsnCzwaKNsF1FmZTGlBwk89cgQJtmaiH0llMDzfpujo//NoEtHM/rp+LW/4lBDbk1xpvXQFwRYg+Oja/Uf5PkXljvW9WpchMbhMtXdhaHYiRtICxoB+og1De4VFB6bbV/6QIiT82mGeqWKlAAAAFQCqhMaZHl8vcBsqeOcJMr6K06NQjwAAAIBv+tNfnYyPMu54U1XcSuyPnHu39LsotL+xl3Zym6pj3HIQ9UfBfOztJUW0tXbWQmEMsCaaCkcwVaYNm3ZqZfHLs7WVRWqNEpHfYBLZzuxnlrUfZfVy041GS3cRf9vlL2VWhPGBn2Es/Lvidglvl9r6GowEOzERanVLXwdxPZJNCwAAAIBYrGqEfvx7JPDhKYxrb6VIVbEqoYg/xhwIRubyrwfaNNtgWS6smhIN5OgbzxLeiYZLoSbrBUxUZg9Zn02/5IWG1bCkrKaaDQr7g8l3ofVN3vPRsVliNTfLRr3CvloFCojFM7QgvrtLcaFDVpCH6IyhIETgMOuN5lYKOSm3QtKgMQ==",
"sshecdsakey": "AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBI1Y0kAB9QGPP3q/HJ/sh8UoKiODQDNSzGsAb5TI5CRgObpEeCmKxrXC3fT8dyDpFjs3WwR1LiGNZNzjfQ1AxvE=",
"sshfp_dsa": "SSHFP 2 1 a3a5c027c250ad2c36f5e294042dfe7dae5b3585\nSSHFP 2 2 d06cc98ce9b0e8796bbdbde23f2042c805ef8cc7834e28e66c6bee52547f06ec",
"sshfp_ecdsa": "SSHFP 3 1 e61278fcc8b5920c57a8fbc205d15c7aedc9f4ee\nSSHFP 3 2 132ba8f2bccd83a071d7235d91c0cf661fa693b778267d7915fe9fcab4e27244",
"sshfp_rsa": "SSHFP 1 1 0c64e5e41832d8eef545e1fb5b59dc9db2abb368\nSSHFP 1 2 c2d603d736902e54703720a1fbfad2b6d000b87c5cb309c7ddf73aa0a89d2c7a",
"sshrsakey": "AAAAB3NzaC1yc2EAAAADAQABAAABAQCkEukWO5BdJsvlK68d4HKi3KHu1YvCRxZLDc50TPKG1JpEk0LHdb1qgAcIYnRdBZLBvW5rfCxEzaLQ9RWsichCLcihLGCjPQC3x1jZMhYR7qhtON8UGNxppfgtYCjnN1HiccB5hbtaRxmtZgMNcf6MOCiceNg4lRP85fnb+ry9XOwrbevMIeFwhnKkg8Rm9haD007xBb5qp9Fgn0oN0fhDIReMUXIfpijv1CF+5vPIesltNFYG/pscSc86ZKKt95LbCQ5f7mGSgre4s+6EmGapzwfxgtnyse68yGBRE+e5lr3wH9CSdjCXPUB4G8H2Wb7IpR0Gl73LuQ+tqlfHWHD7",
"swapfree": "3.73 GB",
"swapfree_mb": "3815.00",
"swapsize": "3.73 GB",
"swapsize_mb": "3815.00",
"timezone": "EDT",
"type": "Desktop",
"uniqueid": "007f0101",
"uptime": "62 days",
"uptime_days": "62",
"uptime_hours": "1511",
"uptime_seconds": "5441389",
"uuid": "CA902500-D843-0000-0000-000000000000",
"virtual": "physical",
}
}
With group_by set to 'kernelversion'
{
"_meta": {
"hostvars": {
"node01.domain.tld": {
"_timestamp": "Fri Mar 13 22:06:06 -0400 2015",
...
"kernelversion": "3.11.0",
"lsbdistcodename": "precise",
"lsbdistdescription": "Ubuntu 12.04.4 LTS",
"lsbdistid": "Ubuntu",
"lsbdistrelease": "12.04",
"lsbmajdistrelease": "12",
...
},
"node02.domain.tld": {
"_timestamp": "Fri Mar 13 22:06:06 -0400 2015",
...
"kernelversion": "3.11.0",
"lsbdistcodename": "precise",
"lsbdistdescription": "Ubuntu 12.04.4 LTS",
"lsbdistid": "Ubuntu",
"lsbdistrelease": "12.04",
"lsbmajdistrelease": "12",
...
},
"node03.domain.tld": {
"_timestamp": "Fri Mar 13 22:06:06 -0400 2015",
...
"kernelversion": "3.11.0",
"lsbdistcodename": "precise",
"lsbdistdescription": "Ubuntu 12.04.4 LTS",
"lsbdistid": "Ubuntu",
"lsbdistrelease": "12.04",
"lsbmajdistrelease": "12",
...
},
"node04.domain.tld": {
"_timestamp": "Fri Mar 13 22:06:06 -0400 2015",
...
"kernelversion": "3.13.0",
"lsbdistcodename": "precise",
"lsbdistdescription": "Ubuntu 12.04.4 LTS",
"lsbdistid": "Ubuntu",
"lsbdistrelease": "12.04",
"lsbmajdistrelease": "12",
...
},
"node05.domain.tld": {
"_timestamp": "Fri Mar 13 22:06:06 -0400 2015",
...
"kernelversion": "3.13.0",
"lsbdistcodename": "precise",
"lsbdistdescription": "Ubuntu 12.04.4 LTS",
"lsbdistid": "Ubuntu",
"lsbdistrelease": "12.04",
"lsbmajdistrelease": "12",
...
},
"node06.domain.tld": {
"_timestamp": "Fri Mar 13 22:06:06 -0400 2015",
...
"kernelversion": "3.13.0",
"lsbdistcodename": "precise",
"lsbdistdescription": "Ubuntu 12.04.4 LTS",
"lsbdistid": "Ubuntu",
"lsbdistrelease": "12.04",
"lsbmajdistrelease": "12",
...
},
"node07.domain.tld": {
"_timestamp": "Fri Mar 13 22:06:06 -0400 2015",
...
"kernelversion": "3.2.0",
"lsbdistcodename": "precise",
"lsbdistdescription": "Ubuntu 12.04.4 LTS",
"lsbdistid": "Ubuntu",
"lsbdistrelease": "12.04",
"lsbmajdistrelease": "12",
...
},
}
},
"3.11.0": {
"hosts": [
"node01.domain.tld",
"node02.domain.tld",
"node03.domain.tld"
]
},
"3.13.0": {
"hosts": [
"node05.domain.tld",
"node06.domain.tld"
]
},
"3.2.0": {
"hosts": [
"node07.domain.tld"
]
},
"all": {
"hosts": [
"node01.domain.tld",
"node02.domain.tld",
"node03.domain.tld",
"node04.domain.tld",
"node05.domain.tld",
"node06.domain.tld",
"node07.domain.tld"
]
}
}
With group_by_tag set to
#Puppet code example tagging class...
class webservices_tag {
case $fqdn {
/\-dev/: { tag 'web-development' }
/\-production/: { tag 'web-production' }
}
}
group_by_tag:
- Class: web-development
- Class: web-production
Snippet of tagged group being added...
"web-development": {
hosts: [ 'node01-dev.domain.tld', 'node02-dev.domain.tld' ]
}
"web-production": {
hosts: [ 'node01-production.domain.tld', 'node02-production.domain.tld' ]
}
Content type
Image
Digest
Size
82.4 MB
Last updated
about 9 years ago
docker pull adamancini/ansible-inventory-puppetdb