def import_imc_backup(handle, remotehost, remotefile, protocol, username, password, passphrase=None, dump_xml=None): """ Imports backUp. This operation will upload the IMC backup taken earlier via GUI or backup_imc operation. User can perform an import while the system is up and running. - remotehost specifies the host where username need to download the backup. - remotefile specifies the path on remotehost where username need to download the backup. - protocol specifies the protocol used for transferring the file to remotehost. - username specifies the username credential to login to remotehost. - password specifies the password credential to login to remotehost. """ from ImcMos import MgmtImporter dn = CoreUtils.make_dn([CoreUtils.make_rn(NamingId.TOP_SYSTEM), CoreUtils.make_rn(NamingId.MGMT_IMPORTER)]) mgmt_importer = ManagedObject(NamingId.MGMT_IMPORTER) mgmt_importer.dn = dn mgmt_importer.AdminState = MgmtImporter.CONST_ADMIN_STATE_ENABLED mgmt_importer.Hostname = remotehost mgmt_importer.User = username mgmt_importer.Pwd = password mgmt_importer.RemoteFile = remotefile mgmt_importer.Proto = protocol mgmt_importer.AdminState = MgmtImporter.CONST_ADMIN_STATE_ENABLED mgmt_importer.Status = Status.MODIFIED mgmt_importer.Passphrase = passphrase in_config = ConfigConfig() in_config.add_child(mgmt_importer) ccm = handle.config_conf_mo(dn=dn, in_config=in_config, in_hierarchical=YesOrNo.FALSE, dump_xml=dump_xml) if ccm.error_code != 0: raise ImcException(ccm.error_code, ccm.error_descr) time.sleep(10) #Wait for 10 seconds before start checking. status = False while True: cr_dn = handle.config_resolve_dn(dn, in_hierarchical=YesOrNo.FALSE, dump_xml=dump_xml) if cr_dn.error_code == 0: if cr_dn.OutConfig.get_child_count() > 0: for cimc_backup in cr_dn.OutConfig.child: if cimc_backup.AdminState == MgmtImporter.CONST_ADMIN_STATE_DISABLED: if cimc_backup.FsmStageDescr == "Completed successfully": status = True if cimc_backup.FsmStageDescr == "Error": raise ImcValidationException("Failed to import the CIMC configuration file." + "Error Code: " + cimc_backup.FsmRmtInvErrCode + " Error Description: " + cimc_backup.FsmRmtInvErrDescr) else: raise ImcValidationException("Failed to import the CIMC configuration file.") else: raise ImcException(cr_dn.error_code, cr_dn.error_descr) if status: break return ccm.OutConfig.child
def start_imc_iod_snapshot(handle, iso_share_ip, iso_share, iso_share_type, username, password, timeout, remote_share_ip, remote_share_path, remote_share_file, remote_share_type, remote_share_username, remote_share_password, admin_state="trigger", dump_xml=None): """ This method starts the IOD Snapshot.""" #dn = "sys/iod/snapshotStart" #dn = ImcUtils.make_dn([ManagedObject(NamingId.TOP_SYSTEM).make_rn(), ManagedObject(NamingId.IOD_CONTROLLER).make_rn(), ManagedObject(NamingId.IOD_SNAPSHOT_START).make_rn()]) dn = CoreUtils.make_dn([CoreUtils.make_rn(NamingId.TOP_SYSTEM), CoreUtils.make_rn(NamingId.IOD_CONTROLLER), CoreUtils.make_rn(NamingId.IOD_SNAPSHOT_START)]) iod_snapshot = ManagedObject(NamingId.IOD_SNAPSHOT_START) iod_snapshot.dn = dn #iod_snapshot.AdminState = iod_snapshot.CONST_ADMIN_STATE_TRIGGER iod_snapshot.AdminState = admin_state iod_snapshot.IsoShare = iso_share iod_snapshot.IsoShareIp = iso_share_ip iod_snapshot.IsoShareType = iso_share_type iod_snapshot.Username = username iod_snapshot.Password = password iod_snapshot.TimeOut = timeout iod_snapshot.RemoteShareIp = remote_share_ip iod_snapshot.RemoteSharePath = remote_share_path iod_snapshot.RemoteShareFile = remote_share_file iod_snapshot.RemoteShareType = remote_share_type iod_snapshot.RemoteShareUsername = remote_share_username iod_snapshot.RemoteSharePassword = remote_share_password in_config = ConfigConfig() in_config.add_child(iod_snapshot) ccm = handle.config_conf_mo(dn=dn, in_config=in_config, in_hierarchical=YesOrNo.FALSE, dump_xml=dump_xml) if ccm.error_code != 0: raise ImcException(ccm.error_code, ccm.error_descr) return ccm.OutConfig.child
def update_imc_firmware(handle, in_mo, admin_state, protocol, share_type, remote_server, remote_path, username, password, secure_boot=None, dump_xml=None): """ Uploads the Firmware image to IMC Server. - in_mo specifies the respective Managed Object to upload image. - remoteserver specifies the IP address of host containing firmware image. - username specifies the Username login credential of host containing firmware image. - password specifies the Password login credential of host containing firmware image. - remotepath specifies the path of firmware image on remoteserver. - protocol specifies the protocol used for transferring the file to remotehost. - sharetype specifies the share type. - admin_state specifies the admin state. """ from ImcMos import FirmwareUpdatable dn = None if in_mo != None: if str(ImcUtils.word_u(in_mo.class_id)) == "FirmwareUpdatable": dn = in_mo.get_attr("Dn") elif str(ImcUtils.word_u(in_mo.class_id)) == "BiosUnit": dn = CoreUtils.make_dn([in_mo.get_attr("Dn"), CoreUtils.make_rn("FirmwareUpdatable")]) elif str(ImcUtils.word_u(in_mo.class_id)) == "MgmtController": dn = CoreUtils.make_dn([in_mo.get_attr("Dn"), CoreUtils.make_rn("FirmwareUpdatable")]) else: raise ImcValidationException("Please provide correct Managed Object. Valid MOs <FirmwareUpdatable or BiosUnit or MgmtController") else: raise ImcValidationException("Please provide correct Managed Object. Valid MOs <FirmwareUpdatable or BiosUnit or MgmtController") # if updatetype == FirmwareUpdatable.CONST_TYPE_BLADE_CONTROLLER: # dn = "sys/rack-unit-1/mgmt/fw-updatable" # if updatetype == FirmwareUpdatable.CONST_TYPE_BLADE_BIOS: # dn = "sys/rack-unit-1/bios/fw-updatable" # if updatetype == FirmwareUpdatable.CONST_TYPE_ADAPTOR: # dn = "sys/rack-unit-1/adaptor-1/mgmt/fw-updatable" firmware_updater = ManagedObject(NamingId.FIRMWARE_UPDATABLE) firmware_updater.dn = dn firmware_updater.Status = Status.MODIFIED #firmware_updater.AdminState = FirmwareUpdatable.CONST_ADMIN_STATE_TRIGGER firmware_updater.AdminState = admin_state firmware_updater.Protocol = protocol firmware_updater.RemoteServer = remote_server firmware_updater.RemotePath = remote_path firmware_updater.User = username firmware_updater.Pwd = password firmware_updater.Type = share_type firmware_updater.SecureBoot = secure_boot in_config = ConfigConfig() in_config.add_child(firmware_updater) ccm = handle.config_conf_mo(dn=dn, in_config=in_config, in_hierarchical=YesOrNo.FALSE, dump_xml=dump_xml) if ccm.error_code != 0: raise ImcException(ccm.error_code, ccm.error_descr) return ccm.OutConfig.child
def stop_imc_iod_snapshot(handle, timeout, admin_state="trigger", dump_xml=None): """ This method stops the IOD Snapshot.""" #dn = "sys/iod/snapshotStart" #dn = ImcUtils.make_dn([ManagedObject(NamingId.TOP_SYSTEM).make_rn(), ManagedObject(NamingId.IOD_CONTROLLER).make_rn(), ManagedObject(NamingId.IOD_SNAPSHOT_CANCEL).make_rn()]) dn = CoreUtils.make_dn([CoreUtils.make_rn(NamingId.TOP_SYSTEM), CoreUtils.make_rn(NamingId.IOD_CONTROLLER), CoreUtils.make_rn(NamingId.IOD_SNAPSHOT_CANCEL)]) iod_snapshot = ManagedObject(NamingId.IOD_SNAPSHOT_CANCEL) iod_snapshot.dn = dn #iod_snapshot.AdminState = iod_snapshot.CONST_ADMIN_STATE_TRIGGER iod_snapshot.AdminState = admin_state iod_snapshot.TimeOut = timeout in_config = ConfigConfig() in_config.add_child(iod_snapshot) ccm = handle.config_conf_mo(dn=dn, in_config=in_config, in_hierarchical=YesOrNo.FALSE, dump_xml=dump_xml) if ccm.error_code != 0: raise ImcException(ccm.error_code, ccm.error_descr) return ccm.OutConfig.child
def update_imc_firmware_huu(handle, remote_share, share_type, remote_ip, username, password, update_component, stop_on_error=None, timeout=None, verify_update=None, cimc_secure_boot=None, dump_xml=None): """ Uploads the HUU Firmware image to IMC Server. - remoteip specifies the IP address of host containing firmware image. - username specifies the Username login credential of host containing firmware image. - password specifies the Password login credential of host containing firmware image. - remoteshare specifies the path of firmware image on remoteip server. - sharetype specifies the share type. - update_component specifies the respective component to update or "all". - stop_on_error specifies the action on error. "yes" or "no". - timeout specifies the timeout in minute to exit the operation. - verify_update speifies if IMC verify after update. "yes" or "no". """ from ImcMos import HuuFirmwareUpdater dn = CoreUtils.make_dn([CoreUtils.make_rn(NamingId.TOP_SYSTEM), CoreUtils.make_rn(NamingId.HUU_CONTROLLER), CoreUtils.make_rn(NamingId.HUU_FIRMWARE_UPDATER)]) huu_firmware_updater = ManagedObject(NamingId.HUU_FIRMWARE_UPDATER) huu_firmware_updater.dn = dn huu_firmware_updater.RemoteShare = remote_share huu_firmware_updater.MapType = share_type huu_firmware_updater.RemoteIp = remote_ip huu_firmware_updater.Username = username huu_firmware_updater.Password = password huu_firmware_updater.UpdateComponent = update_component huu_firmware_updater.AdminState = HuuFirmwareUpdater.CONST_ADMIN_STATE_TRIGGER huu_firmware_updater.StopOnError = stop_on_error huu_firmware_updater.TimeOut = timeout huu_firmware_updater.VerifyUpdate = verify_update huu_firmware_updater.CimcSecureBoot = cimc_secure_boot in_config = ConfigConfig() in_config.add_child(huu_firmware_updater) ccm = handle.config_conf_mo(dn=dn, in_config=in_config, in_hierarchical=YesOrNo.FALSE, dump_xml=dump_xml) if ccm.error_code != 0: raise ImcException(ccm.error_code, ccm.error_descr) return ccm.OutConfig.child
def get_imc_techsupport(handle, remotehost, remotefile, protocol, username, password, timeout_sec=ImcConstant.TIME_OUT_IN_SEC, dump_xml=None): """ Creates and downloads the technical support data of IMC server. - remotehost specifies the host where username need to download the technical support data. - remotefile specifies the path on remotehost where username need to download the technical support data. - protocol specifies the protocol used for transferring the file to remotehost. - username specifies the username credential to login to remotehost. - password specifies the password credential to login to remotehost. - timeout_sec specifies the time in seconds for which method waits for the technical support data file to generate else exit.Default is 600 Seconds. """ from ImcMos import MgmtImporter if timeout_sec == None or timeout_sec == "" or timeout_sec < 1: timeout_sec = ImcConstant.TIME_OUT_IN_SEC ImcUtils.write_imc_warning('[Warning]: Inappropriate <timeoutsec>. Chosen default value is 600 Seconds') #dn = "sys/rack-unit-1/tech-support" dn = CoreUtils.make_dn([CoreUtils.make_rn(NamingId.TOP_SYSTEM), CoreUtils.make_rn(NamingId.COMPUTE_RACK_UNIT, ServerId="1"), CoreUtils.make_rn(NamingId.SYSDEBUG_TECH_SUPPORT_EXPORT)]) sysdebug_techsupport = ManagedObject(NamingId.SYSDEBUG_TECH_SUPPORT_EXPORT) sysdebug_techsupport.DN = dn sysdebug_techsupport.AdminState = MgmtImporter.CONST_ADMIN_STATE_ENABLED sysdebug_techsupport.RemoteFile = remotefile sysdebug_techsupport.Protocol = protocol sysdebug_techsupport.Status = Status.MODIFIED sysdebug_techsupport.Hostname = remotehost sysdebug_techsupport.User = username sysdebug_techsupport.Pwd = password in_config = ConfigConfig() in_config.add_child(sysdebug_techsupport) ccm = handle.config_conf_mo(dn=dn, in_config=in_config, in_hierarchical=YesOrNo.FALSE, dump_xml=dump_xml) time.sleep(10) #Wait for 10 seconds before start checking. #TODO: CHECK THE FIELD fsmStageDescr duration = timeout_sec poll_interval = ImcConstant.POLL_INTERVAL_IN_SEC crd = None if ccm.error_code == 0: ImcUtils.write_imc_warning('Waiting for the Tech Support file to become available (this may take several minutes).') status = False while True: crd = handle.config_resolve_dn(dn, in_hierarchical=YesOrNo.FALSE, dump_xml=dump_xml) if crd.error_code == 0: if crd.OutConfig.get_child_count() > 0: for tech_support in crd.OutConfig.child: if tech_support.AdminState == MgmtImporter.CONST_ADMIN_STATE_DISABLED: #TODO: replace the hard-coded string after schema change if tech_support.FsmStatus == "success": status = True else: raise ImcValidationException('Failed to create the TechSupport file.' + tech_support.FsmStatus) else: raise ImcValidationException('Failed to create the TechSupport file.') else: raise ImcException(crd.error_code, crd.error_descr) if status: break time.sleep(min(duration, poll_interval)) duration = max(0, (duration-poll_interval)) if duration == 0: raise ImcValidationException('TechSupport generation in progress but get_imc_techsupport process timed out. Exiting Method get_imc_techsupport') else: raise ImcException(ccm.error_code, ccm.error_descr) return crd.OutConfig.child
def backup_imc(handle, remotehost, remotefile, protocol, username, password, passphrase=None, timeout_sec=ImcConstant.TIME_OUT_IN_SEC, dump_xml=None): """ Creates and downloads the backup of IMC. - remotehost specifies the host where username need to download the backup. - remotefile specifies the path on remotehost where username need to download the backup. - protocol specifies the protocol used for transferring the file to remotehost. - username specifies the username credential to login to remotehost. - password specifies the password credential to login to remotehost. - timeout_sec specifies the time in seconds for which method waits for the backUp file to generate else exit. Default is 600 Seconds. """ from ImcMos import MgmtBackup if timeout_sec == None or timeout_sec == "" or timeout_sec < 1: timeout_sec = ImcConstant.TIME_OUT_IN_SEC ImcUtils.write_imc_warning('[Warning]: Inappropriate <timeoutsec>. Chosen default value is 600 Seconds') #dn = "sys/export-config" #dn = ImcUtils.make_dn([ManagedObject(NamingId.TOP_SYSTEM).make_rn(),ManagedObject(NamingId.MGMT_BACKUP).make_rn()]) dn = CoreUtils.make_dn([CoreUtils.make_rn(NamingId.TOP_SYSTEM), CoreUtils.make_rn(NamingId.MGMT_BACKUP)]) mgmt_backup = ManagedObject(NamingId.MGMT_BACKUP) mgmt_backup.Hostname = remotehost mgmt_backup.User = username mgmt_backup.Pwd = password mgmt_backup.Proto = protocol mgmt_backup.RemoteFile = remotefile mgmt_backup.dn = dn mgmt_backup.AdminState = MgmtBackup.CONST_ADMIN_STATE_ENABLED mgmt_backup.Status = Status.MODIFIED mgmt_backup.Passphrase = passphrase in_config = ConfigConfig() in_config.add_child(mgmt_backup) response = handle.config_conf_mo(dn, in_config=in_config, in_hierarchical=YesOrNo.FALSE, dump_xml=dump_xml) if response.error_code != 0: raise ImcException(response.error_code, response.error_descr) #raise Exception('[Error]: backup_imc [Code]:' + ccm.error_code + ' [Description]:' + ccm.error_descr) time.sleep(10) #Wait for 10 seconds before start checking. duration = timeout_sec poll_interval = ImcConstant.POLL_INTERVAL_IN_SEC cr_dn = None status = False while True: cr_dn = handle.config_resolve_dn(dn, in_hierarchical=YesOrNo.FALSE, dump_xml=dump_xml) if cr_dn.error_code == 0: for each_mgmt_dn in cr_dn.OutConfig.child: if each_mgmt_dn.AdminState == MgmtBackup.CONST_ADMIN_STATE_DISABLED: if each_mgmt_dn.FsmStageDescr == "Completed successfully": status = True if each_mgmt_dn.FsmStageDescr == "Error": raise ImcValidationException("Failed to export the CIMC configuration file." + "Error Code: " + each_mgmt_dn.FsmRmtInvErrCode + " Error Description: " + each_mgmt_dn.FsmRmtInvErrDescr) else: raise ImcException(cr_dn.error_code, cr_dn.error_descr) if status: break time.sleep(min(duration, poll_interval)) duration = max(0, (duration-poll_interval)) if duration == 0: raise ImcValidationException('Backup operation in progress but utility backup_imc timed out. Exiting Method backup_imc') return cr_dn.OutConfig.child