def __init__(self, operation_inputs): """ Sets the properties that all operations need. :param operation_inputs: The inputs from the operation. """ full_operation_name = ctx.operation.name self.operation_name = full_operation_name.split('.').pop() # Cloudify client setup self.client_config = self._get_desired_operation_input( 'client', operation_inputs) if self.client_config: self.client = CloudifyClient(**self.client_config) else: self.client = manager.get_rest_client() self.plugins = self._get_desired_operation_input( 'plugins', operation_inputs) self.secrets = self._get_desired_operation_input( 'secrets', operation_inputs) self.config = self._get_desired_operation_input( 'resource_config', operation_inputs) # Blueprint-related properties self.blueprint = self.config.get('blueprint', {}) self.blueprint_id = self.blueprint.get('id') or ctx.instance.id self.blueprint_file_name = self.blueprint.get('main_file_name') self.blueprint_archive = self.blueprint.get('blueprint_archive') # Deployment-related properties runtime_deployment_prop = ctx.instance.runtime_properties.get( 'deployment', {}) runtime_deployment_id = runtime_deployment_prop.get('id') self.deployment = self.config.get('deployment', {}) self.deployment_id = (runtime_deployment_id or self.deployment.get('id') or ctx.instance.id) self.deployment_inputs = self.deployment.get('inputs', {}) self.deployment_capabilities = self.deployment.get('capabilities') self.deployment_logs = self.deployment.get('logs', {}) self.deployment_auto_suffix = self.deployment.get( 'auto_inc_suffix', False) # Execution-related properties self.workflow_id = operation_inputs.get( 'workflow_id', 'create_deployment_environment') self.workflow_state = operation_inputs.get('workflow_state', 'terminated') # Polling-related properties self.interval = operation_inputs.get('interval', POLLING_INTERVAL) self.state = operation_inputs.get('state', 'terminated') self.timeout = operation_inputs.get('timeout', EXECUTIONS_TIMEOUT) # Inter-Deployment Dependency identifier self._inter_deployment_dependency = create_deployment_dependency( dependency_creator_generator(COMPONENT, ctx.instance.id), ctx.deployment.id)
def create_service_composition_dependencies(deployment_plan, deployment, sm): for node in deployment_plan['nodes']: node_type = node.get('type') if node_type in (COMPONENT_TYPE, SHARED_RESOURCE_TYPE): logger.info('{0}.{1}: creating service composition deps'.format( deployment.id, node['id'])) prefix = (COMPONENT if node_type == COMPONENT_TYPE else SHARED_RESOURCE) instances = sm.list(models.NodeInstance, filters={ 'node_id': node['id'], 'deployment_id': deployment.id }, get_all_results=True) for instance in instances: target_deployment_id =\ instance.runtime_properties['deployment']['id'] suffix = instance.id target_deployment = None if target_deployment_id: target_deployment = sm.get(models.Deployment, target_deployment_id, all_tenants=True) dependency_creator = dependency_creator_generator( prefix, suffix) put_deployment_dependency(deployment, target_deployment, dependency_creator, sm)
def test_disconnecting_deployment_removes_deployment_dependency(self, _): disconnect_deployment() self.cfy_mock_client.inter_deployment_dependencies.delete \ .assert_called_with( dependency_creator=dependency_creator_generator( SHARED_RESOURCE, self._ctx.instance.id), source_deployment=self._ctx.deployment.id, target_deployment='test_deployment' )
def _create_service_composition_dependencies(self, deployment_plan, deployment, sm): for node in deployment_plan['nodes']: node_type = node.get('type') if node_type in (COMPONENT_TYPE, SHARED_RESOURCE_TYPE): target_deployment_id = self._get_target_deployment_id(node) prefix = (COMPONENT if node_type == COMPONENT_TYPE else SHARED_RESOURCE) suffix = self._get_instance_id(deployment_plan, node) target_deployment = sm.get(models.Deployment, target_deployment_id) dependency_creator = dependency_creator_generator( prefix, suffix) self._put_deployment_dependency(deployment, target_deployment, dependency_creator, sm)
def __init__(self, operation_inputs): full_operation_name = ctx.operation.name self.operation_name = full_operation_name.split('.').pop() # Cloudify client setup self.client_config = self._get_desired_operation_input( 'client', operation_inputs) if self.client_config: self.client = CloudifyClient(**self.client_config) # for determining an external client: manager_ips = [ mgr.private_ip for mgr in manager.get_rest_client().manager.get_managers() ] internal_hosts = ({'127.0.0.1', 'localhost'} | set(manager_ips)) host = {self.client.host} if type(self.client.host) == str \ else set(self.client.host) self.is_external_host = not (host & internal_hosts) else: self.client = manager.get_rest_client() self.is_external_host = False self.config = self._get_desired_operation_input( 'resource_config', operation_inputs) self.deployment = self.config.get('deployment', '') self.deployment_id = self.deployment.get('id', '') self._inter_deployment_dependency = create_deployment_dependency( dependency_creator_generator(SHARED_RESOURCE, ctx.instance.id), ctx.deployment.id, self.deployment_id) if self.is_external_host: self._local_dependency_params = \ self._inter_deployment_dependency.copy() self._local_dependency_params['target_deployment'] = ' ' self._local_dependency_params['external_target'] = { 'deployment': self.deployment_id, 'client_config': self.client_config } self._inter_deployment_dependency['external_source'] = { 'deployment': ctx.deployment.id, 'tenant': ctx.tenant_name, 'host': manager_ips }
def __init__(self, operation_inputs): full_operation_name = ctx.operation.name self.operation_name = full_operation_name.split('.').pop() # Cloudify client setup self.client_config = self._get_desired_operation_input( 'client', operation_inputs) if self.client_config: self.client = CloudifyClient(**self.client_config) else: self.client = manager.get_rest_client() self.config = self._get_desired_operation_input( 'resource_config', operation_inputs) self.deployment = self.config.get('deployment', '') self.deployment_id = self.deployment.get('id', '') self._inter_deployment_dependency = create_deployment_dependency( dependency_creator_generator(SHARED_RESOURCE, ctx.instance.id), ctx.deployment.id, self.deployment_id )