CsarInfo csarInfo, String nodeName, Component component) {
return yamlHandler
.parseResourceInfoFromYAML(yamlName, topologyTemplateYaml, csarInfo.getCreatedNodesToscaResourceNames(), nodeTypesInfo, nodeName,
- component);
+ component, getInterfaceTemplateYaml(csarInfo).orElse(""));
+ }
+
+ private Optional<String> getInterfaceTemplateYaml(CsarInfo csarInfo) {
+ String[] yamlFile;
+ String interfaceTemplateYaml = "";
+ if (csarInfo.getMainTemplateName().contains(".yml")) {
+ yamlFile = csarInfo.getMainTemplateName().split(".yml");
+ interfaceTemplateYaml = yamlFile[0] + "-interface.yml";
+ } else if (csarInfo.getMainTemplateName().contains(".yaml")) {
+ yamlFile = csarInfo.getMainTemplateName().split(".yaml");
+ interfaceTemplateYaml = yamlFile[0] + "-interface.yaml";
+ }
+ if (csarInfo.getCsar().containsKey(interfaceTemplateYaml)) {
+ return Optional.of(new String(csarInfo.getCsar().get(interfaceTemplateYaml)));
+ }
+ return Optional.empty();
}
private String logAndThrowComponentException(ResponseFormat responseFormat, String logMessage, String... params) {
import java.util.List;
import java.util.Map;
import java.util.Objects;
+import java.util.Optional;
import java.util.Set;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
-import java.util.stream.Stream;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.openecomp.sdc.be.model.ParsedToscaYamlInfo;
import org.openecomp.sdc.be.model.PolicyDefinition;
import org.openecomp.sdc.be.model.PolicyTypeDefinition;
+import org.openecomp.sdc.be.model.PropertyDefinition;
import org.openecomp.sdc.be.model.Resource;
import org.openecomp.sdc.be.model.UploadArtifactInfo;
import org.openecomp.sdc.be.model.UploadCapInfo;
public ParsedToscaYamlInfo parseResourceInfoFromYAML(String fileName, String resourceYml, Map<String, String> createdNodesToscaResourceNames,
Map<String, NodeTypeInfo> nodeTypesInfo, String nodeName,
- org.openecomp.sdc.be.model.Component component) {
+ org.openecomp.sdc.be.model.Component component, String interfaceTemplateYaml) {
log.debug("#parseResourceInfoFromYAML - Going to parse yaml {} ", fileName);
Map<String, Object> mappedToscaTemplate = getMappedToscaTemplate(fileName, resourceYml, nodeTypesInfo, nodeName);
ParsedToscaYamlInfo parsedToscaYamlInfo = new ParsedToscaYamlInfo();
parsedToscaYamlInfo.setPolicies(getPolicies(fileName, mappedToscaTemplate, component.getModel()));
}
if (getSubstitutionMappings(mappedToscaTemplate) != null) {
+ if (component.isService() && !interfaceTemplateYaml.isEmpty()) {
+ parsedToscaYamlInfo.setProperties(getProperties(loadYamlAsStrictMap(interfaceTemplateYaml)));
+ }
parsedToscaYamlInfo.setSubstitutionMappingNodeType((String) getSubstitutionMappings(mappedToscaTemplate).get(NODE_TYPE.getElementName()));
}
log.debug("#parseResourceInfoFromYAML - The yaml {} has been parsed ", fileName);
return inputs;
}
+ private Map<String, PropertyDefinition> getProperties(Map<String, Object> toscaJson) {
+ return ImportUtils.getProperties(toscaJson).left().on(err -> new HashMap<>());
+ }
+
private Map<String, PolicyDefinition> getPolicies(String fileName, Map<String, Object> toscaJson, String model) {
Map<String, Object> foundPolicies = findFirstToscaMapElement(toscaJson, POLICIES).left().on(err -> logPoliciesNotFound(fileName));
if (MapUtils.isNotEmpty(foundPolicies)) {
log.debug("name is locked {} status = {}", service.getSystemName(), lockResult);
}
try {
+ log.trace("************* Adding properties to service from interface yaml {}", yamlName);
+ Map<String, PropertyDefinition> properties = parsedToscaYamlInfo.getProperties();
+ if (properties != null && !properties.isEmpty()) {
+ final List<PropertyDefinition> propertiesList = new ArrayList<>();
+ properties.forEach((propertyName, propertyDefinition) -> {
+ propertyDefinition.setName(propertyName);
+ propertiesList.add(propertyDefinition);
+ });
+ service.setProperties(propertiesList);
+ }
log.trace("************* createResourceFromYaml before full create resource {}", yamlName);
service = serviceImportParseLogic.createServiceTransaction(service, csarInfo.getModifier(), isNormative);
log.trace("************* Going to add inputs from yaml {}", yamlName);
String resourceYml = new String(csar.get("Definitions/my_vnf.yaml"));
YamlTemplateParsingHandler yamlTemplateParser = new YamlTemplateParsingHandler(mockJanusGraphDao, null, Mockito.mock(AnnotationBusinessLogic.class), null);
- final ParsedToscaYamlInfo parsedToscaYamlInfo = yamlTemplateParser.parseResourceInfoFromYAML("Definitions/my_vnf.yml", resourceYml, Collections.EMPTY_MAP, Collections.EMPTY_MAP, "myVnf", resourceResponse);
+ final ParsedToscaYamlInfo parsedToscaYamlInfo = yamlTemplateParser.parseResourceInfoFromYAML("Definitions/my_vnf.yml", resourceYml, Collections.EMPTY_MAP, Collections.EMPTY_MAP, "myVnf", resourceResponse, "");
when(propertyOperation.getDataTypeByName("tosca.datatypes.testDataType.FromMainTemplate", "testModel")).thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
vduCp.getProperties().add(roleProp);
when(toscaOperationFacade.getLatestByToscaResourceNameAndModel("tosca.nodes.nfv.VduCp", "testModel_myVnf1.0")).thenReturn(Either.left(vduCp));
- when(yamlTemplateParsingHandler.parseResourceInfoFromYAML(any(), any(), any(), any(), any(), any())).thenReturn(parsedToscaYamlInfo);
+ when(yamlTemplateParsingHandler.parseResourceInfoFromYAML(any(), any(), any(), any(), any(), any(), any())).thenReturn(parsedToscaYamlInfo);
UploadComponentInstanceInfo uploadComponentInstanceInfo = new UploadComponentInstanceInfo();
uploadComponentInstanceInfo.setType("myType");
Service oldService = createServiceObject(true);
Resource resource = createOldResource();
String topologyTemplateYaml = getMainTemplateContent("service_import_template.yml");
- ;
String yamlName = "group.yml";
CsarInfo csarInfo = getCsarInfo();
Map<String, EnumMap<ArtifactsBusinessLogic.ArtifactOperationEnum, List<ArtifactDefinition>>> nodeTypesArtifactsToCreate = new HashMap<>();
import org.openecomp.sdc.be.model.PolicyDefinition;
import org.openecomp.sdc.be.model.PolicyTypeDefinition;
import org.openecomp.sdc.be.model.Resource;
+import org.openecomp.sdc.be.model.Service;
import org.openecomp.sdc.be.model.UploadArtifactInfo;
import org.openecomp.sdc.be.model.UploadComponentInstanceInfo;
import org.openecomp.sdc.be.model.User;
import org.springframework.test.util.ReflectionTestUtils;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;
Resource resource = new Resource();
ParsedToscaYamlInfo parsedYaml = handler.parseResourceInfoFromYAML(FILE_NAME, resourceYml, new HashMap<>(),
- csarInfo.extractTypesInfo(), NODE_NAME, resource);
+ csarInfo.extractTypesInfo(), NODE_NAME, resource, getInterfaceTemplateYaml(csarInfo).get());
validateParsedYaml(parsedYaml, NESTED_GROUP_NAME,
Lists.newArrayList("heat_file", "description"));
}
+ @Test
+ public void parseServicePropertiesInfoFromYamlTest() {
+ String main_template_content = new String(csar.get(MAIN_TEMPLATE_NAME));
+ CsarInfo csarInfo = new CsarInfo(user, CSAR_UUID, csar, RESOURCE_NAME,
+ MAIN_TEMPLATE_NAME, main_template_content, true);
+
+ Service service = new Service();
+ ParsedToscaYamlInfo parsedYaml = handler.parseResourceInfoFromYAML(FILE_NAME, resourceYml, new HashMap<>(),
+ csarInfo.extractTypesInfo(), NODE_NAME, service, getInterfaceTemplateYaml(csarInfo).get());
+
+ assertThat(parsedYaml.getProperties()).isNotNull();
+ assertEquals(5, parsedYaml.getProperties().size());
+ assertTrue(parsedYaml.getProperties().containsKey("skip_post_instantiation_configuration"));
+ assertTrue(parsedYaml.getProperties().containsKey("controller_actor"));
+ assertTrue(parsedYaml.getProperties().containsKey("cds_model_version"));
+ assertTrue(parsedYaml.getProperties().containsKey("cds_model_name"));
+ assertTrue(parsedYaml.getProperties().containsKey("default_software_version"));
+ }
+
@Test
public void parseResourceInfoFromYAMLTest() {
Resource resource = new Resource();
ParsedToscaYamlInfo parsedYaml = handler.parseResourceInfoFromYAML(FILE_NAME, resourceYml, new HashMap<>(),
- new HashMap<>(), "", resource);
+ new HashMap<>(), "", resource, null);
validateParsedYamlWithCapability(parsedYaml);
}
public void parseResourceWithPoliciesDefined() {
Resource resource = new Resource();
ParsedToscaYamlInfo parsedYaml = handler.parseResourceInfoFromYAML(FILE_NAME, resourceYml, new HashMap<>(),
- new HashMap<>(), "", resource);
+ new HashMap<>(), "", resource, "");
validateParsedYamlWithPolicies(parsedYaml);
}
}
return policyTypeDefinition;
}
+
+ private Optional<String> getInterfaceTemplateYaml(CsarInfo csarInfo) {
+ String[] yamlFile;
+ String interfaceTemplateYaml = "";
+ if (csarInfo.getMainTemplateName().contains(".yml")) {
+ yamlFile = csarInfo.getMainTemplateName().split(".yml");
+ interfaceTemplateYaml = yamlFile[0] + "-interface.yml";
+ } else if (csarInfo.getMainTemplateName().contains(".yaml")) {
+ yamlFile = csarInfo.getMainTemplateName().split(".yaml");
+ interfaceTemplateYaml = yamlFile[0] + "-interface.yaml";
+ }
+ if (csarInfo.getCsar().containsKey(interfaceTemplateYaml)) {
+ return Optional.of(new String(csarInfo.getCsar().get(interfaceTemplateYaml)));
+ }
+ return Optional.empty();
+ }
}
Map<String, UploadComponentInstanceInfo> instances;
Map<String, GroupDefinition> groups;
Map<String, PolicyDefinition> policies;
+ Map<String, PropertyDefinition> properties;
String substitutionMappingNodeType;
}