def setBaseInstallParameters(self, device_uuid, data, current_data=None): """ Set the system base install parameters that are used to fill up the template. =============== ============================== Parameter Description =============== ============================== device_uuid Unique device ID data Hash describing the parameters =============== ============================== The return parameters are encoded as a dictionary with these keys: =============== ====================================================== Key Description =============== ====================================================== utc Flag to specify if system uses UTC timezone String to specify time zone ntp-servers List of time server names/IPs kernel The boot kernel package name root-hash Hashed version of the root password root-user Flag to decide if there's a root user disk-setup String oriented at the RedHat kickstart device string template String containing the system template system-locale Locale definition for the system release Release to install on the system keyboard-layout Keyboard layout to use =============== ====================================================== ``Return:`` dict """ # Load device if not current_data: current_data = load_system(device_uuid, None, False) is_new = not 'installRecipe' in current_data['objectClass'] dn = current_data['dn'] current_data = self.getBaseInstallParameters(device_uuid, current_data) mods = [] # Add eventually missing objectclass if is_new: mods.append((ldap.MOD_ADD, 'objectClass', 'installRecipe')) # Transfer changed parameters for ldap_key, key in self.attributes.items(): # New value? if key in data and not key in current_data: mods.append((ldap.MOD_ADD, ldap_key, normalize_ldap(unicode2utf8(data[key])))) continue # Changed value? if key in data and key in current_data \ and data[key] != current_data[key]: mods.append((ldap.MOD_REPLACE, ldap_key, normalize_ldap(unicode2utf8(data[key])))) continue # Removed values for key in current_data.keys(): if key in self.rev_attributes and not key in data: mods.append((ldap.MOD_DELETE, self.rev_attributes[key], None)) # Do LDAP operations to add the system res = None #@UnusedVariable lh = LDAPHandler.get_instance() with lh.get_handle() as conn: res = conn.search_s(",".join([self.env.config.get("libinst.template-rdn", "cn=templates,cn=libinst,cn=config"), lh.get_base()]), ldap.SCOPE_SUBTREE, "(&(objectClass=installTemplate)(cn=%s))" % data['template'], ["cn"]) if len(res) != 1: raise ValueError("template '%s' not found" % data['template']) template_dn = res[0][0] if is_new: mods.append((ldap.MOD_ADD, 'installTemplateDN', [template_dn])) else: mods.append((ldap.MOD_REPLACE, 'installTemplateDN', [template_dn])) res = conn.modify_s(dn, mods) return res
def setConfigParameters(self, device_uuid, data, current_data=None): """ Set the system config parameters that are used provision the config management system. =========== =========================================== Parameter Description =========== =========================================== device_uuid Unique device identifier data Dictionary specifying the properties =========== =========================================== The data dictionary has the following property keys: always lists**): ====== =================================== Key Description ====== =================================== item List of assigned items method Config management method to use var Dict of variables and their values ====== =================================== ``Return:`` True no success """ if not current_data: current_data = load_system(device_uuid, None, False) is_new = not 'configRecipe' in current_data['objectClass'] dn = current_data['dn'] current_data = self.getConfigParameters(device_uuid, current_data) mods = [] # Add eventually missing objectclass if is_new: mods.append((ldap.MOD_ADD, 'objectClass', 'configRecipe')) # Map variables if 'var' in data: tmp = copy(data['var']) data['var'] = [] if tmp: for key, value in tmp.items(): if "=" in key: raise ValueError("variable key doesn't allow equal signs") data['var'].append("%s=%s" % (key, value)) # Transfer changed parameters for ldap_key, key in self.attributes.items(): # New value? if key in data and not key in current_data: mods.append((ldap.MOD_ADD, ldap_key, normalize_ldap(unicode2utf8(data[key])))) continue # Changed value? if key in data and key in current_data \ and data[key] != current_data[key]: mods.append((ldap.MOD_REPLACE, ldap_key, normalize_ldap(unicode2utf8(data[key])))) continue # Removed values for key in current_data.keys(): if key in self.rev_attributes and not key in data: mods.append((ldap.MOD_DELETE, self.rev_attributes[key], None)) # Do LDAP operations to add the system lh = LDAPHandler.get_instance() with lh.get_handle() as conn: conn.modify_s(dn, mods)