Merge branch 'devel' of https://github.com/dmccue/ansible into dmccue-devel

This commit is contained in:
James Cammarata 2015-08-07 00:25:38 -04:00
commit 2e1030763c

View file

@ -30,9 +30,15 @@ See http://ansible.github.com/api.html for more info
Tested with Cobbler 2.0.11.
Changelog:
- 2015-06-21 dmccue: Modified to support run-once _meta retrieval, results in
higher performance at ansible startup. Groups are determined by owner rather than
default mgmt_classes. DNS name determined from hostname. cobbler values are written
to a 'cobbler' fact namespace
- 2013-09-01 pgehres: Refactored implementation to make use of caching and to
limit the number of connections to external cobbler server for performance.
Added use of cobbler.ini file to configure settings. Tested with Cobbler 2.4.0
"""
# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
@ -54,7 +60,6 @@ Changelog:
######################################################################
import argparse
import ConfigParser
import os
@ -71,10 +76,13 @@ except ImportError:
# server, so it does not attempt to login with a username and password.
# this will be addressed in a future version of this script.
orderby_keyname = 'owners' # alternatively 'mgmt_classes'
class CobblerInventory(object):
def __init__(self):
""" Main execution path """
self.conn = None
@ -98,14 +106,12 @@ class CobblerInventory(object):
# Data to print
if self.args.host:
data_to_print = self.get_host_info()
elif self.args.list:
# Display list of instances for inventory
data_to_print = self.json_format_dict(self.inventory, True)
else: # default action with no options
data_to_print = self.json_format_dict(self.inventory, True)
data_to_print += self.get_host_info()
else:
self.inventory['_meta'] = { 'hostvars': {} }
for hostname in self.cache:
self.inventory['_meta']['hostvars'][hostname] = {'cobbler': self.cache[hostname] }
data_to_print += self.json_format_dict(self.inventory, True)
print data_to_print
@ -160,21 +166,22 @@ class CobblerInventory(object):
for host in data:
# Get the FQDN for the host and add it to the right groups
dns_name = None
dns_name = host['hostname'] #None
ksmeta = None
interfaces = host['interfaces']
for (iname, ivalue) in interfaces.iteritems():
if ivalue['management']:
this_dns_name = ivalue.get('dns_name', None)
if this_dns_name is not None and this_dns_name is not "":
dns_name = this_dns_name
#for (iname, ivalue) in interfaces.iteritems():
# if ivalue['management']:
# this_dns_name = ivalue.get('dns_name', None)
# #this_dns_name = ivalue.get('ip_address', None)
# if this_dns_name is not None and this_dns_name is not "":
# dns_name = this_dns_name
if dns_name is None:
continue
status = host['status']
profile = host['profile']
classes = host['mgmt_classes']
classes = host[orderby_keyname] #host['mgmt_classes']
if status not in self.inventory:
self.inventory[status] = []
@ -193,7 +200,7 @@ class CobblerInventory(object):
# The old way was ksmeta only -- provide backwards compatibility
self.cache[dns_name] = dict()
self.cache[dns_name] = host #dict() # sub dict with host to output json
if "ks_meta" in host:
for key, value in host["ks_meta"].iteritems():
self.cache[dns_name][key] = value
@ -242,7 +249,7 @@ class CobblerInventory(object):
def write_to_cache(self, data, filename):
""" Writes data in JSON format to a file """
#if data: print "DEBUG: data = " + str(data)
json_data = self.json_format_dict(data, True)
cache = open(filename, 'w')
cache.write(json_data)