Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
    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'
            )
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
    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
            }
Ejemplo n.º 6
0
    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
        )