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 add_required_nodes_to_template(self, required_nodes):
     for req_node in required_nodes:
         node_template = tosca_helper.node_type_2_node_template(
             req_node, self.all_custom_def)
         self.tosca_template.nodetemplates.append(node_template)
     return self.tosca_template