def test_setup_ds_minimal_dry(topology): # Unset PYTHONPATH to avoid mixing old CLI tools and new lib389 tmp_env = os.environ if "PYTHONPATH" in tmp_env: del tmp_env["PYTHONPATH"] # Create the setupDs lc = LogCapture() # Give it the right types. sds = SetupDs(verbose=DEBUGGING, dryrun=True, log=lc.log) # Get the dicts from Type2Base, as though they were from _validate_ds_2_config # IE get the defaults back just from Slapd2Base.collect # Override instance name, root password, port and secure port. general_options = General2Base(lc.log) general_options.verify() general = general_options.collect() slapd_options = Slapd2Base(lc.log) slapd_options.set('instance_name', INSTANCE_SERVERID) slapd_options.set('port', INSTANCE_PORT) slapd_options.set('secure_port', INSTANCE_SECURE_PORT) slapd_options.set('root_password', PW_DM) slapd_options.verify() slapd = slapd_options.collect() sds.create_from_args(general, slapd, {}, None) insts = topology.standalone.list(serverid=INSTANCE_SERVERID) # Assert we did not change the system. assert (len(insts) == 0)
def test_setup_ds_minimal(topology): # Create the setupDs lc = LogCapture() # Give it the right types. sds = SetupDs(verbose=DEBUGGING, dryrun=False, log=lc.log) # Get the dicts from Type2Base, as though they were from _validate_ds_2_config # IE get the defaults back just from Slapd2Base.collect # Override instance name, root password, port and secure port. general_options = General2Base(lc.log) general_options.verify() general = general_options.collect() slapd_options = Slapd2Base(lc.log) slapd_options.set('instance_name', INSTANCE_SERVERID) slapd_options.set('port', INSTANCE_PORT) slapd_options.set('root_password', PW_DM) slapd_options.verify() slapd = slapd_options.collect() sds.create_from_args(general, slapd, {}, None) insts = topology.standalone.list(serverid=INSTANCE_SERVERID) # Assert we did change the system. assert (len(insts) == 1) # Make sure we can connect topology.standalone.open() # Make sure we can start stop. topology.standalone.stop() topology.standalone.start() # Okay, actually remove the instance remove_ds_instance(topology.standalone)
def instance_example(inst, log, args): print(""" ; --- BEGIN COPYRIGHT BLOCK --- ; Copyright (C) 2015 Red Hat, Inc. ; All rights reserved. ; ; License: GPL (version 3 or any later version). ; See LICENSE for details. ; --- END COPYRIGHT BLOCK --- ; Author: firstyear at redhat.com ; This is a version 2 ds setup inf file. ; It is used by the python versions of setup-ds-* ; Most options map 1 to 1 to the original .inf file. ; However, there are some differences that I envision ; For example, note the split backend section. ; You should be able to create, one, many or no backends in an install ; ; The special value {instance_name} is substituted at installation time. ; """) g2b = General2Base(log) s2b = Slapd2Base(log) print(g2b.collect_help()) print(s2b.collect_help())
def _validate_ds_2_config(self, config): assert_c(config.has_section('slapd'), "Missing configuration section [slapd]") # Extract them in a way that create can understand. general_options = General2Base(self.log) general_options.parse_inf_config(config) general_options.verify() general = general_options.collect() if self.verbose: self.log.info("Configuration general %s" % general) slapd_options = Slapd2Base(self.log) slapd_options.parse_inf_config(config) slapd_options.verify() slapd = slapd_options.collect() if self.verbose: self.log.info("Configuration slapd %s" % slapd) backends = [] for section in config.sections(): if section.startswith('backend-'): be = {} # TODO: Add the other BACKEND_ types be[BACKEND_NAME] = section.replace('backend-', '') be[BACKEND_SUFFIX] = config.get(section, 'suffix') be[BACKEND_SAMPLE_ENTRIES] = config.get(section, 'sample_entries') backends.append(be) if self.verbose: self.log.info("Configuration backends %s" % backends) return (general, slapd, backends)
def _validate_ds_2_config(self, config): assert_c(config.has_section('slapd'), "Missing configuration section [slapd]") # Extract them in a way that create can understand. general_options = General2Base(self.log) general_options.parse_inf_config(config) general_options.verify() general = general_options.collect() self.log.debug("Configuration general %s", general) slapd_options = Slapd2Base(self.log) slapd_options.parse_inf_config(config) slapd_options.verify() slapd = slapd_options.collect() self.log.debug("Configuration slapd %s", slapd) backends = [] for section in config.sections(): if section.startswith('backend-'): backend_options = Backend2Base(self.log, section) backend_options.parse_inf_config(config) suffix = config.get(section, 'suffix', fallback='') if suffix != '': # Suffix be = {} be[BACKEND_NAME] = section.replace('backend-', '') be[BACKEND_SUFFIX] = suffix be['create_suffix_entry'] = config.get(section, 'create_suffix_entry', fallback=False) # Sample entries sample_entries = config.get(section, 'sample_entries', fallback='no') if sample_entries.lower() != 'no': if sample_entries.lower() == 'yes': be[BACKEND_SAMPLE_ENTRIES] = INSTALL_LATEST_CONFIG elif (sample_entries != '001003006' and sample_entries != '001004000'): # invalid value raise ValueError('Invalid value for sample_entries ({}), you must use "yes", "no", "001003006", or "001004000"'.format(sample_entries)) else: be[BACKEND_SAMPLE_ENTRIES] = sample_entries # Require index req_idx = config.getboolean(section, 'require_index', fallback=False) if req_idx: be[BACKEND_REQ_INDEX] = "on" # Add this backend to the list backends.append(be) self.log.debug("Configuration backends %s", backends) return (general, slapd, backends)
def instance_example(inst, log, args): header = """ ; ; This is a version 2 ds setup inf file. ; It is used by the python versions of setup-ds-* ; Most options map 1 to 1 to the original .inf file. ; However, there are some differences that I envision ; For example, note the split backend section. ; You should be able to create, one, many or no backends in an install ; ; The special value {instance_name} is substituted at installation time. ; ; By default, all configuration parameters in this file are commented out. ; To use an INF file with dscreate, you must at least set the parameters ; flagged with [REQUIRED]. """ g2b = General2Base(log) s2b = Slapd2Base(log) b2b = Backend2Base(log, "backend-userroot") if args.template_file: try: # Create file and set permissions template_file = open(args.template_file, 'w') template_file.close() os.chmod(args.template_file, 0o600) # Open file and populate it template_file = open(args.template_file, 'w') template_file.write(header) template_file.write(g2b.collect_help(advanced=args.advanced)) template_file.write(s2b.collect_help(advanced=args.advanced)) template_file.write(b2b.collect_help(advanced=args.advanced)) template_file.close() except OSError as e: log.error( "Failed trying to create template file ({}), error: {}".format( args.template_file, str(e))) return False else: print(header) print(g2b.collect_help(advanced=args.advanced)) print(s2b.collect_help(advanced=args.advanced)) print(b2b.collect_help(advanced=args.advanced)) return True
def topology(request): instance = DirSrv(verbose=DEBUGGING) instance.log.debug("Instance allocated") args = {SER_PORT: INSTANCE_PORT, SER_SERVERID_PROP: INSTANCE_SERVERID} instance.allocate(args) if instance.exists(): instance.delete() # Create the setupDs lc = LogCapture() # Give it the right types. sds = SetupDs(verbose=DEBUGGING, dryrun=False, log=lc.log) # Get the dicts from Type2Base, as though they were from _validate_ds_2_config # IE get the defaults back just from Slapd2Base.collect # Override instance name, root password, port and secure port. general_options = General2Base(lc.log) general_options.verify() general = general_options.collect() slapd_options = Slapd2Base(lc.log) slapd_options.set('instance_name', INSTANCE_SERVERID) slapd_options.set('port', INSTANCE_PORT) slapd_options.set('root_password', PW_DM) slapd_options.verify() slapd = slapd_options.collect() sds.create_from_args(general, slapd, {}, None) # Make sure we can connect instance.open() # Create the example backend with sample entries. instance.backends.create(properties={ 'cn': ['userRoot'], 'nsslapd-suffix': ['dc=example,dc=com'], }) def fin(): if instance.exists() and not DEBUGGING: instance.delete() request.addfinalizer(fin) return TopologyInstance(instance)