package org.onap.dcaegen2.platform.helmchartgenerator.chartbuilder;
-import org.jetbrains.annotations.NotNull;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.extern.slf4j.Slf4j;
import org.onap.dcaegen2.platform.helmchartgenerator.Utils;
import org.onap.dcaegen2.platform.helmchartgenerator.models.chartinfo.ChartInfo;
import org.onap.dcaegen2.platform.helmchartgenerator.models.chartinfo.Metadata;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
* ComponentSpecParser reads a componentspec file and collects useful data for helm chart generation.
* @author Dhrumin Desai
*/
+@Slf4j
@Component
public class ComponentSpecParser {
@Autowired
private ComponentSpecValidator specValidator;
+ @Autowired
+ private Utils utils;
+
/**
* Constructor for ComponentSpecParser
* @param specValidator ComponentSpecValidator implementation
+ * @param utils
*/
- public ComponentSpecParser(ComponentSpecValidator specValidator) {
+ public ComponentSpecParser(ComponentSpecValidator specValidator, Utils utils) {
this.specValidator = specValidator;
+ this.utils = utils;
}
/**
*/
public ChartInfo extractChartInfo(String specFileLocation, String chartTemplateLocation, String specSchemaLocation) throws Exception {
specValidator.validateSpecFile(specFileLocation, specSchemaLocation);
- ComponentSpec cs = Utils.deserializeJsonFileToModel(specFileLocation, ComponentSpec.class);
+ ComponentSpec cs = utils.deserializeJsonFileToModel(specFileLocation, ComponentSpec.class);
ChartInfo chartInfo = new ChartInfo();
chartInfo.setMetadata(extractMetadata(cs.getSelf()));
chartInfo.setValues(extractValues(cs, chartTemplateLocation));
private Map<String, Object> extractValues(ComponentSpec cs, String chartTemplateLocation) {
Map<String, Object> outerValues = new LinkedHashMap<>();
if(cs.getAuxilary() != null && cs.getAuxilary().getTlsInfo() != null){
- Utils.putIfNotNull(outerValues,"certDirectory", cs.getAuxilary().getTlsInfo().getCertDirectory());
- Utils.putIfNotNull(outerValues, "tlsServer", cs.getAuxilary().getTlsInfo().getUseTls());
+ utils.putIfNotNull(outerValues,"certDirectory", cs.getAuxilary().getTlsInfo().getCertDirectory());
+ utils.putIfNotNull(outerValues, "tlsServer", cs.getAuxilary().getTlsInfo().getUseTls());
}
if(cs.getAuxilary() != null && cs.getAuxilary().getLogInfo() != null) {
- Utils.putIfNotNull(outerValues,"logDirectory", cs.getAuxilary().getLogInfo().get("log_directory"));
+ utils.putIfNotNull(outerValues,"logDirectory", cs.getAuxilary().getLogInfo().get("log_directory"));
}
if(imageUriExistsForFirstArtifact(cs)){
- Utils.putIfNotNull(outerValues,"image", cs.getArtifacts()[0].getUri());
+ utils.putIfNotNull(outerValues,"image", cs.getArtifacts()[0].getUri());
}
populateApplicationConfigSection(outerValues, cs);
populateReadinessSection(outerValues, cs);
Map<String, Object> applicationConfig = new LinkedHashMap<>();
Parameters[] parameters = cs.getParameters();
for(Parameters param : parameters){
- applicationConfig.put(param.getName(), param.getValue());
+ if (Arrays.asList("streams_publishes", "streams_subscribes").contains(param.getName())){
+ applicationConfig.put(param.getName(), parseStringToMap(param.getValue()));
+ }else
+ {
+ applicationConfig.put(param.getName(), param.getValue());
+ }
}
- Utils.putIfNotNull(outerValues,"applicationConfig", applicationConfig);
+ utils.putIfNotNull(outerValues,"applicationConfig", applicationConfig);
+ }
+
+ private Object parseStringToMap(Object value) {
+ if (value instanceof String){
+ try {
+ return new ObjectMapper().readValue((String)value, Map.class);
+ } catch (JsonProcessingException e) {
+ log.error(e.getMessage(), e);
+ log.warn("could not parse streams_publishes / streams_subscribes. Default value will be used.");
+ }
+ }
+ return value;
}
private void populateReadinessSection(Map<String, Object> outerValues, ComponentSpec cs) {
Map<String, Object> readiness = new LinkedHashMap<>();
final HealthCheck healthcheck = cs.getAuxilary().getHealthcheck();
- Utils.putIfNotNull(readiness, "initialDelaySeconds", healthcheck.getInitialDelaySeconds());
+ utils.putIfNotNull(readiness, "initialDelaySeconds", healthcheck.getInitialDelaySeconds());
if(healthcheck.getInterval() != null) {
readiness.put("periodSeconds", getSeconds(healthcheck.getInterval(), "interval"));
private void populateApplicationEnvSection(Map<String, Object> outerValues, ComponentSpec cs){
if(applicationEnvExists(cs)) {
Object applicationEnv = cs.getAuxilary().getHelm().getApplicationEnv();
- Utils.putIfNotNull(outerValues,"applicationEnv", applicationEnv);
+ utils.putIfNotNull(outerValues,"applicationEnv", applicationEnv);
}
}
if(serviceFromSpec.getPorts() != null){
List<Object> ports = mapServicePorts(serviceFromSpec.getPorts());
service.put("ports", ports);
- Utils.putIfNotNull(service, "type", serviceFromSpec.getType());
+ utils.putIfNotNull(service, "type", serviceFromSpec.getType());
}
- Utils.putIfNotNull(service,"name", serviceFromSpec.getName());
- Utils.putIfNotNull(service,"has_internal_only_ports", serviceFromSpec.getHasInternalOnlyPorts());
+ utils.putIfNotNull(service,"name", serviceFromSpec.getName());
+ utils.putIfNotNull(service,"has_internal_only_ports", serviceFromSpec.getHasInternalOnlyPorts());
outerValues.put("service", service);
}
Map<String, Object> keystore = new LinkedHashMap<>();
Map<String, Object> passwordsSecretRef = new LinkedHashMap<>();
TlsInfo tlsInfo = cs.getAuxilary().getTlsInfo();
- String componentName = getComponentNameWithOmitFirstWord(cs);
+ String componentName = getComponentNameWithOmitFirstWordAndTrimHyphens(cs);
+ outerValues.put("useCmpv2Certificates", false);
if(externalTlsExists(tlsInfo)) {
String mountPath = tlsInfo.getCertDirectory();
if(tlsInfo.getUseExternalTls() != null && tlsInfo.getUseExternalTls()) {
keystore.put("outputType", List.of("jks"));
keystore.put("passwordSecretRef", passwordsSecretRef);
certificate.put("mountPath", mountPath);
- Utils.putIfNotNull(certificate,"commonName", cs.getSelf().getName());
- Utils.putIfNotNull(certificate,"dnsNames", List.of(cs.getSelf().getName()));
+ utils.putIfNotNull(certificate,"commonName", cs.getSelf().getName());
+ utils.putIfNotNull(certificate,"dnsNames", List.of(cs.getSelf().getName()));
certificate.put("keystore", keystore);
outerValues.put("certificates", List.of(certificate));
+ outerValues.put("useCmpv2Certificates", true);
}
}
- private String getComponentNameWithOmitFirstWord(ComponentSpec cs) {
- return cs.getSelf().getName().substring(cs.getSelf().getName().indexOf("-") + 1);
+ private String getComponentNameWithOmitFirstWordAndTrimHyphens(ComponentSpec cs) {
+ return cs.getSelf().getName().substring(cs.getSelf().getName().indexOf("-") + 1).replaceAll("-","");
}
private boolean externalTlsExists(TlsInfo tlsInfo) {
- return tlsInfo != null && tlsInfo.getUseExternalTls() != null && tlsInfo.getUseExternalTls().equals(true);
+ return tlsInfo != null && tlsInfo.getUseExternalTls() != null && tlsInfo.getUseExternalTls();
}
private void checkCertificateYamlExists(String chartTemplateLocation) {
private void populatePostgresSection(Map<String, Object> outerValues, ComponentSpec cs) {
if(cs.getAuxilary().getDatabases() != null) {
String componentFullName = cs.getSelf().getName();
- String component = getComponentNameWithOmitFirstWord(cs);
+ String component = getComponentNameWithOmitFirstWordAndTrimHyphens(cs);
Map<String, Object> postgres = new LinkedHashMap<>();
Map<String, Object> service = new LinkedHashMap<>();
Map<String, Object> container = new LinkedHashMap<>();
private void populateSecretsSection(Map<String, Object> outerValues, ComponentSpec cs) {
if(cs.getAuxilary().getDatabases() != null) {
- String component = getComponentNameWithOmitFirstWord(cs);
+ String component = getComponentNameWithOmitFirstWordAndTrimHyphens(cs);
List<Object> secrets = new ArrayList<>();
Map<String, Object> secret = new LinkedHashMap<>();
secret.put("uid", "pg-user-creds");