Yuvipanda has submitted this change and it was merged. Change subject: Vastly simplify Shingen ......................................................................
Vastly simplify Shingen - hostgroups don't need to be explicitly declared, apparently :) Are implicitly picked up if they exist in a host definition. - Collaps shingen script into one file. Originally shingen was supposed to be much more featurefull, similar to naggen2. However, that is no longer the case - it simply generates hosts definitions with appropriate hostgroups. So simplify architecture to fit purpose Change-Id: Ied6ac68384c26443c067851517b65ef72f83cbde --- M scripts/shingen M setup.py D shingen/generators/__init__.py D shingen/generators/generator.py D shingen/generators/hostgroups.py D shingen/generators/hosts.py D shingen/generators/run.py 7 files changed, 27 insertions(+), 79 deletions(-) Approvals: Yuvipanda: Verified; Looks good to me, approved diff --git a/scripts/shingen b/scripts/shingen index 032d055..9538110 100755 --- a/scripts/shingen +++ b/scripts/shingen @@ -1,17 +1,30 @@ #!/usr/bin/python3 import os import yaml -from shingen.generators.generator import GeneratorRunner -from shingen.generators.hostgroups import generate_hostgroups_config -from shingen.generators.hosts import generate_host_config -default_config = { - 'projects': ['tools'], - 'base_path': '.' -} -if os.path.exists('/etc/shinkengen.yaml'): - config = yaml.load(open('/etc/shinkengen.yaml')) -else: - config = default_config -gr = GeneratorRunner(config, generate_host_config, generate_hostgroups_config) -gr.generate() +from shingen.ldapsource import LDAPSource +from shingen.shinkenconfig import ConfigObject + +config = yaml.load(open('/etc/shinkengen.yaml')) + +ldapsource = LDAPSource(config['ldap']['server'], + config['ldap']['bindas'], + config['ldap']['password']) + +for project in config['projects']: + instances = ldapsource.get_hostsinfo(project) + host_configs = [] + for instance in instances: + co = ConfigObject('host') + co.properties['use'] = 'generic-host' + co.properties['host_name'] = instance['name'] + co.properties['address'] = instance['ip'] + co.properties['hostgroups'] = ','.join([project] + instance['puppetClasses']) + co.properties['contact_groups'] = project + co.properties['notes'] = project # Used for auto deriving graphite path + host_configs.append(co) + hosts_config_path = '%s/%s.cfg' % ( + config['base_path'], project + ) + with open(hosts_config_path, 'w') as hostsfile: + hostsfile.write('\n'.join([str(co) for co in host_configs])) diff --git a/setup.py b/setup.py index f38b2d5..a0950c4 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ setup( name="shinkengen", - version='0.2', + version='0.3', author="Yuvi Panda", author_email="yuvipa...@gmail.com", description=("A shinken config generator for Wikimedia Labs"), diff --git a/shingen/generators/__init__.py b/shingen/generators/__init__.py deleted file mode 100644 index e69de29..0000000 --- a/shingen/generators/__init__.py +++ /dev/null diff --git a/shingen/generators/generator.py b/shingen/generators/generator.py deleted file mode 100644 index 3890b3a..0000000 --- a/shingen/generators/generator.py +++ /dev/null @@ -1,38 +0,0 @@ -""" -Generator script that generates hosts and service configuration. - -1. Checks config to figure out which projects to monitor -2. Fetches instance information from ldap -3. Generates hosts info and hostgroups info for the instances -""" -from ..ldapsource import LDAPSource - - -class GeneratorRunner(): - def __init__(self, config, instances_generator=None, hostgroups_generator=None): - self.config = config - self.instance_generator = instances_generator - self.hostgroups_generator = hostgroups_generator - - def generate(self): - ldapsource = LDAPSource(self.config['ldap']['server'], - self.config['ldap']['bindas'], - self.config['ldap']['password']) - all_host_configs = [] - for project in self.config['projects']: - instances = ldapsource.get_hostsinfo(project) - host_configs = [] - for instance in instances: - hostconfig = self.instance_generator(self.config, project, instance) - host_configs.append(hostconfig) - hosts_config_path = '%s/%s.cfg' % ( - self.config['base_path'], project - ) - with open(hosts_config_path, 'w') as hostsfile: - hostsfile.write('\n'.join([str(co) for co in host_configs])) - all_host_configs += host_configs - - hostgroup_configs = self.hostgroups_generator(all_host_configs) - hostgroups_config_path = '%s/hostgroups.cfg' % self.config['base_path'] - with open(hostgroups_config_path, 'w') as hostgroupsfile: - hostgroupsfile.write('\n'.join([str(co) for co in hostgroup_configs])) diff --git a/shingen/generators/hostgroups.py b/shingen/generators/hostgroups.py deleted file mode 100644 index 2236f2c..0000000 --- a/shingen/generators/hostgroups.py +++ /dev/null @@ -1,15 +0,0 @@ -from ..shinkenconfig import ConfigObject - -def generate_hostgroups_config(config_objects): - hostgroup_names = set() - hostgroups = set() - - for cob in config_objects: - hostgroup_names = hostgroup_names.union(set(cob.properties.get('hostgroups', '').split(','))) - - for hostgroup_name in hostgroup_names: - hostgroup = ConfigObject('hostgroup') - hostgroup.properties['hostgroup_name'] = hostgroup_name - hostgroup.properties['alias'] = hostgroup_name - hostgroups.add(hostgroup) - return hostgroups diff --git a/shingen/generators/hosts.py b/shingen/generators/hosts.py deleted file mode 100644 index 06dd736..0000000 --- a/shingen/generators/hosts.py +++ /dev/null @@ -1,12 +0,0 @@ -from ..shinkenconfig import ConfigObject - -def generate_host_config(config, project_name, instance): - co = ConfigObject('host') - co.properties['use'] = 'generic-host' - co.properties['host_name'] = instance['name'] - co.properties['address'] = instance['ip'] - hostgroups = [project_name] + instance['puppetClasses'] - co.properties['hostgroups'] = ','.join(hostgroups) - co.properties['contact_groups'] = project_name - co.properties['notes'] = project_name # Used for auto deriving graphite path - return co diff --git a/shingen/generators/run.py b/shingen/generators/run.py deleted file mode 100644 index e69de29..0000000 --- a/shingen/generators/run.py +++ /dev/null -- To view, visit https://gerrit.wikimedia.org/r/182055 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ied6ac68384c26443c067851517b65ef72f83cbde Gerrit-PatchSet: 5 Gerrit-Project: operations/software/shinkengen Gerrit-Branch: master Gerrit-Owner: Yuvipanda <yuvipa...@gmail.com> Gerrit-Reviewer: Yuvipanda <yuvipa...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits