@Override protected void processNodeOperation(Csar csar, Topology topology, UnsetNodeArtifactAsInputOperation operation, NodeTemplate nodeTemplate) { if (safe(nodeTemplate.getArtifacts()).containsKey(operation.getArtifactName())) { InputArtifactUtil.unsetInputArtifact(nodeTemplate.getArtifacts().get(operation.getArtifactName())); } } }
private Stream<DeploymentArtifact> getDeploymentArtifactStream(PaaSTopologyDeploymentContext deploymentContext) { return Stream.concat( safe(deploymentContext.getDeploymentTopology().getNodeTemplates()).values().stream() .flatMap(nodeTemplate -> safe(nodeTemplate.getArtifacts()).values().stream()), safe(deploymentContext.getDeploymentTopology().getNodeTemplates()).values().stream() .flatMap(nodeTemplate -> safe(nodeTemplate.getRelationships()).values().stream()) .flatMap(relationship -> safe(relationship.getArtifacts()).values().stream())); }
public static void doWithTopologyArtifacts(Topology topology, DoWithArtifact doWithArtifact) { safe(topology.getInputArtifacts()).values().forEach(doWithArtifact::doWithArtifact); safe(topology.getNodeTemplates()).values().forEach(nodeTemplate -> { safe(nodeTemplate.getArtifacts()).values().forEach(doWithArtifact::doWithArtifact); safe(nodeTemplate.getRelationships()).values() .forEach(relationshipTemplate -> safe(relationshipTemplate.getArtifacts()).values().forEach(doWithArtifact::doWithArtifact)); }); }
@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); } }
Set<String> repositoriesName = Sets.newHashSet(); for (NodeTemplate node : safe(topology.getNodeTemplates()).values()) { for (DeploymentArtifact artifact : safe(node.getArtifacts()).values()) {
if (replacedTopologyNode.getArtifacts() != null) { replacedTopologyNode.getArtifacts().forEach((key, deploymentArtifact) -> { Map<String, DeploymentArtifact> targetArtifacts = replacingNode.getArtifacts(); if (targetArtifacts == null) { targetArtifacts = Maps.newHashMap(); replacingNode.setArtifacts(targetArtifacts); if (replacingNode.getArtifacts().containsKey(key)) { replacingNode.getArtifacts().put(key, deploymentArtifact);
@Override public void process(Csar csar, Topology topology, DeleteInputArtifactOperation operation) { if (!safe(topology.getInputArtifacts()).containsKey(operation.getInputName())) { throw new NotFoundException("Input artifact <" + operation.getInputName() + "> can not be found in the topology."); } DeploymentArtifact inputArtifact = topology.getInputArtifacts().remove(operation.getInputName()); // change the value of concerned node template artifacts for (NodeTemplate nodeTemplate : safe(topology.getNodeTemplates()).values()) { for (DeploymentArtifact dArtifact : safe(nodeTemplate.getArtifacts()).values()) { if (operation.getInputName().equals(InputArtifactUtil.getInputArtifactId(dArtifact))) { InputArtifactUtil.unsetInputArtifact(dArtifact); } } } } }
public static boolean hasRepositories(String topologyArchiveName, String topologyArchiveVersion, Topology topology) { // we don't support node types in Editor context, just check the node templates for (NodeTemplate node : safe(topology.getNodeTemplates()).values()) { for (DeploymentArtifact artifact : safe(node.getArtifacts()).values()) { // Only consider artifact of the topology if (isInternalRepoArtifact(artifact, topologyArchiveName, topologyArchiveVersion)) { return true; } } for (Interface anInterface : safe(node.getInterfaces()).values()) { for (Operation operation : safe(anInterface.getOperations()).values()) { if (operation.getImplementationArtifact() != null && isInternalRepoArtifact(operation.getImplementationArtifact(), topologyArchiveName, topologyArchiveVersion)) { return true; } } } } return MapUtils.isNotEmpty(topology.getInputArtifacts()) && topology.getInputArtifacts().values().stream() .anyMatch(deploymentArtifact -> StringUtils.isNotBlank(deploymentArtifact.getRepositoryName())); }
if (MapUtils.isNotEmpty(nodeTemplate.getArtifacts())) { processInputArtifactForTemplate(artifactMap, nodeTemplate);
public ServiceNodeTemplate(NodeTemplate nodeTemplate, Map<String, String> attributeValues) { super(nodeTemplate.getType(), nodeTemplate.getProperties(), nodeTemplate.getAttributes(), nodeTemplate.getRelationships(), nodeTemplate.getRequirements(), nodeTemplate.getCapabilities(), nodeTemplate.getInterfaces(), nodeTemplate.getArtifacts()); this.attributeValues = attributeValues; }
safe(instance.getArtifacts()).values().forEach(templateDeploymentArtifactPostProcessor); instance.setProperties(tempObject.getProperties()); instance.setRequirements(tempObject.getRequirements()); instance.setArtifacts(tempObject.getArtifacts()); instance.setInterfaces(tempObject.getInterfaces());
@Override protected void processNodeOperation(Csar csar, Topology topology, SetNodeArtifactAsInputOperation operation, NodeTemplate nodeTemplate) { if (safe(nodeTemplate.getArtifacts()).get(operation.getArtifactName()) == null) { throw new NotFoundException("The artifact <" + operation.getArtifactName() + "> cannot be found on node <" + operation.getNodeName() + ">"); } DeploymentArtifact artifact = nodeTemplate.getArtifacts().get(operation.getArtifactName()); if (!safe(topology.getInputArtifacts()).containsKey(operation.getInputName())) { // we have to create the artifact operation.setNewArtifact(true); DeploymentArtifact inputArtifact = new DeploymentArtifact(); inputArtifact.setArchiveName(artifact.getArchiveName()); inputArtifact.setArchiveVersion(artifact.getArchiveVersion()); inputArtifact.setArtifactType(artifact.getArtifactType()); Map<String, DeploymentArtifact> inputArtifacts = topology.getInputArtifacts(); if (inputArtifacts == null) { inputArtifacts = Maps.newHashMap(); topology.setInputArtifacts(inputArtifacts); } inputArtifacts.put(operation.getInputName(), inputArtifact); } InputArtifactUtil.setInputArtifact(artifact, operation.getInputName()); } }
@Override public void process(Csar csar, Topology topology, RenameInputArtifactOperation operation) { if (operation.getNewInputName() == null || operation.getNewInputName().isEmpty() || !operation.getNewInputName().matches("\\w+")) { throw new InvalidNameException("newInputName", operation.getNewInputName(), "\\w+"); } if (safe(topology.getInputArtifacts()).containsKey(operation.getNewInputName())) { throw new AlreadyExistException("Input artifact with name <" + operation.getNewInputName() + "> already exists."); } if (!safe(topology.getInputArtifacts()).containsKey(operation.getInputName())) { throw new NotFoundException("Input artifact with name <" + operation.getInputName() + "> does not exists."); } DeploymentArtifact inputArtifact = topology.getInputArtifacts().remove(operation.getInputName()); topology.getInputArtifacts().put(operation.getNewInputName(), inputArtifact); // change the value of concerned node template artifacts for (NodeTemplate nodeTemplate : safe(topology.getNodeTemplates()).values()) { for (DeploymentArtifact dArtifact : safe(nodeTemplate.getArtifacts()).values()) { InputArtifactUtil.updateInputArtifactIdIfNeeded(dArtifact, operation.getInputName(), operation.getNewInputName()); } } } }
@Override public void process(Csar csar, Topology topology, DeleteFileOperation operation) { // Topology topology = EditionContextManager.get().getTopology(); if (csar.getYamlFilePath().equals(operation.getPath())) { throw new InvalidPathException("Topology yaml file cannot be removed."); } TreeNode target = FileProcessorHelper.getFileTreeNode(operation.getPath()); target.getParent().getChildren().remove(target); for (NodeTemplate nodeTemplate : safe(topology.getNodeTemplates()).values()) { for (DeploymentArtifact artifact : safe(nodeTemplate.getArtifacts()).values()) { resetRemovedArtifact(artifact, operation.getPath()); } cleanupInterfaces(nodeTemplate.getInterfaces(), operation.getPath()); for (RelationshipTemplate relationshipTemplate : safe(nodeTemplate.getRelationships()).values()) { cleanupInterfaces(relationshipTemplate.getInterfaces(), operation.getPath()); } } }
@Then("^The topology should contain a nodetemplate named \"([^\"]*)\" with an artifact \"([^\"]*)\" with the specified UID and name \"([^\"]*)\"$") public void The_topology_should_contain_a_nodetemplate_named_with_an_artifact_with_the_specified_UID(String nodeTemplateName, String artifactId, String artifactName) throws Throwable { The_topology_should_contain_a_nodetemplate_named(nodeTemplateName); String topologyResponseText = Context.getInstance().getRestResponse(); NodeTemplate nodeTemp = JsonUtil.read(topologyResponseText, TopologyDTO.class, Context.getJsonMapper()).getData().getTopology().getNodeTemplates() .get(nodeTemplateName); Assert.assertNotNull(nodeTemp.getArtifacts()); Assert.assertFalse(nodeTemp.getArtifacts().isEmpty()); DeploymentArtifact deploymentArtifact = nodeTemp.getArtifacts().get(artifactId); Assert.assertNotNull(deploymentArtifact); Assert.assertNotNull(deploymentArtifact.getArtifactType()); Assert.assertEquals(artifactName, deploymentArtifact.getArtifactName()); }
@Override protected void processNodeOperation(Csar csar, Topology topology, DeleteNodeOperation operation, NodeTemplate template) { Map<String, NodeTemplate> nodeTemplates = TopologyUtils.getNodeTemplates(topology); // Prepare to cleanup files (store artifacts reference in the operation and process deletion on before commit operation). Map<String, DeploymentArtifact> artifacts = template.getArtifacts(); operation.setArtifacts(artifacts); List<String> typesTobeUnloaded = Lists.newArrayList(); // Clean up dependencies of the topology removeRelationShipReferences(operation.getNodeName(), csar, topology, typesTobeUnloaded); topologyService.unloadType(topology, typesTobeUnloaded.toArray(new String[typesTobeUnloaded.size()])); // Cleanup from policies removeNodeFromPolicies(operation.getNodeName(), topology); nodeTemplates.remove(operation.getNodeName()); removeOutputs(operation.getNodeName(), topology); if (topology.getSubstitutionMapping() != null) { removeNodeTemplateSubstitutionTargetMapEntry(operation.getNodeName(), topology.getSubstitutionMapping().getCapabilities()); removeNodeTemplateSubstitutionTargetMapEntry(operation.getNodeName(), topology.getSubstitutionMapping().getRequirements()); } // group members removal TopologyUtils.updateGroupMembers(topology, template, operation.getNodeName(), null); // update the workflows workflowBuilderService.removeNode(topology, csar, operation.getNodeName()); log.debug("Removed node template [ {} ] from the topology [ {} ] .", operation.getNodeName(), topology.getId()); }
@Override public void process(Csar csar, Topology topology, ResetNodeDeploymentArtifactOperation operation) { // Get the node template's artifacts to reset Map<String, NodeTemplate> nodeTemplates = TopologyUtils.getNodeTemplates(topology); NodeTemplate nodeTemplate = TopologyUtils.getNodeTemplate(topology.getId(), operation.getNodeName(), nodeTemplates); DeploymentArtifact currentArtifact = nodeTemplate.getArtifacts() == null ? null : nodeTemplate.getArtifacts().get(operation.getArtifactName()); if (currentArtifact == null) { throw new NotFoundException( "Artifact with key [" + operation.getArtifactName() + "] do not exist in node template [" + nodeTemplate.getName() + "]."); } // Get the node type's artifact Map<String, NodeType> nodeTypes = topologyServiceCore.getIndexedNodeTypesFromTopology(topology, false, false, true); NodeType nodeType = nodeTypes.get(nodeTemplate.getType()); DeploymentArtifact artifactFromNodeType = nodeType.getArtifacts() == null ? null : nodeType.getArtifacts().get(operation.getArtifactName()); if (artifactFromNodeType == null) { throw new NotFoundException("Artifact with key [" + operation.getArtifactName() + "] do not exist in node type [" + nodeType.getId() + "]."); } currentArtifact.setArtifactRef(artifactFromNodeType.getArtifactRef()); currentArtifact.setArtifactName(artifactFromNodeType.getArtifactName()); currentArtifact.setArtifactType(artifactFromNodeType.getArtifactType()); currentArtifact.setArtifactRepository(artifactFromNodeType.getArtifactRepository()); currentArtifact.setRepositoryName(artifactFromNodeType.getRepositoryName()); currentArtifact.setRepositoryURL(artifactFromNodeType.getRepositoryURL()); currentArtifact.setRepositoryCredential(artifactFromNodeType.getRepositoryCredential()); } }
@Override protected void processServiceResourceReplacement(Topology topology, Map<String, NodeTemplate> topologyTemplateMap, String nodeId, String serviceResourceId) { ServiceResource serviceResource = getServiceResourceService().getOrFail(serviceResourceId); NodeTemplate serviceNodeTemplate = serviceResource.getNodeInstance().getNodeTemplate(); ServiceNodeTemplate substitutionNodeTemplate = new ServiceNodeTemplate(serviceNodeTemplate.getType(), serviceNodeTemplate.getProperties(), serviceNodeTemplate.getAttributes(), serviceNodeTemplate.getRelationships(), serviceNodeTemplate.getRequirements(), serviceNodeTemplate.getCapabilities(), serviceNodeTemplate.getInterfaces(), serviceNodeTemplate.getArtifacts()); substitutionNodeTemplate.setServiceResourceId(serviceResource.getId()); substitutionNodeTemplate.setAttributeValues(serviceResource.getNodeInstance().getAttributeValues()); NodeTemplate abstractTopologyNode = topologyTemplateMap.put(nodeId, substitutionNodeTemplate); substitutionNodeTemplate.setName(abstractTopologyNode.getName()); substitutionNodeTemplate.setRelationships(abstractTopologyNode.getRelationships()); // add all the necessary dependencies to the topology Csar csar = getToscaTypeSearchService().getArchive(serviceResource.getDependency().getName(), serviceResource.getDependency().getVersion()); Set<CSARDependency> dependencies = Sets.newHashSet(); if (csar.getDependencies() != null) { dependencies.addAll(csar.getDependencies()); } dependencies.add(new CSARDependency(csar.getName(), csar.getVersion())); topology.getDependencies().addAll(dependencies); } }
@Override public void process(Csar csar, Topology topology, UpdateNodeDeploymentArtifactOperation operation) { // Get the node template's artifacts to update Map<String, NodeTemplate> nodeTemplates = TopologyUtils.getNodeTemplates(topology); NodeTemplate nodeTemplate = TopologyUtils.getNodeTemplate(topology.getId(), operation.getNodeName(), nodeTemplates); DeploymentArtifact artifact = nodeTemplate.getArtifacts() == null ? null : nodeTemplate.getArtifacts().get(operation.getArtifactName()); if (artifact == null) { throw new NotFoundException("Artifact with key [" + operation.getArtifactName() + "] do not exist"); } if (operation.getArtifactRepository() == null) { // this is an archive file, ensure that the file exists within the archive FileProcessorHelper.getFileTreeNode(operation.getArtifactReference()); artifact.setArtifactRepository(ArtifactRepositoryConstants.ALIEN_TOPOLOGY_REPOSITORY); artifact.setRepositoryName(null); artifact.setRepositoryURL(null); } else { artifact.setArtifactRepository(operation.getArtifactRepository()); artifact.setRepositoryName(operation.getRepositoryName()); artifact.setRepositoryURL(operation.getRepositoryUrl()); } artifact.setArtifactRef(operation.getArtifactReference()); artifact.setArchiveName(operation.getArchiveName()); artifact.setArchiveVersion(operation.getArchiveVersion()); } }
validateRemoteWar(repositoryArtifact); artifact = archiveRoot.getTopology().getNodeTemplates().get("my_node").getArtifacts().get("simple_war"); Assert.assertEquals("binary/myWar.war", artifact.getArtifactRef()); Assert.assertEquals("tosca.artifacts.Deployment.War", artifact.getArtifactType()); repositoryArtifact = archiveRoot.getTopology().getNodeTemplates().get("my_node").getArtifacts().get("remote_war"); Assert.assertEquals("alien4cloud:alien4cloud-ui:1.3.0-SM3", repositoryArtifact.getArtifactRef()); Assert.assertEquals("tosca.artifacts.Deployment.War", repositoryArtifact.getArtifactType());