Yuvipanda has uploaded a new change for review.
https://gerrit.wikimedia.org/r/182055
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
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
6 files changed, 27 insertions(+), 78 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/operations/software/shinkengen
refs/changes/55/182055/1
diff --git a/scripts/shingen b/scripts/shingen
index 032d055..b8cd586 100755
--- a/scripts/shingen
+++ b/scripts/shingen
@@ -1,17 +1,31 @@
#!/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(self.config['ldap']['server'],
+ self.config['ldap']['bindas'],
+ self.config['ldap']['password'])
+
+for project in self.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']
+ 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
+ host_configs.append(co)
+ 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]))
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: newchange
Gerrit-Change-Id: Ied6ac68384c26443c067851517b65ef72f83cbde
Gerrit-PatchSet: 1
Gerrit-Project: operations/software/shinkengen
Gerrit-Branch: master
Gerrit-Owner: Yuvipanda <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits