Merlijn van Deen has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/297902

Change subject: Set up labs realm (ldap classifier and hiera)
......................................................................

Set up labs realm (ldap classifier and hiera)

If host names end in .wmflabs:
 - ldap classifier is set up via puppet.conf,
 - hiera config is switched from prod to labs.

Mixing labs and non-labs hosts is not allowed.

Bug: T97081
Change-Id: I75b266da99e7dcb948f10d182e7f00bb3debfac6
---
M puppet_compiler/prepare.py
1 file changed, 36 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/software/puppet-compiler 
refs/changes/02/297902/1

diff --git a/puppet_compiler/prepare.py b/puppet_compiler/prepare.py
index a02ce2d..ade44c8 100644
--- a/puppet_compiler/prepare.py
+++ b/puppet_compiler/prepare.py
@@ -1,5 +1,6 @@
 from contextlib import contextmanager
 import json
+import yaml
 import subprocess
 import os
 import shutil
@@ -18,13 +19,15 @@
 class ManageCode(object):
     private_modules = ['passwords', 'contacts', 'privateexim']
 
-    def __init__(self, config, jobid, changeid):
+    def __init__(self, config, jobid, changeid, realm='production'):
         self.base_dir = os.path.join(config['base'],
                                      str(jobid))
         self.puppet_src = config['puppet_src']
         self.puppet_private = config['puppet_private']
         self.puppet_var = config['puppet_var']
         self.change_id = changeid
+        self.realm = realm
+
         self.change_dir = os.path.join(self.base_dir, 'change')
         self.prod_dir = os.path.join(self.base_dir, 'production')
         self.diff_dir = os.path.join(self.base_dir, 'diffs')
@@ -58,7 +61,8 @@
         self._prepare_dir(self.prod_dir)
         prod_src = os.path.join(self.prod_dir, 'src')
         with pushd(prod_src):
-            self._copy_hiera(self.prod_dir)
+            self._copy_hiera(self.prod_dir, self.realm)
+            self._create_puppetconf(self.change_dir, self.realm)
 
         # Change
         self._prepare_dir(self.change_dir)
@@ -66,7 +70,8 @@
         with pushd(change_src):
             self._fetch_change()
             # Re-do in case of hiera config changes
-            self._copy_hiera(self.change_dir)
+            self._copy_hiera(self.change_dir, self.realm)
+            self._create_puppetconf(self.change_dir, self.realm)
 
     def refresh(self, gitdir):
         """
@@ -99,11 +104,13 @@
                         os.path.join(src, 'ssl'))
 
     @staticmethod
-    def _copy_hiera(dirname):
+    def _copy_hiera(dirname, realm):
         """
         Copy the hiera file
         """
-        hiera_file = 'modules/puppetmaster/files/production.hiera.yaml'
+        hiera_file = 'modules/puppetmaster/files/{realm}.hiera.yaml'.format(
+            realm=realm
+        )
         priv = os.path.join(dirname, 'private')
         pub = os.path.join(dirname, 'src')
         with open(hiera_file, 'r') as g, open('hiera.yaml', 'w') as f:
@@ -114,6 +121,30 @@
                     '/etc/puppet', pub)
                 f.write(l)
 
+    @staticmethod
+    def _create_puppetconf(dirname, realm):
+        if realm != 'labs':
+            _log.debug('Realm is %s, skipping writing puppet.conf', realm)
+            return
+
+        template = """# This file has been generated by puppet-compiler.
+[master]
+    node_terminus = ldap
+    ldapbase = ou=hosts,dc=wikimedia,dc=org
+    ldapstring = (&(objectclass=puppetClient)(associatedDomain=%s))
+    ldaptls = true
+    ldappassword = {password}
+    ldapuser = {user}
+    ldapserver = {servers[0]}
+"""
+
+        with open('/etc/ldap.yaml') as f:
+            config = yaml.safe_load(f)
+
+        with open('puppet.conf', 'w') as f:
+            f.write(template.format(**config))
+        _log.debug('Wrote puppet.conf with ldap settings')
+
     def _fetch_change(self):
         """get changes from the change directly"""
         headers = {'Accept': 'application/json',

-- 
To view, visit https://gerrit.wikimedia.org/r/297902
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I75b266da99e7dcb948f10d182e7f00bb3debfac6
Gerrit-PatchSet: 1
Gerrit-Project: operations/software/puppet-compiler
Gerrit-Branch: master
Gerrit-Owner: Merlijn van Deen <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to