Beispiel #1
0
    def add_required_nodes(self, node):
        """Adds the required nodes in self.required_nodes for an input node."""
        if isinstance(node, NodeTemplate):
            logger.info('Resolving requirements for: ' + node.name)
        elif isinstance(node, dict):
            logger.info('Resolving requirements for: ' + str(next(iter(node))))
        # Get all requirements for node.
        all_requirements = self.get_all_requirements(node)
        if not all_requirements:
            logger.debug('Node: ' + tosca_helper.get_node_type_name(node) +
                         ' has no requirements')
            return
        matching_node = self.find_best_node_for_requirements(all_requirements)

        # Only add node that is not in node_templates
        matching_node_type_name = next(iter(matching_node))
        matching_node_template = tosca_helper.node_type_2_node_template(
            matching_node, self.all_custom_def)
        # Add the requirements to the node we analyzed. e.g. docker needed host now we added the type and name of host
        node = add_requirements(node, all_requirements,
                                matching_node_template.name)
        if not tosca_helper.contains_node_type(self.required_nodes, matching_node_type_name) and \
                not tosca_helper.contains_node_type(self.tosca_template.nodetemplates, matching_node_type_name):
            logger.info('  Adding: ' + str(matching_node_template.name))
            self.required_nodes.append(matching_node)
        # Find matching nodes for the new node's requirements
        self.add_required_nodes(matching_node)
    def add_required_nodes(self, node):
        """Adds the required nodes in self.required_nodes for an input node."""
        if isinstance(node, NodeTemplate):
            logger.info('Resolving requirements for: ' + node.name)
        elif isinstance(node, dict):
            logger.info('Resolving requirements for: ' + str(next(iter(node))))
        # Get all requirements for node.
        all_requirements = self.get_all_requirements(node)
        if not all_requirements:
            logger.debug('Node: ' + tosca_helper.get_node_type_name(node) +
                         ' has no requirements')
            return

        matching_nodes_dict = self.find_best_node_for_requirements(
            all_requirements)
        for capability in matching_nodes_dict:
            # Only add node that is not in node_templates
            matching_node = matching_nodes_dict[capability]
            matching_node_type_name = next(iter(matching_node))
            matching_node_template = tosca_helper.node_type_2_node_template(
                matching_node, self.all_custom_def)
            if tosca_helper.contains_node_type(
                    self.tosca_template.nodetemplates,
                    matching_node_type_name):
                logger.debug('Node: ' + tosca_helper.get_node_type_name(node) +
                             ' requirement node: ' + matching_node_type_name +
                             ' is already covered')
                continue

            for req in all_requirements:
                req_name = next(iter(req))
                requirement_capability = req[req_name]['capability']
                if capability == requirement_capability:
                    # Add the requirements to the node we analyzed. e.g. docker needed host now we added the type and name of host
                    node = add_requirement(node, req,
                                           matching_node_template.name)
                    break
            if not tosca_helper.contains_node_type(self.required_nodes, matching_node_type_name) and \
                not tosca_helper.contains_node_type(self.tosca_template.nodetemplates, matching_node_type_name):
                logger.info('  Adding: ' + str(matching_node_template.name))
                self.required_nodes.append(matching_node)
            # Find matching nodes for the new node's requirements
            self.add_required_nodes(matching_node)
Beispiel #3
0
    def get_all_requirements(self, node):
        """Returns  all requirements for an input node including all parents requirements"""

        node_type_name = tosca_helper.get_node_type_name(node)
        logger.info('      Looking for requirements for node: ' +
                    node_type_name)
        # Get the requirements for this node from its definition e.g. docker: hostedOn k8s
        def_type = self.all_node_types[node_type_name]
        all_requirements = []
        if 'requirements' in def_type.keys():
            all_requirements = def_type['requirements']
            logger.info('      Found requirements: ' + str(all_requirements) +
                        ' for node: ' + node_type_name)

        # Get the requirements for this node from the template. e.g. wordpress: connectsTo mysql
        # node_requirements =  tosca_helper.get_node_requirements(node)
        # if node_requirements:
        #     all_requirements += node_requirements

        # Put them all together
        parent_requirements = tosca_helper.get_ancestors_requirements(
            node, self.all_node_types, self.all_custom_def)
        parent_type = tosca_helper.get_node_type_name(node)
        if parent_type and parent_requirements:
            logger.info('       Adding to : ' + str(node_type_name) +
                        '  parent requirements from: ' + str(parent_type))
            if not all_requirements:
                all_requirements += parent_requirements
            else:
                for all_requirement in all_requirements:
                    for parent_requirement in parent_requirements:
                        all_requirement_key = next(iter(all_requirement))
                        parent_requirement_key = next(iter(parent_requirement))
                        if all_requirement_key != parent_requirement_key and all_requirement[
                                all_requirement_key][
                                    'capability'] != parent_requirement[
                                        parent_requirement_key]['capability']:
                            all_requirements.append(parent_requirement)

            logger.debug('      all_requirements: ' + str(all_requirements))
        return all_requirements