X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=heat%2FvFW_CNF_CDS%2Ftemplates%2Fcba%2FScripts%2Fkotlin%2FKotlinK8sProfileUpload.kt;h=d47b476a56a7d6814ef9d234491af99235a8bf7d;hb=0806ad4aec588a090f4588bf64f68d1804d51113;hp=30a7b72eae60ed33702e286e734219be49c9fcec;hpb=be3024dfe9b6c06419c6f4a5f724a01b7e0ab103;p=demo.git diff --git a/heat/vFW_CNF_CDS/templates/cba/Scripts/kotlin/KotlinK8sProfileUpload.kt b/heat/vFW_CNF_CDS/templates/cba/Scripts/kotlin/KotlinK8sProfileUpload.kt index 30a7b72e..d47b476a 100644 --- a/heat/vFW_CNF_CDS/templates/cba/Scripts/kotlin/KotlinK8sProfileUpload.kt +++ b/heat/vFW_CNF_CDS/templates/cba/Scripts/kotlin/KotlinK8sProfileUpload.kt @@ -26,6 +26,8 @@ import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.BlueprintWebClientSer import org.onap.ccsdk.cds.blueprintsprocessor.rest.service.RestLoggerService import org.onap.ccsdk.cds.blueprintsprocessor.services.execution.AbstractScriptComponentFunction import org.onap.ccsdk.cds.controllerblueprints.core.utils.JacksonUtils +import org.onap.ccsdk.cds.controllerblueprints.core.utils.BluePrintArchiveUtils +import org.onap.ccsdk.cds.controllerblueprints.core.utils.ArchiveType import org.apache.commons.io.IOUtils import org.apache.commons.io.FilenameUtils import org.apache.http.client.entity.EntityBuilder @@ -40,6 +42,7 @@ import org.springframework.web.client.RestTemplate import com.fasterxml.jackson.annotation.JsonIgnore import com.fasterxml.jackson.annotation.JsonProperty import java.util.ArrayList +import java.util.LinkedHashMap import java.io.IOException import java.io.File import java.nio.file.Files @@ -50,11 +53,7 @@ import org.springframework.http.MediaType import java.nio.charset.Charset import java.util.Base64 import org.onap.ccsdk.cds.controllerblueprints.core.BluePrintProcessorException - -import java.io.BufferedInputStream -import java.io.FileInputStream -import java.io.FileOutputStream -import java.util.zip.GZIPInputStream +import org.yaml.snakeyaml.Yaml open class K8sProfileUpload : AbstractScriptComponentFunction() { @@ -105,7 +104,7 @@ open class K8sProfileUpload : AbstractScriptComponentFunction() { if (api.hasProfile(k8sRbProfileName)) { log.info("Profile Already Existing - skipping upload") } else { - val profileFilePath = prepareProfileFile(k8sRbProfileName) + val profileFilePath: Path = prepareProfileFile(k8sRbProfileName, prefix.equals("vpkg")) var profile = K8sProfile() profile.profileName = k8sRbProfileName @@ -121,7 +120,7 @@ open class K8sProfileUpload : AbstractScriptComponentFunction() { } } - fun prepareProfileFile(k8sRbProfileName: String): Path { + fun prepareProfileFile(k8sRbProfileName: String, profileModificationAllowed: Boolean): Path { val bluePrintContext = bluePrintRuntimeService.bluePrintContext() val bluePrintBasePath: String = bluePrintContext.rootPath var profileFilePath: Path = Paths.get(bluePrintBasePath.plus(File.separator).plus("Templates").plus(File.separator).plus("k8s-profiles").plus(File.separator).plus("${k8sRbProfileName}.tar.gz")) @@ -132,6 +131,58 @@ open class K8sProfileUpload : AbstractScriptComponentFunction() { if (!profileFile.exists()) throw BluePrintProcessorException("K8s Profile template file ${profileFilePath} does not exists") + val tempMainPath: File = createTempDir("k8s-profile-", "") + val tempProfilePath: File = createTempDir("${k8sRbProfileName}-", "", tempMainPath) + log.info("Decompressing profile to ${tempProfilePath.toString()}") + + val decompressedProfile: File = BluePrintArchiveUtils.deCompress(profileFilePath.toFile(), + "${tempProfilePath.toString()}", ArchiveType.TarGz) + + log.info("${profileFilePath.toString()} decompression completed") + + if (profileModificationAllowed) { + //Here we can add extra files inside the archive + val profileModificationDecisionData = getDynamicProperties("profile-modification-decision-data") + log.info("Profile modification decision data: ${profileModificationDecisionData}") + if (profileModificationDecisionData != null && profileModificationDecisionData.asText().toInt() > 0) { + log.info("Modification of profile content") + + val profileArtifacts = getDynamicProperties("profile-artifacts") + val sshServiceFileContent = profileArtifacts.get("ssh-service").asText() + val sshServiceFileName = "ssh-service.yaml" + val serviceFilePath = tempProfilePath.toString().plus(File.separator).plus(sshServiceFileName) + File(serviceFilePath).bufferedWriter().use { out -> out.write(sshServiceFileContent) } + val manifestFileName = tempProfilePath.toString().plus(File.separator).plus("manifest.yaml") + var finalManifest = "" + File(manifestFileName).bufferedReader().use { inr -> + val manifestYaml = Yaml() + val manifestObject: Map = manifestYaml.load(inr) + val typeObject: MutableMap = manifestObject.get("type") as MutableMap + if (!typeObject.containsKey("configresource")) + typeObject.put("configresource", ArrayList>()) + val configFiles: MutableList> = typeObject.get("configresource") as MutableList> + val sshConfigFile = LinkedHashMap() + sshConfigFile.put("filepath", sshServiceFileName) + sshConfigFile.put("chartpath", "vpkg/templates/${sshServiceFileName}") + configFiles.add(sshConfigFile) + finalManifest = manifestYaml.dump(manifestObject) + } + File(manifestFileName).bufferedWriter().use { out -> out.write(finalManifest) } + log.info("Modified K8s profile manifest file") + log.info(finalManifest) + log.info("Modification of profile completed") + } + } + + profileFilePath = Paths.get(tempMainPath.toString().plus(File.separator).plus("${k8sRbProfileName}.tar.gz")) + + if (!BluePrintArchiveUtils.compress(decompressedProfile, profileFilePath.toFile(), + ArchiveType.TarGz)) { + throw BluePrintProcessorException("Profile compression has failed") + } + + log.info("${profileFilePath.toString()} compression completed") + return profileFilePath }