예제 #1
0
    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()
예제 #2
0
    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')
예제 #3
0
    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)
예제 #4
0
    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()
예제 #5
0
    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)
예제 #6
0
    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()
예제 #7
0
    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))
예제 #8
0
    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()
예제 #9
0
    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)
예제 #10
0
    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
예제 #11
0
    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')
예제 #12
0
    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))
예제 #13
0
    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)
예제 #14
0
 def __init__(self, context):
     self.context = context
     self.logger = LogHelper.get_logger(self.context)
     self.snmp_handler = SnmpHandler(self.context)
예제 #15
0
    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)
예제 #16
0
 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')
예제 #18
0
 def __init__(self, context):
     self.context = context
     self.logger = LogHelper.get_logger(self.context)
예제 #19
0
    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