def validate_endpoint_connection(self, ctxt, platform_name, connection_info): provider = providers_factory.get_provider( platform_name, constants.PROVIDER_TYPE_ENDPOINT, None) secret_connection_info = utils.get_secret_connection_info( ctxt, connection_info) is_valid = True message = None try: schemas.validate_value(secret_connection_info, provider.get_connection_info_schema()) provider.validate_connection(ctxt, secret_connection_info) except exception.SchemaValidationException as ex: LOG.debug("Connection info schema validation failed: %s", ex) is_valid = False message = ( "Schema validation for the provided connection parameters has " "failed. Please ensure that you have included all the " "necessary connection parameters and they are all properly " "formatted for the '%s' Coriolis plugin in use." % (platform_name)) except exception.ConnectionValidationException as ex: LOG.warn(utils.get_exception_details()) is_valid = False message = str(ex) except Exception as ex: LOG.warn(utils.get_exception_details()) is_valid = False message = ("An unexpected connection validation exception " "ocurred: %s" % str(ex)) return (is_valid, message)
def get_endpoint_destination_minion_pool_options(self, ctxt, platform_name, connection_info, env, option_names): provider = providers_factory.get_provider( platform_name, constants.PROVIDER_TYPE_DESTINATION_MINION_POOL, None, raise_if_not_found=False) if not provider: raise exception.InvalidInput( "Provider plugin for platform '%s' does not support " "destination minion pool creation or management." % (platform_name)) secret_connection_info = utils.get_secret_connection_info( ctxt, connection_info) options = provider.get_minion_pool_options(ctxt, secret_connection_info, env=env, option_names=option_names) # NOTE: the structure of option values is the same for minion pools: schemas.validate_value( options, schemas.CORIOLIS_DESTINATION_ENVIRONMENT_OPTIONS_SCHEMA) return options
def get_endpoint_storage(self, ctxt, platform_name, connection_info, env): provider = providers_factory.get_provider( platform_name, constants.PROVIDER_TYPE_ENDPOINT_STORAGE, None) secret_connection_info = utils.get_secret_connection_info( ctxt, connection_info) storage = provider.get_storage(ctxt, secret_connection_info, env) schemas.validate_value(storage, schemas.CORIOLIS_VM_STORAGE_SCHEMA) return storage
def get_endpoint_networks(self, ctxt, platform_name, connection_info, env): env = env or {} provider = providers_factory.get_provider( platform_name, constants.PROVIDER_TYPE_ENDPOINT_NETWORKS, None) secret_connection_info = utils.get_secret_connection_info( ctxt, connection_info) networks_info = provider.get_networks(ctxt, secret_connection_info, env) for network_info in networks_info: schemas.validate_value(network_info, schemas.CORIOLIS_VM_NETWORK_SCHEMA) return networks_info
def get_endpoint_instance(self, ctxt, platform_name, connection_info, instance_name): provider = providers_factory.get_provider( platform_name, constants.PROVIDER_TYPE_ENDPOINT_INSTANCES, None) secret_connection_info = utils.get_secret_connection_info( ctxt, connection_info) instance_info = provider.get_instance(ctxt, secret_connection_info, instance_name) schemas.validate_value(instance_info, schemas.CORIOLIS_VM_EXPORT_INFO_SCHEMA) return instance_info
def get_endpoint_destination_options(self, ctxt, platform_name, connection_info, env, option_names): provider = providers_factory.get_provider( platform_name, constants.PROVIDER_TYPE_ENDPOINT_OPTIONS, None) secret_connection_info = utils.get_secret_connection_info( ctxt, connection_info) options = provider.get_target_environment_options( ctxt, secret_connection_info, env=env, option_names=option_names) schemas.validate_value(options, schemas.CORIOLIS_DESTINATION_ENVIRONMENT) return options
def validate_endpoint_connection(self, ctxt, platform_name, connection_info): provider = providers_factory.get_provider( platform_name, constants.PROVIDER_TYPE_ENDPOINT, None) secret_connection_info = utils.get_secret_connection_info( ctxt, connection_info) is_valid = True message = None try: provider.validate_connection(ctxt, secret_connection_info) except exception.ConnectionValidationException as ex: is_valid = False message = str(ex) return (is_valid, message)
def get_endpoint_instances(self, ctxt, platform_name, connection_info, source_environment, marker, limit, instance_name_pattern): export_provider = providers_factory.get_provider( platform_name, constants.PROVIDER_TYPE_ENDPOINT_INSTANCES, None) secret_connection_info = utils.get_secret_connection_info( ctxt, connection_info) instances_info = export_provider.get_instances( ctxt, secret_connection_info, source_environment, last_seen_id=marker, limit=limit, instance_name_pattern=instance_name_pattern) for instance_info in instances_info: schemas.validate_value( instance_info, schemas.CORIOLIS_VM_INSTANCE_INFO_SCHEMA) return instances_info
def get_endpoint_source_options( self, ctxt, platform_name, connection_info, env, option_names): provider = providers_factory.get_provider( platform_name, constants.PROVIDER_TYPE_SOURCE_ENDPOINT_OPTIONS, None, raise_if_not_found=False) if not provider: raise exception.InvalidInput( "Provider plugin for platform '%s' does not support listing " "source environment options." % platform_name) secret_connection_info = utils.get_secret_connection_info( ctxt, connection_info) options = provider.get_source_environment_options( ctxt, secret_connection_info, env=env, option_names=option_names) schemas.validate_value( options, schemas.CORIOLIS_SOURCE_ENVIRONMENT_OPTIONS_SCHEMA) return options
def get_connection_info(ctxt, data): connection_info = data.get("connection_info") or {} return utils.get_secret_connection_info(ctxt, connection_info)