diff options
61 files changed, 6790 insertions, 2941 deletions
diff --git a/adapters/mso-adapter-utils/src/test/java/org/onap/so/cloud/authentication/AuthenticationMethodTest.java b/adapters/mso-adapter-utils/src/test/java/org/onap/so/cloud/authentication/AuthenticationMethodTest.java index 41aac0084c..78b5c8ede9 100644 --- a/adapters/mso-adapter-utils/src/test/java/org/onap/so/cloud/authentication/AuthenticationMethodTest.java +++ b/adapters/mso-adapter-utils/src/test/java/org/onap/so/cloud/authentication/AuthenticationMethodTest.java @@ -3,6 +3,7 @@ * ONAP - SO * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2022 Samsung Electronics. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,7 +23,7 @@ package org.onap.so.cloud.authentication; import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs; import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; @@ -61,7 +62,7 @@ public class AuthenticationMethodTest { ci.setMsoId("test"); Authentication auth = authenticationMethodFactory.getAuthenticationFor(ci); - assertTrue(RackspaceAuthentication.class.equals(auth.getClass())); + assertEquals(RackspaceAuthentication.class, auth.getClass()); } @@ -73,7 +74,7 @@ public class AuthenticationMethodTest { ci.setMsoId("someuser"); Authentication auth = authenticationMethodFactory.getAuthenticationFor(ci); - assertTrue(UsernamePassword.class.equals(auth.getClass())); + assertEquals(UsernamePassword.class, auth.getClass()); } @@ -85,7 +86,7 @@ public class AuthenticationMethodTest { ci.setMsoId("test"); Authentication auth = authenticationMethodFactory.getAuthenticationFor(ci); - assertTrue(RackspaceAuthentication.class.equals(auth.getClass())); + assertEquals(RackspaceAuthentication.class, auth.getClass()); } @Test @@ -96,7 +97,7 @@ public class AuthenticationMethodTest { ci.setMsoId("someuser"); Authentication auth = authenticationMethodFactory.getAuthenticationFor(ci); - assertTrue(UsernamePassword.class.equals(auth.getClass())); + assertEquals(UsernamePassword.class, auth.getClass()); } diff --git a/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoCommonUtilsTest.java b/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoCommonUtilsTest.java index 622ad4f94f..160201f442 100644 --- a/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoCommonUtilsTest.java +++ b/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoCommonUtilsTest.java @@ -3,6 +3,7 @@ * ONAP - SO * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2022 - Samsung Electronics. 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. @@ -100,19 +101,19 @@ public class MsoCommonUtilsTest extends BaseTest { MsoException me = commonUtils.keystoneErrorToMsoException(openStackConnectException, "ContextError"); assertTrue(me instanceof MsoIOException); - assertTrue("connect".equals(me.getMessage())); + assertEquals("connect", me.getMessage()); MsoException me2 = commonUtils.keystoneErrorToMsoException(openStackResponseException, "ContextError"); assertTrue(me2 instanceof MsoOpenstackException); - assertTrue("ContextError".equals(me2.getContext())); - assertTrue(MsoExceptionCategory.OPENSTACK.equals(me2.getCategory())); + assertEquals("ContextError", me2.getContext()); + assertEquals(MsoExceptionCategory.OPENSTACK, me2.getCategory()); OpenStackResponse openStackResponse = Mockito.mock(OpenStackResponse.class); Error error = mapper.readValue(new File(RESOURCE_PATH + "Error.json"), Error.class); - doReturn(error).when(openStackResponse).getErrorEntity(eq(Error.class)); + doReturn(error).when(openStackResponse).getErrorEntity(Error.class); openStackResponseException = new OpenStackResponseException("response", 501, openStackResponse); @@ -131,19 +132,19 @@ public class MsoCommonUtilsTest extends BaseTest { MsoException me = commonUtils.heatExceptionToMsoException(openStackConnectException, "ContextError"); assertTrue(me instanceof MsoIOException); - assertTrue("connect".equals(me.getMessage())); + assertEquals("connect", me.getMessage()); MsoException me2 = commonUtils.heatExceptionToMsoException(openStackResponseException, "ContextError"); assertTrue(me2 instanceof MsoOpenstackException); - assertTrue("ContextError".equals(me2.getContext())); - assertTrue(MsoExceptionCategory.OPENSTACK.equals(me2.getCategory())); + assertEquals("ContextError", me2.getContext()); + assertEquals(MsoExceptionCategory.OPENSTACK, me2.getCategory()); OpenStackResponse openStackResponse = Mockito.mock(OpenStackResponse.class); Explanation explanation = mapper.readValue(new File(RESOURCE_PATH + "Explanation.json"), Explanation.class); - doReturn(explanation).when(openStackResponse).getErrorEntity(eq(Explanation.class)); + doReturn(explanation).when(openStackResponse).getErrorEntity(Explanation.class); openStackResponseException = new OpenStackResponseException("response", 501, openStackResponse); @@ -163,18 +164,18 @@ public class MsoCommonUtilsTest extends BaseTest { MsoException me = commonUtils.neutronExceptionToMsoException(openStackConnectException, "ContextError"); assertTrue(me instanceof MsoIOException); - assertTrue("connect".equals(me.getMessage())); + assertEquals("connect", me.getMessage()); MsoException me2 = commonUtils.neutronExceptionToMsoException(openStackResponseException, "ContextError"); assertTrue(me2 instanceof MsoOpenstackException); - assertTrue("ContextError".equals(me2.getContext())); - assertTrue(MsoExceptionCategory.OPENSTACK.equals(me2.getCategory())); + assertEquals("ContextError", me2.getContext()); + assertEquals(MsoExceptionCategory.OPENSTACK, me2.getCategory()); OpenStackResponse openStackResponse = Mockito.mock(OpenStackResponse.class); NeutronError explanation = mapper.readValue(new File(RESOURCE_PATH + "NeutronError.json"), NeutronError.class); - doReturn(explanation).when(openStackResponse).getErrorEntity(eq(NeutronError.class)); + doReturn(explanation).when(openStackResponse).getErrorEntity(NeutronError.class); openStackResponseException = new OpenStackResponseException("response", 501, openStackResponse); @@ -190,8 +191,8 @@ public class MsoCommonUtilsTest extends BaseTest { MsoException me = commonUtils.runtimeExceptionToMsoException(re, "ContextError"); assertTrue(me instanceof MsoAdapterException); - assertTrue("ContextError".equals(me.getContext())); - assertTrue(MsoExceptionCategory.INTERNAL.equals(me.getCategory())); + assertEquals("ContextError", me.getContext()); + assertEquals(MsoExceptionCategory.INTERNAL, me.getCategory()); } @Test @@ -202,6 +203,7 @@ public class MsoCommonUtilsTest extends BaseTest { assertTrue(msoException instanceof MsoAdapterException); assertEquals("ContextError", msoException.getContext()); - assertTrue(MsoExceptionCategory.INTERNAL.equals(msoException.getCategory())); + assertEquals(MsoExceptionCategory.INTERNAL, msoException.getCategory()); } } + diff --git a/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoHeatEnvironmentResourceTest.java b/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoHeatEnvironmentResourceTest.java index 2c67dfd009..18372bb8ea 100644 --- a/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoHeatEnvironmentResourceTest.java +++ b/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoHeatEnvironmentResourceTest.java @@ -16,8 +16,7 @@ package org.onap.so.openstack.utils; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertNotEquals; import org.junit.Test; public class MsoHeatEnvironmentResourceTest { @@ -36,8 +35,8 @@ public class MsoHeatEnvironmentResourceTest { assertEquals("maeValue", mae.getValue()); assertEquals("\"msoHERName\": msoHERValue", msoHER.toString()); assertEquals("\"name\": maeValue", mae.toString()); - assertFalse(mae.equals(op)); - assertTrue(mae.equals(mre)); + assertNotEquals(mae, op); + assertEquals(mae, mre); assertEquals("name".hashCode(), mae.hashCode()); } } diff --git a/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoHeatUtilsTest.java b/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoHeatUtilsTest.java index 5ee4987e38..85219c3b5c 100644 --- a/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoHeatUtilsTest.java +++ b/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoHeatUtilsTest.java @@ -447,7 +447,7 @@ public class MsoHeatUtilsTest extends MsoHeatUtils { heatUtils.createStack(createStackParam, cloudSiteId, tenantId); Mockito.verify(stackResource, times(1)).create(createStackParam); - Mockito.verify(heatUtils, times(1)).saveStackRequest(eq(createStackParam), eq(requestId), eq("stackName")); + Mockito.verify(heatUtils, times(1)).saveStackRequest(createStackParam, requestId, "stackName"); Mockito.verify(heatClient, times(1)).getStacks(); Mockito.verify(stackResource, times(1)).create(createStackParam); } diff --git a/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoMulticloudUtilsTest.java b/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoMulticloudUtilsTest.java index 7adfe091d3..d197550937 100644 --- a/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoMulticloudUtilsTest.java +++ b/adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoMulticloudUtilsTest.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP - SO * ================================================================================ - * Copyright (C) 2019 Samsung Intellectual Property. All rights reserved. + * Copyright (C) 2022 Samsung 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. @@ -28,7 +28,7 @@ import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertSame; import static org.junit.Assert.fail; import static org.mockito.Mockito.when; import static org.onap.so.openstack.utils.MsoMulticloudUtils.MULTICLOUD_QUERY_BODY_NULL; @@ -113,13 +113,13 @@ public class MsoMulticloudUtilsTest extends BaseTest { StackInfo result = multicloudUtils.deleteStack("MTN14", "CloudOwner", "TEST-tenant", "TEST-stack/TEST-workload"); assertNotNull(result); - assertTrue(HeatStatus.NOTFOUND == result.getStatus()); + assertSame(HeatStatus.NOTFOUND, result.getStatus()); } @Test public void queryStack() throws MsoException { StackInfo result = multicloudUtils.queryStack("MTN13", "CloudOwner", "TEST-tenant", "instanceId"); - assertTrue(HeatStatus.NOTFOUND == result.getStatus()); + assertSame(HeatStatus.NOTFOUND, result.getStatus()); } @Test @@ -129,7 +129,7 @@ public class MsoMulticloudUtilsTest extends BaseTest { .withStatus(HttpStatus.SC_OK))); StackInfo result = multicloudUtils.queryStack("MTN13", "CloudOwner", "TEST-tenant", "instanceName/instanceId"); - assertTrue(HeatStatus.FAILED == result.getStatus()); + assertSame(HeatStatus.FAILED, result.getStatus()); assertEquals(MULTICLOUD_QUERY_BODY_NULL, result.getStatusMessage()); } @@ -143,7 +143,7 @@ public class MsoMulticloudUtilsTest extends BaseTest { CloudInfo cloudInfo = new CloudInfo("cloudSiteId", "cloudOwner", "tenantId", "tenantName"); VduInstance vduInstance = multicloudUtils.deleteVdu(cloudInfo, "instanceId", 3); assertNotNull(vduInstance); - assertTrue(VduStateType.DELETED == vduInstance.getStatus().getState()); + assertSame(VduStateType.DELETED, vduInstance.getStatus().getState()); } @Ignore diff --git a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/R__MacroData.sql b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/R__MacroData.sql index 20a404372f..c1a67a5990 100644 --- a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/R__MacroData.sql +++ b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/R__MacroData.sql @@ -70,42 +70,44 @@ INSERT INTO orchestration_flow_reference(COMPOSITE_ACTION, SEQ_NO, FLOW_NAME, SC ('Service-Macro-Unassign', '4', 'UnassignNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Unassign' and CLOUD_OWNER = 'DEFAULT')), ('Service-Macro-Unassign', '5', 'UnassignServiceInstanceBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Unassign' and CLOUD_OWNER = 'DEFAULT')), ('Service-Macro-Create', '1', 'AssignServiceInstanceBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '2', 'CreateNetworkCollectionBB', NULL, NULL,1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '3', 'AssignNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '4', 'AssignVnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '5', 'AssignVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '6', 'AssignVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '7', 'ControllerExecutionBB', 'vnf', 'config-assign', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '8', 'AssignPnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '9', 'WaitForPnfReadyBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '10', 'ControllerExecutionBB', 'pnf', 'config-assign', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '11', 'ControllerExecutionBB', 'pnf', 'config-deploy', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '12', 'ActivatePnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '13', 'CreateNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '14', 'ActivateNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '15', 'CreateVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '16', 'ActivateVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '17', 'CreateVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '18', 'ActivateVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '19', 'ControllerExecutionBB', 'vnf', 'config-deploy', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '20', 'ActivateVnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '21', 'ActivateNetworkCollectionBB', NULL, NULL,1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Create', '22', 'ActivateServiceInstanceBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Delete', '1', 'DeactivateVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Delete', '2', 'DeleteVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Delete', '3', 'DeactivateVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Delete', '4', 'DeleteVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Delete', '5', 'DeactivateVnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Delete', '6', 'DeactivatePnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Delete', '7', 'DeactivateNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Delete', '8', 'DeleteNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Delete', '9', 'DeleteNetworkCollectionBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Delete', '10', 'DeactivateServiceInstanceBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Delete', '11', 'UnassignVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Delete', '12', 'UnassignVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Delete', '13', 'UnassignVnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Delete', '14', 'UnassignNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), -('Service-Macro-Delete', '15', 'UnassignServiceInstanceBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '2', 'CreateChildServiceBB', NULL, NULL,1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '3', 'CreateNetworkCollectionBB', NULL, NULL,1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '4', 'AssignNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '5', 'AssignVnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '6', 'AssignVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '7', 'AssignVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '8', 'ControllerExecutionBB', 'vnf', 'config-assign', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '9', 'AssignPnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '10', 'WaitForPnfReadyBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '11', 'ControllerExecutionBB', 'pnf', 'config-assign', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '12', 'ControllerExecutionBB', 'pnf', 'config-deploy', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '13', 'ActivatePnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '14', 'CreateNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '15', 'ActivateNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '16', 'CreateVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '17', 'ActivateVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '18', 'CreateVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '19', 'ActivateVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '20', 'ControllerExecutionBB', 'vnf', 'config-deploy', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '21', 'ActivateVnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '22', 'ActivateNetworkCollectionBB', NULL, NULL,1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Create', '23', 'ActivateServiceInstanceBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Delete', '1', 'DeleteChildServiceBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Delete', '2', 'DeactivateVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Delete', '3', 'DeleteVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Delete', '4', 'DeactivateVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Delete', '5', 'DeleteVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Delete', '6', 'DeactivateVnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Delete', '7', 'DeactivatePnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Delete', '8', 'DeactivateNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Delete', '9', 'DeleteNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Delete', '10', 'DeleteNetworkCollectionBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Delete', '11', 'DeactivateServiceInstanceBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Delete', '12', 'UnassignVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Delete', '13', 'UnassignVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Delete', '14', 'UnassignVnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Delete', '15', 'UnassignNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), +('Service-Macro-Delete', '16', 'UnassignServiceInstanceBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')), ('Service-Macro-Upgrade', '1', 'ChangeModelServiceInstanceBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Upgrade' and CLOUD_OWNER = 'DEFAULT')), ('Network-Create', '1', 'AssignNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Network-Create' and CLOUD_OWNER = 'DEFAULT')), ('Network-Create', '2', 'CreateNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Network-Create' and CLOUD_OWNER = 'DEFAULT')), @@ -334,7 +336,9 @@ VALUES ('VNFHealthCheckActivity','*','*','*','*','Manual','Abort','*', '*'), ('VNFConfigModifyActivity','*','*','*','*','Manual','Abort','*', '*'), ('VNFUnsetInMaintFlagActivity','*','*','*','*','Manual','Abort','*', '*'), -('VNFUnsetClosedLoopDisabledActivity','*','*','*','*','Manual','Abort','*', '*'); +('VNFUnsetClosedLoopDisabledActivity','*','*','*','*','Manual','Abort','*', '*'), +('DeleteChildServiceBB', '*', '*', '*', '*', 'Rollback', 'Abort', '*', '*'), +('CreateChildServiceBB', '*', '*', '*', '*', 'Rollback', 'Abort', '*', '*'); INSERT INTO building_block_detail (building_block_name, resource_type, target_action) VALUES @@ -375,11 +379,13 @@ VALUES ('CreateVfModuleBB', 'VF_MODULE', 'CREATE'), ('CreateNetworkBB', 'NETWORK', 'CREATE'), ('CreateNetworkCollectionBB', 'NETWORK_COLLECTION', 'CREATE'), +('CreateChildServiceBB', 'NO_VALIDATE', 'CUSTOM'), ('DeleteVolumeGroupBB', 'VOLUME_GROUP', 'DELETE'), ('DeleteVfModuleBB', 'VF_MODULE', 'DELETE'), ('DeleteNetworkBB', 'NETWORK', 'DELETE'), ('DeleteNetworkCollectionBB', 'NETWORK_COLLECTION', 'DELETE'), +('DeleteChildServiceBB', 'NO_VALIDATE', 'CUSTOM'), ('ConfigurationScaleOutBB', 'NO_VALIDATE', 'CUSTOM'), ('GenericVnfHealthCheckBB', 'NO_VALIDATE', 'CUSTOM'), diff --git a/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogDBRestTest.java b/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogDBRestTest.java index 48ef1329b0..74ea27cc06 100644 --- a/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogDBRestTest.java +++ b/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogDBRestTest.java @@ -3,6 +3,7 @@ * ONAP - SO * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2022 Samsung Electronics 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. @@ -813,7 +814,7 @@ public class CatalogDBRestTest extends CatalogDbAdapterBaseTest { restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, String.class); assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value()); - JSONAssert.assertEquals(badQueryParamResponse, response.getBody().toString(), false); + JSONAssert.assertEquals(badQueryParamResponse, response.getBody(), false); } @Test @@ -850,10 +851,10 @@ public class CatalogDBRestTest extends CatalogDbAdapterBaseTest { ObjectMapper mapper = new ObjectMapper(); ProcessingFlags processingFlagsResponse = mapper.readValue(response.getBody(), ProcessingFlags.class); - assertEquals(processingFlagsResponse.getFlag(), "TESTFLAG"); - assertEquals(processingFlagsResponse.getValue(), "NO"); - assertEquals(processingFlagsResponse.getEndpoint(), "TESTENDPOINT"); - assertEquals(processingFlagsResponse.getDescription(), "TEST FLAG"); + assertEquals("TESTFLAG", processingFlagsResponse.getFlag()); + assertEquals("NO", processingFlagsResponse.getValue()); + assertEquals("TESTENDPOINT", processingFlagsResponse.getEndpoint()); + assertEquals("TEST FLAG", processingFlagsResponse.getDescription()); } @Test @@ -876,8 +877,8 @@ public class CatalogDBRestTest extends CatalogDbAdapterBaseTest { boolean testFlagFound = false; for (int i = 0; i < processingFlagsResponse.size(); i++) { if (processingFlagsResponse.get(i).getFlag().equals("TESTFLAG")) { - assertEquals(processingFlagsResponse.get(i).getEndpoint(), "TESTENDPOINT"); - assertEquals(processingFlagsResponse.get(i).getDescription(), "TEST FLAG"); + assertEquals("TESTENDPOINT", processingFlagsResponse.get(i).getEndpoint()); + assertEquals("TEST FLAG", processingFlagsResponse.get(i).getDescription()); testFlagFound = true; } } diff --git a/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceArtifactTest.java b/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceArtifactTest.java index 2266eafa12..d7852cfdfe 100644 --- a/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceArtifactTest.java +++ b/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceArtifactTest.java @@ -3,6 +3,7 @@ * ONAP - SO * ================================================================================ * Copyright (c) 2019, CMCC Technologies Co., Ltd. + * Copyright (c) 2022, Samsung Electronics. 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. @@ -35,7 +36,7 @@ public class QueryServiceArtifactTest { QueryServiceArtifact queryServiceArtifact = new QueryServiceArtifact(createList()); String jsonResult = queryServiceArtifact.JSON2(true, false); Assertions.assertThat(JsonPathUtil.getInstance().locateResult(jsonResult, "$.serviceArtifact[0].name").get()) - .isEqualTo("eMBB.zip"); + .contains("eMBB.zip"); } private List<ServiceArtifact> createList() { diff --git a/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceInfoTest.java b/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceInfoTest.java index e948141b89..37fd4641a1 100644 --- a/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceInfoTest.java +++ b/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceInfoTest.java @@ -3,6 +3,7 @@ * ONAP - SO * ================================================================================ * Copyright (c) 2019, CMCC Technologies Co., Ltd. + * Copyright (c) 2022, Samsung Electronics. 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. @@ -35,7 +36,7 @@ public class QueryServiceInfoTest { QueryServiceInfo queryServiceInfo = new QueryServiceInfo(createList()); String jsonResult = queryServiceInfo.JSON2(true, false); String serviceInfo = jsonResult.substring(jsonResult.indexOf("{"), jsonResult.length()); - Assertions.assertThat(JsonPathUtil.getInstance().locateResult(serviceInfo, "$.id").get()).isEqualTo("1"); + Assertions.assertThat(JsonPathUtil.getInstance().locateResult(serviceInfo, "$.id").get()).contains("1"); } private List<ServiceInfo> createList() { diff --git a/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/client/RequestsDbClientTest.java b/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/client/RequestsDbClientTest.java index 33805f9faa..59919c67f2 100644 --- a/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/client/RequestsDbClientTest.java +++ b/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/client/RequestsDbClientTest.java @@ -3,6 +3,7 @@ * ONAP - SO * ================================================================================ * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved. + * Copyright (c) 2022, Samsung Electronics. 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. @@ -26,7 +27,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; import java.sql.Timestamp; import java.time.Instant; import java.time.temporal.ChronoUnit; @@ -339,7 +339,8 @@ public class RequestsDbClientTest extends RequestsAdapterBase { requestsDbClient.getRequestProcessingDataBySoRequestIdAndNameAndTagOrderByCreateTimeDesc( "00032ab7-na18-42e5-965d-8ea592502018", "requestAction", "pincFabricConfigRequest"); assertNotNull(requestProcessingData); - assertTrue(requestProcessingData.size() == 1); + assertEquals(1, requestProcessingData.size()); assertEquals("assign", requestProcessingData.get(0).getValue()); } } + diff --git a/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/exceptions/MsoRequestsDbExceptionBeanTest.java b/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/exceptions/MsoRequestsDbExceptionBeanTest.java index 77821bfefd..3cf9314a8b 100644 --- a/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/exceptions/MsoRequestsDbExceptionBeanTest.java +++ b/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/exceptions/MsoRequestsDbExceptionBeanTest.java @@ -3,6 +3,7 @@ * ONAP - SO * ================================================================================ * Copyright (C) 2018 TechMahindra + * Copyright (c) 2022, Samsung Electronics. 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. @@ -37,7 +38,8 @@ public class MsoRequestsDbExceptionBeanTest { public void testGetMessage() { soRequestsDbExceptionBean.setMessage("message"); Assert.assertNotNull(soRequestsDbExceptionBean.getMessage()); - Assert.assertEquals(soRequestsDbExceptionBean.getMessage(), "message"); + Assert.assertEquals("message", soRequestsDbExceptionBean.getMessage()); } } + diff --git a/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/exceptions/MsoRequestsDbExceptionTest.java b/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/exceptions/MsoRequestsDbExceptionTest.java index 04f597f9b2..94c6d267e4 100644 --- a/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/exceptions/MsoRequestsDbExceptionTest.java +++ b/adapters/mso-requests-db-adapter/src/test/java/org/onap/so/adapters/requestsdb/exceptions/MsoRequestsDbExceptionTest.java @@ -3,6 +3,7 @@ * ONAP - SO * ================================================================================ * Copyright (C) 2018 TechMahindra + * Copyright (c) 2022, Samsung Electronics. 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. @@ -27,7 +28,7 @@ public class MsoRequestsDbExceptionTest { public void testConstructorWithMessaqge() throws Exception { String message = "testing message"; MsoRequestsDbException msoRequestsDbException = new MsoRequestsDbException(message); - Assert.assertTrue(msoRequestsDbException.getCause() == null); + Assert.assertNull(msoRequestsDbException.getCause()); Assert.assertEquals(message, msoRequestsDbException.getLocalizedMessage()); Assert.assertEquals(message, msoRequestsDbException.getMessage()); } @@ -64,3 +65,4 @@ public class MsoRequestsDbExceptionTest { } } + diff --git a/adapters/mso-sdnc-adapter/src/test/java/org/onap/so/adapters/sdnc/sdncrest/BPRestCallbackTest.java b/adapters/mso-sdnc-adapter/src/test/java/org/onap/so/adapters/sdnc/sdncrest/BPRestCallbackTest.java index c1bbb9ae9a..557a67b7cb 100644 --- a/adapters/mso-sdnc-adapter/src/test/java/org/onap/so/adapters/sdnc/sdncrest/BPRestCallbackTest.java +++ b/adapters/mso-sdnc-adapter/src/test/java/org/onap/so/adapters/sdnc/sdncrest/BPRestCallbackTest.java @@ -24,6 +24,7 @@ import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; import static com.github.tomakehurst.wiremock.client.WireMock.post; import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertNotNull; import org.apache.http.HttpStatus; import org.junit.Test; @@ -48,7 +49,6 @@ public class BPRestCallbackTest extends BaseTest { .withBody(response).withStatus(HttpStatus.SC_MULTIPLE_CHOICES))); boolean responseCommon = bpRestCallback.send("http://localhost:" + wireMockPort + "/sdnc", "Test"); - assertNotNull(responseCommon); - assertEquals(true, responseCommon); + assertTrue(responseCommon); } } diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/ResourceKey.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/ResourceKey.java index 641cd35027..aa5da4c790 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/ResourceKey.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/ResourceKey.java @@ -35,6 +35,9 @@ public enum ResourceKey { VPN_BONDING_LINK_ID, INSTANCE_GROUP_ID, PNF, + PNF_INSTANCE_NAME, VNF_INSTANCE_NAME, - VF_MODULE_INSTANCE_NAME + VF_MODULE_INSTANCE_NAME, + CHILD_SERVICE_INSTANCE_ID, + CHILD_SERVICE_INSTANCE_NAME } diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/WorkflowResourceIds.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/WorkflowResourceIds.java index 5df7c60f74..a44d5e972d 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/WorkflowResourceIds.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/entities/WorkflowResourceIds.java @@ -42,6 +42,10 @@ public class WorkflowResourceIds implements Serializable { private String instanceGroupId; private String vnfInstanceName; private String vfModuleInstanceName; + private String childServiceInstanceId; + private String childServiceInstanceName; + private String pnfInstanceName; + public WorkflowResourceIds() { @@ -58,6 +62,8 @@ public class WorkflowResourceIds implements Serializable { this.networkCollectionId = workflowResourceIds.networkCollectionId; this.configurationId = workflowResourceIds.configurationId; this.instanceGroupId = workflowResourceIds.instanceGroupId; + this.childServiceInstanceId = workflowResourceIds.childServiceInstanceId; + this.childServiceInstanceName = workflowResourceIds.childServiceInstanceName; } @@ -157,4 +163,28 @@ public class WorkflowResourceIds implements Serializable { public void setVfModuleInstanceName(String vfModuleInstanceName) { this.vfModuleInstanceName = vfModuleInstanceName; } + + public String getChildServiceInstanceId() { + return childServiceInstanceId; + } + + public void setChildServiceInstanceId(String childServiceInstanceId) { + this.childServiceInstanceId = childServiceInstanceId; + } + + public String getChildServiceInstanceName() { + return childServiceInstanceName; + } + + public void setChildServiceInstanceName(String childServiceInstanceName) { + this.childServiceInstanceName = childServiceInstanceName; + } + + public String getPnfInstanceName() { + return pnfInstanceName; + } + + public void setPnfInstanceName(String pnfInstanceName) { + this.pnfInstanceName = pnfInstanceName; + } } diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java index 6d5eb63b0d..a0784b375e 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java @@ -262,6 +262,9 @@ public class BBInputSetup implements JavaDelegate { lookupKeyMap.put(ResourceKey.INSTANCE_GROUP_ID, workflowResourceIds.getInstanceGroupId()); lookupKeyMap.put(ResourceKey.VNF_INSTANCE_NAME, workflowResourceIds.getVnfInstanceName()); lookupKeyMap.put(ResourceKey.VF_MODULE_INSTANCE_NAME, workflowResourceIds.getVfModuleInstanceName()); + lookupKeyMap.put(ResourceKey.CHILD_SERVICE_INSTANCE_ID, workflowResourceIds.getChildServiceInstanceId()); + lookupKeyMap.put(ResourceKey.CHILD_SERVICE_INSTANCE_NAME, workflowResourceIds.getChildServiceInstanceName()); + lookupKeyMap.put(ResourceKey.PNF_INSTANCE_NAME, workflowResourceIds.getPnfInstanceName()); } protected GeneralBuildingBlock getGBBALaCarteNonService(ExecuteBuildingBlock executeBB, @@ -1632,9 +1635,16 @@ public class BBInputSetup implements JavaDelegate { } else if (bbName.contains(PNF) || (bbName.contains(CONTROLLER) && (PNF).equalsIgnoreCase(executeBB.getBuildingBlock().getBpmnScope()))) { String pnfId = lookupKeyMap.get(ResourceKey.PNF); - resources.getPnfs().stream() - .filter(pnfs -> Objects.equals(key, pnfs.getModelInfo().getModelCustomizationId())).findFirst() - .ifPresent(pnfs -> BBInputSetupPnf.populatePnfToServiceInstance(pnfs, pnfId, serviceInstance)); + String pnfInstanceName = lookupKeyMap.get(ResourceKey.PNF_INSTANCE_NAME); + if (StringUtils.isNotBlank(pnfInstanceName)) { + resources.getPnfs().stream().filter(pnfs -> Objects.equals(pnfInstanceName, pnfs.getInstanceName())) + .findFirst() + .ifPresent(pnfs -> BBInputSetupPnf.populatePnfToServiceInstance(pnfs, pnfId, serviceInstance)); + } else { + resources.getPnfs().stream() + .filter(pnfs -> Objects.equals(key, pnfs.getModelInfo().getModelCustomizationId())).findFirst() + .ifPresent(pnfs -> BBInputSetupPnf.populatePnfToServiceInstance(pnfs, pnfId, serviceInstance)); + } } else if (bbName.contains(VF_MODULE) || bbName.contains(VOLUME_GROUP) || (bbName.contains(CONTROLLER) && (VF_MODULE).equalsIgnoreCase(executeBB.getBuildingBlock().getBpmnScope()))) { String vfModuleInstanceName = lookupKeyMap.get(ResourceKey.VF_MODULE_INSTANCE_NAME); diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java index d405cff8bb..803d2bf8a3 100644 --- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java +++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java @@ -2121,6 +2121,9 @@ public class BBInputSetupTest { String instanceGroupId = "instancegroupId"; String vnfInstanceName = "vnfInstanceName"; String vfModuleInstanceName = "vfModuleInstanceName"; + String childServiceInstanceId = "childServiceInstanceId"; + String childServiceInstanceName = "childServiceInstanceName"; + String pnfInstanceName = "pnfInstanceName"; expected.put(ResourceKey.SERVICE_INSTANCE_ID, serviceInstanceId); expected.put(ResourceKey.NETWORK_ID, networkId); @@ -2132,6 +2135,9 @@ public class BBInputSetupTest { expected.put(ResourceKey.INSTANCE_GROUP_ID, instanceGroupId); expected.put(ResourceKey.VNF_INSTANCE_NAME, vnfInstanceName); expected.put(ResourceKey.VF_MODULE_INSTANCE_NAME, vfModuleInstanceName); + expected.put(ResourceKey.CHILD_SERVICE_INSTANCE_ID, childServiceInstanceId); + expected.put(ResourceKey.CHILD_SERVICE_INSTANCE_NAME, childServiceInstanceName); + expected.put(ResourceKey.PNF_INSTANCE_NAME, pnfInstanceName); WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); workflowResourceIds.setServiceInstanceId(serviceInstanceId); @@ -2144,6 +2150,9 @@ public class BBInputSetupTest { workflowResourceIds.setInstanceGroupId(instanceGroupId); workflowResourceIds.setVnfInstanceName(vnfInstanceName); workflowResourceIds.setVfModuleInstanceName(vfModuleInstanceName); + workflowResourceIds.setChildServiceInstanceId(childServiceInstanceId); + workflowResourceIds.setChildServiceInstanceName(childServiceInstanceName); + workflowResourceIds.setPnfInstanceName(pnfInstanceName); SPY_bbInputSetup.populateLookupKeyMapWithIds(workflowResourceIds, actual); diff --git a/bpmn/mso-infrastructure-bpmn/src/test/resources/application-test.yaml b/bpmn/mso-infrastructure-bpmn/src/test/resources/application-test.yaml index 56a92cbd01..07c90bf529 100644 --- a/bpmn/mso-infrastructure-bpmn/src/test/resources/application-test.yaml +++ b/bpmn/mso-infrastructure-bpmn/src/test/resources/application-test.yaml @@ -59,6 +59,9 @@ mso: requestDb: auth: Basic YnBlbDptc28tZGItMTUwNyE= endpoint: http://localhost:8081 + apihandler: + endpoint: http://localhost:8080 + auth: Basic dGVzdDp0ZXN0Cg== async: core-pool-size: 50 max-pool-size: 50 diff --git a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/CreateChildServiceBB.bpmn b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/CreateChildServiceBB.bpmn new file mode 100644 index 0000000000..9d361bf101 --- /dev/null +++ b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/CreateChildServiceBB.bpmn @@ -0,0 +1,135 @@ +<?xml version="1.0" encoding="UTF-8"?> +<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1qv87sb" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.12.0"> + <bpmn:process id="CreateChildServiceBB" name="CreateChildServiceBB" isExecutable="true"> + <bpmn:startEvent id="StartEvent_1"> + <bpmn:outgoing>SequenceFlow_14q7e7i</bpmn:outgoing> + </bpmn:startEvent> + <bpmn:endEvent id="EndEvent_0il9cjn"> + <bpmn:incoming>SequenceFlow_143mdyp</bpmn:incoming> + </bpmn:endEvent> + <bpmn:sequenceFlow id="SequenceFlow_14q7e7i" sourceRef="StartEvent_1" targetRef="Task_1axdixm" /> + <bpmn:sequenceFlow id="SequenceFlow_0n5pwwk" sourceRef="Task_1axdixm" targetRef="Task_0892y22" /> + <bpmn:sequenceFlow id="SequenceFlow_0x6xxb8" sourceRef="Task_0892y22" targetRef="Task_1olljx2" /> + <bpmn:sequenceFlow id="SequenceFlow_0jahgui" sourceRef="Task_1olljx2" targetRef="ExclusiveGateway_1otl9mn" /> + <bpmn:sequenceFlow id="SequenceFlow_143mdyp" sourceRef="Task_1oyb4b5" targetRef="EndEvent_0il9cjn" /> + <bpmn:receiveTask id="Task_1olljx2" name="Wait for Completion" messageRef="Message_0kfkpsv"> + <bpmn:incoming>SequenceFlow_0x6xxb8</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_0jahgui</bpmn:outgoing> + </bpmn:receiveTask> + <bpmn:boundaryEvent id="IntermediateThrowEvent_1gh5vds" name="Timeout" attachedToRef="Task_1olljx2"> + <bpmn:outgoing>SequenceFlow_0hmy1qr</bpmn:outgoing> + <bpmn:timerEventDefinition id="TimerEventDefinition_13keqs7"> + <bpmn:timeDuration xsi:type="bpmn:tFormalExpression">PT5H</bpmn:timeDuration> + </bpmn:timerEventDefinition> + </bpmn:boundaryEvent> + <bpmn:endEvent id="EndEvent_11rdhm9"> + <bpmn:incoming>SequenceFlow_0hmy1qr</bpmn:incoming> + <bpmn:errorEventDefinition id="ErrorEventDefinition_12rxrrg" errorRef="Error_1d6c5q3" /> + </bpmn:endEvent> + <bpmn:sequenceFlow id="SequenceFlow_0hmy1qr" sourceRef="IntermediateThrowEvent_1gh5vds" targetRef="EndEvent_11rdhm9" /> + <bpmn:exclusiveGateway id="ExclusiveGateway_1otl9mn" name="Child Request Status" default="SequenceFlow_052tga4"> + <bpmn:incoming>SequenceFlow_0jahgui</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_0zfixj7</bpmn:outgoing> + <bpmn:outgoing>SequenceFlow_052tga4</bpmn:outgoing> + </bpmn:exclusiveGateway> + <bpmn:sequenceFlow id="SequenceFlow_0zfixj7" name="Completed" sourceRef="ExclusiveGateway_1otl9mn" targetRef="Task_1oyb4b5"> + <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("CHILD_SVC_REQ_STATUS")=="COMPLETED"}</bpmn:conditionExpression> + </bpmn:sequenceFlow> + <bpmn:sequenceFlow id="SequenceFlow_052tga4" name="Failed" sourceRef="ExclusiveGateway_1otl9mn" targetRef="Task_0jc8k6m" /> + <bpmn:serviceTask id="Task_1axdixm" name="Build Create Request" camunda:expression="${CreateChildServiceBB.buildRequest(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> + <bpmn:incoming>SequenceFlow_14q7e7i</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_0n5pwwk</bpmn:outgoing> + </bpmn:serviceTask> + <bpmn:serviceTask id="Task_0892y22" name="Send Request" camunda:expression="${CreateChildServiceBB.sendRequest(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> + <bpmn:incoming>SequenceFlow_0n5pwwk</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_0x6xxb8</bpmn:outgoing> + </bpmn:serviceTask> + <bpmn:serviceTask id="Task_0jc8k6m" name="Handle Failure" camunda:expression="${CreateChildServiceBB.handleFailure(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> + <bpmn:incoming>SequenceFlow_052tga4</bpmn:incoming> + </bpmn:serviceTask> + <bpmn:serviceTask id="Task_1oyb4b5" name="Update AAI" camunda:expression="${CreateChildServiceBB.updateRelations(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> + <bpmn:incoming>SequenceFlow_0zfixj7</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_143mdyp</bpmn:outgoing> + </bpmn:serviceTask> + </bpmn:process> + <bpmn:error id="Error_1d6c5q3" name="MSO Workflow Exception" errorCode="MSOWorkflowException" camunda:errorMessage="Child service creation timeout reached" /> + <bpmn:message id="Message_0kfkpsv" name="ChildServiceRequest" /> + <bpmndi:BPMNDiagram id="BPMNDiagram_1"> + <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="CreateChildServiceBB"> + <bpmndi:BPMNEdge id="SequenceFlow_052tga4_di" bpmnElement="SequenceFlow_052tga4"> + <di:waypoint x="900" y="145" /> + <di:waypoint x="900" y="230" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="905" y="173" width="30" height="14" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_0zfixj7_di" bpmnElement="SequenceFlow_0zfixj7"> + <di:waypoint x="925" y="120" /> + <di:waypoint x="1040" y="120" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="957" y="102" width="54" height="14" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_0hmy1qr_di" bpmnElement="SequenceFlow_0hmy1qr"> + <di:waypoint x="730" y="178" /> + <di:waypoint x="730" y="252" /> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_143mdyp_di" bpmnElement="SequenceFlow_143mdyp"> + <di:waypoint x="1140" y="120" /> + <di:waypoint x="1232" y="120" /> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_0jahgui_di" bpmnElement="SequenceFlow_0jahgui"> + <di:waypoint x="750" y="120" /> + <di:waypoint x="875" y="120" /> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_0x6xxb8_di" bpmnElement="SequenceFlow_0x6xxb8"> + <di:waypoint x="570" y="120" /> + <di:waypoint x="650" y="120" /> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_0n5pwwk_di" bpmnElement="SequenceFlow_0n5pwwk"> + <di:waypoint x="380" y="120" /> + <di:waypoint x="470" y="120" /> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_14q7e7i_di" bpmnElement="SequenceFlow_14q7e7i"> + <di:waypoint x="178" y="120" /> + <di:waypoint x="280" y="120" /> + </bpmndi:BPMNEdge> + <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1"> + <dc:Bounds x="142" y="102" width="36" height="36" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="EndEvent_0il9cjn_di" bpmnElement="EndEvent_0il9cjn"> + <dc:Bounds x="1232" y="102" width="36" height="36" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ReceiveTask_1bptt2c_di" bpmnElement="Task_1olljx2"> + <dc:Bounds x="650" y="80" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="EndEvent_03unhuu_di" bpmnElement="EndEvent_11rdhm9"> + <dc:Bounds x="712" y="252" width="36" height="36" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ExclusiveGateway_1otl9mn_di" bpmnElement="ExclusiveGateway_1otl9mn" isMarkerVisible="true"> + <dc:Bounds x="875" y="95" width="50" height="50" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="866" y="65" width="70" height="27" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ServiceTask_0t3ilvf_di" bpmnElement="Task_1axdixm"> + <dc:Bounds x="280" y="80" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ServiceTask_0hbcben_di" bpmnElement="Task_0892y22"> + <dc:Bounds x="470" y="80" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ServiceTask_1j024ya_di" bpmnElement="Task_0jc8k6m"> + <dc:Bounds x="850" y="230" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Activity_10o8qyu_di" bpmnElement="Task_1oyb4b5"> + <dc:Bounds x="1040" y="80" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="BoundaryEvent_0g07oag_di" bpmnElement="IntermediateThrowEvent_1gh5vds"> + <dc:Bounds x="712" y="142" width="36" height="36" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="750" y="173" width="40" height="14" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNShape> + </bpmndi:BPMNPlane> + </bpmndi:BPMNDiagram> +</bpmn:definitions> diff --git a/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/DeleteChildServiceBB.bpmn b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/DeleteChildServiceBB.bpmn new file mode 100644 index 0000000000..3be6d32792 --- /dev/null +++ b/bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/DeleteChildServiceBB.bpmn @@ -0,0 +1,123 @@ +<?xml version="1.0" encoding="UTF-8"?> +<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_0n06ztl" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.12.0"> + <bpmn:process id="DeleteChildServiceBB" name="DeleteChildServiceBB" isExecutable="true"> + <bpmn:startEvent id="StartEvent_1m5641e"> + <bpmn:outgoing>SequenceFlow_01wirq3</bpmn:outgoing> + </bpmn:startEvent> + <bpmn:receiveTask id="ReceiveTask_0otx1r1" name="Wait for Completion" messageRef="Message_0xg6jua"> + <bpmn:incoming>SequenceFlow_14d89qf</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_1ufwh0a</bpmn:outgoing> + </bpmn:receiveTask> + <bpmn:endEvent id="EndEvent_02vkobe"> + <bpmn:incoming>SequenceFlow_0o2ukb9</bpmn:incoming> + <bpmn:errorEventDefinition id="ErrorEventDefinition_05rpxbj" errorRef="Error_1d6c5q3" /> + </bpmn:endEvent> + <bpmn:boundaryEvent id="BoundaryEvent_1f4g2g1" name="Timeout" attachedToRef="ReceiveTask_0otx1r1"> + <bpmn:outgoing>SequenceFlow_0o2ukb9</bpmn:outgoing> + <bpmn:timerEventDefinition id="TimerEventDefinition_01na1b7"> + <bpmn:timeDuration xsi:type="bpmn:tFormalExpression">PT5H</bpmn:timeDuration> + </bpmn:timerEventDefinition> + </bpmn:boundaryEvent> + <bpmn:sequenceFlow id="SequenceFlow_01wirq3" sourceRef="StartEvent_1m5641e" targetRef="Task_01gqeuu" /> + <bpmn:sequenceFlow id="SequenceFlow_0q6aqsk" sourceRef="Task_01gqeuu" targetRef="Task_16o0qkj" /> + <bpmn:sequenceFlow id="SequenceFlow_14d89qf" sourceRef="Task_16o0qkj" targetRef="ReceiveTask_0otx1r1" /> + <bpmn:sequenceFlow id="SequenceFlow_0o2ukb9" sourceRef="BoundaryEvent_1f4g2g1" targetRef="EndEvent_02vkobe" /> + <bpmn:exclusiveGateway id="ExclusiveGateway_1mxv8h6" name="Child Request Status" default="SequenceFlow_12rysg7"> + <bpmn:incoming>SequenceFlow_1ufwh0a</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_0v4loyx</bpmn:outgoing> + <bpmn:outgoing>SequenceFlow_12rysg7</bpmn:outgoing> + </bpmn:exclusiveGateway> + <bpmn:endEvent id="EndEvent_0fh7ikt"> + <bpmn:incoming>SequenceFlow_0v4loyx</bpmn:incoming> + </bpmn:endEvent> + <bpmn:sequenceFlow id="SequenceFlow_0v4loyx" name="Completed" sourceRef="ExclusiveGateway_1mxv8h6" targetRef="EndEvent_0fh7ikt"> + <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("CHILD_SVC_REQ_STATUS")=="COMPLETED"}</bpmn:conditionExpression> + </bpmn:sequenceFlow> + <bpmn:sequenceFlow id="SequenceFlow_12rysg7" name="Failed" sourceRef="ExclusiveGateway_1mxv8h6" targetRef="Task_073m8fr" /> + <bpmn:sequenceFlow id="SequenceFlow_1ufwh0a" sourceRef="ReceiveTask_0otx1r1" targetRef="ExclusiveGateway_1mxv8h6" /> + <bpmn:serviceTask id="Task_01gqeuu" name="Build Delete Request" camunda:expression="${DeleteChildServiceBB.buildRequest(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> + <bpmn:incoming>SequenceFlow_01wirq3</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_0q6aqsk</bpmn:outgoing> + </bpmn:serviceTask> + <bpmn:serviceTask id="Task_16o0qkj" name="Send Request" camunda:expression="${DeleteChildServiceBB.sendRequest(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> + <bpmn:incoming>SequenceFlow_0q6aqsk</bpmn:incoming> + <bpmn:outgoing>SequenceFlow_14d89qf</bpmn:outgoing> + </bpmn:serviceTask> + <bpmn:serviceTask id="Task_073m8fr" name="Handle Failure" camunda:expression="${DeleteChildServiceBB.handleFailure(InjectExecution.execute(execution, execution.getVariable("gBuildingBlockExecution")))}"> + <bpmn:incoming>SequenceFlow_12rysg7</bpmn:incoming> + </bpmn:serviceTask> + </bpmn:process> + <bpmn:error id="Error_1d6c5q3" name="MSO Workflow Exception" errorCode="MSOWorkflowException" camunda:errorMessage="Child service deletion timeout reached" /> + <bpmn:message id="Message_0xg6jua" name="ChildServiceRequest" /> + <bpmndi:BPMNDiagram id="BPMNDiagram_1"> + <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DeleteChildServiceBB"> + <bpmndi:BPMNEdge id="SequenceFlow_1ufwh0a_di" bpmnElement="SequenceFlow_1ufwh0a"> + <di:waypoint x="760" y="120" /> + <di:waypoint x="885" y="120" /> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_12rysg7_di" bpmnElement="SequenceFlow_12rysg7"> + <di:waypoint x="910" y="145" /> + <di:waypoint x="910" y="230" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="925" y="173" width="30" height="14" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_0v4loyx_di" bpmnElement="SequenceFlow_0v4loyx"> + <di:waypoint x="935" y="120" /> + <di:waypoint x="1242" y="120" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="981" y="102" width="54" height="14" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_0o2ukb9_di" bpmnElement="SequenceFlow_0o2ukb9"> + <di:waypoint x="740" y="178" /> + <di:waypoint x="740" y="252" /> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_14d89qf_di" bpmnElement="SequenceFlow_14d89qf"> + <di:waypoint x="580" y="120" /> + <di:waypoint x="660" y="120" /> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_0q6aqsk_di" bpmnElement="SequenceFlow_0q6aqsk"> + <di:waypoint x="390" y="120" /> + <di:waypoint x="480" y="120" /> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="SequenceFlow_01wirq3_di" bpmnElement="SequenceFlow_01wirq3"> + <di:waypoint x="188" y="120" /> + <di:waypoint x="290" y="120" /> + </bpmndi:BPMNEdge> + <bpmndi:BPMNShape id="StartEvent_1m5641e_di" bpmnElement="StartEvent_1m5641e"> + <dc:Bounds x="152" y="102" width="36" height="36" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ReceiveTask_0otx1r1_di" bpmnElement="ReceiveTask_0otx1r1"> + <dc:Bounds x="660" y="80" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="EndEvent_02vkobe_di" bpmnElement="EndEvent_02vkobe"> + <dc:Bounds x="722" y="252" width="36" height="36" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ExclusiveGateway_1mxv8h6_di" bpmnElement="ExclusiveGateway_1mxv8h6" isMarkerVisible="true"> + <dc:Bounds x="885" y="95" width="50" height="50" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="875" y="65" width="70" height="27" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="EndEvent_0fh7ikt_di" bpmnElement="EndEvent_0fh7ikt"> + <dc:Bounds x="1242" y="102" width="36" height="36" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ServiceTask_0aqgcg6_di" bpmnElement="Task_01gqeuu"> + <dc:Bounds x="290" y="80" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ServiceTask_0o8psus_di" bpmnElement="Task_16o0qkj"> + <dc:Bounds x="480" y="80" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ServiceTask_0hkopiv_di" bpmnElement="Task_073m8fr"> + <dc:Bounds x="860" y="230" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="BoundaryEvent_1f4g2g1_di" bpmnElement="BoundaryEvent_1f4g2g1"> + <dc:Bounds x="722" y="142" width="36" height="36" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="760" y="173" width="40" height="14" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNShape> + </bpmndi:BPMNPlane> + </bpmndi:BPMNDiagram> +</bpmn:definitions> diff --git a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/process/WorkflowActionBBTest.java b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/process/WorkflowActionBBTest.java index f492326b0c..6c732a1edb 100644 --- a/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/process/WorkflowActionBBTest.java +++ b/bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/process/WorkflowActionBBTest.java @@ -106,6 +106,7 @@ public class WorkflowActionBBTest extends BaseBPMNTest { } + @Test public void retrieveBBExecutionListerrorHandling() throws Exception { variables.put("isTopLevelFlow", true); diff --git a/bpmn/so-bpmn-building-blocks/src/test/resources/application-test.yaml b/bpmn/so-bpmn-building-blocks/src/test/resources/application-test.yaml index c36172c3bf..14640f4eec 100644 --- a/bpmn/so-bpmn-building-blocks/src/test/resources/application-test.yaml +++ b/bpmn/so-bpmn-building-blocks/src/test/resources/application-test.yaml @@ -75,7 +75,9 @@ mso: requestDb: auth: Basic YnBlbDptc28tZGItMTUwNyE= endpoint: http://localhost:8081 - + apihandler: + endpoint: http://localhost:8080 + auth: Basic dGVzdDp0ZXN0Cg== async: core-pool-size: 50 max-pool-size: 50 diff --git a/bpmn/so-bpmn-infrastructure-flows/src/test/resources/application-test.yaml b/bpmn/so-bpmn-infrastructure-flows/src/test/resources/application-test.yaml index fa753396cf..7a9c4ba914 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/test/resources/application-test.yaml +++ b/bpmn/so-bpmn-infrastructure-flows/src/test/resources/application-test.yaml @@ -64,7 +64,9 @@ mso: #${mso.adapters.requestDb.auth}: BBInputSetup auth: Basic YnBlbDptc28tZGItMTUwNyE= endpoint: http://localhost:${wiremock.server.port} - + apihandler: + endpoint: http://localhost:8080 + auth: Basic dGVzdDp0ZXN0Cg== async: core-pool-size: 50 max-pool-size: 50 diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/service/composition/ChildServiceRequestBuilder.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/service/composition/ChildServiceRequestBuilder.java new file mode 100644 index 0000000000..2a008e3573 --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/service/composition/ChildServiceRequestBuilder.java @@ -0,0 +1,231 @@ +package org.onap.so.bpmn.infrastructure.service.composition; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.onap.so.bpmn.common.BuildingBlockExecution; +import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion; +import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer; +import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext; +import org.onap.so.serviceinstancebeans.CloudConfiguration; +import org.onap.so.serviceinstancebeans.InstanceDirection; +import org.onap.so.serviceinstancebeans.OwningEntity; +import org.onap.so.serviceinstancebeans.Project; +import org.onap.so.serviceinstancebeans.RelatedInstance; +import org.onap.so.serviceinstancebeans.RelatedInstanceList; +import org.onap.so.serviceinstancebeans.RequestDetails; +import org.onap.so.serviceinstancebeans.RequestInfo; +import org.onap.so.serviceinstancebeans.RequestParameters; +import org.onap.so.serviceinstancebeans.Service; +import org.onap.so.serviceinstancebeans.ServiceInstancesRequest; +import org.onap.so.serviceinstancebeans.SubscriberInfo; +import java.io.IOException; +import java.util.Map; + +public class ChildServiceRequestBuilder { + private final BuildingBlockExecution buildingBlockExecution; + private Service parent; + private Service child; + private ServiceInstancesRequest sir; + + private ChildServiceRequestBuilder(final BuildingBlockExecution buildingBlockExecution, Service parent, + Service child) { + this.buildingBlockExecution = buildingBlockExecution; + this.child = child; + this.parent = parent; + + this.sir = new ServiceInstancesRequest(); + RequestDetails requestDetails = new RequestDetails(); + requestDetails.setRequestInfo(new RequestInfo()); + this.sir.setRequestDetails(requestDetails); + } + + public static ChildServiceRequestBuilder getInstance(final BuildingBlockExecution buildingBlockExecution, + String childSvcInstanceName) { + Service child = null; + Service parent = null; + try { + String USERPARAMSERVICE = "service"; + for (Map<String, Object> params : buildingBlockExecution.getGeneralBuildingBlock().getRequestContext() + .getRequestParameters().getUserParams()) { + if (params.containsKey(USERPARAMSERVICE)) { + ObjectMapper obj = new ObjectMapper(); + String input = obj.writeValueAsString(params.get(USERPARAMSERVICE)); + parent = obj.readValue(input, Service.class); + if (parent.getResources().getServices() != null) { + for (Service service : parent.getResources().getServices()) { + if (service.getInstanceName().equals(childSvcInstanceName)) { + child = service; + } + } + } + } + } + } catch (IOException e) { + throw new RuntimeException("Failed parsing context user parameters for parent or child service", e); + } + return new ChildServiceRequestBuilder(buildingBlockExecution, parent, child); + } + + public static ChildServiceRequestBuilder getInstance(final BuildingBlockExecution buildingBlockExecution, + Service parentInstance, Service childInstance) { + Service child = null; + Service parent = null; + if (childInstance != null) { + parent = parentInstance; + child = childInstance; + } + return new ChildServiceRequestBuilder(buildingBlockExecution, parent, child); + } + + public ChildServiceRequestBuilder setParentRequestId(String parentRequestId) { + sir.getRequestDetails().getRequestInfo().setRequestorId(parentRequestId); + return this; + } + + public ChildServiceRequestBuilder setCorrelationId(String correlationId) { + sir.getRequestDetails().getRequestInfo().setCorrelator(correlationId); + return this; + } + + public ChildServiceRequestBuilder setChildSvcInstanceId(String childSvcInstanceId) { + sir.setServiceInstanceId(childSvcInstanceId); + return this; + } + + public ServiceInstancesRequest build() { + RequestContext context = buildingBlockExecution.getGeneralBuildingBlock().getRequestContext(); + + if (context.getAction().equals("deleteInstance")) { + sir.setRequestDetails(createRequestDetailsDeleteChild(context)); + } else { + sir.setRequestDetails(createRequestDetails(context)); + } + return sir; + } + + private RequestDetails createRequestDetailsDeleteChild(RequestContext context) { + RequestDetails details = sir.getRequestDetails(); + + details.setRequestParameters(createRequestParameters(context, child)); + details.setRequestInfo(createRequestInfo(context)); + details.setCloudConfiguration(createCloudConfiguration()); + details.setModelInfo(child.getModelInfo()); + details.setSubscriberInfo(createSubscriberInfo()); + details.setRelatedInstanceList(createRelatedInstanceList()); + + return details; + } + + private RequestDetails createRequestDetails(RequestContext context) { + RequestDetails details = sir.getRequestDetails(); + + details.setRequestParameters(createRequestParameters(context, child)); + details.setRequestInfo(createRequestInfo(context)); + details.setCloudConfiguration(createCloudConfiguration()); + details.setModelInfo(child.getModelInfo()); + details.setSubscriberInfo(createSubscriberInfo()); + details.setOwningEntity(createOwningEntity()); + details.setProject(createProject()); + details.setRelatedInstanceList(createRelatedInstanceList()); + + return details; + } + + private RequestParameters createRequestParameters(RequestContext context, Service childService) { + RequestParameters requestParameters = new RequestParameters(); + + if (!context.getRequestParameters().getUserParams().isEmpty()) { + requestParameters.getUserParams().add(context.getRequestParameters().getUserParams().get(0)); + if (context.getAction().equals("createInstance")) { + requestParameters.getUserParams().add(Map.of("service", childService)); + } + } + requestParameters.setSubscriptionServiceType(context.getRequestParameters().getSubscriptionServiceType()); + requestParameters.setaLaCarte(context.getRequestParameters().getALaCarte()); + requestParameters.setPayload(context.getRequestParameters().getPayload()); + requestParameters.setUsePreload(context.getRequestParameters().getUsePreload()); + + return requestParameters; + } + + private RequestInfo createRequestInfo(RequestContext context) { + RequestInfo info = sir.getRequestDetails().getRequestInfo(); + if (info != null) { + info.setProductFamilyId(context.getProductFamilyId()); + info.setSource(context.getSource()); + info.setRequestorId(context.getRequestorId()); + info.setInstanceName(child.getInstanceName()); + info.setSuppressRollback(false); + } + return info; + } + + private CloudConfiguration createCloudConfiguration() { + if (child.getCloudConfiguration() != null) { + return child.getCloudConfiguration(); + } + + CloudConfiguration cloudConfiguration = null; + CloudRegion requestCloudConfiguration = buildingBlockExecution.getGeneralBuildingBlock().getCloudRegion(); + if (requestCloudConfiguration != null) { + cloudConfiguration = new CloudConfiguration(); + cloudConfiguration.setLcpCloudRegionId(requestCloudConfiguration.getLcpCloudRegionId()); + cloudConfiguration.setTenantId(requestCloudConfiguration.getTenantId()); + cloudConfiguration.setCloudOwner(requestCloudConfiguration.getCloudOwner()); + } + return cloudConfiguration; + } + + private SubscriberInfo createSubscriberInfo() { + Customer requestCustomer = buildingBlockExecution.getGeneralBuildingBlock().getCustomer(); + + SubscriberInfo subscriberInfo = null; + if (requestCustomer != null) { + subscriberInfo = new SubscriberInfo(); + subscriberInfo.setGlobalSubscriberId(requestCustomer.getGlobalCustomerId()); + subscriberInfo.setSubscriberName(requestCustomer.getSubscriberName()); + } + + return subscriberInfo; + } + + private OwningEntity createOwningEntity() { + org.onap.so.bpmn.servicedecomposition.bbobjects.OwningEntity requestOwningEntity = + buildingBlockExecution.getGeneralBuildingBlock().getServiceInstance().getOwningEntity(); + OwningEntity owningEntity = null; + if (requestOwningEntity != null) { + owningEntity = new OwningEntity(); + owningEntity.setOwningEntityId(requestOwningEntity.getOwningEntityId()); + owningEntity.setOwningEntityName(requestOwningEntity.getOwningEntityName()); + } + + return owningEntity; + } + + private Project createProject() { + org.onap.so.bpmn.servicedecomposition.bbobjects.Project requestProject = + buildingBlockExecution.getGeneralBuildingBlock().getServiceInstance().getProject(); + Project project = null; + + if (requestProject != null) { + project = new Project(); + project.setProjectName(requestProject.getProjectName()); + } + return project; + } + + private RelatedInstanceList[] createRelatedInstanceList() { + RelatedInstance relatedInstance = new RelatedInstance(); + relatedInstance.setModelInfo(parent.getModelInfo()); + relatedInstance.setInstanceId( + buildingBlockExecution.getGeneralBuildingBlock().getServiceInstance().getServiceInstanceId()); + relatedInstance.setInstanceDirection(InstanceDirection.source); + + RelatedInstanceList relatedInstanceList = new RelatedInstanceList(); + relatedInstanceList.setRelatedInstance(relatedInstance); + + RelatedInstanceList[] relatedInstanceListsArray = new RelatedInstanceList[1]; + relatedInstanceListsArray[0] = relatedInstanceList; + + return relatedInstanceListsArray; + } +} diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/service/composition/CreateChildServiceBB.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/service/composition/CreateChildServiceBB.java new file mode 100644 index 0000000000..0486c529c6 --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/service/composition/CreateChildServiceBB.java @@ -0,0 +1,134 @@ +/*- + * Copyright (C) 2021 Bell Canada. 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. + */ + +package org.onap.so.bpmn.infrastructure.service.composition; + +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_ERROR; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_PAYLOAD; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_ID; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_INSTANCE_ID; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_CORRELATION_ID; +import java.util.Map; +import java.util.Objects; +import java.util.UUID; +import org.onap.logging.filter.base.ONAPComponents; +import org.onap.so.bpmn.common.BuildingBlockExecution; +import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey; +import org.onap.so.client.exception.ExceptionBuilder; +import org.onap.so.client.orchestration.ApiHandlerClient; +import org.onap.so.serviceinstancebeans.ServiceInstancesRequest; +import org.onap.so.serviceinstancebeans.ServiceInstancesResponse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.onap.aai.domain.yang.ComposedResource; +import org.onap.aai.domain.yang.Relationship; +import org.onap.aaiclient.client.aai.AAIResourcesClient; +import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri; +import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory; +import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder; +import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder.Types; + + +@Component +public class CreateChildServiceBB { + + private final Logger log = LoggerFactory.getLogger(this.getClass()); + + @Autowired + protected ExceptionBuilder exceptionBuilder; + + @Autowired + private ApiHandlerClient apiHandlerClient; + + public void buildRequest(final BuildingBlockExecution buildingBlockExecution) { + try { + log.info("Building Create Service Request"); + Map<ResourceKey, String> lookupMap = buildingBlockExecution.getLookupMap(); + String childSvcInstanceName = lookupMap.get(ResourceKey.CHILD_SERVICE_INSTANCE_NAME); + Objects.requireNonNull(childSvcInstanceName, "Child service instance name is required"); + + ServiceInstancesRequest sir = ChildServiceRequestBuilder + .getInstance(buildingBlockExecution, childSvcInstanceName) + .setParentRequestId( + buildingBlockExecution.getGeneralBuildingBlock().getRequestContext().getMsoRequestId()) + .setCorrelationId(UUID.randomUUID().toString()).build(); + buildingBlockExecution.setVariable(CHILD_SVC_REQ_PAYLOAD, sir); + } catch (Exception e) { + exceptionBuilder.buildAndThrowWorkflowException(buildingBlockExecution, 10002, e.getMessage(), + ONAPComponents.SO); + } + } + + public void sendRequest(final BuildingBlockExecution buildingBlockExecution) throws Exception { + try { + buildingBlockExecution.getLookupMap(); + ServiceInstancesRequest sir = buildingBlockExecution.getVariable(CHILD_SVC_REQ_PAYLOAD); + log.info("Sending Create Service Request: \n{}", sir.toString()); + buildingBlockExecution.setVariable(CHILD_SVC_REQ_CORRELATION_ID, + sir.getRequestDetails().getRequestInfo().getCorrelator()); + ServiceInstancesResponse response = apiHandlerClient.createServiceInstance(sir); + buildingBlockExecution.setVariable(CHILD_SVC_REQ_ID, response.getRequestReferences().getRequestId()); + buildingBlockExecution.setVariable(CHILD_SVC_INSTANCE_ID, response.getRequestReferences().getInstanceId()); + } catch (Exception e) { + exceptionBuilder.buildAndThrowWorkflowException(buildingBlockExecution, 10003, e.getMessage(), + ONAPComponents.SO); + } + } + + /* + * This method is to create Relation between Parent & Child Services with Node as Composed Resource. + * + */ + + public void updateRelations(BuildingBlockExecution buildingBlockExecution) throws Exception { + + Map<ResourceKey, String> lookupMap = buildingBlockExecution.getLookupMap(); + + String childSvcInstanceId = buildingBlockExecution.getVariable(CHILD_SVC_INSTANCE_ID); + String parentSvcInstanceId = lookupMap.get(ResourceKey.SERVICE_INSTANCE_ID); + + ComposedResource composedResource = new ComposedResource(); + composedResource.setId(UUID.randomUUID().toString()); + + AAIResourcesClient client = new AAIResourcesClient(); + + AAIResourceUri composedResourceURI = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business() + .customer(buildingBlockExecution.getGeneralBuildingBlock().getCustomer().getGlobalCustomerId()) + .serviceSubscription(buildingBlockExecution.getGeneralBuildingBlock().getRequestContext() + .getSubscriptionServiceType()) + .serviceInstance(parentSvcInstanceId).composedResource(composedResource.getId())); + + client.create(composedResourceURI, composedResource); + + AAIResourceUri childURI = + AAIUriFactory.createResourceUri(Types.SERVICE_INSTANCE.getFragment(childSvcInstanceId)); + + client.connect(composedResourceURI, childURI); + + } + + public void handleFailure(final BuildingBlockExecution buildingBlockExecution) { + Map<ResourceKey, String> lookupMap = buildingBlockExecution.getLookupMap(); + String childSvcInstanceName = lookupMap.get(ResourceKey.CHILD_SERVICE_INSTANCE_NAME); + String childErrorMessage = buildingBlockExecution.getVariable(CHILD_SVC_REQ_ERROR); + String errorMessage = + String.format("Failed creating child service %s %s", childSvcInstanceName, childErrorMessage); + exceptionBuilder.buildAndThrowWorkflowException(buildingBlockExecution, 10001, errorMessage, ONAPComponents.SO); + } + +} diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/service/composition/DeleteChildServiceBB.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/service/composition/DeleteChildServiceBB.java new file mode 100644 index 0000000000..52d1b68ccd --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/service/composition/DeleteChildServiceBB.java @@ -0,0 +1,129 @@ +/*- + * Copyright (C) 2021 Bell Canada. 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. + */ + +package org.onap.so.bpmn.infrastructure.service.composition; + +import org.onap.aai.domain.yang.ServiceInstance; +import org.onap.aaiclient.client.aai.AAIResourcesClient; +import org.onap.aaiclient.client.aai.entities.uri.AAIUriFactory; +import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder; +import org.onap.aaiclient.client.graphinventory.entities.uri.Depth; +import org.onap.logging.filter.base.ONAPComponents; +import org.onap.so.bpmn.common.BuildingBlockExecution; +import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey; +import org.onap.so.client.exception.ExceptionBuilder; +import org.onap.so.client.orchestration.ApiHandlerClient; +import org.onap.so.serviceinstancebeans.ModelInfo; +import org.onap.so.serviceinstancebeans.ModelType; +import org.onap.so.serviceinstancebeans.Service; +import org.onap.so.serviceinstancebeans.ServiceInstancesRequest; +import org.onap.so.serviceinstancebeans.ServiceInstancesResponse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import java.util.Map; +import java.util.UUID; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_INSTANCE_ID; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_CORRELATION_ID; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_ERROR; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_ID; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_PAYLOAD; + + +@Component +public class DeleteChildServiceBB { + + @Autowired + protected ExceptionBuilder exceptionBuilder; + + @Autowired + private ApiHandlerClient apiHandlerClient; + + private AAIResourcesClient aaiResourcesClient = new AAIResourcesClient(); + + private final Logger log = LoggerFactory.getLogger(this.getClass()); + + public void buildRequest(final BuildingBlockExecution buildingBlockExecution) { + log.info("Building Delete Service Request"); + Map<ResourceKey, String> lookupMap = buildingBlockExecution.getLookupMap(); + String childSvcInstanceId = lookupMap.get(ResourceKey.CHILD_SERVICE_INSTANCE_ID); + String childServiceInstanceId = + buildingBlockExecution.getLookupMap().get(ResourceKey.CHILD_SERVICE_INSTANCE_ID); + String parentServiceInstanceId = buildingBlockExecution.getLookupMap().get(ResourceKey.SERVICE_INSTANCE_ID); + ServiceInstance childInstanceAAI = aaiResourcesClient.get(ServiceInstance.class, + AAIUriFactory + .createResourceUri( + AAIFluentTypeBuilder.Types.SERVICE_INSTANCE.getFragment(childServiceInstanceId)) + .depth(Depth.TWO)) + .orElse(null); + ServiceInstance parentInstanceAAI = + aaiResourcesClient.get(ServiceInstance.class, + AAIUriFactory.createResourceUri( + AAIFluentTypeBuilder.Types.SERVICE_INSTANCE.getFragment(parentServiceInstanceId)) + .depth(Depth.TWO)) + .orElse(null); + if (childInstanceAAI == null || parentInstanceAAI == null) { + exceptionBuilder.buildAndThrowWorkflowException(buildingBlockExecution, 10004, "Service AAI request failed", + ONAPComponents.SO); + } + Service parentInstance = serviceInstanceToServiceBeanMapper(parentInstanceAAI); + Service childInstance = serviceInstanceToServiceBeanMapper(childInstanceAAI); + ServiceInstancesRequest sir = ChildServiceRequestBuilder + .getInstance(buildingBlockExecution, parentInstance, childInstance) + .setParentRequestId( + buildingBlockExecution.getGeneralBuildingBlock().getRequestContext().getMsoRequestId()) + .setChildSvcInstanceId(childSvcInstanceId).setCorrelationId(UUID.randomUUID().toString()).build(); + buildingBlockExecution.setVariable(CHILD_SVC_REQ_PAYLOAD, sir); + } + + public void sendRequest(final BuildingBlockExecution buildingBlockExecution) { + try { + ServiceInstancesRequest sir = buildingBlockExecution.getVariable(CHILD_SVC_REQ_PAYLOAD); + log.info("Sending Delete Service Request: \n{}", sir.toString()); + buildingBlockExecution.setVariable(CHILD_SVC_REQ_CORRELATION_ID, + sir.getRequestDetails().getRequestInfo().getCorrelator()); + ServiceInstancesResponse response = apiHandlerClient.deleteServiceInstance(sir); + buildingBlockExecution.setVariable(CHILD_SVC_REQ_ID, response.getRequestReferences().getRequestId()); + buildingBlockExecution.setVariable(CHILD_SVC_INSTANCE_ID, response.getRequestReferences().getInstanceId()); + } catch (Exception e) { + exceptionBuilder.buildAndThrowWorkflowException(buildingBlockExecution, 10003, e.getMessage(), + ONAPComponents.SO); + } + } + + public void handleFailure(final BuildingBlockExecution buildingBlockExecution) { + Map<ResourceKey, String> lookupMap = buildingBlockExecution.getLookupMap(); + String childSvcInstanceName = lookupMap.get(ResourceKey.CHILD_SERVICE_INSTANCE_NAME); + String childErrorMessage = buildingBlockExecution.getVariable(CHILD_SVC_REQ_ERROR); + String errorMessage = + String.format("Failed deleting child service %:qqs %s", childSvcInstanceName, childErrorMessage); + exceptionBuilder.buildAndThrowWorkflowException(buildingBlockExecution, 10001, errorMessage, ONAPComponents.SO); + } + + private static Service serviceInstanceToServiceBeanMapper(ServiceInstance serviceInstance) { + Service service = new Service(); + service.setInstanceName(service.getInstanceName()); + ModelInfo modelInfo = new ModelInfo(); + modelInfo.setModelId(serviceInstance.getModelVersionId()); + modelInfo.setModelType(ModelType.service); + modelInfo.setModelVersionId(serviceInstance.getModelVersionId()); + modelInfo.setModelInstanceName(serviceInstance.getServiceInstanceName()); + modelInfo.setModelInvariantId(serviceInstance.getModelInvariantId()); + service.setModelInfo(modelInfo); + return service; + } +} diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/service/composition/ServiceCompositionConstants.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/service/composition/ServiceCompositionConstants.java new file mode 100644 index 0000000000..6b209bdcef --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/service/composition/ServiceCompositionConstants.java @@ -0,0 +1,32 @@ +/*- + * Copyright (C) 2021 Bell Canada. 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. + */ + +package org.onap.so.bpmn.infrastructure.service.composition; + +public class ServiceCompositionConstants { + + public static final String CHILD_SVC_REQ_PAYLOAD = "childServiceRequestPayload"; + public static final String CHILD_SVC_REQ_ID = "childServiceRequestId"; + public static final String CHILD_SVC_INSTANCE_ID = "childServiceInstanceId"; + public static final String IS_CHILD_PROCESS = "isChildProcess"; + public static final String CHILD_SVC_REQ_CORRELATION_ID = "childServiceRequestCorrelationId"; + public static final String CHILD_SVC_REQ_TIMEOUT = "childServiceRequestTimeout"; + public static final String CHILD_SVC_REQ_STATUS = "CHILD_SVC_REQ_STATUS"; + public static final String CHILD_SVC_REQ_ERROR = "CHILD_SVC_REQ_ERROR"; + public static final String CHILD_SVC_REQ_MESSAGE_NAME = "ChildServiceRequest"; + public static final String PARENT_CORRELATION_ID = "parentCorrelationId"; + +} diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ExecuteBuildingBlockBuilder.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ExecuteBuildingBlockBuilder.java index 377d0bbf06..d7f2b85ea0 100755 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ExecuteBuildingBlockBuilder.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ExecuteBuildingBlockBuilder.java @@ -110,13 +110,22 @@ public class ExecuteBuildingBlockBuilder { String requestId, String apiVersion, String resourceId, String requestAction, String vnfType, WorkflowResourceIds workflowResourceIds, RequestDetails requestDetails, boolean replaceVnf) { List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>(); - if (orchFlow.getFlowName().contains(SERVICE) || (orchFlow.getFlowName().contains(CONTROLLER) + if (orchFlow.getFlowName().contains(CHILD_SERVICE)) { + if (WorkflowType.SERVICE.equals(resource.getResourceType()) && resource.hasParent()) { + addBuildingBlockToExecuteBBList(flowsToExecute, resource, WorkflowType.SERVICE, orchFlow, requestId, + apiVersion, resourceId, requestAction, vnfType, workflowResourceIds, requestDetails, false, + false); + } + } else if (orchFlow.getFlowName().contains(SERVICE) || (orchFlow.getFlowName().contains(CONTROLLER) && (SERVICE).equalsIgnoreCase(orchFlow.getBpmnScope()))) { if (!replaceVnf) { workflowResourceIds.setServiceInstanceId(resourceId); } - addBuildingBlockToExecuteBBList(flowsToExecute, resource, WorkflowType.SERVICE, orchFlow, requestId, - apiVersion, resourceId, requestAction, vnfType, workflowResourceIds, requestDetails, false, false); + if (!resource.hasParent()) { + addBuildingBlockToExecuteBBList(flowsToExecute, resource, WorkflowType.SERVICE, orchFlow, requestId, + apiVersion, resourceId, requestAction, vnfType, workflowResourceIds, requestDetails, false, + false); + } } else if (orchFlow.getFlowName().contains(VNF) || (orchFlow.getFlowName().contains(CONTROLLER) && (VNF).equalsIgnoreCase(orchFlow.getBpmnScope()))) { addBuildingBlockToExecuteBBList(flowsToExecute, resource, WorkflowType.VNF, orchFlow, requestId, apiVersion, diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/Resource.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/Resource.java index 57ff837740..3617512d7b 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/Resource.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/Resource.java @@ -173,4 +173,8 @@ public class Resource implements Serializable { public List<Resource> getChildren() { return this.children; } + + public Boolean hasParent() { + return parent != null; + } } diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java index ef32ac5cbb..35e11963a3 100755 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java @@ -28,6 +28,8 @@ package org.onap.so.bpmn.infrastructure.workflow.tasks; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.IS_CHILD_PROCESS; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.PARENT_CORRELATION_ID; import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.ASSIGN_INSTANCE; import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.CONTROLLER; import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.CREATE_INSTANCE; @@ -97,6 +99,7 @@ import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import com.fasterxml.jackson.databind.ObjectMapper; +import org.onap.so.serviceinstancebeans.InstanceDirection; @Component public class WorkflowAction { @@ -351,6 +354,19 @@ public class WorkflowAction { log += ", Action: " + block.getBuildingBlock().getBpmnAction(); logger.info(log); } + + RelatedInstanceList[] instanceList = sIRequest.getRequestDetails().getRelatedInstanceList(); + execution.setVariable(IS_CHILD_PROCESS, Boolean.FALSE); + if (instanceList != null) { + for (RelatedInstanceList relatedInstanceList : instanceList) { + RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance(); + if (InstanceDirection.source.equals(relatedInstance.getInstanceDirection())) { + execution.setVariable(IS_CHILD_PROCESS, Boolean.TRUE); + execution.setVariable(PARENT_CORRELATION_ID, requestDetails.getRequestInfo().getCorrelator()); + } + } + } + // By default, enable homing at VNF level for CREATE_INSTANCE and ASSIGNINSTANCE if (resourceType == WorkflowType.SERVICE && (requestAction.equals(CREATE_INSTANCE) || requestAction.equals(ASSIGN_INSTANCE)) @@ -680,11 +696,11 @@ public class WorkflowAction { logger.debug("{}, {}", pair.getValue0(), pair.getValue1()); } Map<Resource, String> resourceInstanceIds = new HashMap<>(); - Arrays.stream(WorkflowType.values()).filter(type -> !type.equals(WorkflowType.SERVICE)) - .forEach(type -> resourceList.stream().filter(resource -> type.equals(resource.getResourceType())) - .forEach(resource -> updateWorkflowResourceIds(flowsToExecute, type, resource, - retrieveAAIResourceId(aaiResourceIds, type), null, serviceInstanceId, - resourceInstanceIds))); + Arrays.stream(WorkflowType.values()).forEach(type -> resourceList.stream() + .filter(resource -> type.equals(resource.getResourceType()) + && !(WorkflowType.SERVICE.equals(type) && !resource.hasParent())) + .forEach(resource -> updateWorkflowResourceIds(flowsToExecute, type, resource, + retrieveAAIResourceId(aaiResourceIds, type), null, serviceInstanceId, resourceInstanceIds))); } private String retrieveAAIResourceId(List<Pair<WorkflowType, String>> aaiResourceIds, WorkflowType resource) { @@ -702,8 +718,9 @@ public class WorkflowAction { private void generateResourceIds(List<ExecuteBuildingBlock> flowsToExecute, List<Resource> resourceList, String serviceInstanceId) { Map<Resource, String> resourceInstanceIds = new HashMap<>(); - Arrays.stream(WorkflowType.values()).filter(type -> !type.equals(WorkflowType.SERVICE)) - .forEach(type -> resourceList.stream().filter(resource -> type.equals(resource.getResourceType())) + Arrays.stream(WorkflowType.values()) + .forEach(type -> resourceList.stream() + .filter(resource -> resource.hasParent() && type.equals(resource.getResourceType())) .forEach(resource -> updateWorkflowResourceIds(flowsToExecute, type, resource, null, resource.getVirtualLinkKey(), serviceInstanceId, resourceInstanceIds))); } @@ -731,13 +748,20 @@ public class WorkflowAction { WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); workflowResourceIds.setServiceInstanceId(serviceInstanceId); Resource parent = resource.getParent(); - if (parent != null && resourceInstanceIds.containsKey(parent)) { + if (resource.hasParent() && resourceInstanceIds.containsKey(parent)) { WorkflowResourceIdsUtils.setResourceIdByWorkflowType(workflowResourceIds, parent.getResourceType(), resourceInstanceIds.get(parent)); } - WorkflowResourceIdsUtils.setInstanceNameByWorkflowType(workflowResourceIds, resourceType, - resource.getInstanceName()); - WorkflowResourceIdsUtils.setResourceIdByWorkflowType(workflowResourceIds, resourceType, resourceId); + if (resource.hasParent() && WorkflowType.SERVICE.equals(resourceType) + && WorkflowType.SERVICE.equals(parent.getResourceType())) { + String childServiceInstanceId = resource.isGenerated() ? resourceId : resource.getResourceId(); + workflowResourceIds.setChildServiceInstanceId(childServiceInstanceId); + workflowResourceIds.setChildServiceInstanceName(resource.getInstanceName()); + } else { + WorkflowResourceIdsUtils.setInstanceNameByWorkflowType(workflowResourceIds, resourceType, + resource.getInstanceName()); + WorkflowResourceIdsUtils.setResourceIdByWorkflowType(workflowResourceIds, resourceType, resourceId); + } ebb.setWorkflowResourceIds(workflowResourceIds); assignedFlows.add(flowName + action); } @@ -753,7 +777,9 @@ public class WorkflowAction { private boolean isFlowAssignable(Set<String> assignedFlows, ExecuteBuildingBlock ebb, WorkflowType resourceType, String assignedFlowName) { - String id = WorkflowResourceIdsUtils.getResourceIdByWorkflowType(ebb.getWorkflowResourceIds(), resourceType); + String id = WorkflowType.SERVICE.equals(resourceType) + ? StringUtils.defaultString(ebb.getWorkflowResourceIds().getChildServiceInstanceId()) + : WorkflowResourceIdsUtils.getResourceIdByWorkflowType(ebb.getWorkflowResourceIds(), resourceType); return !assignedFlows.contains(assignedFlowName) && id.isEmpty(); } diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBFailure.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBFailure.java index 8d9e020f67..38fe6a3157 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBFailure.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBFailure.java @@ -35,6 +35,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_CORRELATION_ID; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_ERROR; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_MESSAGE_NAME; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_STATUS; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.IS_CHILD_PROCESS; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.PARENT_CORRELATION_ID; @Component public class WorkflowActionBBFailure { @@ -44,6 +50,7 @@ public class WorkflowActionBBFailure { private static final String DELETE_FABRIC_CONFIGURATION_FLOW = "DeleteFabricConfigurationBB"; private static final Logger logger = LoggerFactory.getLogger(WorkflowActionBBFailure.class); public static final String ROLLBACK_TARGET_STATE = "rollbackTargetState"; + @Autowired private RequestsDbClient requestDbclient; @Autowired @@ -83,6 +90,7 @@ public class WorkflowActionBBFailure { InfraActiveRequests request = requestDbclient.getInfraActiveRequestbyRequestId(requestId); String rollbackErrorMsg = ""; String errorMsg = ""; + String childErrorMessage = ""; Boolean rollbackCompletedSuccessfully = (Boolean) execution.getVariable("isRollbackComplete"); Boolean isRollbackFailure = (Boolean) execution.getVariable("isRollback"); ExecuteBuildingBlock ebb = (ExecuteBuildingBlock) execution.getVariable("buildingBlock"); @@ -94,6 +102,7 @@ public class WorkflowActionBBFailure { if (rollbackCompletedSuccessfully) { rollbackErrorMsg = "Rollback has been completed successfully."; + childErrorMessage = rollbackErrorMsg; request.setRollbackStatusMessage(rollbackErrorMsg); execution.setVariable("RollbackErrorMessage", rollbackErrorMsg); String rollbackTargetState = (String) execution.getVariable(ROLLBACK_TARGET_STATE); @@ -116,6 +125,7 @@ public class WorkflowActionBBFailure { } else { rollbackErrorMsg = "Failed to determine rollback error message."; } + childErrorMessage = rollbackErrorMsg; request.setRollbackStatusMessage(rollbackErrorMsg); execution.setVariable("RollbackErrorMessage", rollbackErrorMsg); request.setRequestStatus(Status.FAILED.toString()); @@ -126,6 +136,7 @@ public class WorkflowActionBBFailure { } else { errorMsg = "Failed to determine error message"; } + childErrorMessage = errorMsg; request.setStatusMessage(errorMsg); execution.setVariable("ErrorMessage", errorMsg); String handlingCode = (String) execution.getVariable("handlingCode"); @@ -146,6 +157,16 @@ public class WorkflowActionBBFailure { execution.setVariable("flowStatus", flowStatus); } + if (Boolean.TRUE.equals(execution.getVariable(IS_CHILD_PROCESS))) { + String parentCorrelationId = (String) execution.getVariable(PARENT_CORRELATION_ID); + logger.info("Child service creation failed. Sending message to parent with correlationId: " + + parentCorrelationId); + execution.getProcessEngineServices().getRuntimeService() + .createMessageCorrelation(CHILD_SVC_REQ_MESSAGE_NAME) + .setVariable(CHILD_SVC_REQ_STATUS, "FAILED").setVariable(CHILD_SVC_REQ_ERROR, childErrorMessage) + .processInstanceVariableEquals(CHILD_SVC_REQ_CORRELATION_ID, parentCorrelationId).correlate(); + } + request.setProgress(Long.valueOf(100)); request.setLastModifiedBy("CamundaBPMN"); request.setEndTime(new Timestamp(System.currentTimeMillis())); diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java index ed41270da9..22d78bb672 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java @@ -67,6 +67,12 @@ import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_ERROR; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_MESSAGE_NAME; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_STATUS; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.IS_CHILD_PROCESS; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_CORRELATION_ID; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.PARENT_CORRELATION_ID; @Component public class WorkflowActionBBTasks { @@ -236,6 +242,17 @@ public class WorkflowActionBBTasks { final boolean aLaCarte = (boolean) execution.getVariable(BBConstants.G_ALACARTE); final String resourceName = (String) execution.getVariable("resourceName"); String statusMessage = (String) execution.getVariable("StatusMessage"); + + if (Boolean.TRUE.equals(execution.getVariable(IS_CHILD_PROCESS))) { + String parentCorrelationId = (String) execution.getVariable(PARENT_CORRELATION_ID); + logger.info("Child service request completed. Sending message to parent process with correlationId: " + + parentCorrelationId); + execution.getProcessEngineServices().getRuntimeService() + .createMessageCorrelation(CHILD_SVC_REQ_MESSAGE_NAME) + .setVariable(CHILD_SVC_REQ_STATUS, "COMPLETED").setVariable(CHILD_SVC_REQ_ERROR, "") + .processInstanceVariableEquals(CHILD_SVC_REQ_CORRELATION_ID, parentCorrelationId).correlate(); + } + String macroAction; if (statusMessage == null) { if (aLaCarte) { diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionConstants.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionConstants.java index 093bab66bf..7ffd066de5 100755 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionConstants.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionConstants.java @@ -34,6 +34,7 @@ public final class WorkflowActionConstants { public static final String ACTIVATE_INSTANCE = "activateInstance"; public static final String ASSIGN_INSTANCE = "assignInstance"; + public static final String CHILD_SERVICE = "ChildService"; public static final String CONFIGURATION = "Configuration"; public static final String CONTROLLER = "Controller"; public static final String CREATE_INSTANCE = "createInstance"; diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/ServiceEBBLoader.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/ServiceEBBLoader.java index cb4ee014b7..9d76707e5a 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/ServiceEBBLoader.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/ServiceEBBLoader.java @@ -25,8 +25,12 @@ package org.onap.so.bpmn.infrastructure.workflow.tasks.ebb.loader; import com.fasterxml.jackson.core.JsonProcessingException; import org.camunda.bpm.engine.delegate.DelegateExecution; import org.javatuples.Pair; +import org.onap.aai.domain.yang.ComposedResource; +import org.onap.aai.domain.yang.ComposedResources; import org.onap.aai.domain.yang.GenericVnf; import org.onap.aai.domain.yang.Relationship; +import org.onap.aai.domain.yang.RelationshipData; +import org.onap.aai.domain.yang.RelationshipList; import org.onap.aai.domain.yang.ServiceInstance; import org.onap.aai.domain.yang.VpnBinding; import org.onap.aaiclient.client.aai.AAICommonObjectMapperProvider; @@ -135,7 +139,7 @@ public class ServiceEBBLoader { resourceList = userParamsServiceTraversal.getResourceListFromUserParams(execution, userParams, serviceInstanceId, requestAction); } - if (!foundRelated(resourceList)) { + if (!isComposedService(resourceList) && !foundRelated(resourceList)) { traverseCatalogDbService(execution, sIRequest, resourceList, aaiResourceIds); } } else if ((ACTIVATE_INSTANCE.equalsIgnoreCase(requestAction) @@ -192,6 +196,10 @@ public class ServiceEBBLoader { || containsWorkflowType(resourceList, WorkflowType.NETWORKCOLLECTION)); } + public boolean isComposedService(List<Resource> resourceList) { + return resourceList.stream().anyMatch(s -> s.getResourceType() == WorkflowType.SERVICE && s.hasParent()); + } + public void traverseAAIService(DelegateExecution execution, List<Resource> resourceList, String resourceId, List<Pair<WorkflowType, String>> aaiResourceIds) { try { @@ -203,6 +211,7 @@ public class ServiceEBBLoader { serviceResource.setModelInvariantId(serviceInstanceAAI.getModelInvariantId()); serviceResource.setModelVersionId(serviceInstanceAAI.getModelVersionId()); resourceList.add(serviceResource); + traverseServiceInstanceChildService(resourceList, serviceResource, serviceInstanceAAI); traverseServiceInstanceMSOVnfs(resourceList, serviceResource, aaiResourceIds, serviceInstanceMSO); traverseServiceInstanceMSOPnfs(resourceList, serviceResource, aaiResourceIds, serviceInstanceMSO); if (serviceInstanceMSO.getNetworks() != null) { @@ -294,6 +303,54 @@ public class ServiceEBBLoader { } } + public void traverseServiceInstanceChildService(List<Resource> resourceList, Resource serviceResource, + ServiceInstance serviceInstanceAAI) { + + ComposedResources composedResources = serviceInstanceAAI.getComposedResources(); + if (composedResources == null) { + return; + } + + List<ComposedResource> listOfComposedResource = composedResources.getComposedResource(); + + listOfComposedResource.forEach(composedResource -> { + // Get ServiceInstance from composedResource relationship List + RelationshipList relationshipList = composedResource.getRelationshipList(); + if (relationshipList == null) { + return; + } + List<Relationship> composedResourceRelationshipList = relationshipList.getRelationship(); + ServiceInstance childService = new ServiceInstance(); + composedResourceRelationshipList.forEach(composedRelation -> { + if ("service-instance".equalsIgnoreCase(composedRelation.getRelatedTo())) { + List<RelationshipData> rData = composedRelation.getRelationshipData(); + rData.forEach(data -> { + if ("service-instance.service-instance-id".equalsIgnoreCase(data.getRelationshipKey())) { + childService.setServiceInstanceId(data.getRelationshipValue()); + } + }); + composedRelation.getRelatedToProperty().forEach(relatedToProperty -> { + if ("service-instance.service-instance-name" + .equalsIgnoreCase(relatedToProperty.getPropertyKey())) { + childService.setServiceInstanceName(relatedToProperty.getPropertyValue()); + } + }); + } + }); + + if (childService.getServiceInstanceId() == null) { + return; + } + + Resource childServiceResource = + new Resource(WorkflowType.SERVICE, childService.getServiceInstanceId(), false, serviceResource); + + childServiceResource.setInstanceName(childService.getServiceInstanceName()); + resourceList.add(childServiceResource); + }); + + } + protected void traverseVrfConfiguration(List<Pair<WorkflowType, String>> aaiResourceIds, List<Resource> resourceList, Resource serviceResource, org.onap.so.db.catalog.beans.Service service, RelatedInstance relatedVpnBinding, RelatedInstance relatedLocalNetwork) diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/UserParamsServiceTraversal.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/UserParamsServiceTraversal.java index 77cd65b946..466b49644f 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/UserParamsServiceTraversal.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/UserParamsServiceTraversal.java @@ -100,6 +100,9 @@ public class UserParamsServiceTraversal { serviceResource.setModelInvariantId(modelInfo.getModelInvariantUuid()); } resourceList.add(serviceResource); + if (validate.getResources().getServices() != null) { + setResourceListForChildServices(execution, resourceList, serviceResource, validate); + } if (validate.getResources().getVnfs() != null) { setResourceListForVnfs(execution, resourceList, serviceResource, validate); } @@ -113,6 +116,17 @@ public class UserParamsServiceTraversal { return resourceList; } + private void setResourceListForChildServices(DelegateExecution execution, List<Resource> resourceList, + Resource serviceResource, Service validate) { + for (Service childService : validate.getResources().getServices()) { + Resource childServiceResource = new Resource(WorkflowType.SERVICE, + childService.getModelInfo().getModelVersionId(), false, serviceResource); + childServiceResource.setProcessingPriority(childService.getProcessingPriority()); + childServiceResource.setInstanceName(childService.getInstanceName()); + resourceList.add(childServiceResource); + } + } + private void setResourceListForVnfs(DelegateExecution execution, List<Resource> resourceList, Resource serviceResource, Service validate) { for (Vnfs vnf : validate.getResources().getVnfs()) { @@ -232,6 +246,7 @@ public class UserParamsServiceTraversal { pnfResource.setModelCustomizationId(modelInfo.getModelCustomizationUuid()); pnfResource.setModelVersionId(modelInfo.getModelVersionId()); } + pnfResource.setInstanceName(pnf.getInstanceName()); pnfResource.setProcessingPriority(pnf.getProcessingPriority()); resourceList.add(pnfResource); } diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/utils/WorkflowResourceIdsUtils.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/utils/WorkflowResourceIdsUtils.java index 9cabf6665c..f3aafde2a2 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/utils/WorkflowResourceIdsUtils.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/utils/WorkflowResourceIdsUtils.java @@ -70,6 +70,8 @@ public final class WorkflowResourceIdsUtils { workflowResourceIds.setVnfInstanceName(instanceName); } else if (resourceType == WorkflowType.VFMODULE) { workflowResourceIds.setVfModuleInstanceName(instanceName); + } else if (resourceType == WorkflowType.PNF) { + workflowResourceIds.setPnfInstanceName(instanceName); } } @@ -110,6 +112,7 @@ public final class WorkflowResourceIdsUtils { workflowResourceIds.setInstanceGroupId((String) execution.getVariable("instanceGroupId")); workflowResourceIds.setVnfInstanceName((String) execution.getVariable("vnfInstanceName")); workflowResourceIds.setVfModuleInstanceName((String) execution.getVariable("vfModuleInstanceName")); + workflowResourceIds.setPnfInstanceName((String) execution.getVariable("pnfInstanceName")); return workflowResourceIds; } diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/ApiHandlerClient.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/ApiHandlerClient.java new file mode 100644 index 0000000000..132e618ba5 --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/ApiHandlerClient.java @@ -0,0 +1,73 @@ +package org.onap.so.client.orchestration; + +import org.onap.so.serviceinstancebeans.ServiceInstancesRequest; +import org.onap.so.serviceinstancebeans.ServiceInstancesResponse; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; +import org.springframework.web.client.HttpStatusCodeException; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; +import static org.onap.so.client.orchestration.RestTemplateApiClientConfig.REST_TEMPLATE_API_HANDLER; + +@Component +public class ApiHandlerClient { + + @Value("${mso.adapters.apihandler.serviceInstantiationEndpoint:/onap/so/infra/serviceInstantiation/v7/serviceInstances}") + private String serviceInstantiationEndpoint; + @Value("${mso.adapters.apihandler.endpoint}") + private String baseUri; + @Value("${mso.adapters.apihandler.auth}") + private String auth; + + private RestTemplate restTemplate; + + public ApiHandlerClient(@Qualifier(REST_TEMPLATE_API_HANDLER) RestTemplate restTemplate) { + this.restTemplate = restTemplate; + } + + public ServiceInstancesResponse createServiceInstance(ServiceInstancesRequest serviceInstancesRequest) + throws ApiHandlerClientException { + try { + HttpEntity<ServiceInstancesRequest> request = createRequest(serviceInstancesRequest); + return restTemplate.exchange(baseUri + serviceInstantiationEndpoint, HttpMethod.POST, request, + ServiceInstancesResponse.class).getBody(); + } catch (HttpStatusCodeException e) { + throw new ApiHandlerClientException("Failed sending service createInstance request to api-handler." + + " Error: " + e.getResponseBodyAsString()); + } catch (RestClientException e) { + throw new ApiHandlerClientException( + "Failed sending service createInstance request to api-handler." + " Error: " + e.getMessage()); + } + } + + public ServiceInstancesResponse deleteServiceInstance(ServiceInstancesRequest serviceInstancesRequest) + throws ApiHandlerClientException { + try { + HttpEntity<ServiceInstancesRequest> request = createRequest(serviceInstancesRequest); + return restTemplate.exchange( + baseUri + serviceInstantiationEndpoint + + String.format("/%s", serviceInstancesRequest.getServiceInstanceId()), + HttpMethod.DELETE, request, ServiceInstancesResponse.class).getBody(); + } catch (HttpStatusCodeException e) { + throw new ApiHandlerClientException("Failed sending service deleteInstance request to api-handler." + + " Error: " + e.getResponseBodyAsString()); + } catch (RestClientException e) { + throw new ApiHandlerClientException( + "Failed sending service deleteInstance request to api-handler." + " Error: " + e.getMessage()); + } + } + + private HttpEntity<ServiceInstancesRequest> createRequest(ServiceInstancesRequest serviceInstancesRequest) { + HttpHeaders headers = new HttpHeaders(); + headers.add(HttpHeaders.AUTHORIZATION, auth); + headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); + headers.set(HttpHeaders.ACCEPT, String.valueOf(MediaType.APPLICATION_JSON)); + + return new HttpEntity<>(serviceInstancesRequest, headers); + } +} diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/ApiHandlerClientException.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/ApiHandlerClientException.java new file mode 100644 index 0000000000..0a4c60cdf7 --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/ApiHandlerClientException.java @@ -0,0 +1,8 @@ +package org.onap.so.client.orchestration; + +public class ApiHandlerClientException extends Exception { + + public ApiHandlerClientException(String errorMessage) { + super(errorMessage); + } +} diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/RestTemplateApiClientConfig.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/RestTemplateApiClientConfig.java new file mode 100644 index 0000000000..a01fbe18f8 --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/RestTemplateApiClientConfig.java @@ -0,0 +1,23 @@ +package org.onap.so.client.orchestration; + +import org.onap.logging.filter.spring.SpringClientPayloadFilter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.BufferingClientHttpRequestFactory; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; + +@Configuration +public class RestTemplateApiClientConfig { + public static final String REST_TEMPLATE_API_HANDLER = "restTemplateApiHandler"; + + @Bean(REST_TEMPLATE_API_HANDLER) + public RestTemplate restTemplate() { + final RestTemplate restTemplate = new RestTemplate(); + restTemplate + .setRequestFactory(new BufferingClientHttpRequestFactory(new HttpComponentsClientHttpRequestFactory())); + restTemplate.getInterceptors().add((new SpringClientPayloadFilter())); + return restTemplate; + } + +} diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/service/composition/ChildServiceRequestBuilderTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/service/composition/ChildServiceRequestBuilderTest.java new file mode 100644 index 0000000000..e57232ebb7 --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/service/composition/ChildServiceRequestBuilderTest.java @@ -0,0 +1,253 @@ +package org.onap.so.bpmn.infrastructure.service.composition; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.onap.so.bpmn.common.BuildingBlockExecution; +import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion; +import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer; +import org.onap.so.bpmn.servicedecomposition.bbobjects.OwningEntity; +import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance; +import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock; +import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext; +import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestParameters; +import org.onap.so.bpmn.servicedecomposition.bbobjects.Project; +import org.onap.so.serviceinstancebeans.CloudConfiguration; +import org.onap.so.serviceinstancebeans.InstanceDirection; +import org.onap.so.serviceinstancebeans.ModelInfo; +import org.onap.so.serviceinstancebeans.ModelType; +import org.onap.so.serviceinstancebeans.RelatedInstance; +import org.onap.so.serviceinstancebeans.RelatedInstanceList; +import org.onap.so.serviceinstancebeans.RequestInfo; +import org.onap.so.serviceinstancebeans.Service; +import org.onap.so.serviceinstancebeans.ServiceInstancesRequest; +import org.onap.so.serviceinstancebeans.SubscriberInfo; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + +public class ChildServiceRequestBuilderTest { + + private BuildingBlockExecution mockExecution; + private List<Map<String, Object>> userParamsExpected; + + @Before + public void setUp() throws IOException { + String incomingRequest = + "{\"requestDetails\":{\"subscriberInfo\":{\"globalSubscriberId\":\"ubuntu-customer\"},\"requestInfo\":{\"suppressRollback\":false,\"instanceName\":\"LcmDemo\",\"productFamilyId\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\",\"requestorId\":\"portal\",\"source\":\"postman\"},\"cloudConfiguration\":{\"lcpCloudRegionId\":\"123\",\"tenantId\":\"e2710e84063b421fab08189818761d55\",\"cloudOwner\":\"cloudOwner\"},\"requestParameters\":{\"subscriptionServiceType\":\"ubuntu\",\"userParams\":[{\"Homing_Solution\":\"none\"},{\"service\":{\"instanceParams\":[],\"resources\":{\"vnfs\":[{\"modelInfo\":{\"modelName\":\"UbuntuSriovVF\",\"modelVersionId\":\"5b5d07f0-7449-4eec-95eb-531ddef18240\",\"modelInvariantUuid\":\"9ed17b82-11f3-44cc-a86f-32739360617e\",\"modelVersion\":\"1.0\",\"modelCustomizationId\":\"ae139d3d-b2ae-462c-b09d-c85bdc2e3073\",\"modelInstanceName\":\"UbuntuSriovVF0\"},\"cloudConfiguration\":{\"lcpCloudRegionId\":\"123\",\"tenantId\":\"e2710e84063b421fab08189818761d55\",\"cloudOwner\":\"cloudOwner\"},\"platform\":{\"platformName\":\"openstack\"},\"lineOfBusiness\":{\"lineOfBusinessName\":\"wireless\"},\"productFamilyId\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\",\"instanceName\":\"vnf-instanceName\",\"instanceParams\":[{\"vnf-name\":\"vnf-vnf-name\",\"vnf_name\":\"UbuntuVNFName\"}],\"vfModules\":[{\"modelInfo\":{\"modelName\":\"Ubuntusriovvf..base..module-0\",\"modelVersionId\":\"f4ef24dd-7a4e-4eef-83b7-c58f2f3e36e4\",\"modelInvariantUuid\":\"719aab1e-c551-46e0-87e8-a78dcd7891da\",\"modelVersion\":\"1\",\"modelCustomizationId\":\"dea421a8-c1b8-4044-8ca1-58c30de3b315\"},\"instanceName\":\"lcm-demo-network-1\",\"instanceParams\":[{\"name\":\"lcm-demo-network-1\",\"cidr\":\"10.10.10.0/24\"}]},{\"modelInfo\":{\"modelName\":\"Ubuntusriovvf..ubuntu-vf-module..module-1\",\"modelVersionId\":\"112f2de4-4f09-4567-9de1-2d271cb6e164\",\"modelInvariantUuid\":\"ba6d2e11-4e82-4bb8-9d52-a2962a263a09\",\"modelVersion\":\"1\",\"modelCustomizationId\":\"7bc2649e-b96b-44ec-adfe-4a6167f3034e\"},\"instanceName\":\"lcm-demo-ubuntu-1\",\"instanceParams\":[{\"name\":\"lcm-demo-ubuntu-1\",\"network_mgmt\":\"networkMgmt\",\"key_name\":\"demo\",\"network_name\":\"lcm-demo-network-1\",\"image_name\":\"imageName\",\"flavor_name\":\"m1.small\"}]}]}],\"services\":[{\"instanceParams\":[],\"resources\":{\"vnfs\":[{\"modelInfo\":{\"modelName\":\"UbuntuSriovVF\",\"modelVersionId\":\"5b5d07f0-7449-4eec-95eb-531ddef18240\",\"modelInvariantUuid\":\"9ed17b82-11f3-44cc-a86f-32739360617e\",\"modelVersion\":\"1.0\",\"modelCustomizationId\":\"ae139d3d-b2ae-462c-b09d-c85bdc2e3073\",\"modelInstanceName\":\"UbuntuSriovVF0\"},\"cloudConfiguration\":{\"lcpCloudRegionId\":\"123\",\"tenantId\":\"e2710e84063b421fab08189818761d55\",\"cloudOwner\":\"cloudOwner\"},\"platform\":{\"platformName\":\"openstack\"},\"lineOfBusiness\":{\"lineOfBusinessName\":\"wireless\"},\"productFamilyId\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\",\"instanceName\":\"vnf-instanceName\",\"instanceParams\":[{\"vnf-name\":\"vnf-vnf-name\",\"vnf_name\":\"UbuntuVNFName\"}],\"vfModules\":[{\"modelInfo\":{\"modelName\":\"Ubuntusriovvf..base..module-0\",\"modelVersionId\":\"f4ef24dd-7a4e-4eef-83b7-c58f2f3e36e4\",\"modelInvariantUuid\":\"719aab1e-c551-46e0-87e8-a78dcd7891da\",\"modelVersion\":\"1\",\"modelCustomizationId\":\"dea421a8-c1b8-4044-8ca1-58c30de3b315\"},\"instanceName\":\"lcm-demo-network-1\",\"instanceParams\":[{\"name\":\"lcm-demo-network-1\",\"cidr\":\"10.10.10.0/24\"}]},{\"modelInfo\":{\"modelName\":\"Ubuntusriovvf..ubuntu-vf-module..module-1\",\"modelVersionId\":\"112f2de4-4f09-4567-9de1-2d271cb6e164\",\"modelInvariantUuid\":\"ba6d2e11-4e82-4bb8-9d52-a2962a263a09\",\"modelVersion\":\"1\",\"modelCustomizationId\":\"7bc2649e-b96b-44ec-adfe-4a6167f3034e\"},\"instanceName\":\"lcm-demo-ubuntu-1\",\"instanceParams\":[{\"name\":\"lcm-demo-ubuntu-1\",\"network_mgmt\":\"networkMgmt\",\"key_name\":\"demo\",\"network_name\":\"lcm-demo-network-1\",\"image_name\":\"imageName\",\"flavor_name\":\"m1.small\"}]}]}]},\"modelInfo\":{\"modelVersion\":\"2.0\",\"modelVersionId\":\"5bc2b6b3-c9bb-49a1-89c8-4dac5b236d52\",\"modelInvariantId\":\"a316f8fa-c886-483f-801b-6663e35b836c\",\"modelCustomizationId\":\"cs1-svc-modelCustomizationId\",\"modelName\":\"GuilinLcmSVC\",\"modelType\":\"service\"},\"instanceName\":\"service1-instanceName\"},{\"instanceParams\":[],\"resources\":{\"vnfs\":[{\"modelInfo\":{\"modelName\":\"UbuntuSriovVF\",\"modelVersionId\":\"5b5d07f0-7449-4eec-95eb-531ddef18240\",\"modelInvariantUuid\":\"9ed17b82-11f3-44cc-a86f-32739360617e\",\"modelVersion\":\"1.0\",\"modelCustomizationId\":\"ae139d3d-b2ae-462c-b09d-c85bdc2e3073\",\"modelInstanceName\":\"UbuntuSriovVF0\"},\"cloudConfiguration\":{\"lcpCloudRegionId\":\"123\",\"tenantId\":\"e2710e84063b421fab08189818761d55\",\"cloudOwner\":\"cloudOwner\"},\"platform\":{\"platformName\":\"openstack\"},\"lineOfBusiness\":{\"lineOfBusinessName\":\"wireless\"},\"productFamilyId\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\",\"instanceName\":\"vnf-instanceName\",\"instanceParams\":[{\"vnf-name\":\"vnf-vnf-name\",\"vnf_name\":\"UbuntuVNFName\"}],\"vfModules\":[{\"modelInfo\":{\"modelName\":\"Ubuntusriovvf..base..module-0\",\"modelVersionId\":\"f4ef24dd-7a4e-4eef-83b7-c58f2f3e36e4\",\"modelInvariantUuid\":\"719aab1e-c551-46e0-87e8-a78dcd7891da\",\"modelVersion\":\"1\",\"modelCustomizationId\":\"dea421a8-c1b8-4044-8ca1-58c30de3b315\"},\"instanceName\":\"lcm-demo-network-1\",\"instanceParams\":[{\"name\":\"lcm-demo-network-1\",\"cidr\":\"10.10.10.0/24\"}]},{\"modelInfo\":{\"modelName\":\"Ubuntusriovvf..ubuntu-vf-module..module-1\",\"modelVersionId\":\"112f2de4-4f09-4567-9de1-2d271cb6e164\",\"modelInvariantUuid\":\"ba6d2e11-4e82-4bb8-9d52-a2962a263a09\",\"modelVersion\":\"1\",\"modelCustomizationId\":\"7bc2649e-b96b-44ec-adfe-4a6167f3034e\"},\"instanceName\":\"lcm-demo-ubuntu-1\",\"instanceParams\":[{\"name\":\"lcm-demo-ubuntu-1\",\"network_mgmt\":\"networkMgmt\",\"key_name\":\"demo\",\"network_name\":\"lcm-demo-network-1\",\"image_name\":\"imageName\",\"flavor_name\":\"m1.small\"}]}]}]},\"modelInfo\":{\"modelVersion\":\"2.0\",\"modelVersionId\":\"5bc2b6b3-c9bb-49a1-89c8-4dac5b236d52\",\"modelInvariantId\":\"a316f8fa-c886-483f-801b-6663e35b836c\",\"modelCustomizationId\":\"cs1-svc-modelCustomizationId\",\"modelName\":\"GuilinLcmSVC\",\"modelType\":\"service\"},\"instanceName\":\"service2-instanceName\"}]},\"modelInfo\":{\"modelVersion\":\"2.0\",\"modelVersionId\":\"5bc2b6b3-c9bb-49a1-89c8-4dac5b236d52\",\"modelInvariantId\":\"a316f8fa-c886-483f-801b-6663e35b836c\",\"modelName\":\"GuilinLcmSVC\",\"modelType\":\"service\"}}}],\"aLaCarte\":false},\"project\":{\"projectName\":\"Project-UbuntuDemo\"},\"owningEntity\":{\"owningEntityId\":\"33a8b609-1cfe-4d19-8dc2-5b95b921de1e\",\"owningEntityName\":\"demo\"},\"modelInfo\":{\"modelVersion\":\"2.0\",\"modelVersionId\":\"5bc2b6b3-c9bb-49a1-89c8-4dac5b236d52\",\"modelInvariantId\":\"a316f8fa-c886-483f-801b-6663e35b836c\",\"modelName\":\"GuilinLcmSVC\",\"modelType\":\"service\"}}}"; + + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + ServiceInstancesRequest request = mapper.readValue(incomingRequest, ServiceInstancesRequest.class); + userParamsExpected = request.getRequestDetails().getRequestParameters().getUserParams(); + RequestContext context = new RequestContext(); + RequestParameters parameters = new RequestParameters(); + parameters.setUserParams(request.getRequestDetails().getRequestParameters().getUserParams()); + context.setRequestParameters(parameters); + context.setProductFamilyId("FamilyId"); + context.setSource("source"); + context.setRequestorId("RequestOrId"); + context.setAction("createInstance"); + + CloudRegion cloudRegion = new CloudRegion(); + cloudRegion.setCloudOwner("CloudOwner"); + cloudRegion.setLcpCloudRegionId("my-region-id"); + cloudRegion.setTenantId("tenant-id"); + + Customer customer = new Customer(); + customer.setGlobalCustomerId("GlobalCustomerId"); + customer.setSubscriberName("SubscriberName"); + + ServiceInstance serviceInstance = new ServiceInstance(); + OwningEntity owningEntity = new OwningEntity(); + owningEntity.setOwningEntityId("owningEntityId"); + owningEntity.setOwningEntityName("owningEntityName"); + serviceInstance.setOwningEntity(owningEntity); + + Project project = new Project(); + project.setProjectName("projectName"); + serviceInstance.setProject(project); + + serviceInstance.setServiceInstanceId("serviceInstanceId"); + + GeneralBuildingBlock gbb = new GeneralBuildingBlock(); + gbb.setCloudRegion(cloudRegion); + gbb.setCustomer(customer); + gbb.setRequestContext(context); + gbb.setServiceInstance(serviceInstance); + mockExecution = mock(BuildingBlockExecution.class); + doReturn(gbb).when(mockExecution).getGeneralBuildingBlock(); + doReturn("CreateChildServiceBB").when(mockExecution).getFlowToBeCalled(); + } + + @Test + public void deleteChildServiceRequestBuilderTest() { + Service parent = new Service(); + Service child = new Service(); + + ChildServiceRequestBuilder builder = ChildServiceRequestBuilder.getInstance(mockExecution, parent, child); + ServiceInstancesRequest sir = builder + .setParentRequestId(mockExecution.getGeneralBuildingBlock().getRequestContext().getMsoRequestId()) + .setCorrelationId(UUID.randomUUID().toString()).setChildSvcInstanceId("childInstanceId").build(); + + Assert.assertEquals("childInstanceId", sir.getServiceInstanceId()); + Assert.assertEquals("serviceInstanceId", + sir.getRequestDetails().getRelatedInstanceList()[0].getRelatedInstance().getInstanceId()); + } + + @Test + public void createChildServiceRequestBuilderTest() { + + ServiceInstancesRequest sir = ChildServiceRequestBuilder.getInstance(mockExecution, "service1-instanceName") + .setParentRequestId(mockExecution.getGeneralBuildingBlock().getRequestContext().getMsoRequestId()) + .setCorrelationId(UUID.randomUUID().toString()).setChildSvcInstanceId("childInstanceId").build(); + + Assert.assertEquals("childInstanceId", sir.getServiceInstanceId()); + + // modelInfo + ModelInfo modelInfo = sir.getRequestDetails().getModelInfo(); + Assert.assertEquals("a316f8fa-c886-483f-801b-6663e35b836c", modelInfo.getModelInvariantId()); + Assert.assertEquals(ModelType.service, modelInfo.getModelType()); + Assert.assertEquals("GuilinLcmSVC", modelInfo.getModelName()); + Assert.assertEquals("2.0", modelInfo.getModelVersion()); + Assert.assertEquals("cs1-svc-modelCustomizationId", modelInfo.getModelCustomizationId()); + Assert.assertEquals("5bc2b6b3-c9bb-49a1-89c8-4dac5b236d52", modelInfo.getModelVersionId()); + Assert.assertEquals("5bc2b6b3-c9bb-49a1-89c8-4dac5b236d52", modelInfo.getModelUuid()); + Assert.assertEquals("a316f8fa-c886-483f-801b-6663e35b836c", modelInfo.getModelInvariantUuid()); + + // requestInfo + RequestInfo requestInfo = sir.getRequestDetails().getRequestInfo(); + Assert.assertNotNull(requestInfo.getCorrelator()); + Assert.assertEquals("FamilyId", requestInfo.getProductFamilyId()); + Assert.assertEquals("source", requestInfo.getSource()); + Assert.assertEquals("service1-instanceName", requestInfo.getInstanceName()); + Assert.assertEquals(false, requestInfo.getSuppressRollback()); + Assert.assertEquals("RequestOrId", requestInfo.getRequestorId()); + + RelatedInstanceList[] relatedInstanceList = sir.getRequestDetails().getRelatedInstanceList(); + Assert.assertEquals(1, relatedInstanceList.length); + RelatedInstance relatedInstance = relatedInstanceList[0].getRelatedInstance(); + Assert.assertEquals("serviceInstanceId", relatedInstance.getInstanceId()); + Assert.assertEquals(InstanceDirection.source, relatedInstance.getInstanceDirection()); + + ModelInfo parentModel = relatedInstance.getModelInfo(); + Assert.assertEquals("a316f8fa-c886-483f-801b-6663e35b836c", parentModel.getModelInvariantId()); + Assert.assertEquals(ModelType.service, parentModel.getModelType()); + Assert.assertEquals("GuilinLcmSVC", parentModel.getModelName()); + Assert.assertEquals("2.0", parentModel.getModelVersion()); + Assert.assertEquals("5bc2b6b3-c9bb-49a1-89c8-4dac5b236d52", parentModel.getModelVersionId()); + Assert.assertEquals("5bc2b6b3-c9bb-49a1-89c8-4dac5b236d52", parentModel.getModelUuid()); + Assert.assertEquals("a316f8fa-c886-483f-801b-6663e35b836c", parentModel.getModelInvariantUuid()); + + SubscriberInfo subsciberInfo = sir.getRequestDetails().getSubscriberInfo(); + Assert.assertEquals("GlobalCustomerId", subsciberInfo.getGlobalSubscriberId()); + Assert.assertEquals("SubscriberName", subsciberInfo.getSubscriberName()); + + CloudConfiguration cloudConfiguration = sir.getRequestDetails().getCloudConfiguration(); + Assert.assertEquals("tenant-id", cloudConfiguration.getTenantId()); + Assert.assertEquals("CloudOwner", cloudConfiguration.getCloudOwner()); + Assert.assertEquals("my-region-id", cloudConfiguration.getLcpCloudRegionId()); + + org.onap.so.serviceinstancebeans.RequestParameters requestParameters = + sir.getRequestDetails().getRequestParameters(); + Assert.assertEquals(2, requestParameters.getUserParams().size()); + Assert.assertEquals(userParamsExpected.get(0), requestParameters.getUserParams().get(0)); + + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + try { + String expectedChildService = + mapper.writeValueAsString(getChildService(userParamsExpected, "service1-instanceName")); + String actualChildService = + mapper.writeValueAsString(requestParameters.getUserParams().get(1).get("service")); + Assert.assertEquals(expectedChildService, actualChildService); + } catch (Exception e) { + Assert.fail(); + } + + org.onap.so.serviceinstancebeans.Project project = sir.getRequestDetails().getProject(); + Assert.assertEquals("projectName", project.getProjectName()); + + org.onap.so.serviceinstancebeans.OwningEntity owningEntity = sir.getRequestDetails().getOwningEntity(); + Assert.assertEquals("owningEntityId", owningEntity.getOwningEntityId()); + Assert.assertEquals("owningEntityName", owningEntity.getOwningEntityName()); + } + + @Test + public void childServiceCloudConfigurationRequestBuilderTest() throws IOException { + String incomingRequest = + "{\"requestDetails\":{\"subscriberInfo\":{\"globalSubscriberId\":\"ubuntu-customer\"},\"requestInfo\":{\"suppressRollback\":false,\"instanceName\":\"onap-test-parent-child-service\",\"productFamilyId\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\",\"requestorId\":\"portal\",\"source\":\"postman\"},\"cloudConfiguration\":{\"lcpCloudRegionId\":\"215\",\"tenantId\":\"e2710e84063b421fab08189818761d55\",\"cloudOwner\":\"iaas\"},\"requestParameters\":{\"subscriptionServiceType\":\"ubuntu\",\"userParams\":[{\"Homing_Solution\":\"none\"},{\"service\":{\"instanceParams\":[],\"resources\":{\"services\":[{\"instanceParams\":[],\"resources\":{},\"modelInfo\":{\"modelVersion\":\"3.0\",\"modelVersionId\":\"872efe6d-c787-4caf-b6f8-3234a7bfc5cf\",\"modelInvariantId\":\"a316f8fa-c886-483f-801b-6663e35b836c\",\"modelName\":\"GuilinLcmSVC\",\"modelType\":\"service\"},\"instanceName\":\"service1-instanceName-child\",\"cloudConfiguration\":{\"lcpCloudRegionId\":\"test\",\"tenantId\":\"1234567890\",\"cloudOwner\":\"demo\"}},{\"instanceParams\":[],\"resources\":{},\"modelInfo\":{\"modelVersion\":\"3.0\",\"modelVersionId\":\"872efe6d-c787-4caf-b6f8-3234a7bfc5cf\",\"modelInvariantId\":\"a316f8fa-c886-483f-801b-6663e35b836c\",\"modelName\":\"GuilinLcmSVC\",\"modelType\":\"service\"},\"instanceName\":\"service2-instanceName-child\"}]},\"modelInfo\":{\"modelVersion\":\"3.0\",\"modelVersionId\":\"872efe6d-c787-4caf-b6f8-3234a7bfc5cf\",\"modelInvariantId\":\"a316f8fa-c886-483f-801b-6663e35b836c\",\"modelName\":\"GuilinLcmSVC\",\"modelType\":\"service\"}}}],\"aLaCarte\":false},\"project\":{\"projectName\":\"Project-UbuntuDemo\"},\"owningEntity\":{\"owningEntityId\":\"33a8b609-1cfe-4d19-8dc2-5b95b921de1e\",\"owningEntityName\":\"seb\"},\"modelInfo\":{\"modelVersion\":\"3.0\",\"modelVersionId\":\"872efe6d-c787-4caf-b6f8-3234a7bfc5cf\",\"modelInvariantId\":\"a316f8fa-c886-483f-801b-6663e35b836c\",\"modelName\":\"GuilinLcmSVC\",\"modelType\":\"service\"}}}"; + + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + ServiceInstancesRequest request = mapper.readValue(incomingRequest, ServiceInstancesRequest.class); + + RequestContext context = new RequestContext(); + RequestParameters parameters = new RequestParameters(); + parameters.setUserParams(request.getRequestDetails().getRequestParameters().getUserParams()); + context.setRequestParameters(parameters); + context.setProductFamilyId("FamilyId"); + context.setSource("source"); + context.setRequestorId("RequestOrId"); + context.setAction("createInstance"); + + CloudRegion cloudRegion = new CloudRegion(); + cloudRegion.setCloudOwner("CloudOwner"); + cloudRegion.setLcpCloudRegionId("my-region-id"); + cloudRegion.setTenantId("tenant-id"); + + ServiceInstance serviceInstance = new ServiceInstance(); + OwningEntity owningEntity = new OwningEntity(); + owningEntity.setOwningEntityId("owningEntityId"); + owningEntity.setOwningEntityName("owningEntityName"); + serviceInstance.setOwningEntity(owningEntity); + + GeneralBuildingBlock gbb = new GeneralBuildingBlock(); + gbb.setCloudRegion(cloudRegion); + gbb.setRequestContext(context); + gbb.setServiceInstance(serviceInstance); + mockExecution = mock(BuildingBlockExecution.class); + doReturn(gbb).when(mockExecution).getGeneralBuildingBlock(); + doReturn("CreateChildServiceBB").when(mockExecution).getFlowToBeCalled(); + + ServiceInstancesRequest sir = ChildServiceRequestBuilder + .getInstance(mockExecution, "service1-instanceName-child") + .setParentRequestId(mockExecution.getGeneralBuildingBlock().getRequestContext().getMsoRequestId()) + .setCorrelationId(UUID.randomUUID().toString()).setChildSvcInstanceId("childInstanceId").build(); + + Assert.assertEquals("childInstanceId", sir.getServiceInstanceId()); + + CloudConfiguration cloudConfiguration = sir.getRequestDetails().getCloudConfiguration(); + Assert.assertEquals("1234567890", cloudConfiguration.getTenantId()); + Assert.assertEquals("demo", cloudConfiguration.getCloudOwner()); + Assert.assertEquals("test", cloudConfiguration.getLcpCloudRegionId()); + } + + private Service getChildService(List<Map<String, Object>> userParams, String serviceInstanceName) + throws IOException { + String USERPARAMSERVICE = "service"; + for (Map<String, Object> params : userParams) { + if (params.containsKey(USERPARAMSERVICE)) { + ObjectMapper obj = new ObjectMapper(); + String input = obj.writeValueAsString(params.get(USERPARAMSERVICE)); + Service validate = obj.readValue(input, Service.class); + if (validate.getResources().getServices() != null) { + for (Service service : validate.getResources().getServices()) { + if (serviceInstanceName.equals(service.getInstanceName())) { + return service; + } + } + } + } + } + return null; + } +} diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/service/composition/CreateChildServiceBBTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/service/composition/CreateChildServiceBBTest.java new file mode 100644 index 0000000000..6392d25998 --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/service/composition/CreateChildServiceBBTest.java @@ -0,0 +1,145 @@ +package org.onap.so.bpmn.infrastructure.service.composition; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.logging.filter.base.ONAPComponentsList; +import org.onap.so.bpmn.common.BuildingBlockExecution; +import org.onap.so.bpmn.infrastructure.decisionpoint.impl.buildingblock.MockControllerBB; +import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion; +import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer; +import org.onap.so.bpmn.servicedecomposition.bbobjects.OwningEntity; +import org.onap.so.bpmn.servicedecomposition.bbobjects.Project; +import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance; +import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock; +import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey; +import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestContext; +import org.onap.so.bpmn.servicedecomposition.generalobjects.RequestParameters; +import org.onap.so.client.exception.ExceptionBuilder; +import org.onap.so.client.orchestration.ApiHandlerClient; +import org.onap.so.client.orchestration.ApiHandlerClientException; +import org.onap.so.serviceinstancebeans.RequestDetails; +import org.onap.so.serviceinstancebeans.RequestInfo; +import org.onap.so.serviceinstancebeans.RequestReferences; +import org.onap.so.serviceinstancebeans.ServiceInstancesRequest; +import org.onap.so.serviceinstancebeans.ServiceInstancesResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_INSTANCE_ID; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_CORRELATION_ID; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_ID; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_PAYLOAD; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = {CreateChildServiceBB.class, MockControllerBB.class, ExceptionBuilder.class}) +public class CreateChildServiceBBTest { + + @Autowired + private CreateChildServiceBB createChildServiceBB; + + @MockBean + private BuildingBlockExecution execution; + + @MockBean + private ApiHandlerClient apiHandlerClient; + + @MockBean + private ExceptionBuilder exceptionBuilder; + + @Before + public void setUp() throws IOException, ApiHandlerClientException { + String incomingRequest = + "{\"requestDetails\":{\"subscriberInfo\":{\"globalSubscriberId\":\"ubuntu-customer\"},\"requestInfo\":{\"suppressRollback\":false,\"instanceName\":\"LcmDemo\",\"productFamilyId\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\",\"requestorId\":\"portal\",\"source\":\"postman\"},\"cloudConfiguration\":{\"lcpCloudRegionId\":\"123\",\"tenantId\":\"e2710e84063b421fab08189818761d55\",\"cloudOwner\":\"cloudOwner\"},\"requestParameters\":{\"subscriptionServiceType\":\"ubuntu\",\"userParams\":[{\"Homing_Solution\":\"none\"},{\"service\":{\"instanceParams\":[],\"resources\":{\"vnfs\":[{\"modelInfo\":{\"modelName\":\"UbuntuSriovVF\",\"modelVersionId\":\"5b5d07f0-7449-4eec-95eb-531ddef18240\",\"modelInvariantUuid\":\"9ed17b82-11f3-44cc-a86f-32739360617e\",\"modelVersion\":\"1.0\",\"modelCustomizationId\":\"ae139d3d-b2ae-462c-b09d-c85bdc2e3073\",\"modelInstanceName\":\"UbuntuSriovVF0\"},\"cloudConfiguration\":{\"lcpCloudRegionId\":\"123\",\"tenantId\":\"e2710e84063b421fab08189818761d55\",\"cloudOwner\":\"cloudOwner\"},\"platform\":{\"platformName\":\"openstack\"},\"lineOfBusiness\":{\"lineOfBusinessName\":\"wireless\"},\"productFamilyId\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\",\"instanceName\":\"vnf-instanceName\",\"instanceParams\":[{\"vnf-name\":\"vnf-vnf-name\",\"vnf_name\":\"UbuntuVNFName\"}],\"vfModules\":[{\"modelInfo\":{\"modelName\":\"Ubuntusriovvf..base..module-0\",\"modelVersionId\":\"f4ef24dd-7a4e-4eef-83b7-c58f2f3e36e4\",\"modelInvariantUuid\":\"719aab1e-c551-46e0-87e8-a78dcd7891da\",\"modelVersion\":\"1\",\"modelCustomizationId\":\"dea421a8-c1b8-4044-8ca1-58c30de3b315\"},\"instanceName\":\"lcm-demo-network-1\",\"instanceParams\":[{\"name\":\"lcm-demo-network-1\",\"cidr\":\"10.10.10.0/24\"}]},{\"modelInfo\":{\"modelName\":\"Ubuntusriovvf..ubuntu-vf-module..module-1\",\"modelVersionId\":\"112f2de4-4f09-4567-9de1-2d271cb6e164\",\"modelInvariantUuid\":\"ba6d2e11-4e82-4bb8-9d52-a2962a263a09\",\"modelVersion\":\"1\",\"modelCustomizationId\":\"7bc2649e-b96b-44ec-adfe-4a6167f3034e\"},\"instanceName\":\"lcm-demo-ubuntu-1\",\"instanceParams\":[{\"name\":\"lcm-demo-ubuntu-1\",\"network_mgmt\":\"networkMgmt\",\"key_name\":\"demo\",\"network_name\":\"lcm-demo-network-1\",\"image_name\":\"imageName\",\"flavor_name\":\"m1.small\"}]}]}],\"services\":[{\"instanceParams\":[],\"resources\":{\"vnfs\":[{\"modelInfo\":{\"modelName\":\"UbuntuSriovVF\",\"modelVersionId\":\"5b5d07f0-7449-4eec-95eb-531ddef18240\",\"modelInvariantUuid\":\"9ed17b82-11f3-44cc-a86f-32739360617e\",\"modelVersion\":\"1.0\",\"modelCustomizationId\":\"ae139d3d-b2ae-462c-b09d-c85bdc2e3073\",\"modelInstanceName\":\"UbuntuSriovVF0\"},\"cloudConfiguration\":{\"lcpCloudRegionId\":\"123\",\"tenantId\":\"e2710e84063b421fab08189818761d55\",\"cloudOwner\":\"cloudOwner\"},\"platform\":{\"platformName\":\"openstack\"},\"lineOfBusiness\":{\"lineOfBusinessName\":\"wireless\"},\"productFamilyId\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\",\"instanceName\":\"vnf-instanceName\",\"instanceParams\":[{\"vnf-name\":\"vnf-vnf-name\",\"vnf_name\":\"UbuntuVNFName\"}],\"vfModules\":[{\"modelInfo\":{\"modelName\":\"Ubuntusriovvf..base..module-0\",\"modelVersionId\":\"f4ef24dd-7a4e-4eef-83b7-c58f2f3e36e4\",\"modelInvariantUuid\":\"719aab1e-c551-46e0-87e8-a78dcd7891da\",\"modelVersion\":\"1\",\"modelCustomizationId\":\"dea421a8-c1b8-4044-8ca1-58c30de3b315\"},\"instanceName\":\"lcm-demo-network-1\",\"instanceParams\":[{\"name\":\"lcm-demo-network-1\",\"cidr\":\"10.10.10.0/24\"}]},{\"modelInfo\":{\"modelName\":\"Ubuntusriovvf..ubuntu-vf-module..module-1\",\"modelVersionId\":\"112f2de4-4f09-4567-9de1-2d271cb6e164\",\"modelInvariantUuid\":\"ba6d2e11-4e82-4bb8-9d52-a2962a263a09\",\"modelVersion\":\"1\",\"modelCustomizationId\":\"7bc2649e-b96b-44ec-adfe-4a6167f3034e\"},\"instanceName\":\"lcm-demo-ubuntu-1\",\"instanceParams\":[{\"name\":\"lcm-demo-ubuntu-1\",\"network_mgmt\":\"networkMgmt\",\"key_name\":\"demo\",\"network_name\":\"lcm-demo-network-1\",\"image_name\":\"imageName\",\"flavor_name\":\"m1.small\"}]}]}]},\"modelInfo\":{\"modelVersion\":\"2.0\",\"modelVersionId\":\"5bc2b6b3-c9bb-49a1-89c8-4dac5b236d52\",\"modelInvariantId\":\"a316f8fa-c886-483f-801b-6663e35b836c\",\"modelCustomizationId\":\"cs1-svc-modelCustomizationId\",\"modelName\":\"GuilinLcmSVC\",\"modelType\":\"service\"},\"instanceName\":\"service1-instanceName\"},{\"instanceParams\":[],\"resources\":{\"vnfs\":[{\"modelInfo\":{\"modelName\":\"UbuntuSriovVF\",\"modelVersionId\":\"5b5d07f0-7449-4eec-95eb-531ddef18240\",\"modelInvariantUuid\":\"9ed17b82-11f3-44cc-a86f-32739360617e\",\"modelVersion\":\"1.0\",\"modelCustomizationId\":\"ae139d3d-b2ae-462c-b09d-c85bdc2e3073\",\"modelInstanceName\":\"UbuntuSriovVF0\"},\"cloudConfiguration\":{\"lcpCloudRegionId\":\"123\",\"tenantId\":\"e2710e84063b421fab08189818761d55\",\"cloudOwner\":\"cloudOwner\"},\"platform\":{\"platformName\":\"openstack\"},\"lineOfBusiness\":{\"lineOfBusinessName\":\"wireless\"},\"productFamilyId\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\",\"instanceName\":\"vnf-instanceName\",\"instanceParams\":[{\"vnf-name\":\"vnf-vnf-name\",\"vnf_name\":\"UbuntuVNFName\"}],\"vfModules\":[{\"modelInfo\":{\"modelName\":\"Ubuntusriovvf..base..module-0\",\"modelVersionId\":\"f4ef24dd-7a4e-4eef-83b7-c58f2f3e36e4\",\"modelInvariantUuid\":\"719aab1e-c551-46e0-87e8-a78dcd7891da\",\"modelVersion\":\"1\",\"modelCustomizationId\":\"dea421a8-c1b8-4044-8ca1-58c30de3b315\"},\"instanceName\":\"lcm-demo-network-1\",\"instanceParams\":[{\"name\":\"lcm-demo-network-1\",\"cidr\":\"10.10.10.0/24\"}]},{\"modelInfo\":{\"modelName\":\"Ubuntusriovvf..ubuntu-vf-module..module-1\",\"modelVersionId\":\"112f2de4-4f09-4567-9de1-2d271cb6e164\",\"modelInvariantUuid\":\"ba6d2e11-4e82-4bb8-9d52-a2962a263a09\",\"modelVersion\":\"1\",\"modelCustomizationId\":\"7bc2649e-b96b-44ec-adfe-4a6167f3034e\"},\"instanceName\":\"lcm-demo-ubuntu-1\",\"instanceParams\":[{\"name\":\"lcm-demo-ubuntu-1\",\"network_mgmt\":\"networkMgmt\",\"key_name\":\"demo\",\"network_name\":\"lcm-demo-network-1\",\"image_name\":\"imageName\",\"flavor_name\":\"m1.small\"}]}]}]},\"modelInfo\":{\"modelVersion\":\"2.0\",\"modelVersionId\":\"5bc2b6b3-c9bb-49a1-89c8-4dac5b236d52\",\"modelInvariantId\":\"a316f8fa-c886-483f-801b-6663e35b836c\",\"modelCustomizationId\":\"cs1-svc-modelCustomizationId\",\"modelName\":\"GuilinLcmSVC\",\"modelType\":\"service\"},\"instanceName\":\"service2-instanceName\"}]},\"modelInfo\":{\"modelVersion\":\"2.0\",\"modelVersionId\":\"5bc2b6b3-c9bb-49a1-89c8-4dac5b236d52\",\"modelInvariantId\":\"a316f8fa-c886-483f-801b-6663e35b836c\",\"modelName\":\"GuilinLcmSVC\",\"modelType\":\"service\"}}}],\"aLaCarte\":false},\"project\":{\"projectName\":\"Project-UbuntuDemo\"},\"owningEntity\":{\"owningEntityId\":\"33a8b609-1cfe-4d19-8dc2-5b95b921de1e\",\"owningEntityName\":\"demo\"},\"modelInfo\":{\"modelVersion\":\"2.0\",\"modelVersionId\":\"5bc2b6b3-c9bb-49a1-89c8-4dac5b236d52\",\"modelInvariantId\":\"a316f8fa-c886-483f-801b-6663e35b836c\",\"modelName\":\"GuilinLcmSVC\",\"modelType\":\"service\"}}}"; + + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + ServiceInstancesRequest request = mapper.readValue(incomingRequest, ServiceInstancesRequest.class); + RequestContext context = new RequestContext(); + RequestParameters parameters = new RequestParameters(); + parameters.setUserParams(request.getRequestDetails().getRequestParameters().getUserParams()); + context.setRequestParameters(parameters); + context.setProductFamilyId("FamilyId"); + context.setSource("source"); + context.setRequestorId("RequestOrId"); + + CloudRegion cloudRegion = new CloudRegion(); + cloudRegion.setCloudOwner("CloudOwner"); + cloudRegion.setLcpCloudRegionId("my-region-id"); + cloudRegion.setTenantId("tenant-id"); + + Customer customer = new Customer(); + customer.setGlobalCustomerId("GlobalCustomerId"); + customer.setSubscriberName("SubscriberName"); + + ServiceInstance serviceInstance = new ServiceInstance(); + OwningEntity owningEntity = new OwningEntity(); + owningEntity.setOwningEntityId("owningEntityId"); + owningEntity.setOwningEntityName("owningEntityName"); + serviceInstance.setOwningEntity(owningEntity); + + Project project = new Project(); + project.setProjectName("projectName"); + serviceInstance.setProject(project); + + serviceInstance.setServiceInstanceId("serviceInstanceId"); + + GeneralBuildingBlock gbb = new GeneralBuildingBlock(); + gbb.setCloudRegion(cloudRegion); + gbb.setCustomer(customer); + gbb.setRequestContext(context); + gbb.setServiceInstance(serviceInstance); + + Map<ResourceKey, String> map = new HashMap<>(); + map.put(ResourceKey.CHILD_SERVICE_INSTANCE_NAME, "service1-instanceName"); + + when(execution.getGeneralBuildingBlock()).thenReturn(gbb); + when(execution.getLookupMap()).thenReturn(map); + + ServiceInstancesResponse response = new ServiceInstancesResponse(); + response.setRequestReferences(new RequestReferences()); + response.getRequestReferences().setInstanceId("instanceId"); + response.getRequestReferences().setRequestId("requestId"); + + when(apiHandlerClient.createServiceInstance(any())).thenReturn(response); + } + + @Test + public void buildRequestTest() { + createChildServiceBB.buildRequest(execution); + } + + @Test + public void sendRequestTest() throws Exception { + ServiceInstancesRequest sir = new ServiceInstancesRequest(); + RequestDetails details = new RequestDetails(); + details.setRequestInfo(new RequestInfo()); + details.getRequestInfo().setCorrelator("correlator"); + sir.setRequestDetails(details); + + when(execution.getVariable(CHILD_SVC_REQ_PAYLOAD)).thenReturn(sir); + createChildServiceBB.sendRequest(execution); + verify(execution).setVariable(CHILD_SVC_REQ_ID, "requestId"); + verify(execution).setVariable(CHILD_SVC_INSTANCE_ID, "instanceId"); + verify(execution).setVariable(CHILD_SVC_REQ_CORRELATION_ID, "correlator"); + } + + @Test + public void handleFailureTest() { + createChildServiceBB.handleFailure(execution); + verify(exceptionBuilder).buildAndThrowWorkflowException(any(BuildingBlockExecution.class), anyInt(), + anyString(), any(ONAPComponentsList.class)); + } +} diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBFailureTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBFailureTest.java index 7f44c97f59..aeef976fb4 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBFailureTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBFailureTest.java @@ -26,9 +26,19 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.isA; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_CORRELATION_ID; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_ERROR; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_STATUS; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.IS_CHILD_PROCESS; +import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.PARENT_CORRELATION_ID; import java.sql.Timestamp; +import org.camunda.bpm.engine.ProcessEngineServices; +import org.camunda.bpm.engine.RuntimeService; import org.camunda.bpm.engine.delegate.DelegateExecution; +import org.camunda.bpm.engine.runtime.MessageCorrelationBuilder; import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake; import org.junit.Before; import org.junit.Rule; @@ -271,4 +281,125 @@ public class WorkflowActionBBFailureTest extends BaseTaskTest { Mockito.verify(reqMock, Mockito.times(1)).setLastModifiedBy("CamundaBPMN"); Mockito.verify(reqMock, Mockito.times(1)).setEndTime(any(Timestamp.class)); } + + @Test + public void invokeSendMessageForChildServiceRollBackCompletedSuccessfully() { + String parentCorrelationId = "parentCorrelationId"; + DelegateExecution mockExecution = Mockito.mock(DelegateExecution.class); + ProcessEngineServices processEngineServices = mock(ProcessEngineServices.class); + RuntimeService runtimeService = mock(RuntimeService.class); + MessageCorrelationBuilder messageCorrelationBuilder = mock(MessageCorrelationBuilder.class); + when(processEngineServices.getRuntimeService()).thenReturn(runtimeService); + when(runtimeService.createMessageCorrelation(anyString())).thenReturn(messageCorrelationBuilder); + when(messageCorrelationBuilder.setVariable(CHILD_SVC_REQ_STATUS, "FAILED")) + .thenReturn(messageCorrelationBuilder); + when(messageCorrelationBuilder.setVariable(CHILD_SVC_REQ_ERROR, "Rollback has been completed successfully.")) + .thenReturn(messageCorrelationBuilder); + when(messageCorrelationBuilder.processInstanceVariableEquals(CHILD_SVC_REQ_CORRELATION_ID, parentCorrelationId)) + .thenReturn(messageCorrelationBuilder); + + when(mockExecution.getVariable(PARENT_CORRELATION_ID)).thenReturn(parentCorrelationId); + when(mockExecution.getVariable("mso-request-id")).thenReturn("123"); + when(mockExecution.getVariable("isRollbackComplete")).thenReturn(true); + when(mockExecution.getVariable("isRollback")).thenReturn(true); + when(mockExecution.getVariable(IS_CHILD_PROCESS)).thenReturn(true); + + when(mockExecution.getProcessEngineServices()).thenReturn(processEngineServices); + + InfraActiveRequests req = new InfraActiveRequests(); + WorkflowException wfe = new WorkflowException("processKey123", 1, "error in rollback"); + when(mockExecution.getVariable("WorkflowException")).thenReturn(wfe); + doReturn(req).when(requestsDbClient).getInfraActiveRequestbyRequestId("123"); + doNothing().when(requestsDbClient).updateInfraActiveRequests(isA(InfraActiveRequests.class)); + workflowActionBBFailure.updateRequestStatusToFailed(mockExecution); + + verify(messageCorrelationBuilder).setVariable(CHILD_SVC_REQ_STATUS, "FAILED"); + verify(messageCorrelationBuilder).setVariable(CHILD_SVC_REQ_ERROR, "Rollback has been completed successfully."); + verify(messageCorrelationBuilder).processInstanceVariableEquals(CHILD_SVC_REQ_CORRELATION_ID, + parentCorrelationId); + } + + @Test + public void invokeSendMessageForChildServiceRollBackFailure() { + String parentCorrelationId = "parentCorrelationId"; + DelegateExecution mockExecution = Mockito.mock(DelegateExecution.class); + ProcessEngineServices processEngineServices = mock(ProcessEngineServices.class); + RuntimeService runtimeService = mock(RuntimeService.class); + MessageCorrelationBuilder messageCorrelationBuilder = mock(MessageCorrelationBuilder.class); + when(processEngineServices.getRuntimeService()).thenReturn(runtimeService); + when(runtimeService.createMessageCorrelation(anyString())).thenReturn(messageCorrelationBuilder); + when(messageCorrelationBuilder.setVariable(CHILD_SVC_REQ_STATUS, "FAILED")) + .thenReturn(messageCorrelationBuilder); + when(messageCorrelationBuilder.setVariable(CHILD_SVC_REQ_ERROR, "error in rollback")) + .thenReturn(messageCorrelationBuilder); + when(messageCorrelationBuilder.processInstanceVariableEquals(PARENT_CORRELATION_ID, parentCorrelationId)) + .thenReturn(messageCorrelationBuilder); + + when(mockExecution.getVariable(PARENT_CORRELATION_ID)).thenReturn(parentCorrelationId); + when(mockExecution.getVariable("mso-request-id")).thenReturn("123"); + when(mockExecution.getVariable("isRollbackComplete")).thenReturn(false); + when(mockExecution.getVariable("isRollback")).thenReturn(true); + when(mockExecution.getVariable(IS_CHILD_PROCESS)).thenReturn(true); + + when(mockExecution.getProcessEngineServices()).thenReturn(processEngineServices); + + InfraActiveRequests req = new InfraActiveRequests(); + doReturn(req).when(requestsDbClient).getInfraActiveRequestbyRequestId("123"); + doNothing().when(requestsDbClient).updateInfraActiveRequests(isA(InfraActiveRequests.class)); + workflowActionBBFailure.updateRequestStatusToFailed(mockExecution); + + verify(messageCorrelationBuilder).setVariable(CHILD_SVC_REQ_STATUS, "FAILED"); + verify(messageCorrelationBuilder).setVariable(CHILD_SVC_REQ_ERROR, + "Failed to determine rollback error message."); + + WorkflowException wfe = new WorkflowException("processKey123", 1, "error in rollback"); + when(mockExecution.getVariable("WorkflowException")).thenReturn(wfe); + workflowActionBBFailure.updateRequestStatusToFailed(mockExecution); + verify(messageCorrelationBuilder).setVariable(CHILD_SVC_REQ_ERROR, "error in rollback"); + verify(messageCorrelationBuilder).processInstanceVariableEquals(CHILD_SVC_REQ_CORRELATION_ID, + parentCorrelationId); + } + + @Test + public void invokeSendMessageForChildServiceNoRollBack() { + String parentCorrelationId = "parentCorrelationId"; + DelegateExecution mockExecution = Mockito.mock(DelegateExecution.class); + ProcessEngineServices processEngineServices = mock(ProcessEngineServices.class); + RuntimeService runtimeService = mock(RuntimeService.class); + MessageCorrelationBuilder messageCorrelationBuilder = mock(MessageCorrelationBuilder.class); + when(processEngineServices.getRuntimeService()).thenReturn(runtimeService); + when(runtimeService.createMessageCorrelation(anyString())).thenReturn(messageCorrelationBuilder); + when(messageCorrelationBuilder.setVariable(CHILD_SVC_REQ_STATUS, "FAILED")) + .thenReturn(messageCorrelationBuilder); + when(messageCorrelationBuilder.setVariable(CHILD_SVC_REQ_ERROR, "error in rollback")) + .thenReturn(messageCorrelationBuilder); + when(messageCorrelationBuilder.processInstanceVariableEquals(PARENT_CORRELATION_ID, parentCorrelationId)) + .thenReturn(messageCorrelationBuilder); + + when(mockExecution.getVariable(PARENT_CORRELATION_ID)).thenReturn(parentCorrelationId); + when(mockExecution.getVariable("mso-request-id")).thenReturn("123"); + when(mockExecution.getVariable("isRollbackComplete")).thenReturn(false); + when(mockExecution.getVariable("isRollback")).thenReturn(false); + when(mockExecution.getVariable(IS_CHILD_PROCESS)).thenReturn(true); + + when(mockExecution.getProcessEngineServices()).thenReturn(processEngineServices); + + InfraActiveRequests req = new InfraActiveRequests(); + doReturn(req).when(requestsDbClient).getInfraActiveRequestbyRequestId("123"); + doNothing().when(requestsDbClient).updateInfraActiveRequests(isA(InfraActiveRequests.class)); + workflowActionBBFailure.updateRequestStatusToFailed(mockExecution); + + verify(messageCorrelationBuilder).setVariable(CHILD_SVC_REQ_STATUS, "FAILED"); + verify(messageCorrelationBuilder).setVariable(CHILD_SVC_REQ_ERROR, "Failed to determine error message"); + + WorkflowException wfe = new WorkflowException("processKey123", 1, "error in rollback"); + when(mockExecution.getVariable("WorkflowException")).thenReturn(wfe); + workflowActionBBFailure.updateRequestStatusToFailed(mockExecution); + verify(messageCorrelationBuilder).setVariable(CHILD_SVC_REQ_ERROR, "error in rollback"); + verify(messageCorrelationBuilder).processInstanceVariableEquals(CHILD_SVC_REQ_CORRELATION_ID, + parentCorrelationId); + } + + + } diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/ServiceEBBLoaderTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/ServiceEBBLoaderTest.java index 76763e8ca8..2d41a24ac3 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/ServiceEBBLoaderTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/ServiceEBBLoaderTest.java @@ -32,7 +32,11 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.mockito.Mock; +import org.onap.aai.domain.yang.ComposedResource; +import org.onap.aai.domain.yang.ComposedResources; +import org.onap.aai.domain.yang.RelatedToProperty; import org.onap.aai.domain.yang.Relationship; +import org.onap.aai.domain.yang.RelationshipData; import org.onap.aai.domain.yang.RelationshipList; import org.onap.aai.domain.yang.ServiceInstance; import org.onap.aaiclient.client.aai.entities.Relationships; @@ -368,4 +372,56 @@ public class ServiceEBBLoaderTest extends BaseTaskTest { resourceList.add(new Resource(WorkflowType.VFMODULE, "72d9d1cd-f46d-447a-abdb-451d6fb05fa8", false, r2)); return resourceList; } + + @Test + public void traverseServiceInstanceChildServiceTest() { + List<Resource> resourceList = new ArrayList<>(); + Resource parentResource = new Resource(WorkflowType.SERVICE, "parentId", false, null); + String resourceId = "siP"; + ServiceInstance serviceInstanceAAI = new ServiceInstance(); + serviceInstanceAAI.setServiceInstanceId(resourceId); + + RelationshipData relationshipData = new RelationshipData(); + relationshipData.setRelationshipKey("service-instance.service-instance-id"); + relationshipData.setRelationshipValue("80ced9d5-666e-406b-88f0-a05d31328b70"); + RelatedToProperty relatedToProperty = new RelatedToProperty(); + relatedToProperty.setPropertyKey("service-instance.service-instance-name"); + relatedToProperty.setPropertyValue("child_euler_002"); + + RelationshipData relationshipData1 = new RelationshipData(); + relationshipData1.setRelationshipKey("service-instance.service-instance-id"); + relationshipData1.setRelationshipValue("fa5640af-c827-4372-baae-7f1c50fdb5ed"); + RelatedToProperty relatedToProperty1 = new RelatedToProperty(); + relatedToProperty1.setPropertyKey("service-instance.service-instance-name"); + relatedToProperty.setPropertyValue("child_euler_001"); + + + Relationship relationship = new Relationship(); + Relationship relationship1 = new Relationship(); + relationship.setRelatedTo("service-instance"); + relationship1.setRelatedTo("service-instance"); + relationship.getRelationshipData().add(relationshipData); + relationship.getRelatedToProperty().add(relatedToProperty); + relationship1.getRelationshipData().add(relationshipData1); + relationship1.getRelatedToProperty().add(relatedToProperty1); + + RelationshipList relationshipList = new RelationshipList(); + RelationshipList relationshipList1 = new RelationshipList(); + relationshipList.getRelationship().add(relationship); + relationshipList1.getRelationship().add(relationship1); + + ComposedResource composedResource = new ComposedResource(); + composedResource.setRelationshipList(relationshipList); + ComposedResource composedResource1 = new ComposedResource(); + composedResource1.setRelationshipList(relationshipList); + + ComposedResources composedResources = new ComposedResources(); + composedResources.getComposedResource().add(composedResource); + composedResources.getComposedResource().add(composedResource1); + + serviceInstanceAAI.setComposedResources(composedResources); + + serviceEBBLoader.traverseServiceInstanceChildService(resourceList, parentResource, serviceInstanceAAI); + assertEquals(2, resourceList.size()); + } } diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/UserParamsServiceTraversalTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/UserParamsServiceTraversalTest.java index cac7f872b3..cf6588e113 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/UserParamsServiceTraversalTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/UserParamsServiceTraversalTest.java @@ -66,6 +66,7 @@ public class UserParamsServiceTraversalTest extends BaseTaskTest { private static final String MACRO_CREATE_WITHOUT_RESOURCES_JSON = "Macro/ServiceMacroCreateWithoutResources.json"; private static final String MACRO_CREATE_SVC_SAME_MODEL_VNF_VFMODULE = "Macro/ServiceMacroCreateMultipleSameModelVnfsAndVfModules.json"; + private static final String MACRO_CREATE_SVC_SAME_MODEL_PNF = "Macro/ServiceMacroCreateMultipleSameModelPnfs.json"; private static final String serviceInstanceId = "123"; private DelegateExecution execution; private CatalogDbClient mockCatalogDbClient; @@ -149,6 +150,30 @@ public class UserParamsServiceTraversalTest extends BaseTaskTest { } @Test + public void getResourceListFromUserParamsMultiplePnfs() throws Exception { + initExecution("createInstance", readBpmnRequestFromFile(MACRO_CREATE_SVC_SAME_MODEL_PNF), false); + + List<Resource> resourceListFromUserParams = userParamsServiceTraversal.getResourceListFromUserParams(execution, + getUserParams(), serviceInstanceId, requestAction); + + assertEquals(3, resourceListFromUserParams.size()); + + Resource service = resourceListFromUserParams.get(0); + assertTrue(service.getResourceType() == WorkflowType.SERVICE); + assertEquals(2, service.getChildren().size()); + + Resource pnf1 = service.getChildren().get(0); + assertEquals(service, pnf1.getParent()); + assertEquals("ORAN_SIM1_2106_pnf_01", pnf1.getInstanceName()); + assertEquals("88a3096a-af87-4853-99f6-7256a9ab6c3e", pnf1.getResourceId()); + + Resource pnf2 = service.getChildren().get(1); + assertEquals(service, pnf2.getParent()); + assertEquals("ORAN_SIM1_2106_pnf_02", pnf2.getInstanceName()); + assertEquals("88a3096a-af87-4853-99f6-7256a9ab6c3e", pnf2.getResourceId()); + } + + @Test public void getResourceListFromUserParamsForVnfs() throws Exception { initExecution(requestAction, readBpmnRequestFromFile(MACRO_ASSIGN_JSON), false); Mockito.doReturn(getVfModuleCustomization("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f", true)) diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/utils/WorkflowResourceIdsUtilsTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/utils/WorkflowResourceIdsUtilsTest.java index 996c0c07e1..f8bd963c49 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/utils/WorkflowResourceIdsUtilsTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/utils/WorkflowResourceIdsUtilsTest.java @@ -42,6 +42,7 @@ public class WorkflowResourceIdsUtilsTest { private static final String CONFIGURATION_ID = "configurationId"; private static final String VNF_INSTANCE_NAME = "vnfInstanceNameId"; private static final String VF_MODULE_INSTANCE_NAME = "vfModuleInstanceNameId"; + private static final String PNF_INSTANCE_NAME = "pnfInstanceNameId"; private WorkflowResourceIds workflowResourceIds; @Before @@ -60,6 +61,7 @@ public class WorkflowResourceIdsUtilsTest { execution.setVariable("instanceGroupId", INSTANCE_GROUP_ID); execution.setVariable("vnfInstanceName", VNF_INSTANCE_NAME); execution.setVariable("vfModuleInstanceName", VF_MODULE_INSTANCE_NAME); + execution.setVariable("pnfInstanceName", PNF_INSTANCE_NAME); workflowResourceIds = WorkflowResourceIdsUtils.getWorkflowResourceIdsFromExecution(execution); @@ -71,6 +73,7 @@ public class WorkflowResourceIdsUtilsTest { assertEquals(INSTANCE_GROUP_ID, workflowResourceIds.getInstanceGroupId()); assertEquals(VNF_INSTANCE_NAME, workflowResourceIds.getVnfInstanceName()); assertEquals(VF_MODULE_INSTANCE_NAME, workflowResourceIds.getVfModuleInstanceName()); + assertEquals(PNF_INSTANCE_NAME, workflowResourceIds.getPnfInstanceName()); } @Test @@ -149,6 +152,12 @@ public class WorkflowResourceIdsUtilsTest { workflowResourceIds::getVfModuleInstanceName); } + @Test + public void shouldPropertySetPnfInstanceName() { + assertFieldSetProperlyInstanceName(WorkflowType.PNF, PNF_INSTANCE_NAME, + workflowResourceIds::getPnfInstanceName); + } + private void assertFieldSetProperly(WorkflowType workflowType, String expectedId, Supplier<String> testedObjectField) { WorkflowResourceIdsUtils.setResourceIdByWorkflowType(workflowResourceIds, workflowType, expectedId); diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/ApiHandlerClientTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/ApiHandlerClientTest.java new file mode 100644 index 0000000000..f3a04e6f54 --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/ApiHandlerClientTest.java @@ -0,0 +1,121 @@ +package org.onap.so.client.orchestration; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.ArgumentMatchers; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.onap.so.serviceinstancebeans.ServiceInstancesRequest; +import org.onap.so.serviceinstancebeans.ServiceInstancesResponse; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.RestTemplate; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; +import static org.hamcrest.CoreMatchers.instanceOf; + + +@TestPropertySource(properties = {"mso.adapters.apihandler.endpoint=http://localhost:", + "mso.adapters.apihandler.auth=Basic dGVzdDp0ZXN0Cg=="}) +@RunWith(SpringJUnit4ClassRunner.class) +public class ApiHandlerClientTest { + + @InjectMocks + private ApiHandlerClient client; + + @Mock + protected RestTemplate restTemplate; + + private ServiceInstancesRequest buildRequest(String incomingRequest) { + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + ServiceInstancesRequest request = null; + try { + request = mapper.readValue(incomingRequest, ServiceInstancesRequest.class); + System.out.println("Java Object: " + request); + } catch (Exception e) { + System.out.println("Caught Exception " + e.getMessage()); + Assert.fail("Could not build ServiceInstancesRequest object"); + } + return request; + } + + @Test + public void createServiceInstanceTest() { + String incomingRequest = + "{\"requestDetails\":{\"modelInfo\":{\"modelType\":\"service\",\"modelInvariantId\":\"5d48acb5-097d-4982-aeb2-f4a3bd87d31b\",\"modelVersionId\":\"3c40d244-808e-42ca-b09a-256d83d19d0a\",\"modelName\":\"MOWvMXBV1Service\",\"modelVersion\":\"10.0\"},\"cloudConfiguration\":{\"lcpCloudRegionId\":\"mdt1\",\"tenantId\":\"88a6ca3ee0394ade9403f075db23167e\"},\"owningEntity\":{\"owningEntityId\":\"038d99af-0427-42c2-9d15-971b99b9b489\",\"owningEntityName\":\"PACKETCORE\"},\"project\":{\"projectName\":\"{someprojectname}\"},\"subscriberInfo\":{\"globalSubscriberId\":\"{somesubscriberid}\"},\"requestInfo\":{\"productFamilyId\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\",\"source\":\"VID\",\"suppressRollback\":true,\"requestorId\":\"xxxxxx\"},\"requestParameters\":{\"subscriptionServiceType\":\"VMX\",\"aLaCarte\":false,\"userParams\":[{\"service\":{\"modelInfo\":{\"modelType\":\"service\",\"modelInvariantId\":\"5d48acb5-097d-4982-aeb2-f4a3bd87d31b\",\"modelVersionId\":\"3c40d244-808e-42ca-b09a-256d83d19d0a\",\"modelName\":\"MOWvMXBV1Service\",\"modelVersion\":\"10.0\"},\"instanceParams\":[],\"resources\":{\"vnfs\":[{\"modelInfo\":{\"modelType\":\"vnf\",\"modelName\":\"2016-73_MOW\",\"modelVersionId\":\"7f40c192-f63c-463e-ba94-286933b895f8\",\"modelCustomizationName\":\"2016-73_MOW\",\"modelCustomizationId\":\"ab153b6e-c364-44c0-bef6-1f2982117f04\"},\"cloudConfiguration\":{\"lcpCloudRegionId\":\"mdt1\",\"tenantId\":\"88a6ca3ee0394ade9403f075db23167e\"},\"platform\":{\"platformName\":\"test\"},\"lineOfBusiness\":{\"lineOfBusinessName\":\"someValue\"},\"productFamilyId\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\",\"instanceParams\":[],\"vfModules\":[{\"modelInfo\":{\"modelType\":\"vfModule\",\"modelName\":\"201673MowtestBvL\",\"modelVersionId\":\"4c75f813-fa91-45a4-89d0-790ff5f1ae79\",\"modelCustomizationId\":\"a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f\"},\"instanceName\":\"vfModule1\",\"instanceParams\":[{\"vmx_int_net_len\":\"24\"}]}]}]}}}]}}}"; + ServiceInstancesRequest request = buildRequest(incomingRequest); + ResponseEntity<ServiceInstancesResponse> responseEntity = + new ResponseEntity<ServiceInstancesResponse>(new ServiceInstancesResponse(), HttpStatus.ACCEPTED); + Mockito.when(restTemplate.exchange(ArgumentMatchers.anyString(), ArgumentMatchers.any(HttpMethod.class), + ArgumentMatchers.any(), ArgumentMatchers.<Class<ServiceInstancesResponse>>any())) + .thenReturn(responseEntity); + + try { + ServiceInstancesResponse response = client.createServiceInstance(request); + assertThat(response, instanceOf(ServiceInstancesResponse.class)); + } catch (ApiHandlerClientException e) { + Assert.fail(e.getMessage()); + } + } + + @Test + public void createServiceInstanceErrorTest() { + String incomingRequest = + "{\"requestDetails\":{\"modelInfo\":{\"modelType\":\"service\",\"modelInvariantId\":\"5d48acb5-097d-4982-aeb2-f4a3bd87d31b\",\"modelVersionId\":\"3c40d244-808e-42ca-b09a-256d83d19d0a\",\"modelName\":\"MOWvMXBV1Service\",\"modelVersion\":\"10.0\"},\"cloudConfiguration\":{\"lcpCloudRegionId\":\"mdt1\",\"tenantId\":\"88a6ca3ee0394ade9403f075db23167e\"},\"owningEntity\":{\"owningEntityId\":\"038d99af-0427-42c2-9d15-971b99b9b489\",\"owningEntityName\":\"PACKETCORE\"},\"project\":{\"projectName\":\"{someprojectname}\"},\"subscriberInfo\":{\"globalSubscriberId\":\"{somesubscriberid}\"},\"requestInfo\":{\"productFamilyId\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\",\"source\":\"VID\",\"suppressRollback\":true,\"requestorId\":\"xxxxxx\"},\"requestParameters\":{\"subscriptionServiceType\":\"VMX\",\"aLaCarte\":false,\"userParams\":[{\"service\":{\"modelInfo\":{\"modelType\":\"service\",\"modelInvariantId\":\"5d48acb5-097d-4982-aeb2-f4a3bd87d31b\",\"modelVersionId\":\"3c40d244-808e-42ca-b09a-256d83d19d0a\",\"modelName\":\"MOWvMXBV1Service\",\"modelVersion\":\"10.0\"},\"instanceParams\":[],\"resources\":{\"vnfs\":[{\"modelInfo\":{\"modelType\":\"vnf\",\"modelName\":\"2016-73_MOW\",\"modelVersionId\":\"7f40c192-f63c-463e-ba94-286933b895f8\",\"modelCustomizationName\":\"2016-73_MOW\",\"modelCustomizationId\":\"ab153b6e-c364-44c0-bef6-1f2982117f04\"},\"cloudConfiguration\":{\"lcpCloudRegionId\":\"mdt1\",\"tenantId\":\"88a6ca3ee0394ade9403f075db23167e\"},\"platform\":{\"platformName\":\"test\"},\"lineOfBusiness\":{\"lineOfBusinessName\":\"someValue\"},\"productFamilyId\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\",\"instanceParams\":[],\"vfModules\":[{\"modelInfo\":{\"modelType\":\"vfModule\",\"modelName\":\"201673MowtestBvL\",\"modelVersionId\":\"4c75f813-fa91-45a4-89d0-790ff5f1ae79\",\"modelCustomizationId\":\"a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f\"},\"instanceName\":\"vfModule1\",\"instanceParams\":[{\"vmx_int_net_len\":\"24\"}]}]}]}}}]}}}"; + ServiceInstancesRequest request = buildRequest(incomingRequest); + Mockito.when(restTemplate.exchange(ArgumentMatchers.anyString(), ArgumentMatchers.any(HttpMethod.class), + ArgumentMatchers.any(), ArgumentMatchers.<Class<ServiceInstancesResponse>>any())) + .thenThrow(new HttpClientErrorException(HttpStatus.NOT_FOUND)); + try { + client.createServiceInstance(request); + Assert.fail("ApiHandlerClientException exception was not thrown"); + } catch (ApiHandlerClientException e) { + assertEquals("Failed sending service createInstance request to api-handler. Error: ", e.getMessage()); + } + } + + @Test + public void deleteServiceInstanceTest() { + String incomingRequest = + "{\"requestDetails\":{\"modelInfo\":{\"modelType\":\"service\",\"modelInvariantId\":\"5d48acb5-097d-4982-aeb2-f4a3bd87d31b\",\"modelVersionId\":\"3c40d244-808e-42ca-b09a-256d83d19d0a\",\"modelName\":\"MOWvMXBV1Service\",\"modelVersion\":\"10.0\"},\"cloudConfiguration\":{\"lcpCloudRegionId\":\"mdt1\",\"tenantId\":\"88a6ca3ee0394ade9403f075db23167e\"},\"owningEntity\":{\"owningEntityId\":\"038d99af-0427-42c2-9d15-971b99b9b489\",\"owningEntityName\":\"PACKETCORE\"},\"project\":{\"projectName\":\"{someprojectname}\"},\"subscriberInfo\":{\"globalSubscriberId\":\"{somesubscriberid}\"},\"requestInfo\":{\"productFamilyId\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\",\"source\":\"VID\",\"suppressRollback\":true,\"requestorId\":\"xxxxxx\"},\"requestParameters\":{\"subscriptionServiceType\":\"VMX\",\"aLaCarte\":false,\"userParams\":[{\"service\":{\"modelInfo\":{\"modelType\":\"service\",\"modelInvariantId\":\"5d48acb5-097d-4982-aeb2-f4a3bd87d31b\",\"modelVersionId\":\"3c40d244-808e-42ca-b09a-256d83d19d0a\",\"modelName\":\"MOWvMXBV1Service\",\"modelVersion\":\"10.0\"},\"instanceParams\":[],\"resources\":{\"vnfs\":[{\"modelInfo\":{\"modelType\":\"vnf\",\"modelName\":\"2016-73_MOW\",\"modelVersionId\":\"7f40c192-f63c-463e-ba94-286933b895f8\",\"modelCustomizationName\":\"2016-73_MOW\",\"modelCustomizationId\":\"ab153b6e-c364-44c0-bef6-1f2982117f04\"},\"cloudConfiguration\":{\"lcpCloudRegionId\":\"mdt1\",\"tenantId\":\"88a6ca3ee0394ade9403f075db23167e\"},\"platform\":{\"platformName\":\"test\"},\"lineOfBusiness\":{\"lineOfBusinessName\":\"someValue\"},\"productFamilyId\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\",\"instanceParams\":[],\"vfModules\":[{\"modelInfo\":{\"modelType\":\"vfModule\",\"modelName\":\"201673MowtestBvL\",\"modelVersionId\":\"4c75f813-fa91-45a4-89d0-790ff5f1ae79\",\"modelCustomizationId\":\"a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f\"},\"instanceName\":\"vfModule1\",\"instanceParams\":[{\"vmx_int_net_len\":\"24\"}]}]}]}}}]}}}"; + ServiceInstancesRequest request = buildRequest(incomingRequest); + ResponseEntity<ServiceInstancesResponse> responseEntity = + new ResponseEntity<ServiceInstancesResponse>(new ServiceInstancesResponse(), HttpStatus.ACCEPTED); + Mockito.when(restTemplate.exchange(ArgumentMatchers.anyString(), ArgumentMatchers.any(HttpMethod.class), + ArgumentMatchers.any(), ArgumentMatchers.<Class<ServiceInstancesResponse>>any())) + .thenReturn(responseEntity); + + try { + ServiceInstancesResponse response = client.deleteServiceInstance(request); + assertThat(response, instanceOf(ServiceInstancesResponse.class)); + } catch (ApiHandlerClientException e) { + Assert.fail(e.getMessage()); + } + } + + @Test + public void deleteServiceInstanceErrorTest() { + String incomingRequest = + "{\"requestDetails\":{\"modelInfo\":{\"modelType\":\"service\",\"modelInvariantId\":\"5d48acb5-097d-4982-aeb2-f4a3bd87d31b\",\"modelVersionId\":\"3c40d244-808e-42ca-b09a-256d83d19d0a\",\"modelName\":\"MOWvMXBV1Service\",\"modelVersion\":\"10.0\"},\"cloudConfiguration\":{\"lcpCloudRegionId\":\"mdt1\",\"tenantId\":\"88a6ca3ee0394ade9403f075db23167e\"},\"owningEntity\":{\"owningEntityId\":\"038d99af-0427-42c2-9d15-971b99b9b489\",\"owningEntityName\":\"PACKETCORE\"},\"project\":{\"projectName\":\"{someprojectname}\"},\"subscriberInfo\":{\"globalSubscriberId\":\"{somesubscriberid}\"},\"requestInfo\":{\"productFamilyId\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\",\"source\":\"VID\",\"suppressRollback\":true,\"requestorId\":\"xxxxxx\"},\"requestParameters\":{\"subscriptionServiceType\":\"VMX\",\"aLaCarte\":false,\"userParams\":[{\"service\":{\"modelInfo\":{\"modelType\":\"service\",\"modelInvariantId\":\"5d48acb5-097d-4982-aeb2-f4a3bd87d31b\",\"modelVersionId\":\"3c40d244-808e-42ca-b09a-256d83d19d0a\",\"modelName\":\"MOWvMXBV1Service\",\"modelVersion\":\"10.0\"},\"instanceParams\":[],\"resources\":{\"vnfs\":[{\"modelInfo\":{\"modelType\":\"vnf\",\"modelName\":\"2016-73_MOW\",\"modelVersionId\":\"7f40c192-f63c-463e-ba94-286933b895f8\",\"modelCustomizationName\":\"2016-73_MOW\",\"modelCustomizationId\":\"ab153b6e-c364-44c0-bef6-1f2982117f04\"},\"cloudConfiguration\":{\"lcpCloudRegionId\":\"mdt1\",\"tenantId\":\"88a6ca3ee0394ade9403f075db23167e\"},\"platform\":{\"platformName\":\"test\"},\"lineOfBusiness\":{\"lineOfBusinessName\":\"someValue\"},\"productFamilyId\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\",\"instanceParams\":[],\"vfModules\":[{\"modelInfo\":{\"modelType\":\"vfModule\",\"modelName\":\"201673MowtestBvL\",\"modelVersionId\":\"4c75f813-fa91-45a4-89d0-790ff5f1ae79\",\"modelCustomizationId\":\"a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f\"},\"instanceName\":\"vfModule1\",\"instanceParams\":[{\"vmx_int_net_len\":\"24\"}]}]}]}}}]}}}"; + ServiceInstancesRequest request = buildRequest(incomingRequest); + Mockito.when(restTemplate.exchange(ArgumentMatchers.anyString(), ArgumentMatchers.any(HttpMethod.class), + ArgumentMatchers.any(), ArgumentMatchers.<Class<ServiceInstancesResponse>>any())) + .thenThrow(new HttpClientErrorException(HttpStatus.NOT_FOUND)); + try { + client.deleteServiceInstance(request); + Assert.fail("ApiHandlerClientException exception was not thrown"); + } catch (ApiHandlerClientException e) { + assertEquals("Failed sending service deleteInstance request to api-handler. Error: ", e.getMessage()); + } + } + +} diff --git a/bpmn/so-bpmn-tasks/src/test/resources/__files/Macro/ServiceMacroCreateMultipleSameModelPnfs.json b/bpmn/so-bpmn-tasks/src/test/resources/__files/Macro/ServiceMacroCreateMultipleSameModelPnfs.json new file mode 100644 index 0000000000..4eb6faee64 --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/test/resources/__files/Macro/ServiceMacroCreateMultipleSameModelPnfs.json @@ -0,0 +1,91 @@ +{ + "requestDetails": { + "modelInfo": { + "modelInvariantId": "d6f8f4e8-7de9-47c1-aa5c-4b6868738f5c", + "modelType": "service", + "modelName": "service_pnf_2305", + "modelVersion": "2.0", + "modelVersionId": "e199ca4e-08f9-4f10-a15d-b94d50e52a6a", + "modelUuid": "e199ca4e-08f9-4f10-a15d-b94d50e52a6a", + "modelInvariantUuid": "d6f8f4e8-7de9-47c1-aa5c-4b6868738f5c" + }, + "requestInfo": { + "productFamilyId": "5G", + "source": "VID", + "instanceName": "ORAN_SIM1_2106_1", + "suppressRollback": false, + "requestorId": "NBI" + }, + "subscriberInfo": { + "globalSubscriberId": "5GCustomer" + }, + "requestParameters": { + "subscriptionServiceType": "5G", + "userParams": [{ + "service": { + "modelInfo": { + "modelVersionId": "e199ca4e-08f9-4f10-a15d-b94d50e52a6a", + "modelName": "service_pnf_2305", + "modelType": "service" + }, + "instanceName": "ORAN_SIM1_2106_1", + "instanceParams": [], + "resources": { + "pnfs": [{ + "modelInfo": { + "modelCustomizationName": "pnf_only_2305 0", + "modelCustomizationId": "88a3096a-af87-4853-99f6-7256a9ab6c3e", + "modelInvariantId": "d6f8f4e8-7de9-47c1-aa5c-4b6868738f5c", + "modelVersionId": "a6a9dc3d-204c-4dbb-862b-46214788b0e5", + "modelName": "service_pnf_2305", + "modelType": "pnf", + "modelVersion": "2.0" + }, + "platform": { + "platformName": "test" + }, + "lineOfBusiness": { + "lineOfBusinessName": "LOB-5GCustomer" + }, + "productFamilyId": "5G", + "instanceParams": [], + "instanceName": "ORAN_SIM1_2106_pnf_01", + "processingPriority": 1 + }, { + "modelInfo": { + "modelCustomizationName": "pnf_only_2305 0", + "modelCustomizationId": "88a3096a-af87-4853-99f6-7256a9ab6c3e", + "modelInvariantId": "d6f8f4e8-7de9-47c1-aa5c-4b6868738f5c", + "modelVersionId": "a6a9dc3d-204c-4dbb-862b-46214788b0e5", + "modelName": "service_pnf_2305", + "modelType": "pnf", + "modelVersion": "2.0" + }, + "platform": { + "platformName": "test" + }, + "lineOfBusiness": { + "lineOfBusinessName": "LOB-5GCustomer" + }, + "productFamilyId": "5G", + "instanceParams": [], + "instanceName": "ORAN_SIM1_2106_pnf_02", + "processingPriority": 2 + }] + } + } + }, { + "Homing_Solution": "none" + }], + "aLaCarte": false, + "usePreload": false + }, + "project": { + "projectName": "basicnw-project" + }, + "owningEntity": { + "owningEntityId": "67f2e84c-734d-4e90-a1e4-d2ffa2e75849", + "owningEntityName": "OE-5GCustomer" + } + } +}
\ No newline at end of file diff --git a/bpmn/so-bpmn-tasks/src/test/resources/application-test.yaml b/bpmn/so-bpmn-tasks/src/test/resources/application-test.yaml index b64fc3318b..d3f5696c16 100644 --- a/bpmn/so-bpmn-tasks/src/test/resources/application-test.yaml +++ b/bpmn/so-bpmn-tasks/src/test/resources/application-test.yaml @@ -84,7 +84,9 @@ mso: workflow: message: endpoint: http://localhost:${wiremock.server.port}/workflows/messages/message - + apihandler: + endpoint: http://localhost:8080 + auth: Basic dGVzdDp0ZXN0Cg== async: core-pool-size: 50 max-pool-size: 50 diff --git a/common/src/main/java/org/onap/so/serviceinstancebeans/Resources.java b/common/src/main/java/org/onap/so/serviceinstancebeans/Resources.java index acac8c4033..9cb5b33251 100644 --- a/common/src/main/java/org/onap/so/serviceinstancebeans/Resources.java +++ b/common/src/main/java/org/onap/so/serviceinstancebeans/Resources.java @@ -42,6 +42,8 @@ public class Resources implements Serializable { private List<Pnfs> pnfs = new ArrayList<>(); @JsonProperty("networks") private List<Networks> networks = new ArrayList<>(); + @JsonProperty("services") + private List<Service> services = new ArrayList<>(); public List<Vnfs> getVnfs() { return vnfs; @@ -67,8 +69,16 @@ public class Resources implements Serializable { this.networks = networks; } + public List<Service> getServices() { + return services; + } + + public void setServices(List<Service> services) { + this.services = services; + } + @Override public String toString() { - return "Resources [vnfs=" + vnfs + ", networks=" + networks + "]"; + return "Resources [vnfs=" + vnfs + ", networks=" + networks + ", services=" + services + "]"; } } diff --git a/common/src/main/java/org/onap/so/serviceinstancebeans/Service.java b/common/src/main/java/org/onap/so/serviceinstancebeans/Service.java index 3c3e10c483..90df220b52 100644 --- a/common/src/main/java/org/onap/so/serviceinstancebeans/Service.java +++ b/common/src/main/java/org/onap/so/serviceinstancebeans/Service.java @@ -45,6 +45,9 @@ public class Service implements Serializable { private List<Map<String, Object>> instanceParams = new ArrayList<>(); @JsonProperty("resources") protected Resources resources; + @JsonProperty("processingPriority") + protected Integer processingPriority = 0; + public ModelInfo getModelInfo() { return modelInfo; @@ -86,9 +89,19 @@ public class Service implements Serializable { this.resources = resources; } + public Integer getProcessingPriority() { + return processingPriority; + } + + public void setProcessingPriority(Integer processingPriority) { + this.processingPriority = processingPriority; + } + + @Override public String toString() { return "Service [modelInfo=" + modelInfo + ", cloudConfiguration=" + cloudConfiguration + ", instanceName=" - + instanceName + ", instanceParams=" + instanceParams + ", resources=" + resources + "]"; + + instanceName + ", instanceParams=" + instanceParams + ", resources=" + resources + + ", processingPriority=" + processingPriority + "]"; } } diff --git a/common/src/test/java/org/onap/so/security/UserDetailsServiceImplTest.java b/common/src/test/java/org/onap/so/security/UserDetailsServiceImplTest.java new file mode 100644 index 0000000000..51de61a66a --- /dev/null +++ b/common/src/test/java/org/onap/so/security/UserDetailsServiceImplTest.java @@ -0,0 +1,45 @@ +package org.onap.so.security; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import java.util.ArrayList; +import org.junit.Test; +import java.util.List; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UsernameNotFoundException; + +public class UserDetailsServiceImplTest { + + private static final String USERNAME = "usernameTest"; + private static final String PASSWORD = "passTest"; + private static final String ROLE = "roleTest"; + + @Test + public void loadUserByUsername_Success() { + UserDetailsServiceImpl testedObject = new UserDetailsServiceImpl(); + testedObject.setUsercredentials(prepareUserCredentials()); + UserDetails result = testedObject.loadUserByUsername(USERNAME); + assertThat(result.getUsername()).isEqualTo(USERNAME); + assertThat(result.getPassword()).isEqualTo(PASSWORD); + } + + @Test + public void loadUserByUsername_userNotFoundEx() { + UserDetailsServiceImpl testedObject = new UserDetailsServiceImpl(); + testedObject.setUsercredentials(prepareUserCredentials()); + assertThatThrownBy(() -> testedObject.loadUserByUsername("notExistingUser")) + .isInstanceOf(UsernameNotFoundException.class); + } + + private List<UserCredentials> prepareUserCredentials() { + UserCredentials userCredentials = new UserCredentials(); + userCredentials.setUsername(USERNAME); + userCredentials.setPassword(PASSWORD); + userCredentials.setRole(ROLE); + List<UserCredentials> list = new ArrayList<>(); + list.add(userCredentials); + return list; + } + + +} diff --git a/docs/api/swagger/swagger.json b/docs/api/swagger/swagger.json index 0f2bd535b6..ac0e523d45 100644 --- a/docs/api/swagger/swagger.json +++ b/docs/api/swagger/swagger.json @@ -1,9 +1,14 @@ { - "swagger": "2.0", + "openapi": "3.0.1", "info": { - "version": "3.1.2", - "title": "SO Guilin APIs" + "title": "SO Guilin APIs", + "version": "3.1.2" }, + "servers": [ + { + "url": "/" + } + ], "tags": [ { "name": "e2eServiceInstances" @@ -45,9 +50,6 @@ "name": "onapsoinfrainstanceManagement" } ], - "schemes": [ - "http" - ], "paths": { "/onap/so/infra/e2eServiceInstances/{version}": { "post": { @@ -55,36 +57,35 @@ "e2eServiceInstances" ], "summary": "Create an E2E Service Instance on a version provided", - "description": "", "operationId": "createE2EServiceInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][3-5]" + "schema": { + "pattern": "[vV][3-5]", + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/e2eServiceInstances/{version}/{serviceId}": { @@ -93,84 +94,86 @@ "e2eServiceInstances" ], "summary": "Update an E2E Service Instance on a version provided and serviceId", - "description": "", "operationId": "updateE2EServiceInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][3-5]" + "schema": { + "pattern": "[vV][3-5]", + "type": "string" + } }, { "name": "serviceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" }, "delete": { "tags": [ "e2eServiceInstances" ], "summary": "Delete E2E Service Instance on a specified version and serviceId", - "description": "", "operationId": "deleteE2EServiceInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][3-5]" + "schema": { + "pattern": "[vV][3-5]", + "type": "string" + } }, { "name": "serviceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/e2eServiceInstances/{version}/{serviceId}/{operationType}": { @@ -179,49 +182,52 @@ "e2eServiceInstances" ], "summary": "Activate/Deactivate 5G slice Service on a specified version and serviceId", - "description": "", "operationId": "activateE2EServiceInstances", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][3-5]" + "schema": { + "pattern": "[vV][3-5]", + "type": "string" + } }, { "name": "serviceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "operationType", "in": "path", "required": true, - "type": "string", - "pattern": "activate/deactivate" + "schema": { + "pattern": "activate/deactivate", + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/e2eServiceInstances/{version}/{serviceId}/operations/{operationId}": { @@ -230,35 +236,38 @@ "e2eServiceInstances" ], "summary": "Find e2eServiceInstances Requests for a given serviceId and operationId", - "description": "", "operationId": "getE2EServiceInstances", - "produces": [ - "application/json" - ], "parameters": [ { "name": "serviceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][3-5]" + "schema": { + "pattern": "[vV][3-5]", + "type": "string" + } }, { "name": "operationId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } } } @@ -269,42 +278,43 @@ "e2eServiceInstances" ], "summary": "Scale E2E Service Instance on a specified version", - "description": "", "operationId": "scaleE2EServiceInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][3-5]" + "schema": { + "pattern": "[vV][3-5]", + "type": "string" + } }, { "name": "serviceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/e2eServiceInstances/{version}/{serviceId}/modeldifferences": { @@ -312,43 +322,44 @@ "tags": [ "e2eServiceInstances" ], - "summary": "Find added and deleted resources of target model for the e2eserviceInstance on a given serviceId ", - "description": "", + "summary": "Find added and deleted resources of target model for the e2eserviceInstance on a given serviceId", "operationId": "compareModelwithTargetVersion", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "serviceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][3-5]" + "schema": { + "pattern": "[vV][3-5]", + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/3gppservices/{version}/allocate": { @@ -357,39 +368,41 @@ "Onap3gppServiceInstances" ], "summary": "Create a 3GPP Service Instance on a version provided", - "description": "", "operationId": "allocate3gppService", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/Allocate3gppService" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][1]" + "schema": { + "pattern": "[vV][1]", + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Allocate3gppService" + } + } + }, + "required": true + }, "responses": { "default": { "description": "successful operation", - "schema": { - "$ref": "#/definitions/3gppServiceResponse" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/3gppServiceResponse" + } + } } } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/3gppservices/{version}/deAllocate": { @@ -398,39 +411,41 @@ "Onap3gppServiceInstances" ], "summary": "Terminate/Deallocate a 3GPP Service Instance on a version provided", - "description": "", "operationId": "deallocate3gppService", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/DeAllocate3gppService" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][1]" + "schema": { + "pattern": "[vV][1]", + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeAllocate3gppService" + } + } + }, + "required": true + }, "responses": { "default": { "description": "successful operation", - "schema": { - "$ref": "#/definitions/3gppServiceResponse" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/3gppServiceResponse" + } + } } } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/3gppservices/{version}/modify": { @@ -439,39 +454,41 @@ "Onap3gppServiceInstances" ], "summary": "Modify a 3GPP Service Instance on a version provided", - "description": "", "operationId": "modify3gppService", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/Modify3gppService" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][1]" + "schema": { + "pattern": "[vV][1]", + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Modify3gppService" + } + } + }, + "required": true + }, "responses": { "default": { "description": "successful operation", - "schema": { - "$ref": "#/definitions/3gppServiceResponse" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/3gppServiceResponse" + } + } } } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/3gppservices/{version}/activate": { @@ -480,39 +497,41 @@ "Onap3gppServiceInstances" ], "summary": "Activate a 3GPP Service Instance on a version provided", - "description": "", "operationId": "activate3gppService", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/3gppServiceActivation" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][1]" + "schema": { + "pattern": "[vV][1]", + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/3gppServiceActivation" + } + } + }, + "required": true + }, "responses": { "default": { "description": "successful operation", - "schema": { - "$ref": "#/definitions/3gppServiceResponse" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/3gppServiceResponse" + } + } } } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/3gppservices/{version}/deActivate": { @@ -521,39 +540,41 @@ "Onap3gppServiceInstances" ], "summary": "Deactivate a 3GPP Service Instance on a version provided", - "description": "", "operationId": "deactivate3gppService", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/3gppServiceActivation" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][1]" + "schema": { + "pattern": "[vV][1]", + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/3gppServiceActivation" + } + } + }, + "required": true + }, "responses": { "default": { "description": "successful operation", - "schema": { - "$ref": "#/definitions/3gppServiceResponse" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/3gppServiceResponse" + } + } } } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/3gppservices/{version}/subnetCapabilityQuery": { @@ -562,39 +583,41 @@ "Onap3gppServiceInstances" ], "summary": "Provides subnet capability based on subnet types", - "description": "", "operationId": "querySubnetCapability", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": true, - "schema": { - "$ref": "#/definitions/QuerySubnetCapability" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][1]" + "schema": { + "pattern": "[vV][1]", + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/QuerySubnetCapability" + } + } + }, + "required": true + }, "responses": { "default": { "description": "successful operation with capabilities for the queried subnetTypes", - "schema": { - "type": "object" + "content": { + "application/json": { + "schema": { + "type": "object" + } + } } } - } + }, + "x-codegen-request-body-name": "body" } }, "/globalhealthcheck": { @@ -603,23 +626,21 @@ "globalhealthcheck" ], "summary": "Performing global health check", - "description": "", "operationId": "globalHealthcheck", - "produces": [ - "text/html" - ], "parameters": [ { "name": "enableBpmn", "in": "query", - "required": false, - "type": "boolean", - "default": true + "schema": { + "type": "boolean", + "default": true + } } ], "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } } } @@ -630,15 +651,11 @@ "nodehealthcheck" ], "summary": "Performing node health check", - "description": "", "operationId": "nodeHealthcheck", - "produces": [ - "text/html" - ], - "parameters": [], "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } } } @@ -649,23 +666,22 @@ "onapsoinfraorchestrationRequests" ], "summary": "Find Orchestrated Requests for a URI Information", - "description": "", "operationId": "getOrchestrationRequest", - "produces": [ - "application/json" - ], "parameters": [ { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][4-7]" + "schema": { + "pattern": "[vV][4-7]", + "type": "string" + } } ], "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } } } @@ -676,29 +692,30 @@ "onapsoinfraorchestrationRequests" ], "summary": "Find Orchestrated Requests for a given requestId", - "description": "", "operationId": "getOrchestrationRequestForReqId", - "produces": [ - "application/json" - ], "parameters": [ { "name": "requestId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][4-7]" + "schema": { + "pattern": "[vV][4-7]", + "type": "string" + } } ], "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } } } @@ -709,42 +726,43 @@ "onapsoinfraorchestrationRequests" ], "summary": "Unlock Orchestrated Requests for a given requestId", - "description": "", "operationId": "unlockOrchestrationRequest", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "requestId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][4-7]" + "schema": { + "pattern": "[vV][4-7]", + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/orchestrationTasks/{version}": { @@ -753,23 +771,22 @@ "onapsoinfraorchestrationTasks" ], "summary": "Get all orchestrationTasks", - "description": "", "operationId": "getAllOrchestrationTasks", - "produces": [ - "application/json" - ], "parameters": [ { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][4-7]" + "schema": { + "pattern": "[vV][4-7]", + "type": "string" + } } ], "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } } }, @@ -778,33 +795,35 @@ "onapsoinfraorchestrationTasks" ], "summary": "Create an orchestrationTask", - "description": "", "operationId": "createOrchestrationTask", - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][4-7]" + "schema": { + "pattern": "[vV][4-7]", + "type": "string" + } } ], + "requestBody": { + "content": { + "*/*": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/orchestrationTasks/{version}/{taskId}": { @@ -813,29 +832,30 @@ "onapsoinfraorchestrationTasks" ], "summary": "Get orchestrationTask for a given taskId", - "description": "", "operationId": "getOrchestrationTask", - "produces": [ - "application/json" - ], "parameters": [ { "name": "taskId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][4-7]" + "schema": { + "pattern": "[vV][4-7]", + "type": "string" + } } ], "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } } }, @@ -844,68 +864,73 @@ "onapsoinfraorchestrationTasks" ], "summary": "update orchestrationTask for a given taskId", - "description": "", "operationId": "updateOrchestrationTask", - "produces": [ - "application/json" - ], "parameters": [ { "name": "taskId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][4-7]" - }, - { - "in": "body", - "name": "body", - "required": false, "schema": { + "pattern": "[vV][4-7]", "type": "string" } } ], + "requestBody": { + "content": { + "*/*": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" }, "delete": { "tags": [ "onapsoinfraorchestrationTasks" ], "summary": "delete orchestrationTask for a given taskId", - "description": "", "operationId": "deleteOrchestrationTask", - "produces": [ - "application/json" - ], "parameters": [ { "name": "taskId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][4-7]" + "schema": { + "pattern": "[vV][4-7]", + "type": "string" + } } ], "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } } } @@ -916,39 +941,43 @@ "onapsoinfraorchestrationTasks" ], "summary": "commit orchestrationTask for a given taskId", - "description": "", "operationId": "commitOrchestrationTask", - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "taskId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][4-7]" + "schema": { + "pattern": "[vV][4-7]", + "type": "string" + } } ], + "requestBody": { + "content": { + "*/*": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/orchestrationTasks/{version}/{taskId}/abort": { @@ -957,39 +986,43 @@ "onapsoinfraorchestrationTasks" ], "summary": "abort orchestrationTask for a given taskId", - "description": "", "operationId": "abortOrchestrationTask", - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "taskId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][4-7]" + "schema": { + "pattern": "[vV][4-7]", + "type": "string" + } } ], + "requestBody": { + "content": { + "*/*": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/deactivateAndCloudDelete": { @@ -998,54 +1031,59 @@ "onapsoinfraserviceInstantiation" ], "summary": "Deactivate and Cloud Delete VfModule instance", - "description": "", "operationId": "deactivateAndCloudDeleteVfModuleInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][7]" + "schema": { + "pattern": "[vV][7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "vnfInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "vfmoduleInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/enablePort": { @@ -1054,48 +1092,51 @@ "onapsoinfraserviceInstantiation" ], "summary": "Enable Port Mirroring", - "description": "", "operationId": "enablePort", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "configurationInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/disablePort": { @@ -1104,48 +1145,51 @@ "onapsoinfraserviceInstantiation" ], "summary": "Disable Port Mirroring", - "description": "", "operationId": "disablePort", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "configurationInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/activate": { @@ -1154,48 +1198,51 @@ "onapsoinfraserviceInstantiation" ], "summary": "Activate Port Mirroring", - "description": "", "operationId": "activatePort", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "configurationInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/deactivate": { @@ -1204,48 +1251,51 @@ "onapsoinfraserviceInstantiation" ], "summary": "Deactivate Port Mirroring", - "description": "", "operationId": "deactivatePort", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "configurationInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/addRelationships": { @@ -1254,42 +1304,43 @@ "onapsoinfraserviceInstantiation" ], "summary": "Add Relationships to a Service Instance", - "description": "", "operationId": "addRelationships", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][6-7]" + "schema": { + "pattern": "[vV][6-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/scaleOut": { @@ -1298,48 +1349,51 @@ "onapsoinfraserviceInstantiation" ], "summary": "VF Auto Scale Out", - "description": "", "operationId": "scaleOutVfModule", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][7]" + "schema": { + "pattern": "[vV][7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "vnfInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/inPlaceSoftwareUpdate": { @@ -1348,48 +1402,51 @@ "onapsoinfraserviceInstantiation" ], "summary": "Perform VNF software update", - "description": "", "operationId": "inPlaceSoftwareUpdate", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][6-7]" + "schema": { + "pattern": "[vV][6-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "vnfInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/applyUpdatedConfig": { @@ -1398,86 +1455,453 @@ "onapsoinfraserviceInstantiation" ], "summary": "Apply updated configuration", - "description": "", "operationId": "applyUpdatedConfig", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][6-7]" + "schema": { + "pattern": "[vV][6-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "vnfInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances": { "post": { "tags": [ - "onapsoinfraserviceInstantiation" + "SO service Instantiation" ], "summary": "Create a Service Instance on a version provided", - "description": "", "operationId": "createServiceInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CreateServiceInstanceParamaters" + } + }, + "examples": { + "cnf": { + "summary": "CNF", + "value": { + "requestDetails": { + "modelInfo": { + "modelInvariantId": "0b1f4362-fed9-45fc-a2e1-6fd3e52f4c1a", + "modelType": "service", + "modelName": "service_test_1", + "modelVersion": "2.0", + "modelVersionId": "beb1259e-dad8-4ee0-a40e-1af20f775d54", + "modelUuid": "beb1259e-dad8-4ee0-a40e-1af20f775d54", + "modelInvariantUuid": "0b1f4362-fed9-45fc-a2e1-6fd3e52f4c1a" + }, + "subscriberInfo": { + "globalSubscriberId": "basicnf-customer" + }, + "requestInfo": { + "suppressRollback": false, + "productFamilyId": "bb0838ec-2ef7-4382-820f-0d34efdb1ccd", + "requestorId": "Portal", + "instanceName": "ORAN_CU_3", + "source": "VID" + }, + "project": { + "projectName": "Project-5GCustomer" + }, + "owningEntity": { + "owningEntityId": "67f2e84c-734d-4e90-a1e4-d2ffa2e75849", + "owningEntityName": "OE-5GCustomer" + }, + "requestParameters": { + "subscriptionServiceType": "5G", + "aLaCarte": false, + "usePreload": false, + "userParams": [ + { + "Homing_Solution": false + }, + { + "service": { + "instanceParams": [ + {} + ], + "instanceName": "service_test_1", + "resources": { + "vnfs": [ + { + "modelInfo": { + "modelName": "cu_sim_1901", + "modelVersionId": "40f11fb2-931d-408d-a949-99e9289d3c02", + "modelInvariantUuid": "f6c202d8-94bd-496e-878e-448da0ed0a6a", + "modelVersion": "1.0", + "modelCustomizationId": "5a2eec30-80c5-47cc-9117-3d8659c38202", + "modelInstanceName": "cu_sim_2022 0" + }, + "cloudConfiguration": { + "cloudOwner": "k8scloudowner4", + "lcpCloudRegionId": "k8sregionfour", + "tenantId": "6bbd2981b210461dbc8fe846df1a7808" + }, + "platform": { + "platformName": "test" + }, + "lineOfBusiness": { + "lineOfBusinessName": "LOB-5G" + }, + "productFamilyId": "productFamilyId123", + "instanceName": "CUCP_1", + "instanceParams": [ + {} + ], + "vfModules": [ + { + "modelInfo": { + "modelName": "CuSim1901..helm_cucp..module-1", + "modelVersionId": "9b7723ff-25ac-44af-a7ac-9cfbf2d4285f", + "modelInvariantUuid": "63af164d-9276-4e08-98fb-059d1c5b80e4", + "modelVersion": 1, + "modelCustomizationId": "b7a0bd1d-4832-4ad3-9199-6e1eab543a45" + }, + "instanceName": "module-1", + "instanceParams": [ + {} + ] + } + ] + } + ] + }, + "modelInfo": { + "modelVersion": "2.0", + "modelVersionId": "77bea973-570b-4f73-9049-87c37d3de8ca", + "modelInvariantId": "b7a3f00b-8fb2-4791-b0ff-71d83f97ab0b", + "modelName": "service_model", + "modelType": "service" + } + } + } + ] + } + } + } + }, + "pnf": { + "summary": "PNF", + "value": { + "requestDetails": { + "modelInfo": { + "modelInvariantId": "040a21d5-b208-490b-9c69-c12ae2b2b958", + "modelName": "ORAN_RU_SIM_Service", + "modelType": "service", + "modelVersion": "2.0", + "modelVersionId": "2f40ddbd-0acc-4e59-8fb3-77a6f84ae28c" + }, + "owningEntity": { + "owningEntityId": "3804b4ac-4d9c-482a-ad0b-5806f8849907", + "owningEntityName": "oran_owner" + }, + "project": { + "projectName": "oran_project" + }, + "requestInfo": { + "instanceName": "ORAN_RU_SIM", + "productFamilyId": "oran-service", + "requestorId": "PORTAL", + "source": "PORTAL", + "suppressRollback": false + }, + "requestParameters": { + "aLaCarte": false, + "subscriptionServiceType": "oran_service", + "userParams": [ + { + "Homing_Solution": "none" + }, + { + "service": { + "instanceName": "ORAN_RU_SIM_Service_1", + "instanceParams": [], + "modelInfo": { + "modelInvariantId": "040a21d5-b208-490b-9c69-c12ae2b2b958", + "modelName": "ORAN_RU_SIM_Service", + "modelType": "service", + "modelVersion": "2.0", + "modelVersionId": "2f40ddbd-0acc-4e59-8fb3-77a6f84ae28c" + }, + "resources": { + "pnfs": [ + { + "instanceName": "ORAN_RU_PNF_1", + "instanceParams": [], + "lineOfBusiness": { + "lineOfBusinessName": "oran_lob" + }, + "modelInfo": { + "modelCustomizationId": "5e3a18ce-8bbd-40fc-a197-becca92ac05b", + "modelCustomizationName": "ORAN_RU_PNF_1", + "modelInstanceName": "ORAN_RU_PNF_ORAN_RU_SIM_Service", + "modelInvariantId": "486f38e8-1710-4875-b732-a8b3301a7786", + "modelName": "ORAN_RU_PNF", + "modelType": "pnf", + "modelVersion": "1.0", + "modelVersionId": "e95310e1-e1d2-471f-aa26-d24849a7e61a" + }, + "platform": { + "platformName": "oran_platform" + }, + "productFamilyId": "oran-service" + } + ], + "vnfs": [] + } + } + } + ] + }, + "subscriberInfo": { + "globalSubscriberId": "ORANTownCustomer" + } + } + } + }, + "Composed service in two clouds": { + "summary": "Composed service in two clouds", + "value": { + "requestDetails": { + "modelInfo": { + "modelInvariantId": "0592b699-3f7b-424f-857b-d956f15c9447", + "modelInvariantUuid": "0592b699-3f7b-424f-857b-d956f15c9447", + "modelName": "parent_svc_2912", + "modelType": "service", + "modelUuid": "1c889525-46c5-4b22-8f26-17913dd3172a", + "modelVersion": "2.0", + "modelVersionId": "1c889525-46c5-4b22-8f26-17913dd3172a" + }, + "owningEntity": { + "owningEntityId": "67f2e84c-734d-4e90-a1e4-d2ffa2e75849", + "owningEntityName": "OE-5GCustomer" + }, + "project": { + "projectName": "Project-5GCustomer" + }, + "requestInfo": { + "instanceName": "parent_two_k8s", + "productFamilyId": "productFamilyId123", + "requestorId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "source": "Postman", + "suppressRollback": false + }, + "requestParameters": { + "aLaCarte": false, + "subscriptionServiceType": "5G", + "usePreload": false, + "userParams": [ + { + "Homing_Solution": "none" + }, + { + "service": { + "instanceName": "parent_two_k8s", + "instanceParams": [ + {} + ], + "modelInfo": { + "modelInvariantId": "0592b699-3f7b-424f-857b-d956f15c9447", + "modelName": "parent_svc_2912", + "modelType": "service", + "modelVersion": "2.0", + "modelVersionId": "1c889525-46c5-4b22-8f26-17913dd3172a" + }, + "resources": { + "services": [ + { + "instanceName": "childsvc_1201_01", + "instanceParams": [ + {} + ], + "modelInfo": { + "modelInvariantId": "19d8f134-8bdb-46ed-84a9-046c9314d9a9", + "modelName": "childsvc_2912", + "modelType": "service", + "modelVersion": "2.0", + "modelVersionId": "b2ae12eb-3854-4405-a125-c63c16e6fa23" + }, + "resources": { + "vnfs": [ + { + "cloudConfiguration": { + "cloudOwner": "k8scloudowner4", + "lcpCloudRegionId": "k8sregionfour", + "tenantId": "6bbd2981b210461dbc8fe846df1a7808" + }, + "instanceName": "CUCP_1", + "instanceParams": [ + {} + ], + "lineOfBusiness": { + "lineOfBusinessName": "LOB-5GCustomer" + }, + "modelInfo": { + "modelCustomizationId": "26be9ecc-43b2-47e4-9666-915701b87cbc", + "modelInstanceName": "CUCP_2912 0", + "modelInvariantUuid": "a3c9fa51-ff3c-4b6e-a1bd-73eb1ffb06c0", + "modelName": "CUCP_2912", + "modelVersion": "1.0", + "modelVersionId": "4a7aa841-09a5-493b-a52f-26aaa1f62c20" + }, + "platform": { + "platformName": "test" + }, + "productFamilyId": "productFamilyId123", + "vfModules": [ + { + "instanceName": "module-1", + "instanceParams": [ + {} + ], + "modelInfo": { + "modelCustomizationId": "fe39f295-253c-41ef-b07c-607aec86ea52", + "modelInvariantUuid": "051d1f8a-d5bd-4509-9457-0ef756dc5a33", + "modelName": "Cucp2912..helm_cucp..module-1", + "modelVersion": "1", + "modelVersionId": "3f70da13-e246-4abd-8fe5-90d3f8fbc212" + } + } + ] + } + ] + } + }, + { + "instanceName": "childsvc_1201_02", + "instanceParams": [ + {} + ], + "modelInfo": { + "modelInvariantId": "19d8f134-8bdb-46ed-84a9-046c9314d9a9", + "modelName": "childsvc_2912", + "modelType": "service", + "modelVersion": "2.0", + "modelVersionId": "b2ae12eb-3854-4405-a125-c63c16e6fa23" + }, + "resources": { + "vnfs": [ + { + "cloudConfiguration": { + "cloudOwner": "k8scloudowner4", + "lcpCloudRegionId": "k8sregionone", + "tenantId": "3fd21203fd274e10a30f1fd4c355d80b" + }, + "instanceName": "CUCP_2", + "instanceParams": [ + {} + ], + "lineOfBusiness": { + "lineOfBusinessName": "LOB-5GCustomer" + }, + "modelInfo": { + "modelCustomizationId": "26be9ecc-43b2-47e4-9666-915701b87cbc", + "modelInstanceName": "CUCP_2912 0", + "modelInvariantUuid": "a3c9fa51-ff3c-4b6e-a1bd-73eb1ffb06c0", + "modelName": "CUCP_2912", + "modelVersion": "1.0", + "modelVersionId": "4a7aa841-09a5-493b-a52f-26aaa1f62c20" + }, + "platform": { + "platformName": "test" + }, + "productFamilyId": "productFamilyId123", + "vfModules": [ + { + "instanceName": "module-2", + "instanceParams": [ + {} + ], + "modelInfo": { + "modelCustomizationId": "fe39f295-253c-41ef-b07c-607aec86ea52", + "modelInvariantUuid": "051d1f8a-d5bd-4509-9457-0ef756dc5a33", + "modelName": "Cucp2912..helm_cucp..module-1", + "modelVersion": "1", + "modelVersionId": "3f70da13-e246-4abd-8fe5-90d3f8fbc212" + } + } + ] + } + ] + } + } + ] + } + } + } + ] + }, + "subscriberInfo": { + "globalSubscriberId": "5GCustomer" + } + } + } + } + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "requestBody" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/activate": { @@ -1486,42 +1910,43 @@ "onapsoinfraserviceInstantiation" ], "summary": "Activate provided Service Instance", - "description": "", "operationId": "activateServiceInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/deactivate": { @@ -1530,42 +1955,43 @@ "onapsoinfraserviceInstantiation" ], "summary": "Deactivate provided Service Instance", - "description": "", "operationId": "deactivateServiceInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}": { @@ -1574,42 +2000,43 @@ "onapsoinfraserviceInstantiation" ], "summary": "Delete provided Service Instance", - "description": "", "operationId": "deleteServiceInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/assign": { @@ -1618,36 +2045,35 @@ "onapsoinfraserviceInstantiation" ], "summary": "Assign Service Instance", - "description": "", "operationId": "assignServiceInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][7]" + "schema": { + "pattern": "[vV][7]", + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/unassign": { @@ -1656,42 +2082,43 @@ "onapsoinfraserviceInstantiation" ], "summary": "Unassign Service Instance", - "description": "", "operationId": "unassignServiceInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][7]" + "schema": { + "pattern": "[vV][7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations": { @@ -1700,42 +2127,43 @@ "onapsoinfraserviceInstantiation" ], "summary": "Create Port Mirroring Configuration", - "description": "", "operationId": "createPortConfiguration", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}": { @@ -1744,48 +2172,51 @@ "onapsoinfraserviceInstantiation" ], "summary": "Delete provided Port", - "description": "", "operationId": "deletePortConfiguration", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "configurationInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/removeRelationships": { @@ -1794,42 +2225,43 @@ "onapsoinfraserviceInstantiation" ], "summary": "Remove Relationships from Service Instance", - "description": "", "operationId": "removeRelationships", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][6-7]" + "schema": { + "pattern": "[vV][6-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs": { @@ -1838,42 +2270,43 @@ "onapsoinfraserviceInstantiation" ], "summary": "Create VNF on a specified version and serviceInstance", - "description": "", "operationId": "createVnfInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/replace": { @@ -1882,48 +2315,51 @@ "onapsoinfraserviceInstantiation" ], "summary": "Replace provided VNF instance", - "description": "", "operationId": "replaceVnfInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "vnfInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}": { @@ -1932,96 +2368,102 @@ "onapsoinfraserviceInstantiation" ], "summary": "Update VNF on a specified version, serviceInstance and vnfInstance", - "description": "", "operationId": "updateVnfInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "vnfInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" }, "delete": { "tags": [ "onapsoinfraserviceInstantiation" ], "summary": "Delete provided VNF instance", - "description": "", "operationId": "deleteVnfInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "vnfInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules": { @@ -2030,48 +2472,51 @@ "onapsoinfraserviceInstantiation" ], "summary": "Create VfModule on a specified version, serviceInstance and vnfInstance", - "description": "", "operationId": "createVfModuleInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "vnfInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/replace": { @@ -2080,54 +2525,59 @@ "onapsoinfraserviceInstantiation" ], "summary": "Create VfModule on a specified version, serviceInstance and vnfInstance", - "description": "", "operationId": "replaceVfModuleInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "vnfInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "vfmoduleInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}": { @@ -2136,108 +2586,118 @@ "onapsoinfraserviceInstantiation" ], "summary": "Update VfModule on a specified version, serviceInstance, vnfInstance and vfModule", - "description": "", "operationId": "updateVfModuleInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "vnfInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "vfmoduleInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" }, "delete": { "tags": [ "onapsoinfraserviceInstantiation" ], "summary": "Delete provided VfModule instance", - "description": "", "operationId": "deleteVfModuleInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "vnfInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "vfmoduleInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups": { @@ -2246,48 +2706,51 @@ "onapsoinfraserviceInstantiation" ], "summary": "Create VolumeGroup on a specified version, serviceInstance, vnfInstance", - "description": "", "operationId": "createVolumeGroupInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "vnfInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}": { @@ -2296,108 +2759,118 @@ "onapsoinfraserviceInstantiation" ], "summary": "Update VolumeGroup on a specified version, serviceInstance, vnfInstance and volumeGroup", - "description": "", "operationId": "updateVolumeGroupInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "vnfInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "volumeGroupInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" }, "delete": { "tags": [ "onapsoinfraserviceInstantiation" ], "summary": "Delete provided VolumeGroup instance", - "description": "", "operationId": "deleteVolumeGroupInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "vnfInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "volumeGroupInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/networks": { @@ -2406,42 +2879,43 @@ "onapsoinfraserviceInstantiation" ], "summary": "Create NetworkInstance on a specified version and serviceInstance ", - "description": "", "operationId": "createNetworkInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}": { @@ -2450,96 +2924,102 @@ "onapsoinfraserviceInstantiation" ], "summary": "Update VolumeGroup on a specified version, serviceInstance, networkInstance", - "description": "", "operationId": "updateNetworkInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "networkInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" }, "delete": { "tags": [ "onapsoinfraserviceInstantiation" ], "summary": "Delete provided Network instance", - "description": "", "operationId": "deleteNetworkInstance", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][5-7]" + "schema": { + "pattern": "[vV][5-7]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "networkInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/tasks/{version}": { @@ -2548,62 +3028,71 @@ "onapsoinfratasks" ], "summary": "Finds Manual Tasks", - "description": "", "operationId": "queryFilters", "parameters": [ { "name": "taskId", "in": "query", - "required": false, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "originalRequestId", "in": "query", - "required": false, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "subscriptionServiceType", "in": "query", - "required": false, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "nfRole", "in": "query", - "required": false, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "buildingBlockName", "in": "query", - "required": false, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "originalRequestDate", "in": "query", - "required": false, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "originalRequestorId", "in": "query", - "required": false, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV]1" + "schema": { + "pattern": "[vV]1", + "type": "string" + } } ], "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } } } @@ -2614,36 +3103,35 @@ "onapsoinfracloudResources" ], "summary": "Create an Operational Environment", - "description": "", "operationId": "createOperationEnvironment", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][1]" + "schema": { + "pattern": "[vV][1]", + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/cloudResources/{version}/operationalEnvironments/{operationalEnvironmentId}/activate": { @@ -2652,42 +3140,43 @@ "onapsoinfracloudResources" ], "summary": "Activate an Operational Environment", - "description": "", "operationId": "activateOperationEnvironment", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][1]" + "schema": { + "pattern": "[vV][1]", + "type": "string" + } }, { "name": "operationalEnvironmentId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/cloudResources/{version}/operationalEnvironments/{operationalEnvironmentId}/deactivate": { @@ -2696,42 +3185,43 @@ "onapsoinfracloudResources" ], "summary": "Deactivate an Operational Environment", - "description": "", "operationId": "deactivateOperationEnvironment", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][1]" + "schema": { + "pattern": "[vV][1]", + "type": "string" + } }, { "name": "operationalEnvironmentId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/cloudResourcesRequests/{version}/{requestId}/unlock": { @@ -2740,42 +3230,43 @@ "onapsoinfracloudResourcesRequests" ], "summary": "Unlock CloudOrchestration requests for a specified requestId", - "description": "", "operationId": "unlockOrchestrationRequestForReqId", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "requestId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][1]" + "schema": { + "pattern": "[vV][1]", + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/cloudResourcesRequests/{version}": { @@ -2784,26 +3275,22 @@ "onapsoinfracloudResourcesRequests" ], "summary": "Get status of an Operational Environment based on filter criteria", - "description": "", "operationId": "getOperationEnvironmentStatusFilter", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][1]" + "schema": { + "pattern": "[vV][1]", + "type": "string" + } } ], "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } } } @@ -2814,42 +3301,43 @@ "onapsoinframodelDistributions" ], "summary": "Update model distribution status", - "description": "", "operationId": "updateModelDistributionStatus", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "type": "string" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][1]" + "schema": { + "pattern": "[vV][1]", + "type": "string" + } }, { "name": "distributionId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "string" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/workflowSpecifications/{version}/workflows": { @@ -2858,34 +3346,34 @@ "onapsoinfraworkflowSpecifications" ], "summary": "Retrieve Workflow details based on the filter criteria", - "description": "", "operationId": "queryWorkflowSpecifications", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { "name": "resourceTarget", "in": "query", - "required": false, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][1]" + "schema": { + "pattern": "[vV][1]", + "type": "string" + } } ], "responses": { "default": { "description": "List of workflow specifications on successful operation", - "schema": { - "$ref": "#/definitions/RetrievingWorkflowResponse" + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RetrievingWorkflowResponse" + } + } } } } @@ -2897,48 +3385,51 @@ "onapsoinfrainstanceManagement" ], "summary": "Executing service level custom workflow", - "description": "", "operationId": "executeServiceLevelCustomWorkflow", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "$ref": "#/definitions/ServiceLevelWorkflowExecution" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][1]" + "schema": { + "pattern": "[vV][1]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "workflow_UUID", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServiceLevelWorkflowExecution" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } }, "/onap/so/infra/instanceManagement/{version}/serviceInstances/{serviceInstanceId}/pnfs/${pnfName}/workflows/${workflow_UUID}": { @@ -2947,469 +3438,838 @@ "onapsoinfrainstanceManagement" ], "summary": "Executing download/activate custom workflow", - "description": "", "operationId": "executePNFCustomWorkflow", - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], "parameters": [ { - "in": "body", - "name": "body", - "required": false, - "schema": { - "$ref": "#/definitions/PNFCustomWorkflowExecution" - } - }, - { "name": "version", "in": "path", "required": true, - "type": "string", - "pattern": "[vV][1]" + "schema": { + "pattern": "[vV][1]", + "type": "string" + } }, { "name": "serviceInstanceId", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "pnfName", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } }, { "name": "workflow_UUID", "in": "path", "required": true, - "type": "string" + "schema": { + "type": "string" + } } ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PNFCustomWorkflowExecution" + } + } + }, + "required": false + }, "responses": { "default": { - "description": "successful operation" + "description": "successful operation", + "content": {} } - } + }, + "x-codegen-request-body-name": "body" } } }, - "definitions": { - "Allocate3gppService": { - "description": "This describes the request body for 3gpp service allocation", - "type": "object", - "properties": { - "name": { - "description": "Name of the service to allocate", - "type": "string" - }, - "modelInvariantUuid": { - "description": "Model Invariant UUID corresponding to the service. For E.g : NSST Model invariant uuid in case of NSSI creation", - "type": "string" - }, - "modelUuid": { - "description": "Model UUID corresponding to the service. For E.g : NSST Model uuid in case of NSSI creation", - "type": "string" - }, - "globalSubscriberId": { - "type": "string" - }, - "subscriptionServiceType": { - "description": "Service type for the subscription. For E.G :5G", - "type": "string" - }, - "networkType": { - "description": "Network type. For E.G :AN/CN/TN", - "type": "string" - }, - "additionalProperties": { - "description": "Map of additional properties required for service allocation", - "type": "object" - } - } - }, - "DeAllocate3gppService": { - "description": "This describes the request body for 3gpp service Termination/Deallocation", - "type": "object", - "properties": { - "serviceInstanceID": { - "description": "ID of the service to terminate", - "type": "string" - }, - "globalSubscriberId": { - "type": "string" - }, - "subscriptionServiceType": { - "description": "Service type for the subscription. For E.G :5G", - "type": "string" - }, - "networkType": { - "description": "Network type. For E.G :AN/CN/TN", - "type": "string" - }, - "additionalProperties": { - "description": "Map of additional properties required for service deallocation", - "type": "object" - } - } - }, - "Modify3gppService": { - "description": "This describes the request body for 3gpp service modification", - "type": "object", - "properties": { - "name": { - "description": "Name of the service to modify", - "type": "string" - }, - "serviceInstanceID": { - "description": "ID of the service to modify", - "type": "string" - }, - "globalSubscriberId": { - "type": "string" - }, - "subscriptionServiceType": { - "description": "Service type for the subscription. For E.G :5G", - "type": "string" - }, - "networkType": { - "description": "Network type. For E.G :AN/CN/TN", - "type": "string" - }, - "additionalProperties": { - "description": "Map of additional properties required for service modification", - "type": "object" - } - } - }, - "3gppServiceActivation": { - "description": "This describes the request body for 3gpp service activation/deactivation", - "type": "object", - "properties": { - "serviceInstanceID": { - "description": "ID of the service to be activated/deactivated", - "type": "string" - }, - "globalSubscriberId": { - "type": "string" - }, - "subscriptionServiceType": { - "description": "Service type for the subscription. For E.G :5G", - "type": "string" - }, - "networkType": { - "description": "Network type. For E.G :AN/CN/TN", - "type": "string" - }, - "additionalProperties": { - "description": "Map of additional properties required for service activation/deactivation", - "type": "object" - } - } - }, - "QuerySubnetCapability": { - "description": "This describes the subnet capabilities that can be queried", - "type": "object", - "properties": { - "subnetTypes": { - "type": "array", - "items": { - "$ref": "#/definitions/SubnetTypes" - } - } - } - }, - "SubnetTypes": { - "description": "This describes allowed subnet types", - "type": "string", - "enum": [ - "AN", - "AN_NF", - "CN", - "TN_FH", - "TN_MH", - "TN_BH" - ] - }, - "3gppServiceResponse": { - "description": "This describes the response for 3gpp services", - "type": "object", - "properties": { - "jobId": { - "description": "Job ID to be used to identify the status of the job", - "type": "string" - }, - "status": { - "description": "status of the job", - "type": "string" - }, - "statusDescription": { - "description": "Description on status in case of erroneous response", - "type": "object" - } - } - }, - "RetrievingWorkflowResponse": { - "description": "Response body of fetching workflows using resource target", - "type": "object", - "properties": { - "workflowSpecificationList":{ - "description": "List of Workflow specification data", - "type": "array", - "items": { - "$ref": "#/definitions/WorkflowSpecification" + "components": { + "schemas": { + "Allocate3gppService": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the service to allocate" + }, + "modelInvariantUuid": { + "type": "string", + "description": "Model Invariant UUID corresponding to the service. For E.g : NSST Model invariant uuid in case of NSSI creation" + }, + "modelUuid": { + "type": "string", + "description": "Model UUID corresponding to the service. For E.g : NSST Model uuid in case of NSSI creation" + }, + "globalSubscriberId": { + "type": "string" + }, + "subscriptionServiceType": { + "type": "string", + "description": "Service type for the subscription. For E.G :5G" + }, + "networkType": { + "type": "string", + "description": "Network type. For E.G :AN/CN/TN" + }, + "additionalProperties": { + "type": "object", + "properties": {}, + "description": "Map of additional properties required for service allocation" } - } - } - }, - "WorkflowSpecification": { - "description": "This describes workflow specification object", - "type": "object", - "properties": { - "artifactInfo": { - "description": "Attributes related to artifact information ", - "type": "object", - "properties": { - "artifactType": { - "description": "Type of the artifact to be queried", - "type": "string" - }, - "artifactUuid": { - "description": "UUID of the artifact", - "type": "string" - }, - "artifactName": { - "description": "Name of the artifact", - "type": "string" - }, - "artifactVersion": { - "description": "Artifact's Version", - "type": "string" - }, - "artifactDescription": { - "description": "", - "type": "string" - }, - "workflowName": { - "description": "Name of the workflow fetched for the resource type", - "type": "string" - }, - "operationName": { - "description": "Mapped operation name of the corresponding workflow", - "type": "string" - }, - "workflowSource": { - "description": "", - "type": "string" - }, - "workflowResourceTarget": { - "description": "Type of Resource mapped against the workflow", - "type": "string" - } + }, + "description": "This describes the request body for 3gpp service allocation" + }, + "DeAllocate3gppService": { + "type": "object", + "properties": { + "serviceInstanceID": { + "type": "string", + "description": "ID of the service to terminate" + }, + "globalSubscriberId": { + "type": "string" + }, + "subscriptionServiceType": { + "type": "string", + "description": "Service type for the subscription. For E.G :5G" + }, + "networkType": { + "type": "string", + "description": "Network type. For E.G :AN/CN/TN" + }, + "additionalProperties": { + "type": "object", + "properties": {}, + "description": "Map of additional properties required for service deallocation" } - } - } - }, - "ServiceLevelWorkflowExecution": { - "description": "This describes the request body of service level custom workflow execution", - "type": "object", - "properties": { - "requestInfo": { - "description": "Request object contains source information", - "type": "object", - "properties": { - "source": { - "description": "Name of the sender", - "type": "string" - }, - "suppressRollback": { - "description": "Enable/disable rollback suppression", - "type": "boolean" - }, - "requestorId": { - "description": "Id of the sender", - "type": "string" - } + }, + "description": "This describes the request body for 3gpp service Termination/Deallocation" + }, + "Modify3gppService": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the service to modify" + }, + "serviceInstanceID": { + "type": "string", + "description": "ID of the service to modify" + }, + "globalSubscriberId": { + "type": "string" + }, + "subscriptionServiceType": { + "type": "string", + "description": "Service type for the subscription. For E.G :5G" + }, + "networkType": { + "type": "string", + "description": "Network type. For E.G :AN/CN/TN" + }, + "additionalProperties": { + "type": "object", + "properties": {}, + "description": "Map of additional properties required for service modification" } }, - "modelInfo": { - "description": "Parameters related to the service model", - "type": "object", - "properties": { - "modelType": { - "description": "Type of the model to be executed", - "type": "string" - }, - "modelInvariantUuid": { - "description": "Model invariant id corresponding to the service", - "type": "string" - }, - "modelUuid": { - "description": "Model uuid corresponding to the service", - "type": "string" - }, - "modelVersionId": { - "description": "Model version of the service instance", - "type": "string" - }, - "modelName": { - "description": "Name of the service", - "type": "string" - }, - "modelVersion": { - "description": "Version of the service instance", - "type": "string" - } + "description": "This describes the request body for 3gpp service modification" + }, + "3gppServiceActivation": { + "type": "object", + "properties": { + "serviceInstanceID": { + "type": "string", + "description": "ID of the service to be activated/deactivated" + }, + "globalSubscriberId": { + "type": "string" + }, + "subscriptionServiceType": { + "type": "string", + "description": "Service type for the subscription. For E.G :5G" + }, + "networkType": { + "type": "string", + "description": "Network type. For E.G :AN/CN/TN" + }, + "additionalProperties": { + "type": "object", + "properties": {}, + "description": "Map of additional properties required for service activation/deactivation" } }, - "requestParameters": { - "description": "User parameter object", - "type": "object", - "properties": { - "subscriptionServiceType": { - "description": "Type of service subscription", - "type": "string" + "description": "This describes the request body for 3gpp service activation/deactivation" + }, + "QuerySubnetCapability": { + "type": "object", + "properties": { + "subnetTypes": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SubnetTypes" } } }, - "subscriberInfo": { - "description": "Subscriber id information", - "type": "object", - "properties": { - "globalSubscriberId": { - "description": "Id of the subscriber sending the request", - "type": "string" - } + "description": "This describes the subnet capabilities that can be queried" + }, + "SubnetTypes": { + "type": "string", + "description": "This describes allowed subnet types", + "enum": [ + "AN", + "AN_NF", + "CN", + "TN_FH", + "TN_MH", + "TN_BH" + ] + }, + "3gppServiceResponse": { + "type": "object", + "properties": { + "jobId": { + "type": "string", + "description": "Job ID to be used to identify the status of the job" + }, + "status": { + "type": "string", + "description": "status of the job" + }, + "statusDescription": { + "type": "object", + "properties": {}, + "description": "Description on status in case of erroneous response" } }, - "project": { - "description": "Information about the target project name", - "type": "object", - "properties": { - "projectName":{ - "description": "Name of the target project", - "type": "string" + "description": "This describes the response for 3gpp services" + }, + "RetrievingWorkflowResponse": { + "type": "object", + "properties": { + "workflowSpecificationList": { + "type": "array", + "description": "List of Workflow specification data", + "items": { + "$ref": "#/components/schemas/WorkflowSpecification" } } }, - "owningEntity": { - "description": "Object describes the entity details", - "type": "object", - "properties": { - "owningEntityId": { - "description": "Id of the owning Entity", - "type": "string" + "description": "Response body of fetching workflows using resource target" + }, + "WorkflowSpecification": { + "type": "object", + "properties": { + "artifactInfo": { + "type": "object", + "properties": { + "artifactType": { + "type": "string", + "description": "Type of the artifact to be queried" + }, + "artifactUuid": { + "type": "string", + "description": "UUID of the artifact" + }, + "artifactName": { + "type": "string", + "description": "Name of the artifact" + }, + "artifactVersion": { + "type": "string", + "description": "Artifact's Version" + }, + "artifactDescription": { + "type": "string", + "description": "" + }, + "workflowName": { + "type": "string", + "description": "Name of the workflow fetched for the resource type" + }, + "operationName": { + "type": "string", + "description": "Mapped operation name of the corresponding workflow" + }, + "workflowSource": { + "type": "string", + "description": "" + }, + "workflowResourceTarget": { + "type": "string", + "description": "Type of Resource mapped against the workflow" + } }, - "owningEntityName": { - "description": "Name of the owning Entity", - "type": "string" - } + "description": "Attributes related to artifact information " } - } - - } - }, - "PNFCustomWorkflowExecution": { - "description": "This describes the request body of PNF custom workflow execution", - "type": "object", - "properties": { - "requestInfo": { - "description": "Request object contains source information", - "type": "object", - "properties": { - "source": { - "description": "Name of the sender", - "type": "string" + }, + "description": "This describes workflow specification object" + }, + "ServiceLevelWorkflowExecution": { + "type": "object", + "properties": { + "requestInfo": { + "type": "object", + "properties": { + "source": { + "type": "string", + "description": "Name of the sender" + }, + "suppressRollback": { + "type": "boolean", + "description": "Enable/disable rollback suppression" + }, + "requestorId": { + "type": "string", + "description": "Id of the sender" + } }, - "suppressRollback": { - "description": "Enable/disable rollback suppression", - "type": "boolean" + "description": "Request object contains source information" + }, + "modelInfo": { + "type": "object", + "properties": { + "modelType": { + "type": "string", + "description": "Type of the model to be executed" + }, + "modelInvariantUuid": { + "type": "string", + "description": "Model invariant id corresponding to the service" + }, + "modelUuid": { + "type": "string", + "description": "Model uuid corresponding to the service" + }, + "modelVersionId": { + "type": "string", + "description": "Model version of the service instance" + }, + "modelName": { + "type": "string", + "description": "Name of the service" + }, + "modelVersion": { + "type": "string", + "description": "Version of the service instance" + } }, - "requestorId": { - "description": "Id of the sender", - "type": "string" - } + "description": "Parameters related to the service model" + }, + "requestParameters": { + "type": "object", + "properties": { + "subscriptionServiceType": { + "type": "string", + "description": "Type of service subscription" + } + }, + "description": "User parameter object" + }, + "subscriberInfo": { + "type": "object", + "properties": { + "globalSubscriberId": { + "type": "string", + "description": "Id of the subscriber sending the request" + } + }, + "description": "Subscriber id information" + }, + "project": { + "type": "object", + "properties": { + "projectName": { + "type": "string", + "description": "Name of the target project" + } + }, + "description": "Information about the target project name" + }, + "owningEntity": { + "type": "object", + "properties": { + "owningEntityId": { + "type": "string", + "description": "Id of the owning Entity" + }, + "owningEntityName": { + "type": "string", + "description": "Name of the owning Entity" + } + }, + "description": "Object describes the entity details" } }, - "modelInfo": { - "description": "Parameters related to the service model", - "type": "object", - "properties": { - "modelType": { - "description": "Type of the model to be executed", - "type": "string" + "description": "This describes the request body of service level custom workflow execution" + }, + "PNFCustomWorkflowExecution": { + "type": "object", + "properties": { + "requestInfo": { + "type": "object", + "properties": { + "source": { + "type": "string", + "description": "Name of the sender" + }, + "suppressRollback": { + "type": "boolean", + "description": "Enable/disable rollback suppression" + }, + "requestorId": { + "type": "string", + "description": "Id of the sender" + } }, - "modelInvariantUuid": { - "description": "Model invariant id corresponding to the service", - "type": "string" + "description": "Request object contains source information" + }, + "modelInfo": { + "type": "object", + "properties": { + "modelType": { + "type": "string", + "description": "Type of the model to be executed" + }, + "modelInvariantUuid": { + "type": "string", + "description": "Model invariant id corresponding to the service" + }, + "modelUuid": { + "type": "string", + "description": "Model uuid corresponding to the service" + }, + "modelVersionId": { + "type": "string", + "description": "Model version of the service instance" + }, + "modelName": { + "type": "string", + "description": "Name of the service" + }, + "modelVersion": { + "type": "string", + "description": "Version of the service instance" + } }, - "modelUuid": { - "description": "Model uuid corresponding to the service", - "type": "string" + "description": "Parameters related to the service model" + }, + "requestParameters": { + "type": "object", + "properties": { + "subscriptionServiceType": { + "type": "string", + "description": "Type of service subscription" + } }, - "modelVersionId": { - "description": "Model version of the service instance", - "type": "string" + "description": "User parameter object" + }, + "subscriberInfo": { + "type": "object", + "properties": { + "globalSubscriberId": { + "type": "string", + "description": "Id of the subscriber sending the request" + } }, - "modelName": { - "description": "Name of the service", - "type": "string" + "description": "Subscriber id information" + }, + "project": { + "type": "object", + "properties": { + "projectName": { + "type": "string", + "description": "Name of the target project" + } }, - "modelVersion": { - "description": "Version of the service instance", - "type": "string" - } - } - }, - "requestParameters": { - "description": "User parameter object", - "type": "object", - "properties": { - "subscriptionServiceType": { - "description": "Type of service subscription", - "type": "string" - } + "description": "Information about the target project name" + }, + "owningEntity": { + "type": "object", + "properties": { + "owningEntityId": { + "type": "string", + "description": "Id of the owning Entity" + }, + "owningEntityName": { + "type": "string", + "description": "Name of the owning Entity" + } + }, + "description": "Object describes the entity details" } }, - "subscriberInfo": { - "description": "Subscriber id information", - "type": "object", - "properties": { - "globalSubscriberId": { - "description": "Id of the subscriber sending the request", - "type": "string" + "description": "This describes the request body of PNF custom workflow execution" + }, + "CreateServiceInstanceParamaters": { + "type": "object", + "properties": { + "requestDetails": { + "type": "object", + "description": "Contains data associated with a request", + "properties": { + "requestParameters": { + "type": "object", + "description": "Contains all the parameters, associated with this request", + "properties": { + "subscriptionServiceType": { + "type": "string", + "description": "Type of service subscriptions of customer resource" + }, + "userParams": { + "type": "array", + "description": "Array of data that contains information about Service", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CreateServiceInstParamsUserParamsHoming" + }, + { + "$ref": "#/components/schemas/CreateServiceInstParamsUserParamsService" + } + ] + } + }, + "aLaCarte": { + "type": "boolean", + "description": "Enable “A La Carte” mode. In this mode, the user creates and submits operations for each object to be created." + }, + "usePreload": { + "type": "boolean", + "description": "Special value required to use additional Policy settings" + } + } + }, + "modelInfo": { + "type": "object", + "description": "Contains information about the currently used Service Model model", + "properties": { + "modelInvariantId": { + "type": "string", + "description": "Unique identifier corresponding to the main definition of a model in SDC" + }, + "modelType": { + "type": "string", + "description": "Type of service model, created in SDC" + }, + "modelName": { + "type": "string", + "description": "Name of the model, which can change from version to version." + }, + "modelVersion": { + "type": "string", + "description": "Unique identifier corresponding to one version of a model in SDC" + }, + "modelVersionId": { + "type": "string", + "description": "The SDC model version for this resource or service model." + }, + "modelUuid": { + "type": "string", + "description": "Unique identifier corresponding to the main definition of a model in SDC" + }, + "modelInvariantUuid": { + "type": "string", + "description": "Unique identifier corresponding to the main definition of a model in SDC" + } + } + }, + "requestInfo": { + "type": "object", + "description": "Represents some information for the request", + "properties": { + "productFamilyId": { + "type": "string", + "description": "SDC catalog service type" + }, + "source": { + "type": "string", + "description": "Determines only the source from whom the request came" + }, + "instanceName": { + "type": "string", + "description": "Defines the name of the instance to be created" + }, + "suppressRollback": { + "type": "boolean", + "description": "If false – the rollback process will not start if something goes wrong in execution BB. If true - QueryRainyDayTable task will start and make querying policy in table rainy_day_handler_macro" + }, + "requestorId": { + "type": "string", + "description": "User Id or Application Id, initiating the Assessment" + } + } + }, + "subscriberInfo": { + "type": "object", + "description": "Represents the object that groups service instances used by a customer", + "properties": { + "globalSubscriberId": { + "type": "string", + "description": "Global Subscriber Id used across ONAP to uniquely identify subscriber." + } + } + }, + "project": { + "type": "object", + "description": "Represents the project, which will own the service instance", + "properties": { + "projectName": { + "type": "string", + "description": "Name of the project deploying a service" + } + } + }, + "owningEntity": { + "type": "object", + "description": "Represents the entity, which will own the service instance", + "properties": { + "owningEntityId": { + "type": "string", + "description": "UUID of an owning entity" + }, + "owningEntityName": { + "type": "string", + "description": "Owning entity name" + } + } + } } } - }, - "project": { - "description": "Information about the target project name", - "type": "object", - "properties": { - "projectName":{ - "description": "Name of the target project", - "type": "string" + } + }, + "CreateServiceInstParamsUserParamsHoming": { + "allOf": [ + { + "type": "object", + "properties": { + "Homing_Solution": { + "type": "string", + "description": "Switches on an optimization service to deploy services automatically across multiple sites and multiple clouds" + } } } - }, - "owningEntity": { - "description": "Object describes the entity details", - "type": "object", - "properties": { - "owningEntityId": { - "description": "Id of the owning Entity", - "type": "string" - }, - "owningEntityName": { - "description": "Name of the owning Entity", - "type": "string" + ] + }, + "CreateServiceInstParamsUserParamsService": { + "allOf": [ + { + "type": "object", + "properties": { + "service": { + "type": "object", + "description": "Includes information about all created instances", + "properties": { + "instanceParams": { + "type": "array", + "description": "Includes a set of specific parameters", + "items": { + "type": "object", + "properties": {} + } + }, + "instanceName": { + "type": "string", + "description": "Defines the name of the instance to be created" + }, + "resources": { + "type": "object", + "properties": { + "vnfs": { + "type": "array", + "description": "Contains information about VNF parameters", + "items": { + "type": "object", + "properties": { + "modelInfo": { + "type": "object", + "description": "Contains information about the currently used Service Model model", + "properties": { + "modelInvariantId": { + "type": "string", + "description": "Unique identifier corresponding to the main definition of a model in SDC" + }, + "modelType": { + "type": "string", + "description": "Type of Service Model, created in SDC" + }, + "modelName": { + "type": "string", + "description": "Name of the model, which can change from version to version." + }, + "modelVersion": { + "type": "string", + "description": "Unique identifier corresponding to one version of a model in SDC" + }, + "modelVersionId": { + "type": "string", + "description": "The SDC model version for this resource or service model." + }, + "modelUuid": { + "type": "string", + "description": "Unique identifier corresponding to the main definition of a model in SDC" + }, + "modelInvariantUuid": { + "type": "string", + "description": "Unique identifier corresponding to the main definition of a model in SDC" + } + } + }, + "cloudConfiguration": { + "type": "object", + "properties": { + "cloudOwner": { + "type": "string", + "description": "Identifies the vendor and cloud name. First part of composite key should be formatted as vendor-cloudname" + }, + "lcpCloudRegionId": { + "type": "string", + "description": "Cloud-owner defined type indicator (Openstack region)" + }, + "tenantId": { + "type": "string", + "description": "Unique id relative to the cloud-region." + } + } + }, + "platform": { + "type": "object", + "description": "Represents the platform, on which the VNFs/CNFs will run", + "properties": { + "platformName": { + "type": "string", + "description": "Name of the platform" + } + } + }, + "lineOfBusiness": { + "type": "object", + "description": "Represents the business line, owns the VNFs/CNFs instances", + "properties": { + "lineOfBusinessName": { + "type": "string", + "description": "Name of the line-of-business (product)" + } + } + }, + "productFamilyId": { + "type": "string", + "description": "Define SDC catalog service type" + }, + "instanceName": { + "type": "string", + "description": "Defines the name of the instance to be created" + }, + "instanceParams": { + "type": "array", + "description": "Includes a set of specific parameters of instance", + "items": { + "type": "object", + "properties": {} + } + }, + "vfModules": { + "type": "array", + "description": "Сontains a set of parameters of VF Modules", + "items": { + "type": "object", + "properties": { + "modelInfo": { + "type": "object", + "description": "Contains information about the currently used Service Model model", + "properties": { + "modelInvariantId": { + "type": "string", + "description": "Unique identifier corresponding to the main definition of a model in SDC" + }, + "modelType": { + "type": "string", + "description": "Type of service model, created in SDC" + }, + "modelName": { + "type": "string", + "description": "Name of the model, which can change from version to version." + }, + "modelVersion": { + "type": "string", + "description": "Unique identifier corresponding to one version of a model in SDC" + }, + "modelVersionId": { + "type": "string", + "description": "The SDC model version for this resource or service model." + }, + "modelUuid": { + "type": "string", + "description": "Unique identifier corresponding to the main definition of a model in SDC" + }, + "modelInvariantUuid": { + "type": "string", + "description": "Unique identifier corresponding to the main definition of a model in SDC" + } + } + }, + "instanceName": { + "type": "string", + "description": "Defines the name of the instance to be created" + }, + "instanceParams": { + "type": "array", + "description": "Includes a set of specific parameters", + "items": { + "type": "object", + "properties": {} + } + } + } + } + } + } + } + } + } + }, + "modelInfo": { + "type": "object", + "description": "Contains information about the currently used Service Model model", + "properties": { + "modelName": { + "type": "string", + "description": "Name of the model, which can change from version to version." + }, + "modelVersionId": { + "type": "string", + "description": "Unique identifier corresponding to one version of a model in SDC" + }, + "modelInvariantUuid": { + "type": "string", + "description": "Unique identifier corresponding to the main definition of a model in SDC" + }, + "modelVersion": { + "type": "string", + "description": "The SDC model version for this resource or service model." + }, + "modelCustomizationId": { + "type": "string", + "description": "Unique generated identifier of a model in SDC" + } + } + } + } + } } } - } - + ] } } } diff --git a/docs/api/swagger/swagger.yaml b/docs/api/swagger/swagger.yaml index 585a4f4ac0..166ad067de 100644 --- a/docs/api/swagger/swagger.yaml +++ b/docs/api/swagger/swagger.yaml @@ -1,7 +1,9 @@ -swagger: '2.0' +openapi: 3.0.1 info: - version: 3.1.2 title: SO Guilin APIs + version: 3.1.2 +servers: + - url: / tags: - name: e2eServiceInstances - name: Onap3gppServiceInstances @@ -16,2269 +18,2897 @@ tags: - name: onapsoinframodelDistributions - name: onapsoinfraworkflowSpecifications - name: onapsoinfrainstanceManagement -schemes: - - http paths: - '/onap/so/infra/e2eServiceInstances/{version}': + /onap/so/infra/e2eServiceInstances/{version}: post: tags: - e2eServiceInstances summary: Create an E2E Service Instance on a version provided - description: '' operationId: createE2EServiceInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][3-5]' + schema: + pattern: '[vV][3-5]' + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/e2eServiceInstances/{version}/{serviceId}': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/e2eServiceInstances/{version}/{serviceId}: put: tags: - e2eServiceInstances summary: Update an E2E Service Instance on a version provided and serviceId - description: '' operationId: updateE2EServiceInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][3-5]' + schema: + pattern: '[vV][3-5]' + type: string - name: serviceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation + content: {} + x-codegen-request-body-name: body delete: tags: - e2eServiceInstances summary: Delete E2E Service Instance on a specified version and serviceId - description: '' operationId: deleteE2EServiceInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][3-5]' + schema: + pattern: '[vV][3-5]' + type: string - name: serviceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/e2eServiceInstances/{version}/{serviceId}/{operationType}': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/e2eServiceInstances/{version}/{serviceId}/{operationType}: post: tags: - e2eServiceInstances summary: >- Activate/Deactivate 5G slice Service on a specified version and serviceId - description: '' operationId: activateE2EServiceInstances - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][3-5]' + schema: + pattern: '[vV][3-5]' + type: string - name: serviceId in: path required: true - type: string + schema: + type: string - name: operationType in: path required: true - type: string - pattern: activate/deactivate + schema: + pattern: activate/deactivate + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/e2eServiceInstances/{version}/{serviceId}/operations/{operationId}': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/e2eServiceInstances/{version}/{serviceId}/operations/{operationId}: get: tags: - e2eServiceInstances summary: Find e2eServiceInstances Requests for a given serviceId and operationId - description: '' operationId: getE2EServiceInstances - produces: - - application/json parameters: - name: serviceId in: path required: true - type: string + schema: + type: string - name: version in: path required: true - type: string - pattern: '[vV][3-5]' + schema: + pattern: '[vV][3-5]' + type: string - name: operationId in: path required: true - type: string + schema: + type: string responses: default: description: successful operation - '/onap/so/infra/e2eServiceInstances/{version}/{serviceId}/scale': + content: {} + /onap/so/infra/e2eServiceInstances/{version}/{serviceId}/scale: post: tags: - e2eServiceInstances summary: Scale E2E Service Instance on a specified version - description: '' operationId: scaleE2EServiceInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][3-5]' + schema: + pattern: '[vV][3-5]' + type: string - name: serviceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/e2eServiceInstances/{version}/{serviceId}/modeldifferences': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/e2eServiceInstances/{version}/{serviceId}/modeldifferences: post: tags: - e2eServiceInstances summary: >- Find added and deleted resources of target model for the e2eserviceInstance on a given serviceId - description: '' operationId: compareModelwithTargetVersion - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: serviceId in: path required: true - type: string + schema: + type: string - name: version in: path required: true - type: string - pattern: '[vV][3-5]' + schema: + pattern: '[vV][3-5]' + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/3gppservices/{version}/allocate': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/3gppservices/{version}/allocate: post: tags: - Onap3gppServiceInstances summary: Create a 3GPP Service Instance on a version provided - description: '' operationId: allocate3gppService - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: true - schema: - $ref: '#/definitions/Allocate3gppService' - name: version in: path required: true - type: string - pattern: '[vV][1]' + schema: + pattern: '[vV][1]' + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Allocate3gppService' + required: true responses: default: description: successful operation - schema: - $ref: '#/definitions/3gppServiceResponse' - '/onap/so/infra/3gppservices/{version}/deAllocate': + content: + application/json: + schema: + $ref: '#/components/schemas/3gppServiceResponse' + x-codegen-request-body-name: body + /onap/so/infra/3gppservices/{version}/deAllocate: delete: tags: - Onap3gppServiceInstances summary: Terminate/Deallocate a 3GPP Service Instance on a version provided - description: '' operationId: deallocate3gppService - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: true - schema: - $ref: '#/definitions/DeAllocate3gppService' - name: version in: path required: true - type: string - pattern: '[vV][1]' + schema: + pattern: '[vV][1]' + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DeAllocate3gppService' + required: true responses: default: description: successful operation - schema: - $ref: '#/definitions/3gppServiceResponse' - '/onap/so/infra/3gppservices/{version}/modify': + content: + application/json: + schema: + $ref: '#/components/schemas/3gppServiceResponse' + x-codegen-request-body-name: body + /onap/so/infra/3gppservices/{version}/modify: put: tags: - Onap3gppServiceInstances summary: Modify a 3GPP Service Instance on a version provided - description: '' operationId: modify3gppService - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: true - schema: - $ref: '#/definitions/Modify3gppService' - name: version in: path required: true - type: string - pattern: '[vV][1]' + schema: + pattern: '[vV][1]' + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Modify3gppService' + required: true responses: default: description: successful operation - schema: - $ref: '#/definitions/3gppServiceResponse' - '/onap/so/infra/3gppservices/{version}/activate': + content: + application/json: + schema: + $ref: '#/components/schemas/3gppServiceResponse' + x-codegen-request-body-name: body + /onap/so/infra/3gppservices/{version}/activate: post: tags: - Onap3gppServiceInstances summary: Activate a 3GPP Service Instance on a version provided - description: '' operationId: activate3gppService - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: true - schema: - $ref: '#/definitions/3gppServiceActivation' - name: version in: path required: true - type: string - pattern: '[vV][1]' + schema: + pattern: '[vV][1]' + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/3gppServiceActivation' + required: true responses: default: description: successful operation - schema: - $ref: '#/definitions/3gppServiceResponse' - '/onap/so/infra/3gppservices/{version}/deActivate': + content: + application/json: + schema: + $ref: '#/components/schemas/3gppServiceResponse' + x-codegen-request-body-name: body + /onap/so/infra/3gppservices/{version}/deActivate: post: tags: - Onap3gppServiceInstances summary: Deactivate a 3GPP Service Instance on a version provided - description: '' operationId: deactivate3gppService - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: true - schema: - $ref: '#/definitions/3gppServiceActivation' - name: version in: path required: true - type: string - pattern: '[vV][1]' + schema: + pattern: '[vV][1]' + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/3gppServiceActivation' + required: true responses: default: description: successful operation - schema: - $ref: '#/definitions/3gppServiceResponse' - '/onap/so/infra/3gppservices/{version}/subnetCapabilityQuery': + content: + application/json: + schema: + $ref: '#/components/schemas/3gppServiceResponse' + x-codegen-request-body-name: body + /onap/so/infra/3gppservices/{version}/subnetCapabilityQuery: get: tags: - Onap3gppServiceInstances summary: Provides subnet capability based on subnet types - description: '' operationId: querySubnetCapability - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: true - schema: - $ref: '#/definitions/QuerySubnetCapability' - name: version in: path required: true - type: string - pattern: '[vV][1]' + schema: + pattern: '[vV][1]' + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/QuerySubnetCapability' + required: true responses: default: description: successful operation with capabilities for the queried subnetTypes - schema: - type: object + content: + application/json: + schema: + type: object + x-codegen-request-body-name: body /globalhealthcheck: get: tags: - globalhealthcheck summary: Performing global health check - description: '' operationId: globalHealthcheck - produces: - - text/html parameters: - name: enableBpmn in: query - required: false - type: boolean - default: true + schema: + type: boolean + default: true responses: default: description: successful operation + content: {} /nodehealthcheck: get: tags: - nodehealthcheck summary: Performing node health check - description: '' operationId: nodeHealthcheck - produces: - - text/html - parameters: [] responses: default: description: successful operation - '/onap/so/infra/orchestrationRequests/{version}': + content: {} + /onap/so/infra/orchestrationRequests/{version}: get: tags: - onapsoinfraorchestrationRequests summary: Find Orchestrated Requests for a URI Information - description: '' operationId: getOrchestrationRequest - produces: - - application/json parameters: - name: version in: path required: true - type: string - pattern: '[vV][4-7]' + schema: + pattern: '[vV][4-7]' + type: string responses: default: description: successful operation - '/onap/so/infra/orchestrationRequests/{version}/{requestId}': + content: {} + /onap/so/infra/orchestrationRequests/{version}/{requestId}: get: tags: - onapsoinfraorchestrationRequests summary: Find Orchestrated Requests for a given requestId - description: '' operationId: getOrchestrationRequestForReqId - produces: - - application/json parameters: - name: requestId in: path required: true - type: string + schema: + type: string - name: version in: path required: true - type: string - pattern: '[vV][4-7]' + schema: + pattern: '[vV][4-7]' + type: string responses: default: description: successful operation - '/onap/so/infra/orchestrationRequests/{version}/{requestId}/unlock': + content: {} + /onap/so/infra/orchestrationRequests/{version}/{requestId}/unlock: post: tags: - onapsoinfraorchestrationRequests summary: Unlock Orchestrated Requests for a given requestId - description: '' operationId: unlockOrchestrationRequest - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: requestId in: path required: true - type: string + schema: + type: string - name: version in: path required: true - type: string - pattern: '[vV][4-7]' + schema: + pattern: '[vV][4-7]' + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/orchestrationTasks/{version}': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/orchestrationTasks/{version}: get: tags: - onapsoinfraorchestrationTasks summary: Get all orchestrationTasks - description: '' operationId: getAllOrchestrationTasks - produces: - - application/json parameters: - name: version in: path required: true - type: string - pattern: '[vV][4-7]' + schema: + pattern: '[vV][4-7]' + type: string responses: default: description: successful operation + content: {} post: tags: - onapsoinfraorchestrationTasks summary: Create an orchestrationTask - description: '' operationId: createOrchestrationTask - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][4-7]' + schema: + pattern: '[vV][4-7]' + type: string + requestBody: + content: + '*/*': + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/orchestrationTasks/{version}/{taskId}': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/orchestrationTasks/{version}/{taskId}: get: tags: - onapsoinfraorchestrationTasks summary: Get orchestrationTask for a given taskId - description: '' operationId: getOrchestrationTask - produces: - - application/json parameters: - name: taskId in: path required: true - type: string + schema: + type: string - name: version in: path required: true - type: string - pattern: '[vV][4-7]' + schema: + pattern: '[vV][4-7]' + type: string responses: default: description: successful operation + content: {} put: tags: - onapsoinfraorchestrationTasks summary: update orchestrationTask for a given taskId - description: '' operationId: updateOrchestrationTask - produces: - - application/json parameters: - name: taskId in: path required: true - type: string + schema: + type: string - name: version in: path required: true - type: string - pattern: '[vV][4-7]' - - in: body - name: body - required: false schema: + pattern: '[vV][4-7]' type: string + requestBody: + content: + '*/*': + schema: + type: string + required: false responses: default: description: successful operation + content: {} + x-codegen-request-body-name: body delete: tags: - onapsoinfraorchestrationTasks summary: delete orchestrationTask for a given taskId - description: '' operationId: deleteOrchestrationTask - produces: - - application/json parameters: - name: taskId in: path required: true - type: string + schema: + type: string - name: version in: path required: true - type: string - pattern: '[vV][4-7]' + schema: + pattern: '[vV][4-7]' + type: string responses: default: description: successful operation - '/onap/so/infra/orchestrationTasks/{version}/{taskId}/commit': + content: {} + /onap/so/infra/orchestrationTasks/{version}/{taskId}/commit: post: tags: - onapsoinfraorchestrationTasks summary: commit orchestrationTask for a given taskId - description: '' operationId: commitOrchestrationTask - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: taskId in: path required: true - type: string + schema: + type: string - name: version in: path required: true - type: string - pattern: '[vV][4-7]' + schema: + pattern: '[vV][4-7]' + type: string + requestBody: + content: + '*/*': + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/orchestrationTasks/{version}/{taskId}/abort': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/orchestrationTasks/{version}/{taskId}/abort: post: tags: - onapsoinfraorchestrationTasks summary: abort orchestrationTask for a given taskId - description: '' operationId: abortOrchestrationTask - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: taskId in: path required: true - type: string + schema: + type: string - name: version in: path required: true - type: string - pattern: '[vV][4-7]' + schema: + pattern: '[vV][4-7]' + type: string + requestBody: + content: + '*/*': + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/deactivateAndCloudDelete': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/deactivateAndCloudDelete: post: tags: - onapsoinfraserviceInstantiation summary: Deactivate and Cloud Delete VfModule instance - description: '' operationId: deactivateAndCloudDeleteVfModuleInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][7]' + schema: + pattern: '[vV][7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: vnfInstanceId in: path required: true - type: string + schema: + type: string - name: vfmoduleInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/enablePort': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/enablePort: post: tags: - onapsoinfraserviceInstantiation summary: Enable Port Mirroring - description: '' operationId: enablePort - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: configurationInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/disablePort': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/disablePort: post: tags: - onapsoinfraserviceInstantiation summary: Disable Port Mirroring - description: '' operationId: disablePort - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: configurationInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/activate': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/activate: post: tags: - onapsoinfraserviceInstantiation summary: Activate Port Mirroring - description: '' operationId: activatePort - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: configurationInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/deactivate': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}/deactivate: post: tags: - onapsoinfraserviceInstantiation summary: Deactivate Port Mirroring - description: '' operationId: deactivatePort - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: configurationInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/addRelationships': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/addRelationships: post: tags: - onapsoinfraserviceInstantiation summary: Add Relationships to a Service Instance - description: '' operationId: addRelationships - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][6-7]' + schema: + pattern: '[vV][6-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/scaleOut': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/scaleOut: post: tags: - onapsoinfraserviceInstantiation summary: VF Auto Scale Out - description: '' operationId: scaleOutVfModule - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][7]' + schema: + pattern: '[vV][7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: vnfInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/inPlaceSoftwareUpdate': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/inPlaceSoftwareUpdate: post: tags: - onapsoinfraserviceInstantiation summary: Perform VNF software update - description: '' operationId: inPlaceSoftwareUpdate - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][6-7]' + schema: + pattern: '[vV][6-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: vnfInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/applyUpdatedConfig': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/applyUpdatedConfig: post: tags: - onapsoinfraserviceInstantiation summary: Apply updated configuration - description: '' operationId: applyUpdatedConfig - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][6-7]' + schema: + pattern: '[vV][6-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: vnfInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances: post: tags: - - onapsoinfraserviceInstantiation + - SO service Instantiation summary: Create a Service Instance on a version provided - description: '' operationId: createServiceInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' - responses: - default: - description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/activate': + schema: + pattern: '[vV][5-7]' + type: string + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/CreateServiceInstanceParamaters' + examples: + cnf: + summary: CNF + value: + requestDetails: + modelInfo: + modelInvariantId: 0b1f4362-fed9-45fc-a2e1-6fd3e52f4c1a + modelType: service + modelName: service_test_1 + modelVersion: "2.0" + modelVersionId: beb1259e-dad8-4ee0-a40e-1af20f775d54 + modelUuid: beb1259e-dad8-4ee0-a40e-1af20f775d54 + modelInvariantUuid: 0b1f4362-fed9-45fc-a2e1-6fd3e52f4c1a + subscriberInfo: + globalSubscriberId: basicnf-customer + requestInfo: + suppressRollback: false + productFamilyId : bb0838ec-2ef7-4382-820f-0d34efdb1ccd + requestorId: Portal + instanceName: ORAN_CU_3 + source: VID + project: + projectName: Project-5GCustomer + owningEntity: + owningEntityId: 67f2e84c-734d-4e90-a1e4-d2ffa2e75849 + owningEntityName: OE-5GCustomer + requestParameters: + subscriptionServiceType: 5G + aLaCarte: false + usePreload: false + userParams: + [ + {Homing_Solution: false}, + { + service: + { + instanceParams: [{}], + instanceName: service_test_1, + resources: + { + vnfs: + [ + { + modelInfo: + { + modelName: cu_sim_1901, + modelVersionId: 40f11fb2-931d-408d-a949-99e9289d3c02, + modelInvariantUuid: f6c202d8-94bd-496e-878e-448da0ed0a6a, + modelVersion: "1.0", + modelCustomizationId: 5a2eec30-80c5-47cc-9117-3d8659c38202, + modelInstanceName: cu_sim_2022 0 + }, + cloudConfiguration: + { + cloudOwner: k8scloudowner4, + lcpCloudRegionId: k8sregionfour, + tenantId: 6bbd2981b210461dbc8fe846df1a7808 + }, + platform: + { + platformName: test + }, + lineOfBusiness: + { + lineOfBusinessName: LOB-5G + }, + productFamilyId: productFamilyId123, + instanceName: CUCP_1, + instanceParams: [{}], + vfModules: + [ + { + modelInfo: + { + modelName: CuSim1901..helm_cucp..module-1, + modelVersionId: 9b7723ff-25ac-44af-a7ac-9cfbf2d4285f, + modelInvariantUuid: 63af164d-9276-4e08-98fb-059d1c5b80e4, + modelVersion: 1, + modelCustomizationId: b7a0bd1d-4832-4ad3-9199-6e1eab543a45 + }, + instanceName: module-1, + instanceParams: [{}] + } + ] + } + ] + }, + modelInfo: + { + modelVersion: "2.0", + modelVersionId: "77bea973-570b-4f73-9049-87c37d3de8ca", + modelInvariantId: "b7a3f00b-8fb2-4791-b0ff-71d83f97ab0b", + modelName: "service_model", + modelType: "service" + } + } + } + ] + pnf: + summary: PNF + value: + requestDetails: + modelInfo: + modelInvariantId: 040a21d5-b208-490b-9c69-c12ae2b2b958 + modelName: ORAN_RU_SIM_Service + modelType: service + modelVersion: '2.0' + modelVersionId: 2f40ddbd-0acc-4e59-8fb3-77a6f84ae28c + owningEntity: + owningEntityId: 3804b4ac-4d9c-482a-ad0b-5806f8849907 + owningEntityName: oran_owner + project: + projectName: oran_project + requestInfo: + instanceName: ORAN_RU_SIM + productFamilyId: oran-service + requestorId: PORTAL + source: PORTAL + suppressRollback: false + requestParameters: + aLaCarte: false + subscriptionServiceType: oran_service + userParams: + - Homing_Solution: none + - service: + instanceName: ORAN_RU_SIM_Service_1 + instanceParams: [] + modelInfo: + modelInvariantId: 040a21d5-b208-490b-9c69-c12ae2b2b958 + modelName: ORAN_RU_SIM_Service + modelType: service + modelVersion: '2.0' + modelVersionId: 2f40ddbd-0acc-4e59-8fb3-77a6f84ae28c + resources: + pnfs: + - instanceName: ORAN_RU_PNF_1 + instanceParams: [] + lineOfBusiness: + lineOfBusinessName: oran_lob + modelInfo: + modelCustomizationId: 5e3a18ce-8bbd-40fc-a197-becca92ac05b + modelCustomizationName: ORAN_RU_PNF_1 + modelInstanceName: ORAN_RU_PNF_ORAN_RU_SIM_Service + modelInvariantId: 486f38e8-1710-4875-b732-a8b3301a7786 + modelName: ORAN_RU_PNF + modelType: pnf + modelVersion: '1.0' + modelVersionId: e95310e1-e1d2-471f-aa26-d24849a7e61a + platform: + platformName: oran_platform + productFamilyId: oran-service + vnfs: [] + subscriberInfo: + globalSubscriberId: ORANTownCustomer + Composed service in two clouds: + summary: Composed service in two clouds + value: + requestDetails: + modelInfo: + modelInvariantId: 0592b699-3f7b-424f-857b-d956f15c9447 + modelInvariantUuid: 0592b699-3f7b-424f-857b-d956f15c9447 + modelName: parent_svc_2912 + modelType: service + modelUuid: 1c889525-46c5-4b22-8f26-17913dd3172a + modelVersion: '2.0' + modelVersionId: 1c889525-46c5-4b22-8f26-17913dd3172a + owningEntity: + owningEntityId: 67f2e84c-734d-4e90-a1e4-d2ffa2e75849 + owningEntityName: OE-5GCustomer + project: + projectName: Project-5GCustomer + requestInfo: + instanceName: parent_two_k8s + productFamilyId: productFamilyId123 + requestorId: a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb + source: Postman + suppressRollback: false + requestParameters: + aLaCarte: false + subscriptionServiceType: 5G + usePreload: false + userParams: + - Homing_Solution: none + - service: + instanceName: parent_two_k8s + instanceParams: + - {} + modelInfo: + modelInvariantId: 0592b699-3f7b-424f-857b-d956f15c9447 + modelName: parent_svc_2912 + modelType: service + modelVersion: '2.0' + modelVersionId: 1c889525-46c5-4b22-8f26-17913dd3172a + resources: + services: + - instanceName: childsvc_1201_01 + instanceParams: + - {} + modelInfo: + modelInvariantId: 19d8f134-8bdb-46ed-84a9-046c9314d9a9 + modelName: childsvc_2912 + modelType: service + modelVersion: '2.0' + modelVersionId: b2ae12eb-3854-4405-a125-c63c16e6fa23 + resources: + vnfs: + - cloudConfiguration: + cloudOwner: k8scloudowner4 + lcpCloudRegionId: k8sregionfour + tenantId: 6bbd2981b210461dbc8fe846df1a7808 + instanceName: CUCP_1 + instanceParams: + - {} + lineOfBusiness: + lineOfBusinessName: LOB-5GCustomer + modelInfo: + modelCustomizationId: 26be9ecc-43b2-47e4-9666-915701b87cbc + modelInstanceName: CUCP_2912 0 + modelInvariantUuid: a3c9fa51-ff3c-4b6e-a1bd-73eb1ffb06c0 + modelName: CUCP_2912 + modelVersion: '1.0' + modelVersionId: 4a7aa841-09a5-493b-a52f-26aaa1f62c20 + platform: + platformName: test + productFamilyId: productFamilyId123 + vfModules: + - instanceName: module-1 + instanceParams: + - {} + modelInfo: + modelCustomizationId: fe39f295-253c-41ef-b07c-607aec86ea52 + modelInvariantUuid: 051d1f8a-d5bd-4509-9457-0ef756dc5a33 + modelName: Cucp2912..helm_cucp..module-1 + modelVersion: '1' + modelVersionId: 3f70da13-e246-4abd-8fe5-90d3f8fbc212 + - instanceName: childsvc_1201_02 + instanceParams: + - {} + modelInfo: + modelInvariantId: 19d8f134-8bdb-46ed-84a9-046c9314d9a9 + modelName: childsvc_2912 + modelType: service + modelVersion: '2.0' + modelVersionId: b2ae12eb-3854-4405-a125-c63c16e6fa23 + resources: + vnfs: + - cloudConfiguration: + cloudOwner: k8scloudowner4 + lcpCloudRegionId: k8sregionone + tenantId: 3fd21203fd274e10a30f1fd4c355d80b + instanceName: CUCP_2 + instanceParams: + - {} + lineOfBusiness: + lineOfBusinessName: LOB-5GCustomer + modelInfo: + modelCustomizationId: 26be9ecc-43b2-47e4-9666-915701b87cbc + modelInstanceName: CUCP_2912 0 + modelInvariantUuid: a3c9fa51-ff3c-4b6e-a1bd-73eb1ffb06c0 + modelName: CUCP_2912 + modelVersion: '1.0' + modelVersionId: 4a7aa841-09a5-493b-a52f-26aaa1f62c20 + platform: + platformName: test + productFamilyId: productFamilyId123 + vfModules: + - instanceName: module-2 + instanceParams: + - {} + modelInfo: + modelCustomizationId: fe39f295-253c-41ef-b07c-607aec86ea52 + modelInvariantUuid: 051d1f8a-d5bd-4509-9457-0ef756dc5a33 + modelName: Cucp2912..helm_cucp..module-1 + modelVersion: '1' + modelVersionId: 3f70da13-e246-4abd-8fe5-90d3f8fbc212 + subscriberInfo: + globalSubscriberId: 5GCustomer + + required: false + responses: + default: + description: successful operation + content: {} + x-codegen-request-body-name: requestBody + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/activate: post: tags: - onapsoinfraserviceInstantiation summary: Activate provided Service Instance - description: '' operationId: activateServiceInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/deactivate': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/deactivate: post: tags: - onapsoinfraserviceInstantiation summary: Deactivate provided Service Instance - description: '' operationId: deactivateServiceInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}: delete: tags: - onapsoinfraserviceInstantiation summary: Delete provided Service Instance - description: '' operationId: deleteServiceInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/assign': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/assign: post: tags: - onapsoinfraserviceInstantiation summary: Assign Service Instance - description: '' operationId: assignServiceInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][7]' + schema: + pattern: '[vV][7]' + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/unassign': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/unassign: post: tags: - onapsoinfraserviceInstantiation summary: Unassign Service Instance - description: '' operationId: unassignServiceInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][7]' + schema: + pattern: '[vV][7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations: post: tags: - onapsoinfraserviceInstantiation summary: Create Port Mirroring Configuration - description: '' operationId: createPortConfiguration - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/configurations/{configurationInstanceId}: delete: tags: - onapsoinfraserviceInstantiation summary: Delete provided Port - description: '' operationId: deletePortConfiguration - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: configurationInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/removeRelationships': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/removeRelationships: post: tags: - onapsoinfraserviceInstantiation summary: Remove Relationships from Service Instance - description: '' operationId: removeRelationships - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][6-7]' + schema: + pattern: '[vV][6-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs: post: tags: - onapsoinfraserviceInstantiation summary: Create VNF on a specified version and serviceInstance - description: '' operationId: createVnfInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/replace': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/replace: post: tags: - onapsoinfraserviceInstantiation summary: Replace provided VNF instance - description: '' operationId: replaceVnfInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: vnfInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}: put: tags: - onapsoinfraserviceInstantiation - summary: 'Update VNF on a specified version, serviceInstance and vnfInstance' - description: '' + summary: Update VNF on a specified version, serviceInstance and vnfInstance operationId: updateVnfInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: vnfInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation + content: {} + x-codegen-request-body-name: body delete: tags: - onapsoinfraserviceInstantiation summary: Delete provided VNF instance - description: '' operationId: deleteVnfInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: vnfInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules: post: tags: - onapsoinfraserviceInstantiation - summary: 'Create VfModule on a specified version, serviceInstance and vnfInstance' - description: '' + summary: Create VfModule on a specified version, serviceInstance and vnfInstance operationId: createVfModuleInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: vnfInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/replace': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}/replace: post: tags: - onapsoinfraserviceInstantiation - summary: 'Create VfModule on a specified version, serviceInstance and vnfInstance' - description: '' + summary: Create VfModule on a specified version, serviceInstance and vnfInstance operationId: replaceVfModuleInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: vnfInstanceId in: path required: true - type: string + schema: + type: string - name: vfmoduleInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleInstanceId}: put: tags: - onapsoinfraserviceInstantiation summary: >- Update VfModule on a specified version, serviceInstance, vnfInstance and vfModule - description: '' operationId: updateVfModuleInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: vnfInstanceId in: path required: true - type: string + schema: + type: string - name: vfmoduleInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation + content: {} + x-codegen-request-body-name: body delete: tags: - onapsoinfraserviceInstantiation summary: Delete provided VfModule instance - description: '' operationId: deleteVfModuleInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: vnfInstanceId in: path required: true - type: string + schema: + type: string - name: vfmoduleInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups: post: tags: - onapsoinfraserviceInstantiation - summary: 'Create VolumeGroup on a specified version, serviceInstance, vnfInstance' - description: '' + summary: Create VolumeGroup on a specified version, serviceInstance, vnfInstance operationId: createVolumeGroupInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: vnfInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volumeGroupInstanceId}: put: tags: - onapsoinfraserviceInstantiation summary: >- Update VolumeGroup on a specified version, serviceInstance, vnfInstance and volumeGroup - description: '' operationId: updateVolumeGroupInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: vnfInstanceId in: path required: true - type: string + schema: + type: string - name: volumeGroupInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation + content: {} + x-codegen-request-body-name: body delete: tags: - onapsoinfraserviceInstantiation summary: Delete provided VolumeGroup instance - description: '' operationId: deleteVolumeGroupInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: vnfInstanceId in: path required: true - type: string + schema: + type: string - name: volumeGroupInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/networks': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/networks: post: tags: - onapsoinfraserviceInstantiation summary: 'Create NetworkInstance on a specified version and serviceInstance ' - description: '' operationId: createNetworkInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/serviceInstantiation/{version}/serviceInstances/{serviceInstanceId}/networks/{networkInstanceId}: put: tags: - onapsoinfraserviceInstantiation summary: >- Update VolumeGroup on a specified version, serviceInstance, networkInstance - description: '' operationId: updateNetworkInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: networkInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation + content: {} + x-codegen-request-body-name: body delete: tags: - onapsoinfraserviceInstantiation summary: Delete provided Network instance - description: '' operationId: deleteNetworkInstance - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][5-7]' + schema: + pattern: '[vV][5-7]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: networkInstanceId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/tasks/{version}': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/tasks/{version}: get: tags: - onapsoinfratasks summary: Finds Manual Tasks - description: '' operationId: queryFilters parameters: - name: taskId in: query - required: false - type: string + schema: + type: string - name: originalRequestId in: query - required: false - type: string + schema: + type: string - name: subscriptionServiceType in: query - required: false - type: string + schema: + type: string - name: nfRole in: query - required: false - type: string + schema: + type: string - name: buildingBlockName in: query - required: false - type: string + schema: + type: string - name: originalRequestDate in: query - required: false - type: string + schema: + type: string - name: originalRequestorId in: query - required: false - type: string + schema: + type: string - name: version in: path required: true - type: string - pattern: '[vV]1' + schema: + pattern: '[vV]1' + type: string responses: default: description: successful operation - '/onap/so/infra/cloudResources/{version}/operationalEnvironments': + content: {} + /onap/so/infra/cloudResources/{version}/operationalEnvironments: post: tags: - onapsoinfracloudResources summary: Create an Operational Environment - description: '' operationId: createOperationEnvironment - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][1]' + schema: + pattern: '[vV][1]' + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/cloudResources/{version}/operationalEnvironments/{operationalEnvironmentId}/activate': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/cloudResources/{version}/operationalEnvironments/{operationalEnvironmentId}/activate: post: tags: - onapsoinfracloudResources summary: Activate an Operational Environment - description: '' operationId: activateOperationEnvironment - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][1]' + schema: + pattern: '[vV][1]' + type: string - name: operationalEnvironmentId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/cloudResources/{version}/operationalEnvironments/{operationalEnvironmentId}/deactivate': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/cloudResources/{version}/operationalEnvironments/{operationalEnvironmentId}/deactivate: post: tags: - onapsoinfracloudResources summary: Deactivate an Operational Environment - description: '' operationId: deactivateOperationEnvironment - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][1]' + schema: + pattern: '[vV][1]' + type: string - name: operationalEnvironmentId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/cloudResourcesRequests/{version}/{requestId}/unlock': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/cloudResourcesRequests/{version}/{requestId}/unlock: post: tags: - onapsoinfracloudResourcesRequests summary: Unlock CloudOrchestration requests for a specified requestId - description: '' operationId: unlockOrchestrationRequestForReqId - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: requestId in: path required: true - type: string + schema: + type: string - name: version in: path required: true - type: string - pattern: '[vV][1]' + schema: + pattern: '[vV][1]' + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/cloudResourcesRequests/{version}': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/cloudResourcesRequests/{version}: get: tags: - onapsoinfracloudResourcesRequests summary: Get status of an Operational Environment based on filter criteria - description: '' operationId: getOperationEnvironmentStatusFilter - consumes: - - application/json - produces: - - application/json parameters: - name: version in: path required: true - type: string - pattern: '[vV][1]' + schema: + pattern: '[vV][1]' + type: string responses: default: description: successful operation - '/onap/so/infra/modelDistributions/{version}/distributions/{distributionId}': + content: {} + /onap/so/infra/modelDistributions/{version}/distributions/{distributionId}: post: tags: - onapsoinframodelDistributions summary: Update model distribution status - description: '' operationId: updateModelDistributionStatus - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - type: string - name: version in: path required: true - type: string - pattern: '[vV][1]' + schema: + pattern: '[vV][1]' + type: string - name: distributionId in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + type: string + required: false responses: default: description: successful operation - '/onap/so/infra/workflowSpecifications/{version}/workflows': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/workflowSpecifications/{version}/workflows: get: tags: - onapsoinfraworkflowSpecifications summary: Retrieve Workflow details based on the filter criteria - description: '' operationId: queryWorkflowSpecifications - consumes: - - application/json - produces: - - application/json parameters: - name: resourceTarget in: query - required: false - type: string + schema: + type: string - name: version in: path required: true - type: string - pattern: '[vV][1]' + schema: + pattern: '[vV][1]' + type: string responses: default: description: List of workflow specifications on successful operation - schema: - $ref: '#/definitions/RetrievingWorkflowResponse' - '/onap/so/infra/instanceManagement/{version}/serviceInstances/{serviceInstanceId}/workflows/{workflow_UUID}': + content: + application/json: + schema: + $ref: '#/components/schemas/RetrievingWorkflowResponse' + /onap/so/infra/instanceManagement/{version}/serviceInstances/{serviceInstanceId}/workflows/{workflow_UUID}: post: tags: - onapsoinfrainstanceManagement summary: Executing service level custom workflow - description: '' operationId: executeServiceLevelCustomWorkflow - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - $ref: '#/definitions/ServiceLevelWorkflowExecution' - name: version in: path required: true - type: string - pattern: '[vV][1]' + schema: + pattern: '[vV][1]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: workflow_UUID in: path required: true - type: string + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ServiceLevelWorkflowExecution' + required: false responses: default: description: successful operation - '/onap/so/infra/instanceManagement/{version}/serviceInstances/{serviceInstanceId}/pnfs/${pnfName}/workflows/${workflow_UUID}': + content: {} + x-codegen-request-body-name: body + /onap/so/infra/instanceManagement/{version}/serviceInstances/{serviceInstanceId}/pnfs/${pnfName}/workflows/${workflow_UUID}: post: tags: - onapsoinfrainstanceManagement summary: Executing download/activate custom workflow - description: '' operationId: executePNFCustomWorkflow - consumes: - - application/json - produces: - - application/json parameters: - - in: body - name: body - required: false - schema: - $ref: '#/definitions/PNFCustomWorkflowExecution' - name: version in: path required: true - type: string - pattern: '[vV][1]' + schema: + pattern: '[vV][1]' + type: string - name: serviceInstanceId in: path required: true - type: string + schema: + type: string - name: pnfName - in: path - required: true + in: path + required: true + schema: type: string - name: workflow_UUID in: path required: true - type: string - responses: - default: - description: successful operation -definitions: - Allocate3gppService: - description: This describes the request body for 3gpp service allocation - type: object - properties: - name: - description: Name of the service to allocate - type: string - modelInvariantUuid: - description: >- - Model Invariant UUID corresponding to the service. For E.g : NSST - Model invariant uuid in case of NSSI creation - type: string - modelUuid: - description: >- - Model UUID corresponding to the service. For E.g : NSST Model uuid in - case of NSSI creation - type: string - globalSubscriberId: - type: string - subscriptionServiceType: - description: 'Service type for the subscription. For E.G :5G' - type: string - networkType: - description: 'Network type. For E.G :AN/CN/TN' - type: string - additionalProperties: - description: Map of additional properties required for service allocation - type: object - DeAllocate3gppService: - description: This describes the request body for 3gpp service Termination/Deallocation - type: object - properties: - serviceInstanceID: - description: ID of the service to terminate - type: string - globalSubscriberId: - type: string - subscriptionServiceType: - description: 'Service type for the subscription. For E.G :5G' - type: string - networkType: - description: 'Network type. For E.G :AN/CN/TN' - type: string - additionalProperties: - description: Map of additional properties required for service deallocation - type: object - Modify3gppService: - description: This describes the request body for 3gpp service modification - type: object - properties: - name: - description: Name of the service to modify - type: string - serviceInstanceID: - description: ID of the service to modify - type: string - globalSubscriberId: - type: string - subscriptionServiceType: - description: 'Service type for the subscription. For E.G :5G' - type: string - networkType: - description: 'Network type. For E.G :AN/CN/TN' - type: string - additionalProperties: - description: Map of additional properties required for service modification - type: object - 3gppServiceActivation: - description: This describes the request body for 3gpp service activation/deactivation - type: object - properties: - serviceInstanceID: - description: ID of the service to be activated/deactivated - type: string - globalSubscriberId: - type: string - subscriptionServiceType: - description: 'Service type for the subscription. For E.G :5G' - type: string - networkType: - description: 'Network type. For E.G :AN/CN/TN' - type: string - additionalProperties: - description: >- - Map of additional properties required for service - activation/deactivation - type: object - QuerySubnetCapability: - description: This describes the subnet capabilities that can be queried - type: object - properties: - subnetTypes: - type: array - items: - $ref: '#/definitions/SubnetTypes' - SubnetTypes: - description: This describes allowed subnet types - type: string - enum: - - AN - - AN_NF - - CN - - TN_FH - - TN_MH - - TN_BH - 3gppServiceResponse: - description: This describes the response for 3gpp services - type: object - properties: - jobId: - description: Job ID to be used to identify the status of the job - type: string - status: - description: status of the job - type: string - statusDescription: - description: Description on status in case of erroneous response - type: object - RetrievingWorkflowResponse: - description: Response body of fetching workflows using resource target - type: object - properties: - workflowSpecificationList: - description: List of Workflow specification data - type: array - items: - $ref: '#/definitions/WorkflowSpecification' - WorkflowSpecification: - description: This describes workflow specification object - type: object - properties: - artifactInfo: - description: 'Attributes related to artifact information ' - type: object - properties: - artifactType: - description: Type of the artifact to be queried - type: string - artifactUuid: - description: UUID of the artifact - type: string - artifactName: - description: Name of the artifact - type: string - artifactVersion: - description: Artifact's Version - type: string - artifactDescription: - description: '' - type: string - workflowName: - description: Name of the workflow fetched for the resource type - type: string - operationName: - description: Mapped operation name of the corresponding workflow - type: string - workflowSource: - description: '' - type: string - workflowResourceTarget: - description: Type of Resource mapped against the workflow - type: string - ServiceLevelWorkflowExecution: - description: This describes the request body of service level custom workflow execution - type: object - properties: - requestInfo: - description: Request object contains source information - type: object - properties: - source: - description: Name of the sender - type: string - suppressRollback: - description: Enable/disable rollback suppression - type: boolean - requestorId: - description: Id of the sender - type: string - modelInfo: - description: Parameters related to the service model - type: object - properties: - modelType: - description: Type of the model to be executed - type: string - modelInvariantUuid: - description: Model invariant id corresponding to the service - type: string - modelUuid: - description: Model uuid corresponding to the service - type: string - modelVersionId: - description: Model version of the service instance - type: string - modelName: - description: Name of the service - type: string - modelVersion: - description: Version of the service instance - type: string - requestParameters: - description: User parameter object - type: object - properties: - subscriptionServiceType: - description: Type of service subscription - type: string - subscriberInfo: - description: Subscriber id information - type: object - properties: - globalSubscriberId: - description: Id of the subscriber sending the request - type: string - project: - description: Information about the target project name - type: object - properties: - projectName: - description: Name of the target project - type: string - owningEntity: - description: Object describes the entity details - type: object - properties: - owningEntityId: - description: Id of the owning Entity - type: string - owningEntityName: - description: Name of the owning Entity - type: string - PNFCustomWorkflowExecution: - description: This describes the request body of PNF custom workflow execution - type: object - properties: - requestInfo: - description: Request object contains source information - type: object - properties: - source: - description: Name of the sender - type: string - suppressRollback: - description: Enable/disable rollback suppression - type: boolean - requestorId: - description: Id of the sender - type: string - modelInfo: - description: Parameters related to the service model - type: object - properties: - modelType: - description: Type of the model to be executed - type: string - modelInvariantUuid: - description: Model invariant id corresponding to the service - type: string - modelUuid: - description: Model uuid corresponding to the service - type: string - modelVersionId: - description: Model version of the service instance - type: string - modelName: - description: Name of the service - type: string - modelVersion: - description: Version of the service instance - type: string - requestParameters: - description: User parameter object - type: object - properties: - subscriptionServiceType: - description: Type of service subscription - type: string - subscriberInfo: - description: Subscriber id information - type: object - properties: - globalSubscriberId: - description: Id of the subscriber sending the request - type: string - project: - description: Information about the target project name - type: object - properties: - projectName: - description: Name of the target project - type: string - owningEntity: - description: Object describes the entity details - type: object - properties: - owningEntityId: - description: Id of the owning Entity - type: string - owningEntityName: - description: Name of the owning Entity - type: string
\ No newline at end of file + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PNFCustomWorkflowExecution' + required: false + responses: + default: + description: successful operation + content: {} + x-codegen-request-body-name: body +components: + schemas: + Allocate3gppService: + type: object + properties: + name: + type: string + description: Name of the service to allocate + modelInvariantUuid: + type: string + description: >- + Model Invariant UUID corresponding to the service. For E.g : NSST + Model invariant uuid in case of NSSI creation + modelUuid: + type: string + description: >- + Model UUID corresponding to the service. For E.g : NSST Model uuid + in case of NSSI creation + globalSubscriberId: + type: string + subscriptionServiceType: + type: string + description: Service type for the subscription. For E.G :5G + networkType: + type: string + description: Network type. For E.G :AN/CN/TN + additionalProperties: + type: object + properties: {} + description: Map of additional properties required for service allocation + description: This describes the request body for 3gpp service allocation + DeAllocate3gppService: + type: object + properties: + serviceInstanceID: + type: string + description: ID of the service to terminate + globalSubscriberId: + type: string + subscriptionServiceType: + type: string + description: Service type for the subscription. For E.G :5G + networkType: + type: string + description: Network type. For E.G :AN/CN/TN + additionalProperties: + type: object + properties: {} + description: Map of additional properties required for service deallocation + description: >- + This describes the request body for 3gpp service + Termination/Deallocation + Modify3gppService: + type: object + properties: + name: + type: string + description: Name of the service to modify + serviceInstanceID: + type: string + description: ID of the service to modify + globalSubscriberId: + type: string + subscriptionServiceType: + type: string + description: Service type for the subscription. For E.G :5G + networkType: + type: string + description: Network type. For E.G :AN/CN/TN + additionalProperties: + type: object + properties: {} + description: Map of additional properties required for service modification + description: This describes the request body for 3gpp service modification + 3gppServiceActivation: + type: object + properties: + serviceInstanceID: + type: string + description: ID of the service to be activated/deactivated + globalSubscriberId: + type: string + subscriptionServiceType: + type: string + description: Service type for the subscription. For E.G :5G + networkType: + type: string + description: Network type. For E.G :AN/CN/TN + additionalProperties: + type: object + properties: {} + description: >- + Map of additional properties required for service + activation/deactivation + description: This describes the request body for 3gpp service activation/deactivation + QuerySubnetCapability: + type: object + properties: + subnetTypes: + type: array + items: + $ref: '#/components/schemas/SubnetTypes' + description: This describes the subnet capabilities that can be queried + SubnetTypes: + type: string + description: This describes allowed subnet types + enum: + - AN + - AN_NF + - CN + - TN_FH + - TN_MH + - TN_BH + 3gppServiceResponse: + type: object + properties: + jobId: + type: string + description: Job ID to be used to identify the status of the job + status: + type: string + description: status of the job + statusDescription: + type: object + properties: {} + description: Description on status in case of erroneous response + description: This describes the response for 3gpp services + RetrievingWorkflowResponse: + type: object + properties: + workflowSpecificationList: + type: array + description: List of Workflow specification data + items: + $ref: '#/components/schemas/WorkflowSpecification' + description: Response body of fetching workflows using resource target + WorkflowSpecification: + type: object + properties: + artifactInfo: + type: object + properties: + artifactType: + type: string + description: Type of the artifact to be queried + artifactUuid: + type: string + description: UUID of the artifact + artifactName: + type: string + description: Name of the artifact + artifactVersion: + type: string + description: Artifact's Version + artifactDescription: + type: string + description: '' + workflowName: + type: string + description: Name of the workflow fetched for the resource type + operationName: + type: string + description: Mapped operation name of the corresponding workflow + workflowSource: + type: string + description: '' + workflowResourceTarget: + type: string + description: Type of Resource mapped against the workflow + description: 'Attributes related to artifact information ' + description: This describes workflow specification object + ServiceLevelWorkflowExecution: + type: object + properties: + requestInfo: + type: object + properties: + source: + type: string + description: Name of the sender + suppressRollback: + type: boolean + description: Enable/disable rollback suppression + requestorId: + type: string + description: Id of the sender + description: Request object contains source information + modelInfo: + type: object + properties: + modelType: + type: string + description: Type of the model to be executed + modelInvariantUuid: + type: string + description: Model invariant id corresponding to the service + modelUuid: + type: string + description: Model uuid corresponding to the service + modelVersionId: + type: string + description: Model version of the service instance + modelName: + type: string + description: Name of the service + modelVersion: + type: string + description: Version of the service instance + description: Parameters related to the service model + requestParameters: + type: object + properties: + subscriptionServiceType: + type: string + description: Type of service subscription + description: User parameter object + subscriberInfo: + type: object + properties: + globalSubscriberId: + type: string + description: Id of the subscriber sending the request + description: Subscriber id information + project: + type: object + properties: + projectName: + type: string + description: Name of the target project + description: Information about the target project name + owningEntity: + type: object + properties: + owningEntityId: + type: string + description: Id of the owning Entity + owningEntityName: + type: string + description: Name of the owning Entity + description: Object describes the entity details + description: >- + This describes the request body of service level custom workflow + execution + PNFCustomWorkflowExecution: + type: object + properties: + requestInfo: + type: object + properties: + source: + type: string + description: Name of the sender + suppressRollback: + type: boolean + description: Enable/disable rollback suppression + requestorId: + type: string + description: Id of the sender + description: Request object contains source information + modelInfo: + type: object + properties: + modelType: + type: string + description: Type of the model to be executed + modelInvariantUuid: + type: string + description: Model invariant id corresponding to the service + modelUuid: + type: string + description: Model uuid corresponding to the service + modelVersionId: + type: string + description: Model version of the service instance + modelName: + type: string + description: Name of the service + modelVersion: + type: string + description: Version of the service instance + description: Parameters related to the service model + requestParameters: + type: object + properties: + subscriptionServiceType: + type: string + description: Type of service subscription + description: User parameter object + subscriberInfo: + type: object + properties: + globalSubscriberId: + type: string + description: Id of the subscriber sending the request + description: Subscriber id information + project: + type: object + properties: + projectName: + type: string + description: Name of the target project + description: Information about the target project name + owningEntity: + type: object + properties: + owningEntityId: + type: string + description: Id of the owning Entity + owningEntityName: + type: string + description: Name of the owning Entity + description: Object describes the entity details + description: This describes the request body of PNF custom workflow execution + CreateServiceInstanceParamaters: + type: object + properties: + requestDetails: + type: object + description: Contains data associated with a request + properties: + requestParameters: + type: object + description: Contains all the parameters, associated with this request + properties: + subscriptionServiceType: + type: string + description: Type of service subscriptions of customer resource + userParams: + type: array + description: Array of data that contains information about Service + items: + oneOf: + - $ref: >- + #/components/schemas/CreateServiceInstParamsUserParamsHoming + - $ref: >- + #/components/schemas/CreateServiceInstParamsUserParamsService + aLaCarte: + type: boolean + description: >- + Enable “A La Carte” mode. In this mode, the user creates and + submits operations for each object to be created. + usePreload: + type: boolean + description: Special value required to use additional Policy settings + modelInfo: + type: object + description: Contains information about the currently used Service Model model + properties: + modelInvariantId: + type: string + description: >- + Unique identifier corresponding to the main definition of a + model in SDC + modelType: + type: string + description: Type of service model, created in SDC + modelName: + type: string + description: Name of the model, which can change from version to version. + modelVersion: + type: string + description: >- + Unique identifier corresponding to one version of a model in + SDC + modelVersionId: + type: string + description: The SDC model version for this resource or service model. + modelUuid: + type: string + description: >- + Unique identifier corresponding to the main definition of a + model in SDC + modelInvariantUuid: + type: string + description: >- + Unique identifier corresponding to the main definition of a + model in SDC + requestInfo: + type: object + description: Represents some information for the request + properties: + productFamilyId: + type: string + description: SDC catalog service type + source: + type: string + description: Determines only the source from whom the request came + instanceName: + type: string + description: Defines the name of the instance to be created + suppressRollback: + type: boolean + description: >- + If false – the rollback process will not start if something + goes wrong in execution BB. If true - QueryRainyDayTable + task will start and make querying policy in table + rainy_day_handler_macro + requestorId: + type: string + description: User Id or Application Id, initiating the Assessment + subscriberInfo: + type: object + description: >- + Represents the object that groups service instances used by a + customer + properties: + globalSubscriberId: + type: string + description: >- + Global Subscriber Id used across ONAP to uniquely identify + subscriber. + project: + type: object + description: Represents the project, which will own the service instance + properties: + projectName: + type: string + description: Name of the project deploying a service + owningEntity: + type: object + description: Represents the entity, which will own the service instance + properties: + owningEntityId: + type: string + description: UUID of an owning entity + owningEntityName: + type: string + description: Owning entity name + CreateServiceInstParamsUserParamsHoming: + allOf: + - type: object + properties: + Homing_Solution: + type: string + description: >- + Switches on an optimization service to deploy services + automatically across multiple sites and multiple clouds + CreateServiceInstParamsUserParamsService: + allOf: + - type: object + properties: + service: + type: object + description: Includes information about all created instances + properties: + instanceParams: + type: array + description: Includes a set of specific parameters + items: + type: object + properties: {} + instanceName: + type: string + description: Defines the name of the instance to be created + resources: + type: object + properties: + vnfs: + type: array + description: Contains information about VNF parameters + items: + type: object + properties: + modelInfo: + type: object + description: Contains information about the currently used Service Model model + properties: + modelInvariantId: + type: string + description: >- + Unique identifier corresponding to the main + definition of a model in SDC + modelType: + type: string + description: Type of Service Model, created in SDC + modelName: + type: string + description: >- + Name of the model, which can change from + version to version. + modelVersion: + type: string + description: >- + Unique identifier corresponding to one version + of a model in SDC + modelVersionId: + type: string + description: >- + The SDC model version for this resource or + service model. + modelUuid: + type: string + description: >- + Unique identifier corresponding to the main + definition of a model in SDC + modelInvariantUuid: + type: string + description: >- + Unique identifier corresponding to the main + definition of a model in SDC + cloudConfiguration: + type: object + properties: + cloudOwner: + type: string + description: >- + Identifies the vendor and cloud name. First + part of composite key should be formatted as + vendor-cloudname + lcpCloudRegionId: + type: string + description: >- + Cloud-owner defined type indicator (Openstack + region) + tenantId: + type: string + description: Unique id relative to the cloud-region. + platform: + type: object + description: >- + Represents the platform, on which the VNFs/CNFs + will run + properties: + platformName: + type: string + description: Name of the platform + lineOfBusiness: + type: object + description: >- + Represents the business line, owns the VNFs/CNFs + instances + properties: + lineOfBusinessName: + type: string + description: Name of the line-of-business (product) + productFamilyId: + type: string + description: Define SDC catalog service type + instanceName: + type: string + description: Defines the name of the instance to be created + instanceParams: + type: array + description: Includes a set of specific parameters of instance + items: + type: object + properties: {} + vfModules: + type: array + description: Сontains a set of parameters of VF Modules + items: + type: object + properties: + modelInfo: + type: object + description: Contains information about the currently used Service Model model + properties: + modelInvariantId: + type: string + description: >- + Unique identifier corresponding to the + main definition of a model in SDC + modelType: + type: string + description: Type of service model, created in SDC + modelName: + type: string + description: >- + Name of the model, which can change from + version to version. + modelVersion: + type: string + description: >- + Unique identifier corresponding to one + version of a model in SDC + modelVersionId: + type: string + description: >- + The SDC model version for this resource + or service model. + modelUuid: + type: string + description: >- + Unique identifier corresponding to the + main definition of a model in SDC + modelInvariantUuid: + type: string + description: >- + Unique identifier corresponding to the + main definition of a model in SDC + instanceName: + type: string + description: >- + Defines the name of the instance to be + created + instanceParams: + type: array + description: Includes a set of specific parameters + items: + type: object + properties: {} + modelInfo: + type: object + description: Contains information about the currently used Service Model model + properties: + modelName: + type: string + description: >- + Name of the model, which can change from + version to version. + modelVersionId: + type: string + description: >- + Unique identifier corresponding to one + version of a model in SDC + modelInvariantUuid: + type: string + description: >- + Unique identifier corresponding to the + main definition of a model in SDC + modelVersion: + type: string + description: >- + The SDC model version for this resource + or service model. + modelCustomizationId: + type: string + description: >- + Unique generated identifier of a model in SDC diff --git a/graph-inventory/aai-client/src/test/java/org/onap/aaiclient/client/aai/AAIObjectTypeTest.java b/graph-inventory/aai-client/src/test/java/org/onap/aaiclient/client/aai/AAIObjectTypeTest.java index 12051fb07d..1696445c88 100644 --- a/graph-inventory/aai-client/src/test/java/org/onap/aaiclient/client/aai/AAIObjectTypeTest.java +++ b/graph-inventory/aai-client/src/test/java/org/onap/aaiclient/client/aai/AAIObjectTypeTest.java @@ -3,6 +3,7 @@ * ONAP - SO * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2022 Samsung Electronics * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -48,9 +49,6 @@ public class AAIObjectTypeTest { AAIObjectType genericVnf2 = AAIFluentTypeBuilder.network().genericVnf("test2").build(); assertEquals(genericVnf2, genericVnf); - - assertEquals(genericVnf, Types.GENERIC_VNF); - } @Test diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/validation/RelatedInstancesValidation.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/validation/RelatedInstancesValidation.java index 3b87d91d3f..801065fdde 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/validation/RelatedInstancesValidation.java +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/validation/RelatedInstancesValidation.java @@ -185,7 +185,10 @@ public class RelatedInstancesValidation implements ValidationRule { && !(requestScope.equalsIgnoreCase(ModelType.instanceGroup.toString()) && action == Action.createInstance)) { isRelatedServiceInstancePresent = true; - if (!relatedInstance.getInstanceId().equals(sir.getServiceInstanceId())) { + // InstanceDirection.source indicates child service and this validation is for all + // except child services. + if (!InstanceDirection.source.equals(relatedInstance.getInstanceDirection()) + && !relatedInstance.getInstanceId().equals(sir.getServiceInstanceId())) { throw new ValidationException( "serviceInstanceId matching the serviceInstanceId in request URI"); } diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/validation/UserParamsValidation.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/validation/UserParamsValidation.java index 8646a74a2f..728d4df4ee 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/validation/UserParamsValidation.java +++ b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/validation/UserParamsValidation.java @@ -34,6 +34,7 @@ import org.onap.so.apihandlerinfra.Actions; import org.onap.so.exceptions.ValidationException; import org.onap.so.serviceinstancebeans.ModelInfo; import org.onap.so.serviceinstancebeans.Networks; +import org.onap.so.serviceinstancebeans.Pnfs; import org.onap.so.serviceinstancebeans.Service; import org.onap.so.serviceinstancebeans.VfModules; import org.onap.so.serviceinstancebeans.Vnfs; @@ -116,6 +117,29 @@ public class UserParamsValidation implements ValidationRule { validateDuplicateInstanceNames(vnfCustomIdToInstanceNames, "vnf"); validateDuplicateInstanceNames(vfModuleCustomIdToInstanceNames, "vfModule"); + Map<String, Set<String>> pnfCustomIdToInstanceNames = new HashMap<>(); + + for (Pnfs pnf : validate.getResources().getPnfs()) { + if (pnf.getModelInfo() == null) { + throw new ValidationException("modelInfo in userParams pnf resources", true); + } else if (pnf.getModelInfo().getModelCustomizationId() == null) { + throw new ValidationException("modelCustomizationId in userParams pnf resources", true); + } else if (pnf.getModelInfo().getModelVersionId() == null) { + throw new ValidationException("modelVersionId in userParams pnf resources", true); + } + String pnfCustomizationId = pnf.getModelInfo().getModelCustomizationId(); + pnfCustomIdToInstanceNames.putIfAbsent(pnfCustomizationId, new HashSet<>()); + String pnfInstanceName = StringUtils.defaultString(pnf.getInstanceName()); + Set<String> pnfVisitedInstanceNames = pnfCustomIdToInstanceNames.get(pnfCustomizationId); + if (!pnfVisitedInstanceNames.add(pnfInstanceName)) { + throw new ValidationException( + "instanceName: same instanceName with same modelCustomizationId in userParams pnf resources", + true); + } + } + + validateDuplicateInstanceNames(pnfCustomIdToInstanceNames, "pnf"); + List<Networks> validateNetworks = new ArrayList<>(); validateNetworks = validate.getResources().getNetworks(); if (validateNetworks != null) { diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/validation/RelatedInstancesValidationTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/validation/RelatedInstancesValidationTest.java index 93a19a9531..ef160e9c4c 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/validation/RelatedInstancesValidationTest.java +++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/validation/RelatedInstancesValidationTest.java @@ -31,6 +31,7 @@ import org.junit.rules.ExpectedException; import org.onap.so.apihandlerinfra.Action; import org.onap.so.apihandlerinfra.BaseTest; import org.onap.so.exceptions.ValidationException; +import org.onap.so.serviceinstancebeans.InstanceDirection; import org.onap.so.serviceinstancebeans.RelatedInstanceList; import org.onap.so.serviceinstancebeans.ServiceInstancesRequest; import com.fasterxml.jackson.databind.ObjectMapper; @@ -133,4 +134,21 @@ public class RelatedInstancesValidationTest extends BaseTest { validation.validate(setupValidationInformation( "src/test/resources/Validation/VpnBondingValidation/NoModelInvariantId.json")); } + + @Test + public void validateRelatedInstanceInstanceIdTest() throws IOException, ValidationException { + validation.validate(setupValidationInformation( + "src/test/resources/Validation/UserParamsValidation/RelatedInstanceInstanceId.json")); + } + + @Test + public void validateRelatedInstanceInstanceIdExceptionTest() throws IOException, ValidationException { + thrown.expect(ValidationException.class); + thrown.expectMessage("serviceInstanceId matching the serviceInstanceId in request URI"); + ValidationInformation info = setupValidationInformation( + "src/test/resources/Validation/UserParamsValidation/RelatedInstanceInstanceId.json"); + RelatedInstanceList[] instanceList = info.sir.getRequestDetails().getRelatedInstanceList(); + instanceList[0].getRelatedInstance().setInstanceDirection(InstanceDirection.fromValue("destination")); + validation.validate(info); + } } diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/validation/UserParamsValidationTest.java b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/validation/UserParamsValidationTest.java index 548b957303..30b7662b59 100644 --- a/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/validation/UserParamsValidationTest.java +++ b/mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/validation/UserParamsValidationTest.java @@ -243,6 +243,75 @@ public class UserParamsValidationTest { } @Test + public void validateDuplicateInstanceNameDifferentCustomizationIdPnfTest() throws IOException, ValidationException { + thrown.expect(ValidationException.class); + thrown.expectMessage( + "No valid instanceName: same instanceName but different modelCustomizationId (instanceName should be unique) in userParams pnf resources is specified"); + ValidationInformation info = setupValidationInformation( + "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNamesPnf.json"); + info.getUserParams().getResources().getPnfs().get(0).setInstanceName("ORAN_SIM1_2106_pnf_01"); + validation.validate(info); + } + + @Test + public void validateDuplicateInstanceNameSameCustomizationIdPnfTest() throws IOException, ValidationException { + thrown.expect(ValidationException.class); + thrown.expectMessage( + "No valid instanceName: same instanceName with same modelCustomizationId in userParams pnf resources is specified"); + ValidationInformation info = setupValidationInformation( + "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNamesPnf.json"); + info.getUserParams().getResources().getPnfs().get(1).getModelInfo() + .setModelCustomizationId("88a3096a-af87-4853-99f6-7256a9ab6c3e"); + info.getUserParams().getResources().getPnfs().get(1).setInstanceName("ORAN_SIM1_2106_pnf_01"); + validation.validate(info); + } + + @Test + public void validateNullInstanceNameSameCustomizationIdPnfTest() throws IOException, ValidationException { + thrown.expect(ValidationException.class); + thrown.expectMessage( + "No valid instanceName: instanceName is missing or empty with same modelCustomizationId in userParams pnf resources is specified"); + ValidationInformation info = setupValidationInformation( + "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNamesPnf.json"); + info.getUserParams().getResources().getPnfs().get(1).getModelInfo() + .setModelCustomizationId("88a3096a-af87-4853-99f6-7256a9ab6c3e"); + info.getUserParams().getResources().getPnfs().get(1).setInstanceName(null); + validation.validate(info); + } + + @Test + public void validateDuplicateNullInstanceNameSameCustomizationIdPnfTest() throws IOException, ValidationException { + thrown.expect(ValidationException.class); + thrown.expectMessage( + "No valid instanceName: same instanceName with same modelCustomizationId in userParams pnf resources is specified"); + ValidationInformation info = setupValidationInformation( + "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNamesPnf.json"); + info.getUserParams().getResources().getPnfs().get(0).setInstanceName(null); + info.getUserParams().getResources().getPnfs().get(1).getModelInfo() + .setModelCustomizationId("88a3096a-af87-4853-99f6-7256a9ab6c3e"); + info.getUserParams().getResources().getPnfs().get(1).setInstanceName(null); + validation.validate(info); + } + + @Test + public void validateDifferentInstanceNameSameCustomizationIdPnfTest() throws IOException, ValidationException { + ValidationInformation info = setupValidationInformation( + "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNamesPnf.json"); + info.getUserParams().getResources().getPnfs().get(1).getModelInfo() + .setModelCustomizationId("88a3096a-af87-4853-99f6-7256a9ab6c3e"); + info.getUserParams().getResources().getPnfs().get(1).setInstanceName("new-pnf-instance-name"); + validation.validate(info); + } + + @Test + public void validateNullInstanceNameDifferentCustomizationIdPnfTest() throws IOException, ValidationException { + ValidationInformation info = setupValidationInformation( + "src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNamesPnf.json"); + info.getUserParams().getResources().getPnfs().get(0).setInstanceName(null); + validation.validate(info); + } + + @Test public void validateInstanceNameExceptionTest() throws IOException, ValidationException { thrown.expect(ValidationException.class); thrown.expectMessage("instanceName in requestInfo does not match instanceName in userParams service"); diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNamesPnf.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNamesPnf.json new file mode 100644 index 0000000000..b5fb6a8d41 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/test/resources/Validation/UserParamsValidation/DuplicateInstanceNamesPnf.json @@ -0,0 +1,91 @@ +{ + "requestDetails": { + "modelInfo": { + "modelInvariantId": "d6f8f4e8-7de9-47c1-aa5c-4b6868738f5c", + "modelType": "service", + "modelName": "service_pnf_2305", + "modelVersion": "2.0", + "modelVersionId": "e199ca4e-08f9-4f10-a15d-b94d50e52a6a", + "modelUuid": "e199ca4e-08f9-4f10-a15d-b94d50e52a6a", + "modelInvariantUuid": "d6f8f4e8-7de9-47c1-aa5c-4b6868738f5c" + }, + "requestInfo": { + "productFamilyId": "5G", + "source": "VID", + "instanceName": "ORAN_SIM1_2106_1", + "suppressRollback": false, + "requestorId": "NBI" + }, + "subscriberInfo": { + "globalSubscriberId": "5GCustomer" + }, + "requestParameters": { + "subscriptionServiceType": "5G", + "userParams": [{ + "service": { + "modelInfo": { + "modelVersionId": "e199ca4e-08f9-4f10-a15d-b94d50e52a6a", + "modelName": "service_pnf_2305", + "modelType": "service" + }, + "instanceName": "ORAN_SIM1_2106_1", + "instanceParams": [], + "resources": { + "pnfs": [{ + "modelInfo": { + "modelCustomizationName": "pnf_only_2305 0", + "modelCustomizationId": "88a3096a-af87-4853-99f6-7256a9ab6c3e", + "modelInvariantId": "d6f8f4e8-7de9-47c1-aa5c-4b6868738f5c", + "modelVersionId": "a6a9dc3d-204c-4dbb-862b-46214788b0e5", + "modelName": "service_pnf_2305", + "modelType": "pnf", + "modelVersion": "2.0" + }, + "platform": { + "platformName": "test" + }, + "lineOfBusiness": { + "lineOfBusinessName": "LOB-5GCustomer" + }, + "productFamilyId": "5G", + "instanceParams": [], + "instanceName": "ORAN_SIM1_2106_pnf_01", + "processingPriority": 1 + }, { + "modelInfo": { + "modelCustomizationName": "pnf_only_2305 0", + "modelCustomizationId": "different-model-info", + "modelInvariantId": "d6f8f4e8-7de9-47c1-aa5c-4b6868738f5c", + "modelVersionId": "a6a9dc3d-204c-4dbb-862b-46214788b0e5", + "modelName": "service_pnf_2305", + "modelType": "pnf", + "modelVersion": "2.0" + }, + "platform": { + "platformName": "test" + }, + "lineOfBusiness": { + "lineOfBusinessName": "LOB-5GCustomer" + }, + "productFamilyId": "5G", + "instanceParams": [], + "instanceName": "ORAN_SIM1_2106_pnf_01", + "processingPriority": 2 + }] + } + } + }, { + "Homing_Solution": "none" + }], + "aLaCarte": false, + "usePreload": false + }, + "project": { + "projectName": "basicnw-project" + }, + "owningEntity": { + "owningEntityId": "67f2e84c-734d-4e90-a1e4-d2ffa2e75849", + "owningEntityName": "OE-5GCustomer" + } + } +}
\ No newline at end of file diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/Validation/UserParamsValidation/RelatedInstanceInstanceId.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/Validation/UserParamsValidation/RelatedInstanceInstanceId.json new file mode 100644 index 0000000000..156eedf2b4 --- /dev/null +++ b/mso-api-handlers/mso-api-handler-infra/src/test/resources/Validation/UserParamsValidation/RelatedInstanceInstanceId.json @@ -0,0 +1,138 @@ +{ + "requestDetails": { + "subscriberInfo": { + "globalSubscriberId": "ubuntu-customer" + }, + "requestInfo": { + "suppressRollback": false, + "instanceName": "Onap-Unit-Test", + "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "requestorId": "portal", + "source": "postman" + }, + "cloudConfiguration": { + "lcpCloudRegionId": "Onap215", + "tenantId": "e2710e84063b421fab08189818761d55", + "cloudOwner": "Onap" + }, + "requestParameters": { + "subscriptionServiceType": "ubuntu", + "userParams": [ + { + "Homing_Solution": "none" + }, + { + "service": { + "instanceParams": [], + "resources": { + "vnfs": [ + { + "modelInfo": { + "modelName": "UbuntuVF", + "modelVersionId": "3b6cb925-b583-4c5d-8200-62212258dd03", + "modelInvariantUuid": "dcbd2b4f-86a9-48f2-9149-9fbd506cb0f5", + "modelVersion": "1.0", + "modelCustomizationId": "1aa2ae52-f3c8-4c52-91eb-54a23104cff8", + "modelInstanceName": "UbuntuVF 0" + }, + "cloudConfiguration": { + "lcpCloudRegionId": "lcp", + "tenantId": "e2710e84063b421fab08189818761d55", + "cloudOwner": "Onap" + }, + "platform": { + "platformName": "openstack" + }, + "lineOfBusiness": { + "lineOfBusinessName": "wireless" + }, + "productFamilyId": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", + "instanceName": "vnf-instanceName", + "instanceParams": [ + { + "vnf-name": "vnf-vnf-name", + "vnf_name": "UbuntuVNFName" + } + ], + "vfModules": [ + { + "modelInfo": { + "modelName": "UbuntuVF..base..module-0", + "modelVersionId": "2bb60c6b-2bfb-4162-b95b-74d81916aa25", + "modelInvariantUuid": "fb8af74c-83a6-4c27-b2db-b414bf70062a", + "modelVersion": "1", + "modelCustomizationId": "cd530d5b-b24b-4d2c-9987-5179075c9381" + }, + "instanceName": "Openstack-fail-network-1", + "instanceParams": [ + { + "name": "Openstack-fail-network-1", + "cidr": "10.10.10.0/24" + } + ] + }, + { + "modelInfo": { + "modelName": "UbuntuVF..ubuntu-vf-module..module-1", + "modelVersionId": "73fb74e8-f7cc-4927-9cc2-bb5c7b36c109", + "modelInvariantUuid": "51d1c820-7578-4c5d-8fc7-fcf975800059", + "modelVersion": "1", + "modelCustomizationId": "67b4547c-b059-4a45-8b0b-12ce6bb3cf2f" + }, + "instanceName": "Openstack-fail-ubuntu-1", + "instanceParams": [ + { + "name": "Openstack-fail-ubuntu-1", + "network_mgmt": "vlan666_net", + "key_name": "mykey", + "network_name": "Openstack-fail-network-1" + } + ] + } + ] + } + ] + }, + "modelInfo": { + "modelVersion": "1.0", + "modelVersionId": "b0dce97c-e320-4dea-bd4a-7e398b4f5199", + "modelInvariantId": "577d7107-53ab-4f3d-a5a4-f4e9295312d8", + "modelName": "UbuntuSVC", + "modelType": "service" + } + } + } + ], + "aLaCarte": false + }, + "project": { + "projectName": "Project-UbuntuDemo" + }, + "owningEntity": { + "owningEntityId": "33a8b609-1cfe-4d19-8dc2-5b95b921de1e", + "owningEntityName": "owner" + }, + "modelInfo": { + "modelVersion": "1.0", + "modelVersionId": "b0dce97c-e320-4dea-bd4a-7e398b4f5199", + "modelInvariantId": "577d7107-53ab-4f3d-a5a4-f4e9295312d8", + "modelName": "UbuntuSVC", + "modelType": "service" + }, + "relatedInstanceList": [ + { + "relatedInstance": { + "instanceId": "351262fb-4a32-4c43-b600-c6514f6ff808", + "modelInfo": { + "modelVersion": "1.0", + "modelVersionId": "b0dce97c-e320-4dea-bd4a-7e398b4f5199", + "modelInvariantId": "577d7107-53ab-4f3d-a5a4-f4e9295312d8", + "modelName": "UbuntuSVC", + "modelType": "service" + }, + "instanceDirection": "source" + } + } + ] + } +}
\ No newline at end of file diff --git a/version.properties b/version.properties index a9271e1c21..f6bcc5a3a1 100644 --- a/version.properties +++ b/version.properties @@ -3,7 +3,7 @@ # because they are used in Jenkins, whose plug-in doesn't support major=1 -minor=10 +minor=11 patch=0 base_version=${major}.${minor}.${patch} |