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))
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
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
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
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
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
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"
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'
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
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")
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
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
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")
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
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")
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
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