@Override protected void processNodeOperation(Csar csar, Topology topology, RebuildNodeOperation operation, NodeTemplate nodeTemplate) { log.debug("Rebuilding the node template [ {} ] of topology [ {} ] .", operation.getNodeName(), topology.getId()); NodeType type = ToscaContext.getOrFail(NodeType.class, nodeTemplate.getType()); // Artifacts are copied from the type to the template // In case of an update of version, we must remove old artifacts copied from old types // FIXME This is very tricky, we must think about stopping copying artifact from types to templates nodeTemplate.getArtifacts().entrySet().removeIf(artifactEntry -> Objects.equals(type.getArchiveName(), artifactEntry.getValue().getArchiveName())); // We need to do this on the whole hierarchy for (String typeName : type.getDerivedFrom()) { NodeType subType = ToscaContext.getOrFail(NodeType.class, typeName); nodeTemplate.getArtifacts().entrySet().removeIf(artifactEntry -> Objects.equals(subType.getArchiveName(), artifactEntry.getValue().getArchiveName())); } NodeTemplate rebuiltNodeTemplate = TemplateBuilder.buildNodeTemplate(type, nodeTemplate); rebuiltNodeTemplate.setName(operation.getNodeName()); topology.getNodeTemplates().put(operation.getNodeName(), rebuiltNodeTemplate); } }
/** * Rename formattedOldNodeName node template of a topology. * * @param topology * @param nodeTemplateName * @param newNodeTemplateName */ public static void renameNodeTemplate(Topology topology, String nodeTemplateName, String newNodeTemplateName) { Map<String, NodeTemplate> nodeTemplates = getNodeTemplates(topology); NodeTemplate nodeTemplate = getNodeTemplate(topology.getId(), nodeTemplateName, nodeTemplates); nodeTemplate.setName(newNodeTemplateName); nodeTemplates.put(newNodeTemplateName, nodeTemplate); nodeTemplates.remove(nodeTemplateName); refreshNodeTempNameInRelationships(nodeTemplateName, newNodeTemplateName, nodeTemplates); updateOnNodeTemplateNameChange(nodeTemplateName, newNodeTemplateName, topology); updateGroupMembers(topology, nodeTemplate, nodeTemplateName, newNodeTemplateName); updatePolicyMembers(topology, nodeTemplateName, newNodeTemplateName); }
private void duplicateNodeTemplate(NodeTemplate nodeTemplateToDuplicate, Map<String, String> duplicatedNodesNameMappings, Map<String, NodeTemplate> nodeTemplates, Topology topology, Csar csar) { // Build the new one NodeTemplate newNodeTemplate = CloneUtil.clone(nodeTemplateToDuplicate); newNodeTemplate.setName(copyName(nodeTemplateToDuplicate.getName(), nodeTemplates.keySet())); // load type NodeType type = ToscaContext.getOrFail(NodeType.class, nodeTemplateToDuplicate.getType()); topologyService.loadType(topology, type); log.debug("Duplicating node template [ {} ] into [ {} ] on the topology [ {} ] .", nodeTemplateToDuplicate.getName(), newNodeTemplate.getName(), topology.getId()); // Put the new one in the topology nodeTemplates.put(newNodeTemplate.getName(), newNodeTemplate); // register the name mapping for further use duplicatedNodesNameMappings.put(nodeTemplateToDuplicate.getName(), newNodeTemplate.getName()); // copy outputs copyOutputs(topology, nodeTemplateToDuplicate.getName(), newNodeTemplate.getName()); TopologyContext topologyContext = workflowBuilderService.buildTopologyContext(topology, csar); // add the new node to the workflow workflowBuilderService.addNode(topologyContext, newNodeTemplate.getName()); // copy hosted nodes safe(TopologyNavigationUtil.getHostedNodes(topology, nodeTemplateToDuplicate.getName())) .forEach(nodeTemplate -> duplicateNodeTemplate(nodeTemplate, duplicatedNodesNameMappings, nodeTemplates, topology, csar)); }
nodeTemplateEntry.getValue().setName(nodeTemplateEntry.getKey()); nodeTemplatePostProcessor.process(nodeTemplateEntry.getValue());
danglingTemplate.setName(danglingTemplateName);
nodeTemplate.setName(operation.getNodeName()); if (operation.getCoords() != null) {