コード例 #1
0
    def load_firmware(self, context, cancellation_context, path, vrf_management_name):
        """Upload and updates firmware on the resource

        :param ResourceCommandContext context: The context object for the command with resource and reservation info
        :param str path: path to tftp server where firmware file is stored
        :param str vrf_management_name: Optional. Virtual routing and Forwarding management name
        """
        logger = get_logger_with_thread_id(context)
        logger.info('Load firmware command started')

        with ErrorHandlingContext(logger):
            api = get_api(context)
            resource_config = create_load_balancing_resource_from_context(shell_name=self.SHELL_NAME,
                                                                          supported_os=self.SUPPORTED_OS,
                                                                          context=context)

            vrf_management_name = vrf_management_name or resource_config.vrf_management_name

            cli_handler = CgsCliHandler(cli=self._cli,
                                        resource_config=resource_config,
                                        logger=logger,
                                        api=api)

            firmware_operations = CgsFirmwareRunner(cli_handler=cli_handler, logger=logger)
            response = firmware_operations.load_firmware(path=path, vrf_management_name=vrf_management_name)
            logger.info('Load firmware command ended with response: {}'.format(response))
コード例 #2
0
    def load_firmware(self, context, path):
        """Upload and updates firmware on the resource.

        :param ResourceCommandContext context: The context object for the
         command with resource and reservation info
        :param str path: path to tftp server where firmware file is stored
        """
        logger = get_logger_with_thread_id(context)
        logger.info("Load firmware command started")

        with ErrorHandlingContext(logger):
            resource_config = create_load_balancing_resource_from_context(
                shell_name=self.SHELL_NAME,
                supported_os=self.SUPPORTED_OS,
                context=context,
            )
            cs_api = get_api(context)
            cli_handler = F5CliHandler(
                cli=self._cli,
                resource_config=resource_config,
                api=cs_api,
                logger=logger,
            )

            logger.info("Start Loading Firmware...")
            firmware_operations = F5FirmwareRunner(
                cli_handler=cli_handler, logger=logger
            )

            response = firmware_operations.load_firmware(path=path)
            logger.info(
                "Load firmware command completed with response: {}".format(response)
            )

            return response
コード例 #3
0
    def health_check(self, context):
        """Performs device health check

        :param ResourceCommandContext context: ResourceCommandContext object with all Resource Attributes inside
        :return: Success or Error message
        :rtype: str
        """
        logger = get_logger_with_thread_id(context)
        logger.info('Health Check command started')

        with ErrorHandlingContext(logger):
            api = get_api(context)

            resource_config = create_load_balancing_resource_from_context(shell_name=self.SHELL_NAME,
                                                                          supported_os=self.SUPPORTED_OS,
                                                                          context=context)

            cli_handler = CgsCliHandler(cli=self._cli,
                                        resource_config=resource_config,
                                        logger=logger,
                                        api=api)

            state_operations = CgsStateRunner(logger=logger,
                                              api=api,
                                              resource_config=resource_config,
                                              cli_handler=cli_handler)

            result = state_operations.health_check()
            logger.info('Health Check command ended with result: {}'.format(result))

            return result
コード例 #4
0
    def run_custom_config_command(self, context, cancellation_context, custom_command):
        """Executes a custom command on the device in configuration mode

        :param ResourceCommandContext context: The context object for the command with resource and reservation info
        :param CancellationContext cancellation_context: Object to signal a request for cancellation. Must be enabled in drivermetadata.xml as well
        :param str custom_command: The command to run. Note that commands that require a response are not supported.
        :return: the command result text
        :rtype: str
        """
        logger = get_logger_with_thread_id(context)
        logger.info('Run Custom Config command started')

        with ErrorHandlingContext(logger):
            api = get_api(context)
            resource_config = create_load_balancing_resource_from_context(shell_name=self.SHELL_NAME,
                                                                          supported_os=self.SUPPORTED_OS,
                                                                          context=context)

            cli_handler = CgsCliHandler(cli=self._cli,
                                        resource_config=resource_config,
                                        logger=logger,
                                        api=api)

            send_command_operations = RunCommandRunner(logger=logger,
                                                       cli_handler=cli_handler)

            response = send_command_operations.run_custom_config_command(
                custom_command=parse_custom_commands(custom_command))

            logger.info('Run Custom Config command ended with response: {}'.format(response))

            return response
コード例 #5
0
    def get_inventory(self, context):
        """Return device structure with all standard attributes

        :param ResourceCommandContext context: ResourceCommandContext object with all Resource Attributes inside
        :return: response
        :rtype: str
        """
        logger = get_logger_with_thread_id(context)
        logger.info('Autoload command started')

        with ErrorHandlingContext(logger):
            api = get_api(context)
            resource_config = create_load_balancing_resource_from_context(shell_name=self.SHELL_NAME,
                                                                          supported_os=self.SUPPORTED_OS,
                                                                          context=context)

            cli_handler = CgsCliHandler(cli=self._cli,
                                        resource_config=resource_config,
                                        logger=logger,
                                        api=api)

            snmp_handler = CgsSnmpHandler(resource_config, logger, api, cli_handler)

            autoload_operations = CgsLoadBalancerAutoloadRunner(logger=logger,
                                                                resource_config=resource_config,
                                                                snmp_handler=snmp_handler)

            response = autoload_operations.discover()
            logger.info('Autoload command completed')

            return response
コード例 #6
0
    def shutdown(self, context):
        """Sends a graceful shutdown to the device.

        :param ResourceCommandContext context: The context object
         for the command with resource and reservation info
        """
        logger = get_logger_with_thread_id(context)
        logger.info("Shutdown command started")

        with ErrorHandlingContext(logger):
            resource_config = create_load_balancing_resource_from_context(
                shell_name=self.SHELL_NAME,
                supported_os=self.SUPPORTED_OS,
                context=context,
            )
            cs_api = get_api(context)
            cli_handler = F5CliHandler(
                cli=self._cli,
                resource_config=resource_config,
                api=cs_api,
                logger=logger,
            )

            state_operations = StateRunner(
                logger=logger,
                api=cs_api,
                resource_config=resource_config,
                cli_handler=cli_handler,
            )

            response = state_operations.shutdown()
            logger.info("Shutdown command completed with response: {}".format(response))

            return response
コード例 #7
0
    def initialize(self, context):
        """Initialize the driver session.

        :param InitCommandContext context: the context the command runs on
        :rtype: str
        """
        resource_config = create_load_balancing_resource_from_context(
            shell_name=self.SHELL_NAME, supported_os=self.SUPPORTED_OS, context=context
        )

        session_pool_size = int(resource_config.sessions_concurrency_limit)
        self._cli = get_cli(session_pool_size)
        return "Finished initializing"
コード例 #8
0
    def initialize(self, context):
        """Initialize the driver session, this function is called everytime a new instance of the driver is created

        This is a good place to load and cache the driver configuration, initiate sessions etc.
        :param InitCommandContext context: the context the command runs on
        """
        resource_config = create_load_balancing_resource_from_context(shell_name=self.SHELL_NAME,
                                                                      supported_os=self.SUPPORTED_OS,
                                                                      context=context)

        session_pool_size = int(resource_config.sessions_concurrency_limit)
        self._cli = get_cli(session_pool_size)

        return 'Finished initializing'
コード例 #9
0
    def orchestration_save(self, context, mode, custom_params):
        """Saves the Shell state and returns a description of the saved artifacts.

        This command is intended for API use only by sandbox orchestration
        scripts to implement a save and restore workflow
        :param ResourceCommandContext context: the context object containing
         resource and reservation info
        :param str mode: Snapshot save mode, can be one of two values
         'shallow' (default) or 'deep'
        :param str custom_params: Set of custom parameters for the save operation
        :return: SavedResults serialized as JSON
        :rtype: OrchestrationSaveResult
        """
        logger = get_logger_with_thread_id(context)
        logger.info("Orchestration save command started")

        with ErrorHandlingContext(logger):
            resource_config = create_load_balancing_resource_from_context(
                shell_name=self.SHELL_NAME,
                supported_os=self.SUPPORTED_OS,
                context=context,
            )
            cs_api = get_api(context)
            mode = mode or "shallow"
            cli_handler = F5CliHandler(
                cli=self._cli,
                resource_config=resource_config,
                api=cs_api,
                logger=logger,
            )

            configuration_operations = F5ConfigurationRunner(
                cli_handler=cli_handler,
                logger=logger,
                resource_config=resource_config,
                api=cs_api,
            )

            response = configuration_operations.orchestration_save(
                mode=mode, custom_params=custom_params
            )
            logger.info(
                "Orchestration save command completed with response: {}".format(
                    response
                )
            )

            return response
コード例 #10
0
    def restore(self, context, path, configuration_type, restore_method):
        """Restores a configuration file.

        :param ResourceCommandContext context: The context object for the
         command with resource and reservation info
        :param str path: The path to the configuration file, including
         the configuration file name
        :param str restore_method: Determines whether the restore
         should append or override the current configuration
        :param str configuration_type: Specify whether the file should update
         the startup or running config
        """
        logger = get_logger_with_thread_id(context)
        logger.info("Restore command started")

        with ErrorHandlingContext(logger):
            resource_config = create_load_balancing_resource_from_context(
                shell_name=self.SHELL_NAME,
                supported_os=self.SUPPORTED_OS,
                context=context,
            )
            cs_api = get_api(context)
            configuration_type = configuration_type or "running"
            restore_method = restore_method or "override"

            cli_handler = F5CliHandler(
                cli=self._cli,
                resource_config=resource_config,
                api=cs_api,
                logger=logger,
            )

            configuration_operations = F5ConfigurationRunner(
                cli_handler=cli_handler,
                logger=logger,
                resource_config=resource_config,
                api=cs_api,
            )
            logger.info("Restoring started...")
            configuration_operations.restore(
                path=path,
                restore_method=restore_method,
                configuration_type=configuration_type,
            )

            logger.info("Restore command completed")
コード例 #11
0
    def save(self, context, folder_path, configuration_type):
        """Save a configuration file to the provided destination.

        :param ResourceCommandContext context: The context object for the
         command with resource and reservation info
        :param str folder_path: The path to the folder in which the configuration
         file will be saved
        :param str configuration_type: startup or running config
        :return The configuration file name
        :rtype: str
        """
        logger = get_logger_with_thread_id(context)
        logger.info("Save command started")

        with ErrorHandlingContext(logger):
            resource_config = create_load_balancing_resource_from_context(
                shell_name=self.SHELL_NAME,
                supported_os=self.SUPPORTED_OS,
                context=context,
            )
            cs_api = get_api(context)
            configuration_type = configuration_type or "running"

            cli_handler = F5CliHandler(
                cli=self._cli,
                resource_config=resource_config,
                api=cs_api,
                logger=logger,
            )

            configuration_operations = F5ConfigurationRunner(
                cli_handler=cli_handler,
                logger=logger,
                resource_config=resource_config,
                api=cs_api,
            )
            logger.info("Saving started... ")
            response = configuration_operations.save(
                folder_path=folder_path, configuration_type=configuration_type
            )
            logger.info("Save command completed")

            return response
コード例 #12
0
    def get_inventory(self, context):
        """Discovers the resource structure and attributes.

        :param AutoLoadCommandContext context: the context the command runs on
        :return Attribute and sub-resource information for the Shell resource
        :rtype: AutoLoadDetails
        """
        logger = get_logger_with_thread_id(context)
        logger.info("Autoload command started")

        with ErrorHandlingContext(logger):
            resource_config = create_load_balancing_resource_from_context(
                shell_name=self.SHELL_NAME,
                supported_os=self.SUPPORTED_OS,
                context=context,
            )
            cs_api = get_api(context)
            cli_handler = F5CliHandler(
                cli=self._cli,
                resource_config=resource_config,
                api=cs_api,
                logger=logger,
            )

            snmp_handler = F5SnmpHandler(
                cli_handler=cli_handler,
                resource_config=resource_config,
                api=cs_api,
                logger=logger,
            )

            autoload_operations = F5LoadBalancerAutoloadRunner(
                logger=logger,
                resource_config=resource_config,
                snmp_handler=snmp_handler,
            )

            autoload_details = autoload_operations.discover()
            logger.info("Autoload command completed")

            return autoload_details
コード例 #13
0
    def restore(self, context, cancellation_context, path, configuration_type, restore_method, vrf_management_name):
        """Restores a configuration file

        :param ResourceCommandContext context: The context object for the command with resource and reservation info
        :param CancellationContext cancellation_context: Object to signal a request for cancellation. Must be enabled in drivermetadata.xml as well
        :param str path: The path to the configuration file, including the configuration file name.
        :param str restore_method: Determines whether the restore should append or override the current configuration.
        :param str configuration_type: Specify whether the file should update the startup or running config.
        :param str vrf_management_name: Optional. Virtual routing and Forwarding management name
        """
        logger = get_logger_with_thread_id(context)
        logger.info('Restore command started')

        with ErrorHandlingContext(logger):
            api = get_api(context)
            resource_config = create_load_balancing_resource_from_context(shell_name=self.SHELL_NAME,
                                                                          supported_os=self.SUPPORTED_OS,
                                                                          context=context)

            configuration_type = configuration_type or "running"
            restore_method = restore_method or "override"
            vrf_management_name = vrf_management_name or resource_config.vrf_management_name

            cli_handler = CgsCliHandler(cli=self._cli,
                                        resource_config=resource_config,
                                        logger=logger,
                                        api=api)

            configuration_operations = CgsConfigurationRunner(cli_handler=cli_handler,
                                                              logger=logger,
                                                              resource_config=resource_config,
                                                              api=api)

            configuration_operations.restore(path=path,
                                             restore_method=restore_method,
                                             configuration_type=configuration_type,
                                             vrf_management_name=vrf_management_name)

            logger.info("Restore command ended")
コード例 #14
0
    def run_custom_config_command(self, context, custom_command):
        """Executes a custom command on the device in configuration mode.

        :param ResourceCommandContext context: The context object for the
         command with resource and reservation info
        :param str custom_command: The command to run
        :return: the command result text
        :rtype: str
        """
        logger = get_logger_with_thread_id(context)
        logger.info("Run custom config command started")

        with ErrorHandlingContext(logger):
            resource_config = create_load_balancing_resource_from_context(
                shell_name=self.SHELL_NAME,
                supported_os=self.SUPPORTED_OS,
                context=context,
            )
            cs_api = get_api(context)
            cli_handler = F5CliHandler(
                cli=self._cli,
                resource_config=resource_config,
                api=cs_api,
                logger=logger,
            )

            send_command_operations = RunCommandRunner(
                logger=logger, cli_handler=cli_handler
            )

            response = send_command_operations.run_custom_config_command(
                custom_command=parse_custom_commands(custom_command)
            )

            logger.info(
                "Run custom config command ended with response: {}".format(response)
            )

            return response
コード例 #15
0
    def orchestration_restore(self, context, saved_artifact_info, custom_params):
        """Restores a saved artifact previously saved by this Shell.

        :param ResourceCommandContext context: The context object for the
         command with resource and reservation info
        :param str saved_artifact_info: A JSON string representing the state to
         restore including saved artifacts and info
        :param str custom_params: Set of custom parameters for the restore operation
        """
        logger = get_logger_with_thread_id(context)
        logger.info("Orchestration restore command started")

        with ErrorHandlingContext(logger):
            resource_config = create_load_balancing_resource_from_context(
                shell_name=self.SHELL_NAME,
                supported_os=self.SUPPORTED_OS,
                context=context,
            )
            cs_api = get_api(context)
            cli_handler = F5CliHandler(
                cli=self._cli,
                resource_config=resource_config,
                api=cs_api,
                logger=logger,
            )

            configuration_operations = F5ConfigurationRunner(
                cli_handler=cli_handler,
                logger=logger,
                resource_config=resource_config,
                api=cs_api,
            )

            configuration_operations.orchestration_restore(
                saved_artifact_info=saved_artifact_info, custom_params=custom_params
            )

            logger.info("Orchestration restore command completed")
コード例 #16
0
    def health_check(self, context):
        """Checks if the device is up and connectable.

        :param ResourceCommandContext context: ResourceCommandContext object
         with all Resource Attributes inside
        :return: Success or fail message
        :rtype: str
        """
        logger = get_logger_with_thread_id(context)
        logger.info("Health check command started")

        with ErrorHandlingContext(logger):
            resource_config = create_load_balancing_resource_from_context(
                shell_name=self.SHELL_NAME,
                supported_os=self.SUPPORTED_OS,
                context=context,
            )
            cs_api = get_api(context)

            cli_handler = F5CliHandler(
                cli=self._cli,
                resource_config=resource_config,
                api=cs_api,
                logger=logger,
            )

            state_operations = StateRunner(
                logger=logger,
                api=cs_api,
                resource_config=resource_config,
                cli_handler=cli_handler,
            )

            response = state_operations.health_check()
            logger.info("Health check command ended with response: {}".format(response))

            return response
コード例 #17
0
    def save(self, context, cancellation_context, folder_path, configuration_type, vrf_management_name):
        """Creates a configuration file and saves it to the provided destination

        :param ResourceCommandContext context: The context object for the command with resource and reservation info
        :param CancellationContext cancellation_context: Object to signal a request for cancellation. Must be enabled in drivermetadata.xml as well
        :param str configuration_type: Specify whether the file should update the startup or running config. Value can one
        :param str folder_path: The path to the folder in which the configuration file will be saved.
        :param str vrf_management_name: Optional. Virtual routing and Forwarding management name
        :return The configuration file name.
        :rtype: str
        """
        logger = get_logger_with_thread_id(context)
        logger.info('Save command started')

        with ErrorHandlingContext(logger):
            api = get_api(context)
            resource_config = create_load_balancing_resource_from_context(shell_name=self.SHELL_NAME,
                                                                          supported_os=self.SUPPORTED_OS,
                                                                          context=context)
            configuration_type = configuration_type or "running"
            vrf_management_name = vrf_management_name or resource_config.vrf_management_name

            cli_handler = CgsCliHandler(cli=self._cli,
                                        resource_config=resource_config,
                                        logger=logger,
                                        api=api)

            configuration_operations = CgsConfigurationRunner(cli_handler=cli_handler,
                                                              logger=logger,
                                                              resource_config=resource_config,
                                                              api=api)

            response = configuration_operations.save(folder_path=folder_path, configuration_type=configuration_type,
                                                     vrf_management_name=vrf_management_name)

            logger.info('Save command ended with response: {}'.format(response))
            return response