playbooks/roles/cyclecloud/files/configure_ad.py (67 lines of code) (raw):

#!/usr/bin/python3 # Configure Cycle to use Active Directory for Auth import sys import os import argparse import json from shutil import rmtree, copy2, move from subprocess import CalledProcessError, check_output from os import path, listdir, chdir, fdopen, remove from tempfile import mkstemp, mkdtemp cycle_root = "/opt/cycle_server" tmpdir = mkdtemp() print("Creating temp directory {} for installing CycleCloud".format(tmpdir)) def clean_up(): rmtree(tmpdir) def _catch_sys_error(cmd_list): try: output = check_output(cmd_list) print(cmd_list) print(output) return output except CalledProcessError as e: print("Error with cmd: %s" % e.cmd) print("Output: %s" % e.output) raise def create_ad_settings(url, domain): authenticator = { "AdType": "Application.Authenticator", "DefaultDomain": domain, "Disabled": False, "Label": "Active Directory", "Method": "active_directory", "Name": "active_directory", "Order": 100, "URL": url } app_setting_installation = { "AdType": "Application.Setting", "Name": "authorization.check_datastore_permissions", "Value": True } configure_ad_data = [ authenticator, app_setting_installation ] data_file = os.path.join(tmpdir, "configure_ad.json") print("Creating record file: {}".format(data_file)) with open(data_file, 'w') as fp: json.dump(configure_ad_data, fp) config_path = os.path.join(cycle_root, "config/data/") print("Copying config to {}".format(config_path)) copy2(data_file, config_path) def main(): parser = argparse.ArgumentParser(description="usage: %prog [options]") parser.add_argument("--url", dest="url", help="The ldap url to connect to aka: ldap(s)://domainserver") parser.add_argument("--domain", dest="domain", help="The domain name") args = parser.parse_args() print("Debugging arguments: %s" % args) create_ad_settings(args.url, args.domain) clean_up() if __name__ == "__main__": try: main() except: sys.exit("Deployment failed...")