GithubHelp home page GithubHelp logo

dmsimard / ansible-inventory-puppetdb Goto Github PK

View Code? Open in Web Editor NEW
55.0 3.0 16.0 27 KB

Leverage Puppet facts and PuppetDB to generate a dynamic Ansible inventory

License: Apache License 2.0

Python 100.00%

ansible-inventory-puppetdb's Introduction

ansible-inventory-puppetdb

Leverage Puppet facts and PuppetDB to generate a dynamic Ansible inventory

Usage

./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

Configuration

See in-file documentation provided in puppetdb.yml

Notes on large(r) amount of hosts in a single PuppetDB instance

If you are dealing with a large(r) amount of hosts in a single PuppetDB instance, what becomes important for improving performance is:

  1. The JSON library to encode and decode data for Ansible to use

The script will automatically attempt to load, in order of performance: ujson > simplejson > json (stdlib). For best results, try to install ujson.

  1. Latency between where you run the inventory script and the PuppetDB instance

Try to run the inventory somewhere with as little latency as you can to your PuppetDB instance.

  1. Performance of the server the inventory is run on

  2. Performance of the PuppetDB server

Usage example

./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",
  }
}

List example

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' ]
 }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.