def _validate_snmp(self): """Validates SNMP credentials. :raises exception.IloInvalidInputError """ cred = self.snmp_credentials if cred is not None: if cred.get('snmp_inspection') is True: if not all([cred.get('auth_user'), cred.get('auth_prot_pp'), cred.get('auth_priv_pp')]): msg = self._('Either few or all mandatory ' 'SNMP credentials ' 'are missing.') LOG.error(msg) raise exception.IloInvalidInputError(msg) try: auth_protocol = cred['auth_protocol'] if auth_protocol not in ["SHA", "MD5"]: msg = self._('Invalid SNMP auth protocol ' 'provided. ' 'Valid values are SHA or MD5') LOG.error(msg) raise exception.IloInvalidInputError(msg) except KeyError: msg = self._('Auth protocol not provided by user. ' 'The default value of MD5 will ' 'be considered.') LOG.debug(msg) pass try: priv_protocol = cred['priv_protocol'] if priv_protocol not in ["AES", "DES"]: msg = self._('Invalid SNMP privacy protocol ' 'provided. ' 'Valid values are AES or DES') LOG.error(msg) raise exception.IloInvalidInputError(msg) except KeyError: msg = self._('Privacy protocol not provided ' 'by user. ' 'The default value of DES will ' 'be considered.') LOG.debug(msg) pass else: LOG.debug(self._('snmp_inspection set to False. SNMP' 'inspection will not be performed.')) else: LOG.debug(self._('SNMP credentials not provided. SNMP ' 'inspection will not be performed.'))
def test_init_snmp_raises(self, ris_mock, ribcl_mock, snmp_mock): ribcl_obj_mock = mock.MagicMock() ribcl_mock.return_value = ribcl_obj_mock ribcl_obj_mock.get_product_name.return_value = 'product' snmp_mock.side_effect = exception.IloInvalidInputError("msg") snmp_credentials = { 'auth_user': '******', 'auth_protocol': 'SHA', 'priv_protocol': 'AES', 'snmp_inspection': 'true' } self.assertRaises(exception.IloInvalidInputError, client.IloClient, "1.2.3.4", "admin", "Admin", timeout=120, port=4430, bios_password='******', cacert='/somewhere', snmp_credentials=snmp_credentials) ris_mock.assert_called_once_with("1.2.3.4", "admin", "Admin", bios_password='******', cacert='/somewhere') ribcl_mock.assert_called_once_with("1.2.3.4", "admin", "Admin", 120, 4430, cacert='/somewhere') self.assertTrue(snmp_mock.called)
def update_persistent_boot(self, device_type=[]): valid_devices = ['NETWORK', 'HDD', 'CDROM'] # Check if the input is valid for item in device_type: if item.upper() not in valid_devices: raise exception.IloInvalidInputError( "Invalid input. Valid devices: NETWORK, HDD or CDROM.") result = self._get_persistent_boot() boot_mode = self._check_boot_mode(result) if boot_mode == 'bios': self._set_persistent_boot(device_type) return device_list = [] for item in device_type: dev = item.upper() if dev == 'NETWORK': nic_list = self._get_nic_boot_devices(result) device_list.extend(nic_list) if dev == 'HDD': disk_list = self._get_disk_boot_devices(result) device_list.extend(disk_list) if dev == 'CDROM': virtual_list = self._get_virtual_boot_devices(result) device_list.extend(virtual_list) if not device_list: platform = self.get_product_name() msg = ("\'%(device)s\' is not configured as boot device on " "this system of type %(platform)s." % { 'device': device_type[0], 'platform': platform }) raise (exception.IloInvalidInputError(msg)) self._set_persistent_boot(device_list)
def set_host_power(self, power): """Toggle the power button of server. :param power: 'ON' or 'OFF' """ if power.upper() in POWER_STATE: dic = {'HOST_POWER': POWER_STATE[power.upper()]} data = self._execute_command('SET_HOST_POWER', 'SERVER_INFO', 'write', dic) return data else: raise exception.IloInvalidInputError( "Invalid input. The expected input is ON or OFF.")
def get_uefi_boot_string(self, mac): """Get uefi iscsi boot string for the host :returns: iscsi boot string for the system :raises: IloError, on an error from iLO. """ boot_sources = self.boot_sources if not boot_sources: msg = ('Boot sources are not found') LOG.debug(msg) raise exception.IloError(msg) for boot_source in boot_sources: if (mac.upper() in boot_source['UEFIDevicePath'] and 'iSCSI' in boot_source['UEFIDevicePath']): return boot_source['StructuredBootString'] else: msg = ('MAC provided "%s" is Invalid' % mac) raise exception.IloInvalidInputError(msg)
def set_pending_boot_mode(self, boot_mode): """Sets the boot mode of the system for next boot. :param boot_mode: either 'uefi' or 'bios'. :raises: IloInvalidInputError, on an invalid input. :raises: IloError, on an error from iLO. :raises: IloCommandNotSupportedError, if the command is not supported on the server. """ if boot_mode not in ['uefi', 'bios']: msg = 'Invalid Boot mode specified' raise exception.IloInvalidInputError(msg) boot_properties = {'BootMode': boot_mode} if boot_mode == 'bios': boot_properties['BootMode'] = 'LegacyBios' else: # If Boot Mode is 'Uefi' set the UEFIOptimizedBoot first. boot_properties['UefiOptimizedBoot'] = "Enabled" # Change the Boot Mode self._change_bios_setting(boot_properties)