From 509ba7b8570f02caefb8212a2254302ba33e5add Mon Sep 17 00:00:00 2001 From: "aravind.est" Date: Wed, 7 Feb 2024 16:45:22 +0000 Subject: [PATCH] Add helm artifacts in the CSAR package Helm artifacts added in CSAR package. Validation added for the HELM artifacts when creating rApp with package. Create rApp API added with specific error messages. Issue-ID: NONRTRIC-975 Change-Id: I9ed99e460d440015f43057354faa8352695b31fa Signed-off-by: aravind.est --- .../src/test/resources/valid-rapp-package.csar | Bin 13056 -> 23620 bytes .../dme/service/DmeAcmInterceptorTest.java | 5 +- .../models/csar/RappCsarConfigurationHandler.java | 83 ++++- .../rappmanager/models/RappServiceEnablerTest.java | 3 +- .../csar/RappCsarConfigurationHandlerTest.java | 115 +++++- .../invalid-rapp-package-missing-artifact.csar | Bin 0 -> 19840 bytes .../invalid-rapp-package-no-acm-composition.csar | Bin 0 -> 22001 bytes .../invalid-rapp-package-no-asd-yaml.csar | Bin 0 -> 23081 bytes .../resources/invalid-rapp-package-no-tosca.csar | Bin 0 -> 23283 bytes .../src/test/resources/valid-rapp-package.csar | Bin 21008 -> 23620 bytes .../Deployment/HELM/orufhrecovery-1.0.0.tgz | Bin 0 -> 3672 bytes .../Deployment/HELM/ransliceassurance-1.0.0.tgz | Bin 0 -> 3280 bytes .../rapp-all/Definitions/asd.yaml | 96 +---- .../rapp-all/Definitions/asd_types.yaml | 393 +-------------------- sample-rapp-generator/rapp-all/asd.mf | 2 + 15 files changed, 203 insertions(+), 494 deletions(-) create mode 100755 rapp-manager-models/src/test/resources/invalid-rapp-package-missing-artifact.csar create mode 100755 rapp-manager-models/src/test/resources/invalid-rapp-package-no-acm-composition.csar create mode 100755 rapp-manager-models/src/test/resources/invalid-rapp-package-no-asd-yaml.csar create mode 100755 rapp-manager-models/src/test/resources/invalid-rapp-package-no-tosca.csar create mode 100755 sample-rapp-generator/rapp-all/Artifacts/Deployment/HELM/orufhrecovery-1.0.0.tgz create mode 100755 sample-rapp-generator/rapp-all/Artifacts/Deployment/HELM/ransliceassurance-1.0.0.tgz diff --git a/rapp-manager-application/src/test/resources/valid-rapp-package.csar b/rapp-manager-application/src/test/resources/valid-rapp-package.csar index 2bbc2ef65524fba63c1092309c989412f7599721..ffe2f4bdef191af5ab8b7babf74ce3c52e7f5242 100755 GIT binary patch literal 23620 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 diff --git a/rapp-manager-dme/src/test/java/com/oransc/rappmanager/dme/service/DmeAcmInterceptorTest.java b/rapp-manager-dme/src/test/java/com/oransc/rappmanager/dme/service/DmeAcmInterceptorTest.java index b5c9c64..fb51f29 100755 --- a/rapp-manager-dme/src/test/java/com/oransc/rappmanager/dme/service/DmeAcmInterceptorTest.java +++ b/rapp-manager-dme/src/test/java/com/oransc/rappmanager/dme/service/DmeAcmInterceptorTest.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START====================================================================== - * Copyright (C) 2023 OpenInfra Foundation Europe. All rights reserved. + * Copyright (C) 2023-2024 OpenInfra Foundation Europe. All rights reserved. * =============================================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,7 @@ package com.oransc.rappmanager.dme.service; import static org.junit.jupiter.api.Assertions.assertEquals; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.JsonArray; import com.google.gson.JsonParser; import com.oransc.rappmanager.models.csar.RappCsarConfigurationHandler; @@ -47,7 +48,7 @@ import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -@SpringBootTest(classes = {RappCsarConfigurationHandler.class, DmeAcmInterceptor.class}) +@SpringBootTest(classes = {ObjectMapper.class, RappCsarConfigurationHandler.class, DmeAcmInterceptor.class}) class DmeAcmInterceptorTest { @Autowired diff --git a/rapp-manager-models/src/main/java/com/oransc/rappmanager/models/csar/RappCsarConfigurationHandler.java b/rapp-manager-models/src/main/java/com/oransc/rappmanager/models/csar/RappCsarConfigurationHandler.java index be6fe88..1def6e5 100755 --- a/rapp-manager-models/src/main/java/com/oransc/rappmanager/models/csar/RappCsarConfigurationHandler.java +++ b/rapp-manager-models/src/main/java/com/oransc/rappmanager/models/csar/RappCsarConfigurationHandler.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START====================================================================== * Copyright (C) 2023 Nordix Foundation. All rights reserved. + * Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved. * =============================================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +19,13 @@ package com.oransc.rappmanager.models.csar; +import static com.google.common.base.Splitter.on; +import static com.google.common.collect.Iterables.filter; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.Gson; +import com.oransc.rappmanager.models.exception.RappHandlerException; import com.oransc.rappmanager.models.rapp.Rapp; import com.oransc.rappmanager.models.rapp.RappResources; import com.oransc.rappmanager.models.rappinstance.RappACMInstance; @@ -27,23 +35,32 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.file.Path; +import java.util.List; import java.util.Set; import java.util.UUID; import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; +import lombok.RequiredArgsConstructor; import org.apache.commons.compress.archivers.ArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import org.yaml.snakeyaml.Yaml; @Service +@RequiredArgsConstructor public class RappCsarConfigurationHandler { Logger logger = LoggerFactory.getLogger(RappCsarConfigurationHandler.class); + + private final ObjectMapper objectMapper; + private static final String TOSCA_METADATA_LOCATION = "TOSCA-Metadata/TOSCA.meta"; + private static final String ENTRY_DEFINITIONS_INDEX = "Entry-Definitions"; private static final String ACM_COMPOSITION_JSON_LOCATION = "Files/Acm/definition/compositions.json"; private static final String ACM_DEFINITION_LOCATION = "Files/Acm/definition"; private static final String ACM_INSTANCES_LOCATION = "Files/Acm/instances"; @@ -60,7 +77,8 @@ public class RappCsarConfigurationHandler { String originalFilename = multipartFile.getOriginalFilename(); if (originalFilename != null) { return originalFilename.endsWith(".csar") && isFileExistsInCsar(multipartFile, - ACM_COMPOSITION_JSON_LOCATION); + ACM_COMPOSITION_JSON_LOCATION) && isFileExistsInCsar(multipartFile, TOSCA_METADATA_LOCATION) + && containsValidArtifactDefinition(multipartFile); } return false; } @@ -73,10 +91,10 @@ public class RappCsarConfigurationHandler { return Boolean.TRUE; } } - return Boolean.FALSE; + throw new RappHandlerException(HttpStatus.BAD_REQUEST, "rApp package missing a file " + fileLocation); } catch (IOException e) { logger.error("Unable to find the CSAR file", e); - return Boolean.FALSE; + throw new RappHandlerException(HttpStatus.BAD_REQUEST, "rApp package missing a file " + fileLocation); } } @@ -100,10 +118,30 @@ public class RappCsarConfigurationHandler { getRappPackageLocation(rapp.getPackageLocation(), rapp.getName(), rapp.getPackageName()).toUri()); } + ByteArrayOutputStream getFileFromCsar(MultipartFile multipartFile, String fileLocation) { + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + try (ZipArchiveInputStream zipArchiveInputStream = new ZipArchiveInputStream(multipartFile.getInputStream())) { + byteArrayOutputStream = getFileFromCsar(zipArchiveInputStream, fileLocation); + } catch (IOException e) { + logger.info("Unable to get file {} from the multipart CSAR file", fileLocation, e); + } + return byteArrayOutputStream; + } + ByteArrayOutputStream getFileFromCsar(File csarFile, String fileLocation) { ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); try (FileInputStream fileInputStream = new FileInputStream(csarFile); ZipArchiveInputStream zipArchiveInputStream = new ZipArchiveInputStream(fileInputStream)) { + byteArrayOutputStream = getFileFromCsar(zipArchiveInputStream, fileLocation); + } catch (IOException e) { + logger.info("Unable to get file {} from the CSAR file", fileLocation, e); + } + return byteArrayOutputStream; + } + + ByteArrayOutputStream getFileFromCsar(ZipArchiveInputStream zipArchiveInputStream, String fileLocation) { + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + try { ArchiveEntry entry; while ((entry = zipArchiveInputStream.getNextEntry()) != null) { if (!entry.isDirectory() && entry.getName().equals(fileLocation)) { @@ -115,11 +153,48 @@ public class RappCsarConfigurationHandler { } } } catch (IOException e) { - logger.error("Unable to find the CSAR file", e); + logger.info("Unable to get file {} from the zip archive CSAR file", fileLocation, e); } return byteArrayOutputStream; } + boolean containsValidArtifactDefinition(MultipartFile multipartFile) { + String asdLocation = getAsdDefinitionLocation(multipartFile); + if (asdLocation != null && !asdLocation.isEmpty() && isFileExistsInCsar(multipartFile, asdLocation)) { + try { + String asdContent = getFileFromCsar(multipartFile, asdLocation).toString(); + String asdJsonContent = new Gson().toJsonTree(new Yaml().load(asdContent)).toString(); + JsonNode jsonNode = objectMapper.readTree(asdJsonContent); + List artifactFileList = + jsonNode.at("/topology_template/node_templates/applicationServiceDescriptor/artifacts") + .findValuesAsText("file"); + return artifactFileList.stream() + .allMatch(artifactFile -> isFileExistsInCsar(multipartFile, artifactFile)); + } catch (RappHandlerException e) { + throw e; + } catch (Exception e) { + logger.warn("Unable to validate artifact definition", e); + throw new RappHandlerException(HttpStatus.BAD_REQUEST, "ASD definition in rApp package is invalid."); + } + } + throw new RappHandlerException(HttpStatus.BAD_REQUEST, "ASD definition in rApp package is invalid."); + } + + String getAsdDefinitionLocation(final MultipartFile multipartFile) { + String asdLocation = ""; + final ByteArrayOutputStream fileContent = getFileFromCsar(multipartFile, TOSCA_METADATA_LOCATION); + if (fileContent != null) { + final String toscaMetadata = fileContent.toString(); + if (!toscaMetadata.isEmpty()) { + final String entry = + filter(on("\n").split(toscaMetadata), line -> line.contains(ENTRY_DEFINITIONS_INDEX)).iterator() + .next(); + asdLocation = entry.replace(ENTRY_DEFINITIONS_INDEX + ":", "").trim(); + } + } + return asdLocation; + } + public String getSmeProviderDomainPayload(Rapp rapp, RappSMEInstance rappSMEInstance) { return getPayload(rapp, getResourceUri(SME_PROVIDER_FUNCS_LOCATION, rappSMEInstance.getProviderFunction())); diff --git a/rapp-manager-models/src/test/java/com/oransc/rappmanager/models/RappServiceEnablerTest.java b/rapp-manager-models/src/test/java/com/oransc/rappmanager/models/RappServiceEnablerTest.java index 4c51287..69ddc9b 100755 --- a/rapp-manager-models/src/test/java/com/oransc/rappmanager/models/RappServiceEnablerTest.java +++ b/rapp-manager-models/src/test/java/com/oransc/rappmanager/models/RappServiceEnablerTest.java @@ -21,6 +21,7 @@ package com.oransc.rappmanager.models; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; +import com.fasterxml.jackson.databind.ObjectMapper; import com.oransc.rappmanager.models.csar.RappCsarConfigurationHandler; import com.oransc.rappmanager.models.rapp.Rapp; import com.oransc.rappmanager.models.rapp.RappResources; @@ -35,7 +36,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ContextConfiguration; @SpringBootTest -@ContextConfiguration(classes = RappCsarConfigurationHandler.class) +@ContextConfiguration(classes = {ObjectMapper.class, RappCsarConfigurationHandler.class}) class RappServiceEnablerTest { @Autowired diff --git a/rapp-manager-models/src/test/java/com/oransc/rappmanager/models/csar/RappCsarConfigurationHandlerTest.java b/rapp-manager-models/src/test/java/com/oransc/rappmanager/models/csar/RappCsarConfigurationHandlerTest.java index 8c416ee..81468ee 100755 --- a/rapp-manager-models/src/test/java/com/oransc/rappmanager/models/csar/RappCsarConfigurationHandlerTest.java +++ b/rapp-manager-models/src/test/java/com/oransc/rappmanager/models/csar/RappCsarConfigurationHandlerTest.java @@ -1,6 +1,7 @@ /*- * ============LICENSE_START====================================================================== * Copyright (C) 2023 Nordix Foundation. All rights reserved. + * Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved. * =============================================================================================== * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,8 +23,15 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doCallRealMethod; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.oransc.rappmanager.models.exception.RappHandlerException; import com.oransc.rappmanager.models.rapp.Rapp; import com.oransc.rappmanager.models.rapp.RappResources; import com.oransc.rappmanager.models.rappinstance.RappACMInstance; @@ -35,21 +43,26 @@ import java.io.FileInputStream; import java.io.IOException; import java.util.Set; import java.util.UUID; +import java.util.stream.Stream; import org.apache.http.entity.ContentType; import org.json.JSONException; import org.json.JSONObject; import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.http.HttpStatus; import org.springframework.mock.web.MockMultipartFile; import org.springframework.test.context.ContextConfiguration; import org.springframework.web.multipart.MultipartFile; @SpringBootTest -@ContextConfiguration(classes = RappCsarConfigurationHandler.class) +@ContextConfiguration(classes = {ObjectMapper.class, RappCsarConfigurationHandler.class}) class RappCsarConfigurationHandlerTest { - @Autowired + @SpyBean RappCsarConfigurationHandler rappCsarConfigurationHandler; String validCsarFileLocation = "src/test/resources/"; @@ -68,17 +81,46 @@ class RappCsarConfigurationHandlerTest { assertEquals(Boolean.TRUE, rappCsarConfigurationHandler.isValidRappPackage(multipartFile)); } - @Test - void testCsarPackageValidationFailure() throws IOException { - String rappCsarPath = validCsarFileLocation + File.separator + invalidRappFile; + @ParameterizedTest + @MethodSource("getInvalidCsarPackage") + void testCsarPackageValidationFailure(MultipartFile multipartFile) { + System.out.println(multipartFile.getOriginalFilename()); + RappHandlerException exception = assertThrows(RappHandlerException.class, + () -> rappCsarConfigurationHandler.isValidRappPackage(multipartFile)); + assertEquals(HttpStatus.BAD_REQUEST, exception.getStatusCode()); + } + + + private static Stream getInvalidCsarPackage() throws IOException { + String validCsarFileLocation = "src/test/resources"; + String rappCsarPath = validCsarFileLocation + File.separator + "invalid-rapp-package.csar"; MultipartFile multipartFile = new MockMultipartFile(rappCsarPath, rappCsarPath, ContentType.MULTIPART_FORM_DATA.getMimeType(), new FileInputStream(rappCsarPath)); - assertEquals(Boolean.FALSE, rappCsarConfigurationHandler.isValidRappPackage(multipartFile)); + String rappCsarPathNoTosca = validCsarFileLocation + File.separator + "invalid-rapp-package-no-tosca.csar"; + MultipartFile multipartFileNoTosca = new MockMultipartFile(rappCsarPathNoTosca, rappCsarPathNoTosca, + ContentType.MULTIPART_FORM_DATA.getMimeType(), new FileInputStream(rappCsarPathNoTosca)); + String rappCsarPathNoAsdYaml = validCsarFileLocation + File.separator + "invalid-rapp-package-no-asd-yaml.csar"; + MultipartFile multipartFileNoAsdYaml = new MockMultipartFile(rappCsarPathNoAsdYaml, rappCsarPathNoAsdYaml, + ContentType.MULTIPART_FORM_DATA.getMimeType(), new FileInputStream(rappCsarPathNoAsdYaml)); + String rappCsarPathMissingArtifact = + validCsarFileLocation + File.separator + "invalid-rapp-package-missing-artifact.csar"; + MultipartFile multipartFileMissingArtifact = + new MockMultipartFile(rappCsarPathMissingArtifact, rappCsarPathMissingArtifact, + ContentType.MULTIPART_FORM_DATA.getMimeType(), + new FileInputStream(rappCsarPathMissingArtifact)); + String rappCsarPathNoComposition = + validCsarFileLocation + File.separator + "invalid-rapp-package-no-acm-composition.csar"; + MultipartFile multipartFileNoComposition = + new MockMultipartFile(rappCsarPathNoComposition, rappCsarPathNoComposition, + ContentType.MULTIPART_FORM_DATA.getMimeType(), new FileInputStream(rappCsarPathNoComposition)); + return Stream.of(Arguments.of(multipartFile), Arguments.of(multipartFileNoTosca), + Arguments.of(multipartFileNoAsdYaml), Arguments.of(multipartFileMissingArtifact), + Arguments.of(multipartFileNoComposition)); } @Test - void testCsarPackageValidationFailureWithoutOrginalName() throws IOException { + void testCsarPackageValidationFailureWithoutOrginalName() { MultipartFile multipartFile = mock(MultipartFile.class); assertEquals(Boolean.FALSE, rappCsarConfigurationHandler.isValidRappPackage(multipartFile)); } @@ -86,7 +128,60 @@ class RappCsarConfigurationHandlerTest { @Test void testInvalidCsarFileExist() { MultipartFile multipartFile = mock(MultipartFile.class); - assertEquals(Boolean.FALSE, rappCsarConfigurationHandler.isFileExistsInCsar(multipartFile, "INVALID_LOCATION")); + RappHandlerException exception = assertThrows(RappHandlerException.class, + () -> rappCsarConfigurationHandler.isFileExistsInCsar(multipartFile, "INVALID_LOCATION")); + assertEquals(HttpStatus.BAD_REQUEST, exception.getStatusCode()); + } + + @Test + void testCsarContainsValidAsdFile() throws IOException { + String rappCsarPath = validCsarFileLocation + File.separator + validRappFile; + MultipartFile multipartFile = + new MockMultipartFile(rappCsarPath, rappCsarPath, ContentType.MULTIPART_FORM_DATA.getMimeType(), + new FileInputStream(rappCsarPath)); + assertTrue(rappCsarConfigurationHandler.containsValidArtifactDefinition(multipartFile)); + } + + @Test + void testCsarContainsValidAsdFileFailure() throws IOException { + String rappCsarPath = validCsarFileLocation + File.separator + invalidRappFile; + MultipartFile multipartFile = + new MockMultipartFile(rappCsarPath, rappCsarPath, ContentType.MULTIPART_FORM_DATA.getMimeType(), + new FileInputStream(rappCsarPath)); + RappHandlerException exception = assertThrows(RappHandlerException.class, + () -> rappCsarConfigurationHandler.containsValidArtifactDefinition(multipartFile)); + assertEquals(HttpStatus.BAD_REQUEST, exception.getStatusCode()); + } + + @Test + void testCsarNoAsdFailure() { + MultipartFile multipartFile = mock(MultipartFile.class); + RappHandlerException exception = assertThrows(RappHandlerException.class, + () -> rappCsarConfigurationHandler.containsValidArtifactDefinition(multipartFile)); + assertEquals(HttpStatus.BAD_REQUEST, exception.getStatusCode()); + } + + @Test + void testCsarAsdContentInvalidFailure() throws IOException { + String rappCsarPath = validCsarFileLocation + File.separator + validRappFile; + MultipartFile multipartFile = + new MockMultipartFile(rappCsarPath, rappCsarPath, ContentType.MULTIPART_FORM_DATA.getMimeType(), + new FileInputStream(rappCsarPath)); + String invalidJson = "{asasdasd"; + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); + byteArrayOutputStream.write(invalidJson.getBytes(), 0, invalidJson.getBytes().length); + doCallRealMethod().doReturn(byteArrayOutputStream).when(rappCsarConfigurationHandler) + .getFileFromCsar(any(MultipartFile.class), any()); + RappHandlerException exception = assertThrows(RappHandlerException.class, + () -> rappCsarConfigurationHandler.containsValidArtifactDefinition(multipartFile)); + assertEquals(HttpStatus.BAD_REQUEST, exception.getStatusCode()); + } + + @Test + void testgetFileFromCsarFailure() throws IOException { + MultipartFile multipartFile = mock(MultipartFile.class); + when(multipartFile.getInputStream()).thenThrow(new IOException()); + assertThat(rappCsarConfigurationHandler.getFileFromCsar(multipartFile, null).size()).isZero(); } @Test @@ -143,7 +238,7 @@ class RappCsarConfigurationHandlerTest { @Test void testListInvalidResources() { UUID rappId = UUID.randomUUID(); - Rapp rapp = Rapp.builder().rappId(rappId).name("").build(); + Rapp rapp = Rapp.builder().rappId(rappId).name("").packageName("").packageLocation("").build(); RappResources rappResources = rappCsarConfigurationHandler.getRappResource(rapp); assertThat(rappResources).isNotNull(); assertNull(rappResources.getAcm()); diff --git a/rapp-manager-models/src/test/resources/invalid-rapp-package-missing-artifact.csar b/rapp-manager-models/src/test/resources/invalid-rapp-package-missing-artifact.csar new file mode 100755 index 0000000000000000000000000000000000000000..d56f4ef9937e6aa7f75c525ba6255d9149f39848 GIT binary patch literal 19840 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
AAS7!H7$ zK73)D=jiL8$e8|{?bI(mCQsSs*GoJ%OC^Yum6$ohtv3gNhwifw^aa`luUt12}IG{aGJh@tE~y(57))C zJRfF6dA98yq{xN-3N!a^I0~i`1Ac8Cg)i+`yrnp))5~dznjPHwyYj6c0*A%T;^-XQ z^AdKBQU{un13Ba*BaDO+cyTsGgGYB#+4hy6ujL58>#jv}HmvA+M&(t#j2smk@K9Fgq@5@ zkOHH~w#+p>$Xx7sZ4i0cqmNizU=gw&MxV7T1k(GX^V(==E_7E4IboHnZ1z(e0d^8Kz)s$3!pZI!IBK7wtfIG`&Q0CQrMYQP&^J zHMXvsPIPKRQ5hcVn6;a)dzj2AX4KYS4Wp7%ShF~4)R1yG?JAPmqhq<2m}34xTq>;5 zx6js&6ANa3&3%j^Pgt+9Ey#I%wnuH85l; zUGwEYTRs;bnkHgRqb$*|Wv5_C6&^9sI0ETAnIMPaQj$3#SgZHr(=`}e5`EOvn|mQS zANiQZTKB{=h9XV&DiG_)=SsaLC2VzjAx5Qbw(Go|QEG!53eFv*Ac&Xep!I4#(&{~9 z$~C(?#CbavvkUtUmR8otktykr4&{0d1HO_dYyE3&>(@9Ef@w`eU5_>Ws^|NJJ|LfL z+onLD4s|MRTa_V{F1&b!EN4Rpjwu~$;rwb9B7hh?T~m0L85(W!Iq+RXNiJ}2ws#j10Q

~C2sJbh?OBaP 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 I^MJnlA5C!gL;wH) literal 0 HcmV?d00001 diff --git a/rapp-manager-models/src/test/resources/invalid-rapp-package-no-acm-composition.csar b/rapp-manager-models/src/test/resources/invalid-rapp-package-no-acm-composition.csar new file mode 100755 index 0000000000000000000000000000000000000000..d986fb4e161bd897239b5c772d7d66980a631a5e GIT binary patch literal 22001 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 I0Ql+u0Jeio2LJ#7 literal 0 HcmV?d00001 diff --git a/rapp-manager-models/src/test/resources/invalid-rapp-package-no-asd-yaml.csar b/rapp-manager-models/src/test/resources/invalid-rapp-package-no-asd-yaml.csar new file mode 100755 index 0000000000000000000000000000000000000000..a2168ff5341ac8a1a1af1404c029884f6a2f082d GIT binary patch literal 23081 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 literal 0 HcmV?d00001 diff --git a/rapp-manager-models/src/test/resources/invalid-rapp-package-no-tosca.csar b/rapp-manager-models/src/test/resources/invalid-rapp-package-no-tosca.csar new file mode 100755 index 0000000000000000000000000000000000000000..7ba7c33467fd0e36c116831482e414902f0742d7 GIT binary patch literal 23283 zcmdUX1yr5MvMv&w;1b;3-QC?CLU4D70KtO01-IZDf(CbYN$}tfL4rdbd*(2aN#@MV zz3;8{niV#z9qQ})s=B(ns`f801^NgD2rz=2`P6^=;XmIn?_UM%9nFmO3>+QkgpF)1 zZQQJktR3mZMWkiuNEfPfhO^6zZyos3QGjSOs@jqKfM z7-;G5zZ^~6t<=o8QCy#>4r`artF1K$&-cjJ+s8AhJ*n?zcw_&b7(-Fq8Z*{{%>PwI zkj6_>oY;QUPyxhtb_j#JfrCJvFL;ZQU(VeYH{HBP4pH4YJ4GCBUQmZOCMK1J)F#Eh zG^(oMR31`T&r5TE5t>%>GCU{eWxNu?Ak~_2)h$b1bCR4q{ZI(kP0xs?j6c7h^&Q&6 zN0zRtXOxO;$Gd8UFPagIz20^Q`)N$crf;IQjm2DQj0adu_OxXi7#JY2;0d+o6B|o* z_3)Xlj+(KBAG0W!3mk5HUT;*)j)o5FBXioT?c-o;E6Gf!VZZFdh4abTE|;lTt&l^W z>V3udBxS0{QK-v3;>FD9#hb9(%LI*~1?jvB7ecozbOlN1@}v$gEPAJw?ggNLmj#1) zgUU0}v8Z4gh;A*0g}jIPU5SvW?oYLL!lG>v-f`qR&UE(WmmQIK!d*Rktu3zp;Q|4% z+}8cA|1<)Ws7{NRwC}q48k&5X%T`5rUjEVbT3L~1FVgz$%SBIh&#~ciiswz_r27P2 zZ#(6;QLrMV?E=9j-;yol_G0w|$q;!ldQmBBU6Zy6n8MIqz3kM{Fk+a0gb8AkwA+Ho zNkn`;fUW!ft(KdKx@lo^x-4^63%3pI+N;e~7`InFALNmV^9Npd^j$4y>Ai>Id^uPD z@>Q^Xa-f%8@7Z0aRw)mUjEv0SpvYF}DwV-t0MB;+8?VMdp>9w};$_eLXL6fNn%sm} zKIr*z0eUj{5T)@TRB|x4<;#Y4)&#ZG$oMCxxRo2t1Gc?w zoB{Aa)NzGI%n{R-QsVoGX0_!Ljl3^WB7~{%4z=I~2TEWE;YNodKPZ!6l$~#gT@y7m zlXj7q6)tc_@>CBL46tXgb*_$+kkoiJ@zls+i5z^w#=J7~bBpRkO>;O5oKCx9TE`k> zad9X1_X?Weg>|8=`ix2@x>45DxFX>yB5{JilI8D=iX zC!A)`xs5=Suy=($jP;Y7(^9@H+HCR7!ky1x^Pj}LwORL;LoKU#rAE(UT**m_ba=Po z*Gjr~7xbkSO`0f-OW<-PP0Y{6&DvG<4J>+LJiLLIb{sHr2{8WRm5%rRa%~D_WNWSR zQcq@EmZtNF-xBMNJzSSD=rNo)Q0P=ijAHRI6I!|p@kBTB8)hr;&E(9*qXZ;5OKsW+ ze=$bqG&Ouj9TjgxOA|@Ogykq#w=Zi4)}UApkEh}@3SM6cL@!ck>7jR%U3X0#yJH+5Izm zNASRhBA*4p={g!k#5pgstjBcelM`<~DAHj^N4?52v|&4fjCbvR4(#o^Sp!k41Tt1; zud|j-REtOFmBf5w)gX3-JbmeIv)+F|WR$Yg%9;eL6{u;e*2N!%T2Fs&=MXEtb}+2) zwscKwpES4SG>pduxk-n8a$g6BstQdS_im#FwKO}Bd~U8;-z|X4hn+t{f#cfpis6wH zk(0ZcL{gJ#cd=GcV{SQ7@M*4=KO0+L;o{|PMLaq=kC37HfHF`vFw(3}2jJ zZ4c7(mbJ}Eeq5FJvZr5V(U* zJlUh)`CKe-D(s`;WE!j@U?ZQkklUUu5<5-sIBnm?Q3l<#3#&2lbtx~ZI<3U6qZgZr zLT#mHjmu;+4vK=d2CC8(vUJnF^Jm*)DHWCIuqv3mJo9TZN?%^`wDAcSH1cwCUK6k! zUk1BYcrILhxHvk7>jl^xNjm(9feaW$JGXN9FSAs&L_tKzsl$9muUO3C-6fyw*w})R zjS%>zKDW|)CYqlf)@r|sc!0N`B0!_Yv^1P4QHUtJ3WkNP`f1`=(c+!1wcnTvPygqm z<@2H)t%O1bvPX)sGN<8^CsZ%JZr5zw1wO_BQO*btnaXCzFbA6_HiFC2&F>VZ%v`To zDa#!}!g9l>LTjzT*_FV1Qg<=9)I5O?o+~HBxZzaJ&JNm1pBGg;PH)m7d*s#Y_zZ15 z@*FNm*AzZJJYxxH+(aY2$ZsroCqp3C;>i?IfJH^31F$kLsHaB|PgjY|3w$Mhhiwpn zdN&-``iLVi`uRMnA&Eis6vt3xBVc3(Dim?8qw=}B3dS#|)Rl~V259fWDoc!Jh^D5goDKq)!Zzr=h+DuB zxgo^Z#e1(WGJxVFqKq5jn8QJl9+{~Lkhxn8MJ=P|b%zfiBj?jFJH-2*9as#Ce_A*J zYO(=#gGZm(NWb=urAYzf7Q-&^(rk6i6LFE-&A+uH=c6|FbMdKQoj5e=j>!V$ zmhojo3G;*c&JUF)9}lT1dkHT>xNMUL&ahT8#WNR?eKh9xGvoGcuRLYM3g7t4CW!|1 z9qI~%zr{x}Y48Z8=)Yc3JHtMllJi^BwAGUsGY8GrtVu7iO?B@%O1uu_KT}==Jz+i1 zPa4U{gzwjZ9Bp`4SGv$=)bUy)HGohVIOD>;yPQdS`Sl33AlqYQqIGfhvK$QW8M!a{ z!j+mcI*wfNy69U~dbjf3(1p&3STwY)cxNZG%Eyu09$nCRdt!nxJ7omVumb%nzF;vm zRIhOehwLxhnW@2~kBn3Jtb9r2y&wL3HMZ*}6u>ABIH`lS+*M3LiKd=`N&JF373q1}!2gE^l;MMz^O!v1`baHUH7 zT;S_5M5tGk2Q}k^E^okFJ+NCkiGRqS)mfp{a7%7`q&>au7mXum3saq(SAa-t4)Qo{3~ zD3AGmo+rl1tF<+EA9g+Oyp~2bPZrNz;cudDQMSs#dVOfMSzMHl8EO@3?_`wrlS4vd z%40QKQORVSxX{s^u-<=cEhcDg(Q$^HVmXI->Bq{wtf#co;3vQU-zf>bdluDVEH)h@ z50+dY^O^q*1)fX_y$H9IsxcwN?kqqL>b-^+!EOghrBXeFywXN#5Szi6t8Vh=ITp0xtHI1kQ0|^q^DTvR?IBS^_3?~| zP^MiIwmnyE&lCt~3f-KtyFL}OPXT}5D5h4zsng$w%C3N1tk-QW)+Qg#qLl|v|51^` zAACowHe|aDDMYnJPSXdU3`3z1}6S&@43i3@*~h|5Op zSJZMG`TYq*VwuY~Jq{P0q5d0d#Gk|=ZT9GUW`)#{pkJu&)t!21y_{b)6zS>OYynR? zYZ(nRkEm<*<1Z@}(Flc2cs%m(iDMS@&dR(fzfU%K4B?V}i`Y~`8Hfp+gpalm32uErkWS!eYs zan`ECCIysG^Xxx9gw4I?#Ygh{z%^*%O2aH`u)hDc{sz=DVJ!zqU4%X2O*LO+Kqo^; z9Wc$9XHBw5wJ8WKW7r!feYCxGlDolJLzf#->cE*IZ}g@Zfh3@1#Ph`*H|OjZk1LZs z3kQviuVPRaCZaAUW*|PmC!E-IY-<8189=f&&8<=-J3MzEsf>$VT;u!<>4UtN;Gj;V z`*xd+xgLwa>R6V%Af;!Kk$rAwM>Vq0RN{0jM)?hs_^GY;l)_?+EAX8-ZYS&pDYp_E zOO*`HG|ddQp3C&}n(F){qoLT`$mjTNA)Kt+MapRfxWh-Stl$(>)E8&aZw2Bo#dT)M z6y3^`9G<#Wr-$>#nb1Xfa_8G~6h*0dUxe3Dik@3kwQ{(j!8UV#9WG*u>oXU-3*miaOYuc$kKci5tQJCe@XkL`-jn>70~a)?WmE>YDm zJ^>a@sM3u=X(_6W(Af6W^P8lMa_#5B&!iCrQD*v=yQ(!$Xw}R=oi^+ZESXv+6qXsz zg}ljquP4aHt3Fc42sI-ZnbJTFN(fd z0qd3yzE#1{lSG7g8%RuR+OyBRPyCj=5_8gy>Y;T9D*8^9peWd6 zlxEb*DNNAcx1xcy-idCqh)o&U^LFq7n&2&cX23 zMz6%(S}*x7UPaHe46PO!nwhMlxeBu;`Oke* z>N!fH5*0X1Dqk88ii3g8yeLY@x6aHQZbF0T@`rStg|H>X%Te{x7%XaKs`Sf)AYUs@ zrC>!Z&=!)M?LU9YJ%xd;1FjPs`yOvuGufcy6!WR7Svh%t4MyjqwsmQb;|3=9*b^DfwLvmg4_ip__Ghhd8dPoZI7d`9QZw;Ju0QcoSpetwh1vn^k8 z5WF`DGK#@-x*~CN@B~C_9Z8xlrN}QII6kREFc}X>pf&I%F(KiAJ?kVooXZm~{R3W#9>)khg?&;V(v!jg>N zk2>lkrFuCUt7(|?`EF;CD~WSIeDDh2WoK@9>!dbkkAYPtM^dGaDZKjfU3|vqbf}0x zZ8e1Y=;{9cR{7_A_eG!xL}{wkx}@2{l*v(UfmV%5;dMpK%uZLi4UNwIxqca$@B*bP z{eC9Tcwf$h%;%KSt5W8~!iEi<)bCym_`Yo9+W#B^g-uEaGa8kj55&iE!Td3G)^0&_ zA>pbDVSRhu?L}%Vsu8c{F=G*jnI?&zYp@pM{1w4r5{7X`v6U=jP_E@TY3qB`7OCzb zOJ~a!W9cUqlc`|`(3ownd|od%LrH-ErGv1GJbu|OOAT^*HJE9Ue1yK{7?mIz*S*EW z&9Br6UTSP?74cHup@c2kF!dJhi|s)0%yxR`UaN?5nfyTZ6kbG z`R<+{grgt~T6Vsk=Vxr?tzy4b3udHvuW~X3gjDB{#C^$E^ihyA*QO>ongt(l?G2i5 zj)jpjGpE{RSK>s0%ErPfgQMJ%)2fK32jlEAx*aCxytHHJ5XGEb$-7t(J)aC75%|M) zdnh5L)o>KQu(g8x7>WdtRNbn_HkwV)T$U8XGP^CkkD-^`!y(pKxuvys9(S{`pIrdHr zCJ=%{+L){nlMWgJL6F%nYT}RC9gv>81dw%-39jOvWM5Kn+dk`mz>@3~B)#?SdMiKf zr{{NJJ%WRBBsH_>RaSz8voZAI7#KJGMtDA$=#p*w%i0K04rjkg025w|e^8jmOvpge zxf`Wv*jo@ebKd(a^gQLL@qjdt<*2^=Gs3kRXJ}hy882CqJE?YEv^-0JHbr|3X83`F zNAHea>4T8GSi`$5g2^yK<4ZK&U*k2Lo@Nnu*yT5Ii&040A}|nR+8^8keNU3C!Q2Gv z{n#57!vEB2k|B>VYc5dk)5zv9BMqN*P`yIs;o$V;unM^WHL_1wTb@z84too7F{rf6y$g z-8|+OGJdT~mGSXDsAS{YmSgT=e<1gGekH7e!^cFY0fURTb~fE)%Xevt2)xhXhgo*wrD_Y19`(zJzy10#tms6OU2G5g0iK*L8iSiJ@Gu z1;V*oa%j1qxlTja=8jpX>5WX!MfoUp98CKP5rg_=C_Fy}z4_@#taB|yx})(n2ZR+5 zDfUKnjX7G-J_0n3!bVy))y-5B!ZY$xm>1_sUVK&70^sby(&Df}`#U}~<}yhe&y8aC z>hP~Q_cDB+sbI4uyyO>?03|QRm_Yb!h#k19_Sioxb{NS^K3%r0)4xPm_l@UJdxd7^ zF*9R(x_lPy&Ra2>Pu`yVFs(F9;9S#(@Yt41K&mpk7J^*@B_#uKxGyfZPC&w6| zqwO_;A|m>9JQ@j1z%HxsGqUeybeHV#{S}?#Eu+Hr-45OMlEQNEKczx6zmhd(vbLfC zgC94|tM~2N8v~v{1ko2k|ny)i;dr#8MV&s5g~Y z>0R9bn#LJPLl5hU0L1$WZ0JIxVl2#1?1PhSL(Z9`{@_)51rffd@9<%0edW}iNllQ) zNqCoJuol{>*xBMsKQ1F+?)!v(W+PM(VG%hebnY4830%8X{5GFA{3(le{GsOD&;`|C z4s}~TJVe>~C&M!d*T?U>ogQQ2%rg%xgiM|0wVq3ET&TI(TH;;T`m?s$(Pe7Z@4qa4 z9W-qBetvQuij0O(rQ`XW%*`_93Cyi=|C$O^&;)}2n8^4?%gE<<^&aXmLlm{+&aXO^ zv5;P_#5pi$^(~BkP(jEcLrpSh-Flxs&2>QUVKzrAsqmVgXnO-3Nmqr#*96Dd z@4}_+iHkimtnq4*LEq8smCZ~$#uS_fsyzVK|{kgJi9EOkDE@-T(fwnl5Bxo3K_Oy z>ew;Uuv~cGNoD11pW;+FE4p%jTAWvqJ+Ic%oYOahKN3^3R$JO$`=eM31SAp6rFQR# ze+*b4d>~;XV>4?rM>8912Raqy$3PG}N+?G0Ryan0S0`5(AmB%U|Nq;!ul{}N#HZds zixlVw3kNgdS1B*Zy*UiwAEIw2yU>q{=EowR@30Dc~1J8Nh2#=AmrS zhEYm0{7iEA<7hIa5>awKn$3WA79?htQDQ2}HWmtOg=CAAMGo_m9<7dq2@iyH(x*?F z1a6uaz&;(hLA8^6!jOAG*i|jOw5tncOBv$UNSL&xT)h4vo&(~-E{G75fk(XFAqIK6gZIIpyuO7A)wyZN!~S( z`BT47vJ@qDu2>MSKf-Lpm23YHJRxe9NaN^PkbHEJG18J2%qA-lZ6J`$jj=BrI(?ME za;g-ulP5UV_YTQLzq)sfLMl9x0`HLRV*@x&DtT)r&|zgm04qnxtIDVRbV&iP23`*c zLAn;^qB$t2E0vQ`a2Y(8PD0V)je9~B_*&fyBNoZE01Gsn<*}xm=e`n-0a(D!Z4jn~ z?P83VFWaY!x`i+YG;i!){b9qi7Yy7)vl|6GsQzfuz|F+y7mOd=KeoKiAw=n(9`|$n zh^b7#1Mko{lG@-D9eubVy2b)P5p`d5iUFD zBf8eD;__Vr#hIir$1J7+CG%i4GVbh}1SxrhBnG`%Ruan<#v}RFhoXb6tc^Z2N7uLd z>F8SVahv&$k`z@XN8nv86|gR(nYh^v!{Hq7cXhJxZ*0hFq7s~59~bJJr?HC|bPU%) zDCZT|uT2{?rJpaj31#$aTkfQ!n|~0MjBNHFvbAGJgIL+|d{0*(__Vnr#AW8VE2?=7 zObK=T276=D<a?}F+wIS>%(uS6QySlQY*{2pp) z%^hs4{|L7lYA8PoxBHq>Hmj@%&6{cnoE~5e6d{>x9Swo_G8Ub~h3b%D%r(LC*^-J9 zO(J(5fhhYyH8)X)4JrC^62kVz7ej3D;m0GW1U_h#c?uv*2@FHRdD-Yu(B4p9Iy96C z8`#+-GH%R4Wq#=#iSjZ;O@jiSOoYp zFvMfhA&#Zxgv$buR#P(z^(Y+TLzI;JCt-OXc^KZepNM9U#~7Vd!#0pEm-|YH+v*H} zOiS4uHu$M`squCd^6l}_Qx5hz35NSG+$3%7!!|clkeuy zVJiwVH@?-fev2W_pV@-n>#h+{w=yK~0si{XHXZzCyj$_msuHGr_0=1ASsNN)RH+0D zmp9uWK?J~A8iMly!LJY{<$J=0V9b_@a^ry>zjx7Z^ytSr!JHQzqQCcd{mY1$F1U_!G|5TPmq6e zT$1ku{@m~i9>VZBpP9&)S4`RsJm^!Rs@(N55qh4|9NyVSCpl{-j6E-!#szWlyqHvn z1dyQ|@|b&d5_mw@godTdx^?K{V2+STQw?c})xCtP68amebnW=wj%*bPR z_!?=t2du4_+#+9AO2eezsd_eE^z$m1$|$S;-cX|mEWfbdih$p8Mm)(%VMWR&>tU~) zpqF6MnyE7X9z19Ccb!g%K-x&4_vluILXD@~9}*LZcfY zuG{bupOOSB_@-(~(kyy&ofV3d@y6mqcpz#sV-q<6y-EdTrn#gFUh_DL_5`eO)`h(q zL@rAAsxmi<#!GxT29FTIFSVzk{$a`E@VW=&i)eB;<9uXvGG@}-OORHY37Drvl*Orq zG39Y)TAl@V!QIeRnGVF5##}2EtaFCJ&P{UjE6QPM4qg{)mb`ZADOSTg5G!j8ZmG^q?&s}Z}LZDTjwt)`roVGByFF)AK`jALR9X;xen zvk?z3v>~c+p;hm_jl@>FJgFR#DQ)t2?J~@9xofo>R`ZfTMp1b$9HDjDs2j#wznfJ| z8K-je*>k>2cJ2OJQT`=@*jcyO|bkgiw@P8S)FY}I1u}2Y1uTeotsZ?w{+TML%`L3Z4*6B zcDb+JWRZI7)vXzeO7W;B8bFa(okm@#x0__zv@Sfb7Tw9{izTv~Q&oC4it}nz?ylY) z=I-w7>&i<(K(_J83t4~x0Re*e!=dTVI|j;k;oZ#I!4Xh~`nzZ6A2$pvP#_?(Ur5wr zu(fiac|iDEJ4Sd6pG`YGLYE6~Kzx!qd*-o;P-~QrZ=AC^7yB?l3FjN52JwP^7n{^q zA4lPIvbPowZw}HAJpARA$B?p7L#Eg2M#lTqH5pzB8|3ToW6@HPA#=CAE@srAG^?|U ztGZtz6@0jrrzAYw`EwBzt@K0jpBJ>qNwRfS6DH&3KRsGmM0Qg`kQX$Pnb-ukq&(@1 z;UT$XeoEa(m>&HcW8%^h7ahvy`J!nUG0(!M#omDM4V6vxne24qF__!Jh0r4oQ zIt<8F%C8vr#Ja4UcfFd1JR5YxPI)7b9k7Q8c(B0$g%M6a{5IcpsLiK0V~5eT4vhaIiBZ_)W0Hukod;014vVI=W=$HTzQ( z7~1K`Jkw07&7x3hD&|?W*>_$s@3_8jZfgnd5KS`aACAojc}8tC%WSmxG4duJcS1{? z3r}Fen--=7EcdVAztFn2eAkl=F|VY|S+~bKtuz|~Gg4f|I4sVPnFF3bNHdQUkL^Oi zhh)|YFPAbjCyTX|&@JWMB9y)fUa}vTMhweFW>t2asv}LhYPQm23cuUvRX#l7vdw)< zo~AYLbfJx;d!1}z4h25>W@I-j^UF!2_4Xd7ij6XHc-1LTo>p?rWUr6YbzO)J^iY%d zQ>K2Z%N!aKAt})m_QLd)1pEX}H$52JRHIYo9E-wZwD&Ru+^35=g!G#cYzS-Cl+Yzj z@0c`+CROo4N*JT0e5la95;+4wM&?%4tUfJ%>B88ePvvXNi7q|qTRARG%u0d0%QS|m z2qvqN2$Hcql@M23-7ILqyD5{~X#uQ-r7~IRr2DHRz~g_u79#Ff$*)!p?hsE+`$5WGUDPdlZH$rw1#w7KLpc`; zn=$YWbG>te*P_+u$;s!bg&%vt@Xm0Od>vnBhLCGGI1`lQg%id_>!}>4A9|l9n8RFs zHn(>;xtKoJnL5ak=|h5-$FgJ&w*4r^28=?UDFA|#D|+^*m(0r{ze+ii27<|{M>fJy z5i@kbsKY)gAg{d+{{^PQ^qr&68!-olU^}2%JsUAI6epB2HSw&{4NJkmYN;g5i|3Nq zR2n=pg;_9iI|DgNk>SkMhE>fj;>D7FM`kOr)#gp=#0Ou3ZYk9II7i;nl$05ccmxb5{17rGRUGWCFO52ba=m$VW&5S9M&M${#z5^*&COHm=7dPlJkf#h zQQAtpH!6?r*rx=^qlJBg*ke1hK0FH@*BF6;^E9efKY<@uka4c1J*b@1uN{8o)X=|U zikS#v~h+Md#{DFS_~oJE`!QUSrOy#utW$O^hZo+_IZQp3Xff4 z3|HzAK4EK(avHgoo1NKp@+|i_J_I~H3W61qKI>TNjSz&0$R;Wev<7?~Lx2^&?cQ7| z#Pmme{zhk86cywp)P3$r^EJf0$J4%CMk_AG=9V{?_BXG?TF%dzb5ip=fW4nEFvFkm zjznJ9$-MNwO|cr?Xv!QSVmlw(wA0@7-X?Key?jqy>i@-h`uDx_Bq!tX_`M$iyybU4 z0wfj%orS;4Nq)WA3tJieehm-1&qn^&48f0bu>bH!fEDISOmt67o^MjjYbwlT6(qi zXr)|px(QScN!7BbZ!u3_o=&D)K6CQkYNI{o6pm;VIC+P#0$zkuz+ZQ+jsewd0Y9Zc zjm_|7|5NcPs5TON0vUJS>Tib}H#?*#k9$P{%Km)858c1R^IvFiwX*ylvJl1q*MX1l z$fE^hnbqGh`Ub;)IY{7@kgZ5buXiMa{Z1TL!`loWhJ#okR9jWmSk)=&3Ul5!(>VKd zCjsPgiZ4SX9Nl}4V`@yrR*vG*!f&QUj#0AQ4q2c#iGt4PAV=h(V6>HBrcg5a46fud zX)@lkL(q4^*TG+-1HzsonVm9#1%R$!-Sx*5`jhWi0JztKtNq(6fif@<5Zzx${pwy1 zNZ;9^%BoIhV9oqC((s~`$TVb$>sd}v? zR6bi?Nt^(E_;Nghq68X;$Z)U@taK@w)~aR;@7%6GV>(_m z=a;y@#v2QyaR;+#*+w6-LQV2Q-pv_ zNy-cCyf+Derk^{f()~NMe?j0Mj`CP!TDW? zxcJ0lneds48A!z&m-m7qk+^|uC&pNDLa%^Pg$>-p~FG3;#dt&0mj_N)Ja#K(PsM-~+t=^uTxTx8GHC0KX&uv0?#o%&eVl zEdGdt|5f0RUaEQ@cZq*4@IR7i^lWVzzQ#QO0$@-7$&{_+Yp4Tv|$e0$FX2z{n8zf>&Kcm|u#tOdTXAFI3u7 z1ZFteN*4SK^FVP~!dsqIr{#4rf092^$fA+R0n*kp*XWpr1TefMij8^av?QilXzlkL zv_&?MIUF4;k4|s23a6rThV5eC%lofg!kMn#+T*xtY~j7d=d={`PMJw_zKwPh-b!Ah zxq&~elyyN`n=Wv1HqRalm8207Ldj z4Y#N?Z6l}+xGO*la@$w$GA-YENih2`LV>L{4TMbo&Kp-Al+6;<#=QMrArG5_whG4Z zfE;8F#vi=trsa?piXeg*NStuYBzF_MDRT^-LiLPqSL!r z{94hbw@S!fO$C#R%))l>6pkMO0`5hX+h)&q!~s0^$5ZOpq&2{U@8f~9nc=^8;o{+3aSHx%XNC8>L1$@}RX`bItvN)4!0D$0Y{F)1mA zq9`6aATyoBIY!0R$8V6JgQALncA=mYwGkIl55^Jp_<{s<>Vx$Fu~k5A?f4!$C<^Sz zuZ1d3WL@cr5;23tk-Fup3RZ7{xN#));R6@6Ytri!3pI9VL$MFWI|kM(cIh=g!rqX2 z*YTXf?v;nWgt?nONv~C*8;M9f*kzI%Nfk6-ff0Ke46#8Q1(KIL;;4-SZA$=I8EvdH?P&IkWm-=8O`^{u|OzLaf3QaC^EL-YtJ_dGd&loEJA|Ft#P0xt7_bgMP zt*{S&9k^{#QoH&${RusaPyO#T1Zep$^tb(gq(A8V|0VsA8M!h4T7R7Tz{dDp*ne0h z4s<4Zjz%teZvVUM<_8~`N0w3?K&C>ycLT)}$q-7IW2O^H6l@)UN5I-r4N1|0n@56& zP>?J8NhoW)y1W((oJ2X4c9Kyi(^S@&Q5>Ww zD*;Bd+qVgrnUS3Z<24Qb2d&^@wBNjXM_$NP_s0gi&dbzuC(20IkpX3pjeAw)uL*li^u|7Fn^X*%3$N5bQJk+&3JpTJW{?LG=l4m-7d3bSZq0e zf-pYT5zNmc1nAo|rb@B-6blkwnEfvB91Z&go^u75VY6G`BDD-6FXpppa@x9{VkHlmH27xr8b*g-fkO+x%*_cF%ehL9yc@{m z6;6yZaG9aSs;;C|qe4HYkXf~y3>JF4_PPAS0@DW@6@LxW)Irk`xiXq9#kEhi?=It| zBym?RkMEPmU}_=$cEU*XhJp~PwEUaoaftRth-V!Z zD!@rqsnk#}B{^b*Fmk9xz}^w?C8H5Eob7fNRDdUtX~#y%%$by4ZAOKjg3Gh5+4XM| zv&jUzKxi}!6?n`QL28yUKrDTn?-YW^0!h68P>&X4qEni6{2Y;or@_6^)B#4D&VNr% z&CY%C`193UEgv<*>|Rk%&_ba4ZL6#aJdJy!NtG``B*qE3%+P3MF*7E{hhN9#*|Bm4 z3$d&XmA~3&dS#<=@gJj=z&`79aAjY-=_d)8oqs9fauz?^Z~hy z#9`YQv8mCo?MpCHs z)xSIy1B3AW)-U?AhYk?~Q0@o9?=OGx2qM7Y9x#A`o&c%3$DpVv&)&P(_d{Ol0qefo z@lOvbdceZJ|0DMMf4_d*(Jvlb^z9UY5b}}*|Hc%)|ETM?Q*gU~deX0_@E0F^{ioCT zb8q^$(~!e@=v4n!E~$I}jq)$lLjnE$5mG-MIsx6q595o#I?ngarhhcQ{j%5itL^^W zZT#(w>2SZ7{Lp*+?fi%0B5Zy&|KGh466nwEvEQPs;r$8an`YT>v7T#3wEYU}S6l&l zA|J*V0WCtHzuh4T4Du_P4|4*@{UVU@hs?j%G5Kq`fS$>R@kL0x{kz@YdR^Pvgn?<7CJ*XrAb5kRBQ z!>IAG_yxkhX#06k>w(H|EAxQ*`@^X5;i3AuT6+JqGv!CfZ;Qm=LrT#89P%GG0Q?B~ zZ9NfCeSR1)z?#s}2DSGoM^ia*K)$&{16y{${1pxWu)&;2QJ&Z2`pN20$EBs!em zPT)cP9|Fl=mR-L0gg!2Z{H-ygBR%`^hCtPi8cM_K6S*#EPf>jORj z=SQys8*@uf4|Zv5 zS0@+H8*67zc6k|P750DhLjVA*#q`5D4g@Yy0RVk80D$v9_H%Lfvaxfwwsi5fb_cO? zg4sA;E>By(H+uHMIKBkB6UH^GdfS~bt3>?rGe51nq;IAKVvd2sP!Mi6D;j;TiSO z29b88kWt(?3Cvyrc+2Op(#^W)VCE?S%%$nHN%(O`B zrWQf%FB&_gxqiWMxh;_i#l?|nS{UPC=53p%C*HQsOf_|mFR?<8Lz9Lo;o@P=&vkMt^nJ27m68V6&-4CYny_HcWqQ+^uEL^#e3^%PlJT4M2%OZAq~*eDJR ziP>#U+4Cn{@@hCpoE-!{?ACvsikq;&7IfD;Atf=^Qd!6)i5wwA3n@ORQ>otq*Q;UA z4`*-@WX}(IN)7lW1}{(DeTaYhnQri9O}Vt*hYD1Puc3%km)RFY%;D8FxCV%bEFUi& z*Is@L!G$%z1a(WZbSIPp zjs5BeIK)ZHZc(svjr40J!^EQi73v_aAZBf&2f7{!J7o6z$bJ(8YtB^|BA`p=Q5TUQ zHO=i9iRoga5y)2GuA(zfm8Y;v*ac-fV{Z!?lrglVj!jcG7VJNAzfouoUPKg(TxpNY zh;h$~3UV91dG0r=5fM>QQ5heX*^k>|wj7TTIT-yA^eIYe5E_AIBe2X&ZI9bfnCd^fAY@0wQly4Xe3UeG&A{`5xV49HOe^J)R&|sZCb+G+g-T_>d&2Y z1GM%PYl2B4&12f13%KNXczrX3z4=)Oj zg&6bAZXtlO*sz=1*e9r0QAfO(@i+208yR2Q_j;XFUDE4Z@u|Qc8aPBSLVL7g%iZ;w zL5|8}D`Q6$-x?angEIYH3Rm{tG`gjl9S;OAl4=BO|$2cL_esrAs2V;tufrU za9I(#VVLe!`c$ql3=yC$qnme-*T|5uw4$)*jRguZluj9MRYbWVvpXvk&fdK>HOa?A zZqy41Jb6Gq2;p=#Z2o~s2zoovwSYMpw{yj!SK?{h0&~e91g@0yyfu-rUp}xKz6;nH zdl!2x<|A5J!DCUOFRqm#H|U{GlLK_Yb!LtjlSL*K5JmicWrQYeoZobvz_9L;J6slj zPTC2*vKxgH|FL3-t9@>7K`E5im_Myky59_?j3A}aWe2Q=TU(!@$H8mUAV`OG_PiO^ zO?Uhp{i_>K8B857B=K`IS1!y2>J;qJKBH^^d*`+Aa1@oMYHOX8!yj?W_A$!1J4_{y{v-ui*zhCCu6q6 za5*mTTs;a;6CE(7ldYm=`bM%Z=-2kCGc>UW>U>&$Ir#m(#M^a7Ba>{I=@8isN%+YF zpB(cp+V}Ad4^i1W0Ve}(va+J!f|JC&I-442pHutZ0sn;8R^n`wBynC24xu`spFW<$ z-^g2NLLbJE&25Jyw6=*KU?)8>_rn-7vrb#D(R`IH6no%7ALUpXGyKNSaK?&gF2))) zZ8ZH+5E_iH;?EEuY3oi@WG}0dtPK0p5;cx|-7tS&s7I~h>EyE+11>ic;&wvjtbabx zqw_GkthR3yNKjZ;v8b>r*lWCKguy ztrq?$wq41gvDlDKmsAZ~4JR)n)Solam+>}CrtVtRMosdZA(cUG#lwUf z%frAr9fgQ`Lf=n3$V~{rWouqx)xxcBcT~`Kta>~7+BW8w;(hE7kSD&rnQI-l(T3S{ z-sb`TOk5FV*m@rp_DUE2fZvgF7%0Uu%0KMl_zwRfNYipbx6-XE(Dq5?%W^%g1Ua_f zHGUsBW^Ac4WKD9Rja3tKCCI)Il|656_QR4UJIUMRj6y3H{tJXO-@yPVu6M?xC6H?|TJY_QQ^KKVzO;HrX%1WmNC_*SiKs-_7)q~SL zCyW=hm!FS0zT_{QM&o>pzeBJ`w9Z)YBZ$o=}$7GYrX9I_^!O z3S(!vtt#sDZWiA!kjd}%FO44uhK1<$&6be5c=^d{T}RXB4`N=Gq@9R5iC2=?u=A~h zZ!6$XQ8l#3&&z0a%%ZlrFeX>AN8kyE1|F9dpxprvRW|tStcGrHer%VnbD8WR9GyC3 z?I0$v5sHo;CeSj)_Ye}1V7-ccwB2}2qz>J(Euo8+uMSkmo|%MAa@6lM;;XCaJw>cq z7E6_E9l{Fe+TNQJC*$2`tYGOlD&xrnAFGTl2a#>LR{2Xf+)=VxW;@LCrAhYww4l8e zwklMAZBl`-V33W@fmNBq(3k#`DQ?#8Q)k*nBCc^~gY-nnfhE8&dYXATCbBG%zy00y z5TzgVEWt6y;dPa|opgwfmtBmGgo}FNT1jt_3}k^4HTT5DQw85{fcVq9_cfxpV0|`) zBhMgyTaDHR!xo>pPEs5VV*^~Rdu-*;C*IetRZ2QKZ{wSgOG_Od=$S%A8FFW4eef9S z7({Jhi$gixy3vKmEYMQfIUm+giWS)@636n9HQhjU=)b-)w^Bz_W9LkWS!eJ%p!+Ej z9J;u|(oa%`<^;SkHT!RYC{U=tRNaClCeb~gz0`F4XzCm` z?ISXJeX(&{d1#bg!ATFJ2~oL9Q2fCh8T7R6;wSMv6~MGC{l!kTD1|4+;oT=VRrb}x zitOcw?Kj$L7YHcA=s8G6+h}gp=z%N)oIWiC=rJpGRD_R$+C@dthk2{An&8X4&nEOR zLBpPAcsohAXwjy2=xGW0-vBeV26>fX(=mtn5)em%dFlwq`ga~s+M>{b{?Q@>)hfXh zTH+oDK#6t`sc(DY1uVyEDf1VFar|u0IBaVuY))nzd83QEm9~1WUso&*TqBlvi?9vV z)?T73b+x_1w$@UGwe^Ejqu}((n;&DWNzDc0eO;{VWkl*B?R9hk_9amI)lnuZ1DG{@ zB-77due3Dl!cLAmh1OhsN)cw>AWeUCn)DT){T475s}u}t*+SR>l^4F7(=7^GR}Lpp z=Xhm%K{3edfxVQzc8}ci$Qhc3)@{QYBUc@MalEpB8+bE|wfaVp^9BrThxYmG>bCMa z{2GI0bL@acBSIZ_ZT-~jrsWhgUizS4nVp^^@_;XmE7Y@jzTLsttpbu)Ci4R-T_j+qKD?(YT7xHkf8UG(|~P zZImb*FQ^EErE zZb&HOkJ@E2+}Q|Ugo$9~wM&^_<2bI0%nw{OC$0p1&(;zm5X{u34ZA=-Ogp>=5Y}v1VL6iWFjIzSyK=sqeFbz}P#R|D*jolD$7RVQ@V}}^5o)n~>xZVe< z$W?p@SIv}-9yv3WNNA+MvF-4WV;p_h)Vm=$n^z0lHgq*tn0A0JGi=GLcFpk{x_I{x zC4Qs54*i4gwk&fpzW{yI1YxS)NxAMmONft?dRBh@V zd4bwuLh!QMuQKTd!(|gsp)^zc{U-A#^+BWxZ%krVwr=v9A78aElMeg`kV=o`B#{qm zDb0wZ!s~w#b9XdvzmkqUS$nqEL(ZF=F;>KQYh*aLkmdXFejw;k|GCEpwYiMvCwww1 zR~p8~Yna+H@Y9gny_ILynvlN+@_E=6$XtN+IDUn31#KiiOCIt=aQwqjpI8djR_C z?gQvJyM?qtBXW@S&~5D6x1;kRa`vDPj(%wXc06%ExLS-jdP;A?R+4IdxtV_+?(`I< zASw^*UiE_yWwLX}*&YRznC24;7e2c$`i6yC{-MrJ4ka0}} z8!xI+aG6YkR)c#9)Wb9;Vg}P`%gp%9)FaxzdY5Iz6I5X+0KnAC&HEp{OLuc;4<~y| zYjY0|uNTdoF^U_h^bI`ZRy&vnhzUYt1PdNK^u)`s2#=Jh- zmz=E{t3XFM>ok`U>muG6m{6Fa+PcG4~*n0*&H&$O1d^w@JC17nkH4uD&cJ;-?YgTVAIYa zD>Zlv<2j$sT3R@L8cRIA-4j@RA4+!HZJU08m}i99-hOg_uLymKY{E7rT7{PER#NO@ z?yQ5Uk`JVA!d-v>*DXxStJ{Mn)?uH<>6CK(rGj#&z^s^^usltVWvj2&jM1B69cXc$ zUpI?=iyb(|VnG}cnUrD5eW2K~XdEE8Kh3{_DoXaD)9CHkPmD0mP3f4Vt zyYe@RT-~yg85-E@g3G+=nu>BrZ0igYudR_Wh(l0eu5i-_1!;(YfK1@S9*+?oJUVW! z-S`7POXHvIX4J6HSYMBikGsV`N<4%p7VY1-pn>1trK`mk=Eby&<*A*x!lZB)X)j+# zxh>X^!lrQEPs5Nq7Y=I)w(6r~MpUzioS>eelst%1V1+FSjobRN@~B$woHVvSLInXla&+=sbD7$pRTKv3CDx?dn%OvJL3*dm3=CVxdFOZU?0E(ViLB4}Z?c8#*iHmMN zI7VicyBnlNiBuwaldtrept?+t*P!OS1kqGm_T)g}GWS=N$$H?sgf=GGTj#w+uG^%_ zL0Nj+Wtk1#kAanZ8ilFs6YVpLt3mA=l(=*`Dv2U1VTi3fKaZS<_N@CVHtw+n68eA8t>4W)z$ISdX;{a(hWlTw&<cv^NXgf{iXJgsc%}!>lLq4;86zypgF)JHRnQ3 z_Fo&HXm5N3dnfsYqY&N2U(<3F7Q}W``|&&KoJN%@nVz3xdo`q~nh*xilGvsT_cDUk zX^1%Vv3Dz`Ib^?eRytM2R-jN2sIpw4fJ;5B!Ps4lLclp!$U@hv^+0pWfDmYdoqO_;zGwjlKZQO&^I ze4{QE*5$&Bm3sTn>enOl`o&tZ3iYJiI=?=hR>eTs2QgMN?BCdXJjO+X*~`9|dP|Wg z%GcqV=W;r>sx(>DMI*e|n$IRqUSq4Ey*UYZEj&+%Zvtl$16d^BFwC;-yCQn6YhT9@ z;X>FC)3c*ag)VlvPgyy}WJK9!KiL}3E|x&YQuMI!jh*dA#No$6K^=Es1%J*?!)FBV z=*jb5?e7#tVqc2PHm5dmz+x3;Xiuh$y!m4jlzF0S?gs*Ap{;VO@d@!HGSc&SBzM>N zqGfNUhL!YlCW`_d3q=mpt50K&=YUg$B3GLVkEaAcqa7?|_Uy{AGN`o7KFKU{fJApx zBn=hSm^tFuzOQ4}4)Zd(i-k!v7a!GSSE8@WJ*uuKF+vLiTBz@A(2bl|7C zbceoMVI|1O{g&&O`}wRzYq-nC$~-tLCIOAB+Nmf3EilIdclKzR*(U3|&H#Kziuqxc z;#+ez6{mG=4vINGS}^=JU6Lwh%K(2$%S0OY^+R;M+BO+@WFcLk)1FxHnFL%HgR!YG zfW^axeQBWVaXi+6;H1NwMKOvy<)x(ia|&W;Reb$?xGt0_c#<%FPvLX8GO_=owfLBm zPo-ESrXlau|r>oUJ}Kq96xGkB{l^J_)++?23Hw?TvS zjwVq-zpvV^LI26hsESHLxz@eKD0g65s9<_Q0F&~Tk^_yjRYyO|$BePi$WKBi*RhBs zbnM7e$z^2#G2T0#?>S%H)(qFu@0&1o4t7AnIS^cHQKw6;%2)P=wC27sMqI1+lxLZQ zHu+U=R1u;}oWL`5-HW(gN`qgVyqz{}lnLtRa^g>shcUZh-BbOG4~aufpuwPFv(R*g+Nj#{@tR$;Di&z_ zP-FkbLO?yl{v3tnj8u1(N1MNG_&#bOz4s1R$}xqiiqS zsstc*-aPezj2jc(SibQSdVJl{aTvU(Br;x6nR(zfiS~X~*p?#?R$5RUJqAXOckH_p z#SD&Q1n}~Moh_+h`4XACW#{9iG*&^ue6Q+esw|*(I=&$$8I+aVM7=Pc>Xtv~F}D(A zoWhPN=k3cdz>673Fn&Q9jxy-4g_Ya#sw&v^4Z`=-ds7V&HK^NKcbx_kW((uFO&{4G zE;7*5;b|`3K631<$~BC?WQ1J?Q+Mz%=@(!=eFGD@0H%7~xl^RGx`9^+VzGxiFiUCeTmF4Wv9{ODUYR?PH~s1b&TYq4{3ahY)x~iO{B)?kgWi z{|lT=)^lyKM6B2^N%sUEXjGpGGY`9So+QP&P+DFOs;$N%-Te}L2}PFoD7_j({geOT z*Y+fJvEZmq1UGqCcyzq~a_m^ddrm3mF_N}VKnG~Ee#(8o?;K3-&40Kv4u+vHD`$obZIV()BDwneQL7I@`7j>K(2 zDH@skl$LVbC*%9ji?mq=JfBg5{2PdUGhbEv9}H!T!YH1Sl+=t<15N`C+J<_2pBd-b zU8m@8RI*4DI}#xhx#XUF{`;b0zD@>tAP`jHTPR;u!dZuSR?gin031&v_0pTYIdIF; zFvnw(1TW?r!$-~u~r(Q^Q*eJ((4h|GY?q=nN6IwV!Cvo})&{a8d zlpK(#t{zJz3;wzP0~r5y01Spk4HE|g|J&bje>sIqeo7;72Lb^8FNbSzFaD0XhZWl! zn_OL$q^}$ppQ$g%+w@c|T9|cKr+QnWWMnMZMGVrpp?tQ`msLM5n|^bn2-oyZb4rds z0iA)4GvkXX&U4^9GgNK3o!>CRqR-fswucTJPeZMq!5V;_TNeRG%B&u)am%G3j#2kD z>F6-5Hu%V*?$CIuA5N->Uxsr;wLZ3u;Thb}b`0@tO29AHlOR=CR}mA%k(~ZGuo7I( z9F5uH(2x;({gDEhEmTd{Gjfi9<04g_=$N!3bsHEF z2-Uh@)mR1=O?b^~oOWio^5u?syqKk@3?07q_T1`5!54LL&O}s~8qU}4#$I69eiB*pK6=7!admDLk)D-Gr!Qbd<#B`P2lA86=(Y}G^ejgB zw9L$Rr=)=Ac7OepFO01--WmPc#8{D=sUAFqBWqLOB^``ndfZIQ?)}BQ1))<8fBO|W zmzmc_?<7kC@k)W*U+*kwAm7&ajeIKtqd}n`N_9aq3Gf)NI}^ezQyuRzK4=EV_ab<< zYkm(P(s(aUeXt9MWvcTk)RxpH?9Qi$z{i~j#b&G0a^&La-etL$a2_p?0}bxnZNu%# zM5*oz82RIxm%MVF#{SQa{o0mN5~LYad5wdc6H;-l{NiP`=^OpSU*|S3yfz*zO}h6u z#G8~Df=Fw*Yo0|H6Y9pqgK7gIg=<3(DC8_&>GR(S&16I-^71HQZ>!C4$0pN$NLpEa z5IN!vME!ha?^`IsoaqYiso>mCX%isICH4{hNU2m!80~pW~8;%<#RTH3vVT4Rdd5w54XA zaVEi)u@uup#4DY)rKG2tv5;Y%qfFK0bEPhqEkZI?2*_*RRR9Ul4sFQ|n!d znU%GF$Lbkao^^4TKiQQV!>_9F)>0x%nD9h8Zs8)I_ev}AuvBt-Vwh=HLaV(K?ed z_Y5wrCm-aRUoBGtV6~h*VE$pIiur+A3(Ke&9 zN_aIv?2$%YjGV~Y4f9nf^sSfvo_0)gz~|9-;)y*9sDVMx<5!I`( zEh>HjhLqW*RJ4}Eg>Mu#>TM>=n$Kj%yZOMMLRc>zo-Fe4jnY#0$~+Yro2oD12D<7| zeCP_uiaI6|UM(J(6jD68(6=O~d%eG`FuBbYkg@EWXoJ@-t!m$1u>72Ny9ScVA2oJ5 z%+7OIl2uIV4FBTlCV&UOc^J6JUM~5%voF?X`Enq+a~oC*cjl2~ch2W$_!zP&d~|~p z#K!-5ORBL2lzEof7;tk;Up5W>)SP>}C3-XId}w}S%3;n>{EA88VY+_H7rCaI0sqn8 zOlsq(p}!KZ(kgnVb%6YjalnR_h9trWKqxRVAYnvekYs3#MlPC3SjZp-PU8ZRG9siG zMj0{)g8>P~ko{c?S;fSHBw}De3{)f=mk6q$ARI4)28fBxV6RSq@cfBfzIl`x&(=%e<(DF{hapnwodpaFMCAgS8iWY6J7qD+waN!>y-Wvi;52TE1PZd-v*ZAuT%q!6MO!h z>Tew|;QqdvezW)`VMGOqkdTHXNTNaKQvo1vVOSw`5=5A||I%phr6!U{;H3sGMGgTn zu1*9Lq=xLPt3xK_aUeHRXwZa=0LTR;F65Mm>L0BhREeM+|BesAXYD=e~Sg;0zj7kh=l~PlP81jc_{}I zl0phF{>h45g$SCM`)_Ci6(?vap5O56KV&B4selZ;kS=ASmzSO4xA=6*M8KfGVT_f{ zfn9trmHIE5Pyv7OLwb~mUf%zIQl?fS0_q6-!5S#p01aQgfF^&mu2nz-ng~KV73_em zzcaEFEXhB5RH+aFJB5B@Ai0EWDN4kDn*Y|MUl;(Pg#Ft9WBTY^RfY&iA^w8(18PgWWcUy% zSxca{Hz@U|i=dqBA9?hp(V!iq0T44dd`PggB6Q~;_%{~}2$c*Gw7cx@I&#Qs q8MZ&|M_yJwojhb&!U*Ug58;y(!GZnlDFB#Xu4ya)z(nD9>AwI|SYa9f delta 7407 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 diff --git a/sample-rapp-generator/rapp-all/Artifacts/Deployment/HELM/orufhrecovery-1.0.0.tgz b/sample-rapp-generator/rapp-all/Artifacts/Deployment/HELM/orufhrecovery-1.0.0.tgz new file mode 100755 index 0000000000000000000000000000000000000000..4dc0b274cdb01134c0e83fa2ee6e477800147289 GIT binary patch literal 3672 zcmZu!c{mj8`X+0(l6{MeeUI#WWy@C9Y++;@%S5u*Bw12Ob{dnd2_YtYh>0P}mdX|% z21N*Co57g((D(aY=Q`Ip?;p><&;8uXbziUWV@6J@;|HXvWIau7l)OwW)hwbkRiP>l zN;hp){he(!)vO&H)GQqXVV=P^qwKE1bxpkkgQ!;B;J3ePGz|slb@R1o2d&Ge1yK^U zBYysr@b3#|;xlcWJeX7NIUNgkE$Koz#-KYG-fnl4`u+Xg@-7w+|Rge`}1HfPI^+PK+*tv08pj zH;}Jq_n!-i8_(EZXqi(dW-^9;6wV8|h*Xe!%M|+efQj2Rt_CPHSZOY0w#t^2EHA)< z$a|lq{Gy)*S0Y&Gac#LXTFhSX=DfmXV@L10#@BQ?sDsgRK_MZdLqwe1sjU(kgG4aq z@;iJAtW+m%1LXz#4x1=CD&KEz%F2bzkzViU+(uNFY<-@=H;SUu9+5pt3=~eXa!VC= zm_t2!(w&REp!Co*{5PWyg0;2p;_U^uaU$;sT$NSkBTb+o;Fg*0o8dEpGVkYkyPn_5 zJHt#v@$qn^3VHvcF@Sx6mpAxP9z#P-po}&>_BG3wM+RNgwDfm!4bYS2RF8aP6WjX} zZngIGG&MCbF%_XMPOOeI751bn#`y9a4jT<15{Eu_3iNb7r@bjtu+vz| zv2eH0eWDuR{UE`(95E~pd7y!bc>l|8N;I*Q-m;Sp!eM>cc(6sCFhKsIe!0msNZ^dhxqrHKxBg7|CR5Gb9x=hwv6_crPK7o; z5PU@L`s*tmLvP4w?jpwIkj}&6^BuFIYXV|vFWQ?_PLGGnizzwEWHUYqm!;}5R*C)L zG|JVGT(^1={vAD+;+ZB?*S;ouLP=-KWT2k8R){<>e&rfEdS+UfuYdaL>}GpiGkQJ<rVQswVC$q*Cu& zuZOJQ+NpFU!g}La`QV&=OTYWdaJi+tg6VPNwQ=D%w^v{Iw_p!O{RXySYN1^5iWl!b z9{j+4!=s9Mq)4TF1bur+3QV&2gE*^?{k4a`ZYn(nzfygkfCl?&={OhSjT6;nGOP{*$ zU%|&?TWRpl8^%%Aa{bw-xRD0go>sa(fq5SY2)h{>w9cx=)mgYm+9M%qt*IG(byG^b zcq+&rZ&>>B!HT+%nvY!j_h*3+3VKW&$Qm)F_dWw=6v;i*0^%dmChV;fp>2!R*@z?( z>UQtl=OW`1sLnl~@eY=R0QC31h5J;!AxkjYgoyTT`SxgzenB}UM@C(rNW;#enCi9~ z(xp+wS@l%jOW_tK0J?|imnvb8S6*a`&_G%2xirDe{C9I?hjA9=c>Q@ z!djXqJ%oc1^H%SMXJa$Yxuq{Ci`b}Zk3PK@p(#Z&PJkfzkPS(UCr6hRRM2fI@MPr2`iYY0b(Ib>^7l@b-%RGng>Vd z=~!y17YdJ0$WXAeoqUW;IAgYmJG^_xoy##EZ(F$`e9?i+mj|~(82Po+Bl!*EbiKE7 zmH1fEx;mguD#OOU7Ti90Lv&fP@q6b^TLRmTXf z2a!g8`E5rj=^)DXcCJ`l;flu(kfN2&KA(A_kGzpOLsU>?tCjNXmMCxO>qsK}=oaS5 zO>(Sv`uQmD#??LyL2_Ahm@zcc;j!}iIaCApqvOB}ZSiCTJxp6psgM9*fk>4Dg&tX(x z;;h6ZJ`rPA(x&iN!IK*1-xkg5Yq0x5Dt3<~Q0*~8K0oqvYV;pB=qMplibU4dzenoBpNeL82d#SK! z$+&e`O>5^DZPNuBNQ2k1q~*5)i)Bfz&fjLts+N{3b`F|%0>g_dtD;L^!c^PtRFAYe zS5*~BNjjrzs&-yd5Ojg*Kyg+61q&Dxh>iumn2BIBpm>SN_hu+XauM-o{0T_K z<-I=KThH8%K=w>k}iNl~uPbQlqK)Q$gsewz7d8LsOnW8~zBn)cxW)Dm>9~bWAbFPgnJO5Yto{o$xr9>O zQ#c2EITk_XbI`Yk*ptuN0tgZrG?y+8DK>8aPnU6CfBHMLr8x=tqEoK1BFtbidX=o- zR{UuP8(QXrR9kRlxgJem6cRI z3NZ6ghcB--0P~H|YeX#Ga?=6jr%5+0@ixfT_P65=Hz%?H?Uo>o^Ukb0H2vMLtk`&1 z5PFB98{h~ij!DeZ7tMJ612Q`2EDl7wWNrbQvRnT~uyBlEwF9tPiQ^Efq1^k{x_#e$ zH3W!FDMp?kci^5UHg?BzXd@Vd_;D&rL@q>0ySF=tt*v_jz2!EZ>Z&1Q$MyqJ#WrMq zc;e$U;2Q!>&Es0gJn9GRpCx4kENR8D^@3RR@9r~Ca0LC{8_m5PqY6n-NQsac74fVCZ5sF?pQX47CeRDWha-5;_b%F%oR zvm?9hbU}mz6xMAawtX(G0XY*UqUjz5-Gz7r&VWqq@+H5_6mU`_`!bEqNGK-mbwNF& zA(XJ`V0AVDsHvSib3u{1w+rO(_W*}dc>E3 z?t9OX8A)^cA)W61#GXro+lVwW7$jq-VW#Ax_z+E-DgS4Ve^{FX3RdF7_b*hF13eJB zPGuq$Va-!V2;AKZ&c(rpl^xkcXut|gg+lQy9T^p;Y&_t2zpN&yG@*0F-V%jn#)7w za0#zxeLF+tPI%8Dw9`O!q6`7cdBpLL{q+BoNLnMii*~p2=OV2ptRKoyA<-^ut-%TS zLjPKyPQIPKS1f13b|kcb_BsN#c{mjMUj{y+naxW493sW$UjK}XIrn!-P6d78TN;$s znmF3}rGDIa{=siGm1k7>2m0G2%22pl5xAcAUyjoyq0($W+KHHh(+*E-*8(5B85-QG z6*Ar1`(Z|2*DeCX&lVB?!`ch;h^Q!c_Sp3bo%J3)fHP3Y=g<1#v^!xcL8;PSL@Zf0 zgVN*6ISB5@vS7*FSICGu5|+BM3x_S`*@E0H8R>^$g_#Z`H4AA7GjHo2=ZVmVWI$4) zLFri(P+xB8`jguyc;Iv&+~NIe{FkO}Vxtt5Yvhxb>v6Vy4-96~NA#%KApE9B%7d(b z76{W-E@bLQsIqBpsSMoP^+ydq8|pjB)`duPC4QdQ7rssLHP2i`WQ!ho<{wGKDUuOa vhKGIN6vWUTN;~&d->&`~dC0U*Sn-sIQA$>>Bw#!GL;}W&d#zM+R8;>0Q0s$+ literal 0 HcmV?d00001 diff --git a/sample-rapp-generator/rapp-all/Artifacts/Deployment/HELM/ransliceassurance-1.0.0.tgz b/sample-rapp-generator/rapp-all/Artifacts/Deployment/HELM/ransliceassurance-1.0.0.tgz new file mode 100755 index 0000000000000000000000000000000000000000..348e1a6991b39db6127462c4a46fd6a8dc7fe7c9 GIT binary patch literal 3280 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 literal 0 HcmV?d00001 diff --git a/sample-rapp-generator/rapp-all/Definitions/asd.yaml b/sample-rapp-generator/rapp-all/Definitions/asd.yaml index 39ce4ed..e369010 100755 --- a/sample-rapp-generator/rapp-all/Definitions/asd.yaml +++ b/sample-rapp-generator/rapp-all/Definitions/asd.yaml @@ -1,6 +1,6 @@ tosca_definitions_version: tosca_simple_yaml_1_2 -description: First drop of free5gc and ueransim ASD +description: rApp all imports: - asd_types.yaml @@ -9,104 +9,26 @@ topology_template: node_templates: applicationServiceDescriptor: type: tosca.nodes.asd - description: "Free5gc" + description: "rapp-all" properties: descriptor_id: 123e4567-e89b-12d3-a456-426614174000 descriptor_invariant_id: 123e4yyy-e89b-12d3-a456-426614174abc descriptor_version: 1.0 schema_version: 2.0 - function_description: free5gc description + function_description: rApp description provider: EST - application_name: free5gc-app - application_version: 2.3 - ext_cpds: - - id: 1 - description: webpage-service - virtual_link_requirement: endUser - network_interface_realization_requirements: - trunk_mode: false - ipam: orchestrated - interface_type: direct.userdriver - interface_option: - - virtio - - memif - interface_redundancy: actPassBond - nic_options: - - nic id1 - - nic id2 - input_param_mappings: - loadbalancer_IP: 1.2.3.4 - external_IPs: - - 5.6.7.8 - - 10.11.12.13 - nad_names: - - nad name 1 - - nad name 2 - nad_namespace: myNamespace - resource_mapping: my resource manifest - - id: 2 - description: transactionAPI - virtual_link_requirement: backhaul - network_interface_realization_requirements: - trunk_mode: true - ipam: orchestrated - interface_type: direct.userdriver - interface_option: - - virtio - interface_redundancy: actPassBond - nic_options: - - nic id3 - - nic id4 - input_param_mappings: - loadbalancer_IP: 192.168.1.0 - external_IPs: - - 192.168.1.1 - - 192.168.1.2 - nad_names: - - nad name 3 - - nad name 4 - nad_namespace: myNamespace2 - resource_mapping: my resource manifest - enhanced_cluster_capabilities: - min_kernel_version: 1.2.3 - required_kernel_modules: - - ip6_tables - - cryptd - conflicting_kernel_modules: - - nf_nat - required_custom_resources: - - kind: myKind - api_version: myVersion - - kind: mySecondKind - api_version: mySecondVersion - cluster_labels: - - label 1 - - label 2 - required_plugin: - - name: plugin1Name - version: 1.2.3 - - name: plugin2Name - version: 4.5.6 + application_name: rapp-all + application_version: 1.0 artifacts: - free5gc: + ransliceassurance: type: tosca.artifacts.asd.deploymentItem - file: "Artifacts/Deployment/HELM/free5gc-1.1.3.tgz" + file: "Artifacts/Deployment/HELM/ransliceassurance-1.0.0.tgz" properties: artifact_type: "helm_chart" itemId: 1 - deployment_order: 1 - lifecycle_parameters: - - ".Values.global.n2network.masterIf" - - ".Values.global.n3network.masterIf" - - ".Values.global.n4network.masterIf" - - ".Values.global.n6network.masterIf" - ueransim-free5gc: + oru-app: type: tosca.artifacts.asd.deploymentItem - file: "Artifacts/Deployment/HELM/ueransim-2.0.14.tgz" + file: "Artifacts/Deployment/HELM/orufhrecovery-1.0.0.tgz" properties: artifact_type: "helm_chart" itemId: 2 - deployment_order: 2 - lifecycle_parameters: - - ".Values.global.n2network.masterIf" - - ".Values.global.n3network.masterIf" diff --git a/sample-rapp-generator/rapp-all/Definitions/asd_types.yaml b/sample-rapp-generator/rapp-all/Definitions/asd_types.yaml index b004aa2..e2a788a 100755 --- a/sample-rapp-generator/rapp-all/Definitions/asd_types.yaml +++ b/sample-rapp-generator/rapp-all/Definitions/asd_types.yaml @@ -1,313 +1,5 @@ tosca_definitions_version: tosca_simple_yaml_1_2 description: ASD types definitions version 0.1 -data_types: -tosca.datatypes.asd.networkInterfaceRequirements: - derived_from: tosca.datatypes.Root - version: 0.1 - description: "Describes the datatype for network interface requirements" - properties: - trunk_mode: - description: > - Information about whether the CP instantiated from this Cp is - in Trunk mode (802.1Q or other). When operating in "trunk mode", - the Cp is capable of carrying traffic for several VLANs. - Absence of this property implies that trunkMode is not configured - for the Cp i.e. It is equivalent to boolean value "false". - required: true - type: boolean - default: false - ipam: - description: > - Identifies whether application expects IP address assignment to be - managed by the cluster infrastructure (CNI IPAM plugin), or - configured by orchestrator via for example helm input parameter, - or if IP assignment is handled by the application itself. - required: true - type: string - constraints: - - valid_values: ["infraProvided", "orchestrated", "userManaged"] - default: "infraProvided" - interface_type: - description: > - Indicates what type of network interface the application expects. - Kernel based virtual netdev based on CNIs such as ovs | bridge | - macvlan | ipvlan, or PCIe dev directly visible in application - namespace with kernel or userspace driver or bonded with the Bond - CNI, or userspace-CNI based network interface - (requires DPDK-OVS/VPP vSwitch). - required: true - type: string - constraints: - - valid_values: ["kernel.netdev", "direct.userdriver", "direct.kerneldriver", "direct.bond", "userspace"] - default: "kernel.netdev" - interface_option: - description: > - This attribute describes verified realization options for the - network interface in question. Currently listed options - (virtio and memif) are applicable for the interfaceType “userspace”. - required: false - type: list - entry_schema: - type: string - constraints: - - valid_values: ["virtio", "memif"] - interface_redundancy: - description: > - Identifies switch-plane redundancy method the application uses, - and that node infrastructure is required to comply with. - "infraProvided", “left” and “right”: The container sees a - single vNIC that a) the infrastructure bonds over both switchplanes - or b) that is connected to the network via only left or - right the switchplane. - The other cases are for a mated pair of vnics connecting to - same network, but where one vNIC connects - via left switch plane and the other via right switch plane, - and where the application manages the redundancy. - "activePassiveBond": the application bonds with move of MAC address. - "activeActiveBond“: bonded left/right links must be part of a multi-chassis LAG - "activePassiveL3": application will move application IP address between the vNICs. - "activeActiveL3": the application uses anycast/ECMP. - required: true - type: string - constraints: - - valid_values: ["infraProvided", "actPassBond", "actActBond", "actPassL3", "actActL3", "Left", "Right"] - default: "infraProvided" - nic_options: - description: > - Identifies for the direct.userdriver interface type, the physical - nics the driver is verified to work with. - Allowed values for nic types must be handled via a registry or be standardized. - required: false - type: list - entry_schema: - type: string - -tosca.datatypes.asd.paramMappings: - version: 0.1 - derived_from: tosca.datatypes.Root - description: "Describes the datatype for parameter mapping" - properties: - loadbalancer_IP: - description: > - When present, this attribute specifies the name of the deployment - artifact input parameter through which the orchestrator can - configure the loadbalancerIP parameter of the K8s service - or ingress controller that the extCpdData represents. - Note: The format of the Content strings is specific for each different - orchestration templating technology used (Helm, Teraform, etc.). - Currently only a format for use with Helm charts is suggested: - ":[.]^(0..N)[.]^(0..N)". - Whether the optional parts of the format are present depends on how the - parameter is declared in the helm chart. An example is: - "chartName:subChart1.subChart2.subChart3.Parent1.Parent2.Parent3.LBIP". - required: false - type: string - external_IPs: - description: > - When present, this attribute specifies the name of the deployment - artifact input parameter through which the orchestrator can - configure the extermalIPs parameter of the K8s service or ingress - controller, or the pod network interface annotation, that the - extCpdData represents. - Note: The format of the Content strings is specific for each different - orchestration templating technology used (Helm, Teraform, etc.). - Currently only a format for use with Helm charts is suggested: - ":[.]^(0..N)[.]^(0..N)". - Whether the optional parts of the format are present depends on how the - parameter is declared in the helm chart. An example is: - "chartName:subChart1.subChart2.subChart3.Parent1.Parent2.Parent3.extIP". - required: false - type: list - entry_schema: - type: string - nad_names: - description: > - Specifies, for an extCpdData respesenting a secondary network interface, - the name(s) of the deployment artifact input parameter(s) through which - the orchestrator can provide the names of the network attachment - definitions (NADs) the orchestrator has created as base for the network - interface the extCpdData represents. - Note 1: When the extCpdData represent a networkRedundant/mated-pair of - sriov interfaces, there are references to 2 or 3 related NADs needed - to be passed, while for other interface types only one NAD reference - is needed to be passed. - Note 2: The format of the Content strings is specific for each different - orchestration templating technology used (Helm, Teraform, etc.). - Currently only a format for use with Helm charts is suggested: - ":[.]^(0..N)[.]^(0..N)". - Whether the optional parts of the format are present depends on how the - parameter is declared in the helm chart. An example is: - chartName:"subChart1.subChart2.subChart3.Parent1.Parent2.Parent3.nadName". - Note 3: A direct attached (passthrough) network interface, such as an sriov - interface, attaches to a network via only one of the two switch planes - in the infrastructure. - When using a direct attached network interface one therefore commonly in a - pod uses a mated pair of sriov network attachments, where each interface - attaches same network but via different switchplane. - The application uses the mated pair of network interfaces as a single - logical “swith-path-redundant” network interface – and this is represented - by a single extCpdData. - Also there is a case where a third “bond” attachment interface is used in - the pod, bonding the two direct interfaces so that the application do not - need to handle the redundancy issues – application just uses the bond interface. - In this case, all three attachments are together making up a logical - “switch-path-redundant” network interface represented by a single extCpdData. - When three NADs are used in the extCpdData the NAD implementing the bond attachment - interface is provided through the parameter indicated in the third place in - the nadNames attribute. - required: false - type: list - entry_schema: - type: string - nad_namespace: - description: > - Specifies, for an extCpdData respesenting a secondary network interface, - the name of the deployment artifact input parameter through which the orchestrator - can provide the namespace where the NetworkAttachmentDefinitions (NADs) are located. - Attribute may be omitted if the namespace is same as the application - namespace. - Note: The format of the Content strings is specific for each different - orchestration templating technology used (Helm, Teraform, etc.). - Currently only a format for use with Helm charts is suggested: - ":[.]^(0..N)[.]^(0..N)". - Whether the optional parts of the format are present depends on how the - parameter is declared in the helm chart. An example is: - "chartName:subChart1.subChart2.subChart3.Parent1.Parent2.Parent3.NameSpace". - required: false - type: string - -tosca.datatypes.asd.extCpdData: - version: 0.1 - derived_from: tosca.datatypes.Root - description: "Describes the datatype for external connection point definition data" - properties: - id: - description: "The identifier of this extCpdData" - required: true - type: string - description: - description: > - This property describes for a particular ExtCpd instance - what service it exposes. - required: true - type: string - virtual_link_requirement: - description: > - Refers in an abstract way to the network or multiple networks that - the ExtCpd shall be exposed on (ex: OAM, EndUser, backhaul, LI, etc) - required: true - type: string - network_interface_realization_requirements: - description: > - Details container implementation specific requirements on - the NetworkAttachmentDefinition - required: false - type: tosca.datatypes.asd.networkInterfaceRequirements - input_param_mappings: - description: > - Information on what helm chart input parameters that - are required to be configured for this extCpd - required: false - type: tosca.datatypes.asd.paramMappings - resource_mapping: - description: > - Kubernetes API resource name for the resource manifest for the service, - ingress controller or pod - required: false - type: string - -tosca.datatypes.asd.enhancedClusterCapabilities: - version: 0.1 - derived_from: tosca.datatypes.Root - description: "Describes the datatype for parameter mapping" - properties: - min_kernel_version: - description: > - Describes the minimal required Kernel version, e.g. 4.15.0. - Coded as displayed by linux command uname –r - required: true - type: string - required_kernel_modules: - description: > - Required kernel modules are coded as listed by linux lsmod command, - e.g. ip6_tables, cryptd, nf_nat etc. - required: false - type: list - entry_schema: - type: string - conflicting_kernel_modules: - description: > - Kernel modules, which must not be present in the target environment. - The kernel modules are coded as listed by linux lsmod command, - e.g., ip6_tables, cryptd, nf_nat etc. - Example: Linux kernel SCTP module, which would conflict with use of - proprietary user space SCTP stack provided by the application. - required: false - type: list - entry_schema: - type: string - required_custom_resources: - description: > - List the custom resource kinds required to be supported in the target - environment. The list shall include those custom resource kinds which - are not delivered with the application. - required: false - type: list - entry_schema: - type: tosca.datatypes.asd.customResourceRequirement - cluster_labels: - description: > - This attribute allows to associate arbitrary labels to clusters. - These can indicate special infrastructure capabilities (e.g., NW acceleration, - GPU compute, etc.). The intent of these labels is to serve as a set of - values that can help in application placement decisions. - clusterLabels follow the Kubernetes label key-value-nomenclature - (https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/). - It is recommended that labels follow a standardized meaning e.g. for node - features (https://kubernetes-sigs.github.io/node-feature-discovery/v0.9/get-started/features.html#table-of-contents). - Example: - ClusterLabels - - feature.node.kubernetes.io/cpu-cpuid.AESNI: true - required: false - type: list - entry_schema: - type: string - required_plugin: - description: a list of the name of the required K8s plugin - required: false - type: list - entry_schema: - type: tosca.datatypes.asd.requiredPlugin - -tosca.datatypes.asd.customResourceRequirement: - version: 0.1 - derived_from: tosca.datatypes.Root - description: > - kind: "Redis", apiVersion: "kubedb.com/v1alpha1" - properties: - kind: - description: "the name of the custom resource requirement" - type: string - required: true - api_version: - description: "the api version of the custom resource requirement" - type: string - required: true - -tosca.datatypes.asd.requiredPlugin: - version: 0.1 - derived_from: tosca.datatypes.Root - description: "the required K8s plugin" - properties: - name: - description: "the name of the required K8s plugin" - type: string - required: true - version: - description: "the version of the required K8s plugin" - type: string - required: true - node_types: tosca.nodes.asd: derived_from: tosca.nodes.Root @@ -348,78 +40,13 @@ node_types: type: string required: true description: Identifies the version of the application service described by this ASD. - ext_cpds: - type: list - required: false - entry_schema: - type: tosca.datatypes.asd.extCpdData - description: > - Describes the externally exposed connection points of the application - service described by this ASD - enhanced_cluster_capabilities: - type: tosca.datatypes.asd.enhancedClusterCapabilities - required: false - description: > - A list of expected capabilities of the target Kubernetes cluster to aid - placement of the application service on a suitable cluster. - tosca.nodes.asdInNsd: - derived_from: tosca.nodes.nfv.VNF - description: "The generic ASD node types for NS requirements. Optional properties are not list here." - version: 0.1 - properties: - descriptor_id: - type: string # UUID - description: Identifier of an ASD. It is in UUID format as specified in RFC 4122 - required: true - descriptor_version: - type: string - description: Identifies the version of the ASD. - required: true - default: "" - provider: - type: string - description: Identifies the provider of the ASD - required: true - default: "" - product_name: - type: string - description: Please use the application_name property - required: true - default: "" - software_version: - type: string - description: Please use the application_version property - required: true - default: "" - flavour_id: - type: string - required: true - constraints: [ equal: "simple" ] - default: "simple" - flavour_description: - type: string - required: true - default: "" - vnfm_info: - type: list - required: true - entry_schema: - type: list - requirements: - - virtual_link: - capability: tosca.capabilities.nfv.VirtualLinkable - relationship: tosca.relationships.nfv.VirtualLinkableTo - occurrences: [ 0,0 ] - - virtual_links: - capability: tosca.capabilities.nfv.VirtualLinkable - relationship: tosca.relationships.nfv.VirtualLinkableTo - occurrences: [ 0,UNBOUNDED ] + artifact_types: tosca.artifacts.asd.deploymentItem: version: 0.1 derived_from: tosca.artifacts.Root description: "Describes the artifact type of asd deployment item" - file: "URI or path of the artifact" + file: "Relative path of the artifact in the package" properties: item_id: description: "The identifier of this asd deployment item" @@ -431,18 +58,4 @@ tosca.artifacts.asd.deploymentItem: required: true type: string constraints: - - valid_values: ["helm_chart", "helmfile", "crd", "terraform" ] - deployment_order: - description: > - Specifies the deployment stage that the DeploymentArtifact belongs to. - A lower value specifies that the DeploymentArtifact belongs to an earlier - deployment stage. When this value is omitted, the deployment order - will be decided by the orchestrator. - required: false - type: integer - lifecycle_parameters: - description: "list of parameters that can be overridden at deployment time " - required: false - type: list - entry_schema: - type: string + - valid_values: ["helm_chart"] diff --git a/sample-rapp-generator/rapp-all/asd.mf b/sample-rapp-generator/rapp-all/asd.mf index a63de54..b190fa7 100755 --- a/sample-rapp-generator/rapp-all/asd.mf +++ b/sample-rapp-generator/rapp-all/asd.mf @@ -5,6 +5,8 @@ metadata: entry_definition_type: asd Source: asd.mf +Source: Artifacts/Deployment/HELM/orufhrecovery-1.0.0.tgz +Source: Artifacts/Deployment/HELM/ransliceassurance-1.0.0.tgz Source: Definitions/asd.yaml Source: Definitions/asd_types.yaml Source: Files/Guides/user_guide.txt -- 2.16.6