-class LdapEdit(BuildStep):
- name = "LdapEdit"
- renderables = ["environment", "build_version", "build_hash", "ldap_password"]
-
- def __init__(self, **kwargs):
- self.environment = kwargs.pop("environment")
- self.build_version = kwargs.pop("build_version")
- self.build_hash = kwargs.pop("build_hash")
- self.ldap_password = kwargs.pop("ldap_password")
- self.ldap_host = kwargs.pop("ldap_host")
- self.ldap_dn = kwargs.pop("ldap_dn")
- self.ldap_roles_base = kwargs.pop("ldap_roles_base")
- self.ldap_cn_template = kwargs.pop("ldap_cn_template")
- self.config_key = kwargs.pop("config_key")
- super().__init__(**kwargs)
-
- def run(self):
- import json
- from ldap3 import Reader, Writer, Server, Connection, ObjectDef
- server = Server(self.ldap_host)
- conn = Connection(server,
- user=self.ldap_dn,
- password=self.ldap_password)
- conn.bind()
- obj = ObjectDef("immaePuppetClass", conn)
- r = Reader(conn, obj,
- "cn={},{}".format(self.ldap_cn_template.format(self.environment), self.ldap_roles_base))
- r.search()
- if len(r) > 0:
- w = Writer.from_cursor(r)
- for value in w[0].immaePuppetJson.values:
- config = json.loads(value)
- if "{}_version".format(self.config_key) in config:
- config["{}_version".format(self.config_key)] = self.build_version
- config["{}_sha256".format(self.config_key)] = self.build_hash
- w[0].immaePuppetJson -= value
- w[0].immaePuppetJson += json.dumps(config, indent=" ")
- w.commit()
- return defer.succeed(SUCCESS)
- return defer.succeed(FAILURE)
-