def __init__(self, context, action='get'): action = action.lower() self.context = context self.logger = LogHelper.get_logger(context) self.address = self.context.resource.address self.community_read = get_attribute_by_name( context=self.context, attribute_name='SNMP Read Community') or 'public' self.community_write = get_attribute_by_name( context=self.context, attribute_name='SNMP Write Community') or 'private' self.password = get_attribute_by_name( context=self.context, attribute_name='SNMP Password') or '', self.user = get_attribute_by_name(context=self.context, attribute_name='SNMP User') or '', self.version = get_attribute_by_name(context=self.context, attribute_name='SNMP Version') self.private_key = get_attribute_by_name( context=self.context, attribute_name='SNMP Private Key') handler = None if action in ('get', 'set'): handler = self._get_handler(action) else: raise Exception('Unsupported SNMP action: %s' % action) self.handler = handler self._test_handler()
def __init__(self, context): self.session = cs_api.CloudShellAPISession( host=context.connectivity.server_address, token_id=context.connectivity.admin_auth_token, domain="Global") self.context = context self.logger = LogHelper.get_logger(context) self.address = self.context.resource.address self.community_read = self.session.DecryptPassword( get_attribute_by_name( context=self.context, attribute_name='SNMP Read Community')).Value or 'public' self.community_write = self.session.DecryptPassword( get_attribute_by_name( context=self.context, attribute_name='SNMP Write Community')).Value or 'private' self.password = get_attribute_by_name( context=self.context, attribute_name='SNMP Password') or '', self.user = get_attribute_by_name(context=self.context, attribute_name='SNMP User') or '', self.version = get_attribute_by_name(context=self.context, attribute_name='SNMP Version') self.private_key = get_attribute_by_name( context=self.context, attribute_name='SNMP Private Key')
def PowerOn(self, context, ports): self.resource = SentryPdu.create_from_context(context) self.logger = LogHelper.get_logger(context) handler = PmPduHandler(context, self.resource, self.logger) return handler.power_on(ports)
def get_inventory(self, context): self.resource = SentryPdu.create_from_context(context) self.logger = LogHelper.get_logger(context) handler = PmPduHandler(context, self.resource, self.logger) return handler.get_inventory()
def run_command(self, context, command): logger = LogHelper.get_logger(context) self._cli_session_handler(context) with self.cli.get_session(self.session_types, self.mode, logger) as default_session: output = default_session.send_command(command) return sub(self.cli_prompt_regex, '', output)
def get_inventory(self, context): resource = self._decrypt_resource_passwords( context, SentryPdu.create_from_context(context)) logger = LogHelper.get_logger(context) handler = PmPduHandler(context.resource.address, resource, logger) return handler.get_inventory()
def PowerCycle(self, context, ports, delay): try: float(delay) except ValueError: raise Exception('Delay must be a numeric value') self.resource = SentryPdu.create_from_context(context) self.logger = LogHelper.get_logger(context) handler = PmPduHandler(context, self.resource, self.logger) return handler.power_cycle(ports, float(delay))
def __init__(self, context): self.context = context self.logger = LogHelper.get_logger(context) self.connection_type = get_attribute_by_name( context=self.context, attribute_name='CLI Connection Type') self.prompt_regex = get_attribute_by_name( context=self.context, attribute_name='CLI Prompt Regular Expression') self.mode = CommandMode(self.prompt_regex) self.session_types = None self._set_session_types()
def PowerOn(self, context, ports): """ :param context: :param ports: list of port addresses to power cycle :type ports: list of str :return: """ resource = self._decrypt_resource_passwords( context, SentryPdu.create_from_context(context)) logger = LogHelper.get_logger(context) handler = PmPduHandler(context.resource.address, resource, logger) return handler.power_on(ports)
def _decrypt_resource_passwords(self, context, resource): """ :param context: :param resource: SentryPdu resource object with encrypted passwords :type resource: SentryPdu :return: the resource object with the passwords decrypted :rtype : SentryPdu """ logger = LogHelper.get_logger(context) try: domain = context.reservation.domain except: domain = 'Global' logger.info("Creating API Session") api = CloudShellAPISession( context.connectivity.server_address, token_id=context.connectivity.admin_auth_token, port=context.connectivity.cloudshell_api_port, domain=domain) attributes_to_decrypt = ('snmp_write_community', 'snmp_read_community', 'snmp_v3_password', 'snmp_v3_private_key', 'password') for pass_attribute in attributes_to_decrypt: logger.info("Attempting decryption of password value at {}".format( pass_attribute)) value = getattr(resource, pass_attribute) if value is None: # logger.info(" Skipping Decryption of {}: Value is None".format(pass_attribute)) continue elif value.endswith('=='): # logger.info(" Decrypting {}: Detected encrypted value {}".format(pass_attribute, value)) setattr(resource, pass_attribute, api.DecryptPassword(value).Value) # logger.info(" Got: {}".format(getattr(resource, pass_attribute))) continue else: # logger.info(" Skipping Decryption of {}: Unable to determine type for: {}".format(pass_attribute, value)) pass return resource
def __init__(self, context): self.context = context self.logger = LogHelper.get_logger(context) self.address = self.context.resource.address self.community_read = get_attribute_by_name( context=self.context, attribute_name='SNMP Read Community') or 'public' self.community_write = get_attribute_by_name( context=self.context, attribute_name='SNMP Write Community') or 'private' self.password = get_attribute_by_name( context=self.context, attribute_name='SNMP Password') or '', self.user = get_attribute_by_name(context=self.context, attribute_name='SNMP User') or '', self.version = get_attribute_by_name(context=self.context, attribute_name='SNMP Version') self.private_key = get_attribute_by_name( context=self.context, attribute_name='SNMP Private Key')
def PowerCycle(self, context, ports, delay): """ :param context: :param ports: :type ports: list of str :param delay: :type delay: float :return: """ try: float(delay) except ValueError: raise Exception('Delay must be a numeric value') resource = self._decrypt_resource_passwords( context, SentryPdu.create_from_context(context)) logger = LogHelper.get_logger(context) handler = PmPduHandler(context.resource.address, resource, logger) return handler.power_cycle(ports, float(delay))
def _cli_session_handler(self, context): self._cs_session_handler(context) logger = LogHelper.get_logger(context) self.cli_connection_type = context.resource.attributes['CLI Connection Type'] self.cli_prompt_regex = context.resource.attributes['CLI Prompt Regular Expression'] self.mode = CommandMode(self.cli_prompt_regex) self.session_types = None logger.info('CLI Connection Type: "%s"' % self.cli_connection_type) logger.info('CLI Prompt Regular Expression: "%s"' % self.cli_prompt_regex) if self.cli_connection_type == 'Auto': self.session_types = [SSHSession(host=self.address, username=self.user, password=self.cs_session.DecryptPassword(self.password_hash).Value), TelnetSession(host=self.address, username=self.user, password=self.cs_session.DecryptPassword(self.password_hash).Value)] elif self.cli_connection_type == 'Console': message = 'Unimplemented CLI Connection Type: "%s"' % self.cli_connection_type logger.error(message) raise GenericResourceDriver.UnImplementedCliConnectionType(message) elif self.cli_connection_type == 'SSH': self.session_types = [SSHSession(host=self.address, username=self.user, password=self.cs_session.DecryptPassword(self.password_hash).Value)] elif self.cli_connection_type == 'TCP': message = 'Unimplemented CLI Connection Type: "%s"' % self.cli_connection_type logger.error(message) raise GenericResourceDriver.UnImplementedCliConnectionType(message) elif self.cli_connection_type == 'Telnet': self.session_types = [TelnetSession(host=self.address, username=self.user, password=self.cs_session.DecryptPassword(self.password_hash).Value)] else: message = 'Unsupported CLI Connection Type: "%s"' % self.cli_connection_type logger.error(message) raise GenericResourceDriver.UnSupportedCliConnectionType(message)
def __init__(self, context): self.context = context self.logger = LogHelper.get_logger(self.context) self.snmp_handler = SnmpHandler(self.context)
def CallPowerOff(self,context,ports): self.logger = LogHelper.get_logger(context) self.logger.info("Call Power Off called for ports %s" % ports) self.PowerOff(context,ports)
def CallPowerCycle(self, context,ports, delay): self.logger = LogHelper.get_logger(context) self.logger.info("Call Power Cycle called for ports %s " % ports) self.PowerCycle(context, ports, delay)
def __init__(self, context): self.context = context self.logger = LogHelper.get_logger(self.context) self.resource = SentryPdu.create_from_context(context) self.snmp_handler = SnmpHandler(self.context, self.resource, self.logger).get_raw_handler('get')
def __init__(self, context): self.context = context self.logger = LogHelper.get_logger(self.context)
def __init__(self, context): self.context = context self.logger = LogHelper.get_logger(self.context) self.snmp = Snmp(self.context, 'get') self.resource_address = self.context.resource.address