aboutsummaryrefslogtreecommitdiffstats
path: root/common/src
diff options
context:
space:
mode:
Diffstat (limited to 'common/src')
-rw-r--r--common/src/main/java/org/onap/policy/clamp/controlloop/common/rest/CoderHttpMesageConverter.java74
-rw-r--r--common/src/main/java/org/onap/policy/clamp/controlloop/common/rest/RequestResponseLoggingFilter.java69
-rw-r--r--common/src/main/java/org/onap/policy/clamp/controlloop/common/utils/CommonUtils.java150
-rw-r--r--common/src/main/resources/tosca/ApplicationServiceDescriptorTypes.yaml74
-rw-r--r--common/src/test/resources/asd/MyDomainASDDefintion.yaml131
-rw-r--r--common/src/test/resources/gentleguidance/GentleGuidanceMultipleTopologyTemplates.yaml299
6 files changed, 797 insertions, 0 deletions
diff --git a/common/src/main/java/org/onap/policy/clamp/controlloop/common/rest/CoderHttpMesageConverter.java b/common/src/main/java/org/onap/policy/clamp/controlloop/common/rest/CoderHttpMesageConverter.java
new file mode 100644
index 000000000..9eb43fd6f
--- /dev/null
+++ b/common/src/main/java/org/onap/policy/clamp/controlloop/common/rest/CoderHttpMesageConverter.java
@@ -0,0 +1,74 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.controlloop.common.rest;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.nio.charset.StandardCharsets;
+import javax.ws.rs.core.Response;
+import org.onap.policy.clamp.controlloop.common.exception.ControlLoopRuntimeException;
+import org.onap.policy.common.utils.coder.Coder;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.common.utils.coder.StandardCoder;
+import org.onap.policy.common.utils.coder.StandardYamlCoder;
+import org.springframework.http.HttpInputMessage;
+import org.springframework.http.HttpOutputMessage;
+import org.springframework.http.MediaType;
+import org.springframework.http.converter.AbstractHttpMessageConverter;
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.http.converter.HttpMessageNotWritableException;
+
+public class CoderHttpMesageConverter<T> extends AbstractHttpMessageConverter<T> {
+
+ private Coder coder;
+
+ public CoderHttpMesageConverter(String type) {
+ super(new MediaType("application", type, StandardCharsets.UTF_8));
+ this.coder = "json".equals(type) ? new StandardCoder() : new StandardYamlCoder();
+ }
+
+ @Override
+ protected boolean supports(Class<?> clazz) {
+ return true;
+ }
+
+ @Override
+ protected T readInternal(Class<? extends T> clazz, HttpInputMessage inputMessage)
+ throws IOException, HttpMessageNotReadableException {
+ try (var is = new InputStreamReader(inputMessage.getBody(), StandardCharsets.UTF_8)) {
+ return coder.decode(is, clazz);
+ } catch (CoderException e) {
+ throw new ControlLoopRuntimeException(Response.Status.BAD_REQUEST, e.getMessage(), e);
+ }
+ }
+
+ @Override
+ protected void writeInternal(T t, HttpOutputMessage outputMessage)
+ throws IOException, HttpMessageNotWritableException {
+ try (var writer = new OutputStreamWriter(outputMessage.getBody(), StandardCharsets.UTF_8)) {
+ coder.encode(writer, t);
+ } catch (CoderException e) {
+ throw new ControlLoopRuntimeException(Response.Status.BAD_REQUEST, e.getMessage(), e);
+ }
+ }
+
+}
diff --git a/common/src/main/java/org/onap/policy/clamp/controlloop/common/rest/RequestResponseLoggingFilter.java b/common/src/main/java/org/onap/policy/clamp/controlloop/common/rest/RequestResponseLoggingFilter.java
new file mode 100644
index 000000000..915cdf0b2
--- /dev/null
+++ b/common/src/main/java/org/onap/policy/clamp/controlloop/common/rest/RequestResponseLoggingFilter.java
@@ -0,0 +1,69 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Modifications Copyright (C) 2021 AT&T Intellectual Property. 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.controlloop.common.rest;
+
+import java.io.IOException;
+import java.util.UUID;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+@Component
+@Order(2)
+public class RequestResponseLoggingFilter implements Filter {
+
+ private static final String VERSION_MINOR_NAME = "X-MinorVersion";
+ private static final String VERSION_PATCH_NAME = "X-PatchVersion";
+ private static final String VERSION_LATEST_NAME = "X-LatestVersion";
+ public static final String API_VERSION = "1.0.0";
+ public static final String REQUEST_ID_NAME = "X-ONAP-RequestID";
+
+ @Override
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+ throws IOException, ServletException {
+
+
+ HttpServletResponse res = (HttpServletResponse) response;
+ HttpServletRequest req = (HttpServletRequest) request;
+
+ /*
+ * Disabling sonar because of ONAP requires the request ID to be copied from the request
+ * to the response.
+ */
+ String requestId = req.getHeader(REQUEST_ID_NAME);
+ res.addHeader(REQUEST_ID_NAME, requestId != null ? requestId : UUID.randomUUID().toString()); // NOSONAR
+
+ res.addHeader(VERSION_MINOR_NAME, "0");
+ res.addHeader(VERSION_PATCH_NAME, "0");
+ res.addHeader(VERSION_LATEST_NAME, API_VERSION);
+
+ chain.doFilter(request, response);
+ }
+
+}
diff --git a/common/src/main/java/org/onap/policy/clamp/controlloop/common/utils/CommonUtils.java b/common/src/main/java/org/onap/policy/clamp/controlloop/common/utils/CommonUtils.java
new file mode 100644
index 000000000..4b0e41f23
--- /dev/null
+++ b/common/src/main/java/org/onap/policy/clamp/controlloop/common/utils/CommonUtils.java
@@ -0,0 +1,150 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.clamp.controlloop.common.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElement;
+import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoopElementDefinition;
+import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantDefinition;
+import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ParticipantUpdates;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeType;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
+
+/**
+ * Utility functions used in controlloop-runtime and participants.
+ *
+ */
+public class CommonUtils {
+ private static final String POLICY_TYPE_ID = "policy_type_id";
+ private static final String POLICY_ID = "policy_id";
+
+ /**
+ * Prepare participant updates map.
+ *
+ * @param clElement controlloop element
+ * @param participantUpdates list of participantUpdates
+ */
+ public static void prepareParticipantUpdate(ControlLoopElement clElement,
+ List<ParticipantUpdates> participantUpdates) {
+ if (participantUpdates.isEmpty()) {
+ participantUpdates.add(getControlLoopElementList(clElement));
+ return;
+ }
+
+ var participantExists = false;
+ for (ParticipantUpdates participantUpdate : participantUpdates) {
+ if (participantUpdate.getParticipantId().equals(clElement.getParticipantId())) {
+ participantUpdate.setControlLoopElementList(List.of(clElement));
+ participantExists = true;
+ }
+ }
+ if (!participantExists) {
+ participantUpdates.add(getControlLoopElementList(clElement));
+ }
+ }
+
+ private static ParticipantUpdates getControlLoopElementList(ControlLoopElement clElement) {
+ var participantUpdate = new ParticipantUpdates();
+ participantUpdate.setParticipantId(clElement.getParticipantId());
+ participantUpdate.setControlLoopElementList(List.of(clElement));
+ return participantUpdate;
+ }
+
+ /**
+ * Set the Policy information in the service template for the controlloopelement.
+ *
+ * @param clElement controlloop element
+ * @param toscaServiceTemplate ToscaServiceTemplate
+ */
+ public static void setServiceTemplatePolicyInfo(ControlLoopElement clElement,
+ ToscaServiceTemplate toscaServiceTemplate) {
+ // Pass respective PolicyTypes or Policies as part of toscaServiceTemplateFragment
+ if (toscaServiceTemplate.getPolicyTypes() == null
+ && toscaServiceTemplate.getToscaTopologyTemplate().getPolicies() == null) {
+ return;
+ }
+ ToscaServiceTemplate toscaServiceTemplateFragment = new ToscaServiceTemplate();
+ toscaServiceTemplateFragment.setPolicyTypes(toscaServiceTemplate.getPolicyTypes());
+ ToscaTopologyTemplate toscaTopologyTemplate = new ToscaTopologyTemplate();
+ toscaTopologyTemplate.setPolicies(toscaServiceTemplate.getToscaTopologyTemplate().getPolicies());
+ toscaServiceTemplateFragment.setToscaTopologyTemplate(toscaTopologyTemplate);
+ toscaServiceTemplateFragment.setDataTypes(toscaServiceTemplate.getDataTypes());
+ clElement.setToscaServiceTemplateFragment(toscaServiceTemplateFragment);
+ }
+
+ /**
+ * Prepare ParticipantDefinitionUpdate to set in the message.
+ *
+ * @param clParticipantType controlloop element
+ * @param entryKey key for the entry
+ * @param entryValue value relates to toscaNodeTemplate
+ * @param participantDefinitionUpdates list of participantDefinitionUpdates
+ * @param commonPropertiesMap common properties map
+ */
+ public static void prepareParticipantDefinitionUpdate(ToscaConceptIdentifier clParticipantType, String entryKey,
+ ToscaNodeTemplate entryValue, List<ParticipantDefinition> participantDefinitionUpdates,
+ Map<String, ToscaNodeType> commonPropertiesMap) {
+
+ var clDefinition = new ControlLoopElementDefinition();
+ clDefinition.setClElementDefinitionId(new ToscaConceptIdentifier(entryKey, entryValue.getVersion()));
+ clDefinition.setControlLoopElementToscaNodeTemplate(entryValue);
+ if (commonPropertiesMap != null) {
+ ToscaNodeType nodeType = commonPropertiesMap.get(entryValue.getType());
+ if (nodeType != null) {
+ clDefinition.setCommonPropertiesMap(nodeType.getProperties());
+ }
+ }
+
+ List<ControlLoopElementDefinition> controlLoopElementDefinitionList = new ArrayList<>();
+
+ if (participantDefinitionUpdates.isEmpty()) {
+ participantDefinitionUpdates
+ .add(getParticipantDefinition(clDefinition, clParticipantType, controlLoopElementDefinitionList));
+ } else {
+ var participantExists = false;
+ for (ParticipantDefinition participantDefinitionUpdate : participantDefinitionUpdates) {
+ if (participantDefinitionUpdate.getParticipantType().equals(clParticipantType)) {
+ participantDefinitionUpdate.getControlLoopElementDefinitionList().add(clDefinition);
+ participantExists = true;
+ }
+ }
+ if (!participantExists) {
+ participantDefinitionUpdates.add(
+ getParticipantDefinition(clDefinition, clParticipantType, controlLoopElementDefinitionList));
+ }
+ }
+ }
+
+ private static ParticipantDefinition getParticipantDefinition(ControlLoopElementDefinition clDefinition,
+ ToscaConceptIdentifier clParticipantType,
+ List<ControlLoopElementDefinition> controlLoopElementDefinitionList) {
+ var participantDefinition = new ParticipantDefinition();
+ participantDefinition.setParticipantType(clParticipantType);
+ controlLoopElementDefinitionList.add(clDefinition);
+ participantDefinition.setControlLoopElementDefinitionList(controlLoopElementDefinitionList);
+ return participantDefinition;
+ }
+}
diff --git a/common/src/main/resources/tosca/ApplicationServiceDescriptorTypes.yaml b/common/src/main/resources/tosca/ApplicationServiceDescriptorTypes.yaml
new file mode 100644
index 000000000..ad16173b9
--- /dev/null
+++ b/common/src/main/resources/tosca/ApplicationServiceDescriptorTypes.yaml
@@ -0,0 +1,74 @@
+# ============LICENSE_START=======================================================
+# Copyright (C) 2021 Nordix Foundation.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+tosca_definitions_version: tosca_simple_yaml_1_3
+node_types:
+ org.oran.asd.DeploymentItem:
+ version: 1.0.1
+ derived_from: org.onap.policy.clamp.controlloop.KubernetesControlLoopElement
+ properties:
+ deployemntItemId:
+ type: onap.datatypes.ToscaConceptIdentifier
+ required: true
+ description: The identifier of this deployment item
+ artifactId:
+ type: onap.datatypes.ToscaConceptIdentifier
+ required: true
+ description: Reference to a DeploymentArtifact
+ lifecycleParameters:
+ type: string
+ required: false
+ description: List of parameters that can be overridden at deployment time
+ (e.g. values for values.yaml in the chart this item references)
+ org.oran.asd.ASD:
+ version: 1.0.1
+ derived_from: org.onap.policy.clamp.controlloop.ControlLoop
+ properties:
+ asdId:
+ type: onap.datatypes.ToscaConceptIdentifier
+ required: true
+ description: The identifier of this deployment item
+ asdSchemaVersion:
+ type: onap.datatypes.ToscaConceptIdentifier
+ required: true
+ description: Reference to a DeploymentArtifact
+ asdApplication:
+ type: onap.datatypes.ToscaConceptIdentifier
+ required: true
+ description: Reference to a DeploymentArtifact
+ asdApplicationInfoName:
+ type: string
+ required: false
+ description: Human readable name for the Application service. Can change during the AS lifetime.
+ asdExtCpd:
+ type: string
+ required: false
+ description: Describes external interface(s) exposed by this AS enabling connection with a VL.
+ (Similar to VnfExtCpd on VNF-D, but only describing L3 and above interfaces, since
+ K8S can’t do <L3)
+ enhancedClusterCapabilities:
+ type: string
+ required: false
+ description: Describes expected capabilities of the target Kubernetes cluster to aid placement of the
+ application service on a suitable cluster. Examples of capabilities are; required networking
+ characteristics, Kubernetes API extensions or quantifiable node specific resources. This attribute
+ can contain information complementing information provided in the referenced DeploymentArtifacts.
+ Note; Modeling of enhancedClusterCapabilities is subject to standardization but is ffs. Alignment
+ between O2-IMS and O2-DMS of these values is required.
+
+
+
diff --git a/common/src/test/resources/asd/MyDomainASDDefintion.yaml b/common/src/test/resources/asd/MyDomainASDDefintion.yaml
new file mode 100644
index 000000000..f354ea075
--- /dev/null
+++ b/common/src/test/resources/asd/MyDomainASDDefintion.yaml
@@ -0,0 +1,131 @@
+# ============LICENSE_START=======================================================
+# Copyright (C) 2021 Nordix Foundation.
+# ================================================================================
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# SPDX-License-Identifier: Apache-2.0
+# ============LICENSE_END=========================================================
+tosca_definitions_version: tosca_simple_yaml_1_3
+topology_template:
+ node_templates:
+ org.oran.asd.MyApplicationServiceDeploymentItem0:
+ version: 1.0.0
+ type: org.oran.asd.DeploymentItem
+ type_version: 1.0.1
+ description: The first Deployment Item in our Application Service
+ properties:
+ deployemntItemId: org.oran.asd.MyApplicationServiceDeploymentItem0:1.0.0
+ artifactId: org.oran.asd.MyApplicationServiceDeploymentArtifact0:1.0.0
+ lifecycleParameters: To be defined
+ provider: Ericsson
+ participantType: org.onap.policy.controlloop.participant.Kubernetes:1.0.0
+ startPhase: 2
+ uninitializedToPassiveTimeout: 180
+ chart:
+ chartId: MyApplicationServiceDeploymentItem0Chart:1.0.0
+ releaseName: SomeRelease
+ namespace: org.oran.asd.MyApplicationService
+ org.oran.asd.MyApplicationServiceDeploymentItem1:
+ version: 1.0.0
+ type: org.oran.asd.DeploymentItem
+ type_version: 1.0.1
+ description: The second Deployment Item in our Application Service
+ properties:
+ deployemntItemId: org.oran.asd.MyApplicationServiceDeploymentItem1:1.0.0
+ artifactId: org.oran.asd.MyApplicationServiceDeploymentArtifact1:1.0.0
+ lifecycleParameters: To be defined
+ provider: Ericsson
+ participantType: org.onap.policy.controlloop.participant.Kubernetes:1.0.0
+ startPhase: 4
+ uninitializedToPassiveTimeout: 10
+ chart:
+ chartId: MyApplicationServiceDeploymentItem1Chart:1.0.0
+ releaseName: SomeRelease
+ namespace: org.oran.asd.MyApplicationService
+ org.oran.asd.MyApplicationRestConfig:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.HttpControlLoopElement
+ type_version: 1.0.1
+ description: The REST configuration for My Application
+ properties:
+ provider: Ericsson
+ participantType: org.onap.policy.controlloop.participant.Http:1.0.0
+ startPhase: 1
+ baseUrl: https://10.10.10.10:12345/MyApplicationServiceDeploymentItem0RestEndpoint
+ httpHeaders:
+ "Content-Type": "application/json"
+ "Accept": "application/json"
+ configurationEntities:
+ org.onap.policy.controlloop.gentleguidance.setDomainConfig:1.0.0:
+ configurationEntityId: org.onap.policy.controlloop.gentleguidance.setDomainConfig:1.0.0
+ restSequence:
+ - restRequestId: org.oran.asd.myapplication.setDomainConfig.CreateConfig:1.0.0
+ httpMethd: POST
+ path: "gentle/create"
+ body:
+ gentleLevel: veryGentle
+ gentleType: softAndFurry
+ expectedResponse: 200
+ - restRequestId: org.oran.asd.myapplication.setDomainConfig.CreateConfig:1.0.0
+ httpMethd: POST
+ path: "guidance/create"
+ body:
+ guidanceLevel: high
+ guidanceType: subtle
+ expectedResponse: 200
+ org.oran.asd.myapplication.updateDomainConfig:1.0.0:
+ configurationEntityId: org.oran.asd.myapplication.updateDomainConfig:1.0.0
+ restSequence:
+ - restRequestId: org.oran.asd.myapplication.updateDomainConfig.UpdateConfig:1.0.0
+ httpMethd: PUT
+ path: "gentle/update]"
+ body:
+ gentleLevel: robust
+ gentleType: hardAndGritty
+ expectedResponse: 200
+ - restRequestId: org.oran.asd.myapplication.updateDomainConfig.UpdateConfig:1.0.0
+ httpMethd: PUT
+ path: "guidance/update"
+ body:
+ guidanceLevel: low
+ guidanceType: terse
+ expectedResponse: 200
+ org.oran.asd.MyApplicationPolicy:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
+ type_version: 1.0.1
+ description: My Application Operational Policy
+ properties:
+ provider: Ericsson
+ participantType: org.onap.policy.controlloop.participant.Policy:1.0.0
+ startPhase: 0
+ policyType: onap.policies.controlloop.operational.common.Apex:1.0.0
+ policyId: org.oran.asd.myapplication.ServiceControlPolicy:1.0.0
+ org.org.oran.asd.MyApplicationService:
+ version: 1.0.0
+ type: org.oran.asd.ASD
+ type_version: 1.0.1
+ description: ASD Definition of the My Application Service
+ properties:
+ asdId: org.org.oran.asd.MyApplicationService:1.0.0
+ asdSchemaVersion: 2.3.2
+ provider: Ericsson
+ asdApplication: org.oran.asd.MyWonderfulApplicationService:1.2.1
+ asdApplicationInfoName: The wonderful ASD service that does everything imaginable
+ asdExtCpd: To be defined
+ enhancedCludterCapabilities: To be defined
+ elements:
+ - org.oran.asd.MyApplicationServiceDeploymentItem0:1.0.0
+ - org.oran.asd.MyApplicationServiceDeploymentItem1:1.0.0
+ - org.oran.asd.MyApplicationRestConfig:1.0.0
+ - org.oran.asd.MyApplicationPolicy:1.0.0
diff --git a/common/src/test/resources/gentleguidance/GentleGuidanceMultipleTopologyTemplates.yaml b/common/src/test/resources/gentleguidance/GentleGuidanceMultipleTopologyTemplates.yaml
new file mode 100644
index 000000000..93b5ba5a5
--- /dev/null
+++ b/common/src/test/resources/gentleguidance/GentleGuidanceMultipleTopologyTemplates.yaml
@@ -0,0 +1,299 @@
+tosca_definitions_version: tosca_simple_yaml_1_3
+topology_template:
+ node_templates:
+ org.onap.domain.gentleguidance.KubernetesControlLoopElementDefinition:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.KubernetesControlLoopElement
+ type_version: 1.0.1
+ description: Control loop element for the Gentle Guidance Kubernetes Microservice
+ org.onap.domain.gentleguidance.RestControlLoopElementDefinition:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.HttpControlLoopElement
+ type_version: 1.0.1
+ description: Control loop element for the Gentle Guidance Microservice REST configuration
+ org.onap.domain.gentleguidance.PolicyControlLoopElementDefinition:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
+ type_version: 1.0.1
+ description: Control loop element for the Gentle Guidance Operational Policy
+ org.onap.domain.gentleguidance.CdsControlLoopElementDefinition:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.CDSControlLoopElement
+ type_version: 1.0.1
+ description: Control loop element for the Gentle Guidance CDS blueprint
+ org.onap.domain.gentleguidance.ControlLoopDefinition:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.ControlLoop
+ type_version: 1.0.1
+ description: Control loop definition for the Gentle Guidance domain
+ properties:
+ provider: Ericsson
+ elements:
+ - org.onap.domain.gentleguidance.KubernetesControlLoopElementDefinition:1.0.0
+ - org.onap.domain.gentleguidance.RestControlLoopElementDefinition:1.0.0
+ - org.onap.domain.gentleguidance.PolicyControlLoopElementDefinition:1.0.0
+ - org.onap.domain.gentleguidance.CdsControlLoopElementDefinition:1.0.0
+
+After Commissioning:
+
+tosca_definitions_version: tosca_simple_yaml_1_3
+topology_template:
+ node_templates:
+ org.onap.domain.gentleguidance.KubernetesControlLoopElementDefinition:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.KubernetesControlLoopElement
+ type_version: 1.0.1
+ description: Control loop element for the Gentle Guidance Kubernetes Microservice
+ properties:
+ provider: Ericsson
+ participantType: org.onap.policy.controlloop.participant.Kubernetes:1.0.0
+ startPhase: 2
+ uninitializedToPassiveTimeout: 180
+ org.onap.domain.gentleguidance.RestControlLoopElementDefinition:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.HttpControlLoopElement
+ type_version: 1.0.1
+ description: Control loop element for the Gentle Guidance Microservice REST configuration
+ properties:
+ provider: Ericsson
+ participantType: org.onap.policy.controlloop.participant.Http:1.0.0
+ startPhase: 1
+ baseUrl: https://10.10.10.10:12345/gentleguidancemicroservice
+ org.onap.domain.gentleguidance.PolicyControlLoopElementDefinition:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
+ type_version: 1.0.1
+ description: Control loop element for the Gentle Guidance Operational Policy
+ properties:
+ provider: Ericsson
+ participantType: org.onap.policy.controlloop.participant.Policy:1.0.0
+ startPhase: 0
+ org.onap.domain.gentleguidance.CdsControlLoopElementDefinition:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.CDSControlLoopElement
+ type_version: 1.0.1
+ description: Control loop element for the Gentle Guidance CDS blueprint
+ properties:
+ provider: Ericsson
+ participantType: org.onap.policy.controlloop.participant.Cds:1.0.0
+ startPhase: 0
+ org.onap.domain.gentleguidance.ControlLoopDefinition:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.ControlLoop
+ type_version: 1.0.1
+ description: Control loop definition for the Gentle Guidance domain
+ properties:
+ provider: Ericsson
+ elements:
+ - org.onap.domain.gentleguidance.KubernetesControlLoopElementDefinition:1.0.0
+ - org.onap.domain.gentleguidance.RestControlLoopElementDefinition:1.0.0
+ - org.onap.domain.gentleguidance.PolicyControlLoopElementDefinition:1.0.0
+ - org.onap.domain.gentleguidance.CdsControlLoopElementDefinition:1.0.0
+
+
+After Instantiation:
+
+(Instance 1)
+
+tosca_definitions_version: tosca_simple_yaml_1_3
+topology_template:
+ node_templates:
+ org.onap.domain.gentleguidance.KubernetesControlLoopElementDefinition_Instance1:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.KubernetesControlLoopElement
+ type_version: 1.0.1
+ description: Control loop element for the Gentle Guidance Kubernetes Microservice
+ properties:
+ provider: Ericsson
+ participantType: org.onap.policy.controlloop.participant.Kubernetes:1.0.0
+ startPhase: 2
+ uninitializedToPassiveTimeout: 180
+ chart:
+ chartId: GentleGuidance:1.0.0
+ releaseName: Istanbul
+ namespace: org.onap.policy.controlloop.gentleguidance
+ org.onap.domain.gentleguidance.RestControlLoopElementDefinition_Instance1:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.HttpControlLoopElement
+ type_version: 1.0.1
+ description: Control loop element for the Gentle Guidance Microservice REST configuration
+ properties:
+ provider: Ericsson
+ participantType: org.onap.policy.controlloop.participant.Http:1.0.0
+ startPhase: 1
+ baseUrl: https://10.10.10.10:12345/gentleguidancemicroservice
+ httpHeaders:
+ "Content-Type": "application/json"
+ "Accept": "application/json"
+ configurationEntities:
+ org.onap.policy.controlloop.gentleguidance.setGentleGuidanceConfig:1.0.0:
+ configurationEntityId: org.onap.policy.controlloop.gentleguidance.setGentleGuidanceConfig:1.0.0
+ restSequence:
+ - restRequestId: org.onap.policy.controlloop.gentleguidance.setGentleGuidanceConfig.CreateGentle:1.0.0
+ httpMethd: POST
+ path: "gentle/create"
+ body:
+ gentleLevel: veryGentle
+ gentleType: softAndFurry
+ expectedResponse: 200
+ - restRequestId: org.onap.policy.controlloop.gentleguidance.setGentleGuidanceConfig.CreateGuidance:1.0.0
+ httpMethd: POST
+ path: "guidance/create"
+ body:
+ guidanceLevel: high
+ guidanceType: subtle
+ expectedResponse: 200
+ org.onap.policy.controlloop.gentleguidance.updateGentleGuidanceConfig:1.0.0:
+ configurationEntityId: org.onap.policy.controlloop.gentleguidance.updateGentleGuidanceConfig:1.0.0
+ restSequence:
+ - restRequestId: org.onap.policy.controlloop.gentleguidance.updateGentleGuidanceConfig.CreateGentle:1.0.0
+ httpMethd: PUT
+ path: "gentle/update]"
+ body:
+ gentleLevel: robust
+ gentleType: hardAndGritty
+ expectedResponse: 200
+ - restRequestId: org.onap.policy.controlloop.gentleguidance.updateGentleGuidanceConfig.CreateGuidance:1.0.0
+ httpMethd: PUT
+ path: "guidance/update"
+ body:
+ guidanceLevel: low
+ guidanceType: terse
+ expectedResponse: 200
+ org.onap.domain.gentleguidance.PolicyControlLoopElementDefinition_Instance1:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
+ type_version: 1.0.1
+ description: Control loop element for the Gentle Guidance Operational Policy
+ properties:
+ provider: Ericsson
+ participantType: org.onap.policy.controlloop.participant.Policy:1.0.0
+ startPhase: 0
+ policyType: onap.policies.controlloop.operational.common.Apex:1.0.0
+ policyId: org.onap.domain.gentleguidance.policy.GentleGuidanceAssertive:1.0.0
+ org.onap.domain.gentleguidance.CdsControlLoopElementDefinition_Instance1:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.CDSControlLoopElement
+ type_version: 1.0.1
+ description: Control loop element for the Gentle Guidance CDS blueprint
+ properties:
+ provider: Ericsson
+ participantType: org.onap.policy.controlloop.participant.Cds:1.0.0
+ startPhase: 0
+ cdsBlueprint: "Placeholder for the CDS blueprint"
+ org.onap.domain.gentleguidance.ControlLoopDefinition_Instance1:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.ControlLoop
+ type_version: 1.0.1
+ description: Control loop definition for the Gentle Guidance domain
+ properties:
+ provider: Ericsson
+ elements:
+ - org.onap.domain.gentleguidance.KubernetesControlLoopElementDefinition_Instance1:1.0.0
+ - org.onap.domain.gentleguidance.RestControlLoopElementDefinition_Instance1:1.0.0
+ - org.onap.domain.gentleguidance.PolicyControlLoopElementDefinition_Instance1:1.0.0
+ - org.onap.domain.gentleguidance.CdsControlLoopElementDefinition_Instance1:1.0.0
+
+
+(Instance 2)
+
+tosca_definitions_version: tosca_simple_yaml_1_3
+topology_template:
+ node_templates:
+ org.onap.domain.gentleguidance.KubernetesControlLoopElementDefinition_Instance2:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.KubernetesControlLoopElement
+ type_version: 1.0.1
+ description: Control loop element for the Gentle Guidance Kubernetes Microservice
+ properties:
+ provider: Ericsson
+ participantType: org.onap.policy.controlloop.participant.Kubernetes:1.0.0
+ startPhase: 2
+ uninitializedToPassiveTimeout: 180
+ chart:
+ chartId: GentleGuidance:1.0.0
+ releaseName: Istanbul
+ namespace: org.onap.policy.controlloop.gentleguidance
+ org.onap.domain.gentleguidance.RestControlLoopElementDefinition_Instance2:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.HttpControlLoopElement
+ type_version: 1.0.1
+ description: Control loop element for the Gentle Guidance Microservice REST configuration
+ properties:
+ provider: Ericsson
+ participantType: org.onap.policy.controlloop.participant.Http:1.0.0
+ startPhase: 1
+ baseUrl: https://10.10.10.10:12345/gentleguidancemicroservice
+ httpHeaders:
+ "Content-Type": "application/json"
+ "Accept": "application/json"
+ configurationEntities:
+ org.onap.policy.controlloop.gentleguidance.setGentleGuidanceConfig:1.0.0:
+ configurationEntityId: org.onap.policy.controlloop.gentleguidance.setGentleGuidanceConfig:1.0.0
+ restSequence:
+ - restRequestId: org.onap.policy.controlloop.gentleguidance.setGentleGuidanceConfig.CreateGentle:1.0.0
+ httpMethd: POST
+ path: "gentle/create"
+ body:
+ gentleLevel: veryGentle
+ gentleType: softAndFurry
+ expectedResponse: 200
+ - restRequestId: org.onap.policy.controlloop.gentleguidance.setGentleGuidanceConfig.CreateGuidance:1.0.0
+ httpMethd: POST
+ path: "guidance/create"
+ body:
+ guidanceLevel: low
+ guidanceType: subtle
+ expectedResponse: 200
+ org.onap.policy.controlloop.gentleguidance.updateGentleGuidanceConfig:1.0.0:
+ configurationEntityId: org.onap.policy.controlloop.gentleguidance.updateGentleGuidanceConfig:1.0.0
+ restSequence:
+ - restRequestId: org.onap.policy.controlloop.gentleguidance.updateGentleGuidanceConfig.CreateGentle:1.0.0
+ httpMethd: PUT
+ path: "gentle/update]"
+ body:
+ gentleLevel: robust
+ gentleType: SoftandRobust
+ expectedResponse: 200
+ - restRequestId: org.onap.policy.controlloop.gentleguidance.updateGentleGuidanceConfig.CreateGuidance:1.0.0
+ httpMethd: PUT
+ path: "guidance/update"
+ body:
+ guidanceLevel: low
+ guidanceType: terse
+ expectedResponse: 200
+ org.onap.domain.gentleguidance.PolicyControlLoopElementDefinition_Instance2:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.PolicyControlLoopElement
+ type_version: 1.0.1
+ description: Control loop element for the Gentle Guidance Operational Policy
+ properties:
+ provider: Ericsson
+ participantType: org.onap.policy.controlloop.participant.Policy:1.0.0
+ startPhase: 0
+ policyType: onap.policies.controlloop.operational.common.Apex:1.0.0
+ policyId: org.onap.domain.gentleguidance.policy.GentleGuidanceAssertive:1.0.0
+ org.onap.domain.gentleguidance.CdsControlLoopElementDefinition_Instance2:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.CDSControlLoopElement
+ type_version: 1.0.1
+ description: Control loop element for the Gentle Guidance CDS blueprint
+ properties:
+ provider: Ericsson
+ participantType: org.onap.policy.controlloop.participant.Cds:1.0.0
+ startPhase: 0
+ cdsBlueprint: "Placeholder for the CDS blueprint"
+ org.onap.domain.gentleguidance.ControlLoopDefinition_Instance2:
+ version: 1.0.0
+ type: org.onap.policy.clamp.controlloop.ControlLoop
+ type_version: 1.0.1
+ description: Control loop definition for the Gentle Guidance domain
+ properties:
+ provider: Ericsson
+ elements:
+ - org.onap.domain.gentleguidance.KubernetesControlLoopElementDefinition_Instance2:1.0.0
+ - org.onap.domain.gentleguidance.RestControlLoopElementDefinition_Instance2:1.0.0
+ - org.onap.domain.gentleguidance.PolicyControlLoopElementDefinition_Instance2:1.0.0
+ - org.onap.domain.gentleguidance.CdsControlLoopElementDefinition_Instance2:1.0.0
+
+