diff options
76 files changed, 756 insertions, 8781 deletions
diff --git a/cps-dependencies/pom.xml b/cps-dependencies/pom.xml index 69ea85917f..68f36fb839 100644 --- a/cps-dependencies/pom.xml +++ b/cps-dependencies/pom.xml @@ -2,7 +2,7 @@ <!-- ============LICENSE_START======================================================= Copyright (c) 2021 Linux Foundation. - Modifications Copyright (C) 2020-2023 Nordix Foundation + Modifications Copyright (C) 2020-2024 Nordix Foundation Modifications Copyright (C) 2022 Bell Canada. ================================================================================ Licensed under the Apache License, Version 2.0 (the "License"); @@ -130,7 +130,7 @@ <dependency> <groupId>com.github.spotbugs</groupId> <artifactId>spotbugs</artifactId> - <version>4.2.0</version> + <version>4.2.3</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java index 66c159105a..93cbccf1a8 100755 --- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java +++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java @@ -44,6 +44,7 @@ import org.onap.cps.ncmp.api.impl.inventory.CompositeState; import org.onap.cps.ncmp.api.impl.operations.DatastoreType; import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevel; import org.onap.cps.ncmp.api.models.CmHandleQueryApiParameters; +import org.onap.cps.ncmp.api.models.CmResourceAddress; import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle; import org.onap.cps.ncmp.rest.api.NetworkCmProxyApi; import org.onap.cps.ncmp.rest.controller.handlers.NcmpCachedResourceRequestHandler; @@ -107,8 +108,9 @@ public class NetworkCmProxyController implements NetworkCmProxyApi { final Boolean includeDescendants, final String authorization) { final NcmpDatastoreRequestHandler ncmpDatastoreRequestHandler = getNcmpDatastoreRequestHandler(datastoreName); - return ncmpDatastoreRequestHandler.executeRequest(datastoreName, cmHandle, resourceIdentifier, - optionsParamInQuery, topicParamInQuery, includeDescendants, authorization); + final CmResourceAddress cmResourceAddress = new CmResourceAddress(datastoreName, cmHandle, resourceIdentifier); + return ncmpDatastoreRequestHandler.executeRequest(cmResourceAddress, optionsParamInQuery, topicParamInQuery, + includeDescendants, authorization); } @Override diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpCachedResourceRequestHandler.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpCachedResourceRequestHandler.java index 430c0996f9..e6d6faf983 100644 --- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpCachedResourceRequestHandler.java +++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpCachedResourceRequestHandler.java @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2022-2023 Nordix Foundation + * Copyright (C) 2022-2024 Nordix Foundation * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ package org.onap.cps.ncmp.rest.controller.handlers; import java.util.function.Supplier; import org.onap.cps.ncmp.api.NetworkCmProxyDataService; import org.onap.cps.ncmp.api.NetworkCmProxyQueryService; +import org.onap.cps.ncmp.api.models.CmResourceAddress; import org.onap.cps.ncmp.rest.executor.CpsNcmpTaskExecutor; import org.onap.cps.spi.FetchDescendantsOption; import org.springframework.http.ResponseEntity; @@ -68,9 +69,7 @@ public class NcmpCachedResourceRequestHandler extends NcmpDatastoreRequestHandle } @Override - protected Supplier<Object> getTaskSupplierForGetRequest(final String datastoreName, - final String cmHandleId, - final String resourceIdentifier, + protected Supplier<Object> getTaskSupplierForGetRequest(final CmResourceAddress cmResourceAddress, final String optionsParamInQuery, final String topicParamInQuery, final String requestId, @@ -79,8 +78,7 @@ public class NcmpCachedResourceRequestHandler extends NcmpDatastoreRequestHandle final FetchDescendantsOption fetchDescendantsOption = getFetchDescendantsOption(includeDescendants); - return () -> networkCmProxyDataService.getResourceDataForCmHandle(datastoreName, cmHandleId, resourceIdentifier, - fetchDescendantsOption); + return () -> networkCmProxyDataService.getResourceDataForCmHandle(cmResourceAddress, fetchDescendantsOption); } private Supplier<Object> getTaskSupplierForQueryRequest(final String cmHandleId, diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpDatastoreRequestHandler.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpDatastoreRequestHandler.java index 65410d3a36..1ae16820a1 100644 --- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpDatastoreRequestHandler.java +++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpDatastoreRequestHandler.java @@ -25,6 +25,7 @@ import java.util.UUID; import java.util.function.Supplier; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.onap.cps.ncmp.api.models.CmResourceAddress; import org.onap.cps.ncmp.rest.executor.CpsNcmpTaskExecutor; import org.onap.cps.ncmp.rest.util.TopicValidator; import org.springframework.beans.factory.annotation.Value; @@ -50,18 +51,14 @@ public abstract class NcmpDatastoreRequestHandler { /** * Executes synchronous/asynchronous get request for given cm handle. * - * @param datastoreName the name of the datastore - * @param cmHandleId the cm handle - * @param resourceIdentifier the resource identifier + * @param cmResourceAddress the name of the datastore, cm handle and resource identifier * @param optionsParamInQuery the options param in query * @param topicParamInQuery the topic param in query * @param includeDescendants whether include descendants * @param authorization contents of Authorization header, or null if not present * @return the response entity */ - public ResponseEntity<Object> executeRequest(final String datastoreName, - final String cmHandleId, - final String resourceIdentifier, + public ResponseEntity<Object> executeRequest(final CmResourceAddress cmResourceAddress, final String optionsParamInQuery, final String topicParamInQuery, final boolean includeDescendants, @@ -69,16 +66,16 @@ public abstract class NcmpDatastoreRequestHandler { final boolean asyncResponseRequested = topicParamInQuery != null; if (asyncResponseRequested && notificationFeatureEnabled) { - return executeAsyncTaskAndGetResponseEntity(datastoreName, cmHandleId, resourceIdentifier, - optionsParamInQuery, topicParamInQuery, includeDescendants, authorization); + return executeAsyncTaskAndGetResponseEntity(cmResourceAddress, optionsParamInQuery, topicParamInQuery, + includeDescendants, authorization); } if (asyncResponseRequested) { log.warn("Asynchronous request is unavailable as notification feature is currently disabled, " + "will use synchronous operation."); } - final Supplier<Object> taskSupplier = getTaskSupplierForGetRequest(datastoreName, cmHandleId, - resourceIdentifier, optionsParamInQuery, NO_TOPIC, NO_REQUEST_ID, includeDescendants, authorization); + final Supplier<Object> taskSupplier = getTaskSupplierForGetRequest(cmResourceAddress, optionsParamInQuery, + NO_TOPIC, NO_REQUEST_ID, includeDescendants, authorization); return executeTaskSync(taskSupplier); } @@ -96,23 +93,18 @@ public abstract class NcmpDatastoreRequestHandler { return ResponseEntity.ok(taskSupplier.get()); } - private ResponseEntity<Object> executeAsyncTaskAndGetResponseEntity(final String datastoreName, - final String cmHandleId, - final String resourceIdentifier, + private ResponseEntity<Object> executeAsyncTaskAndGetResponseEntity(final CmResourceAddress cmResourceAddress, final String optionsParamInQuery, final String topicParamInQuery, final boolean includeDescendants, final String authorization) { final String requestId = UUID.randomUUID().toString(); - final Supplier<Object> taskSupplier = getTaskSupplierForGetRequest(datastoreName, cmHandleId, - resourceIdentifier, optionsParamInQuery, topicParamInQuery, requestId, includeDescendants, - authorization); + final Supplier<Object> taskSupplier = getTaskSupplierForGetRequest(cmResourceAddress, + optionsParamInQuery, topicParamInQuery, requestId, includeDescendants, authorization); return executeTaskAsync(topicParamInQuery, requestId, taskSupplier); } - protected abstract Supplier<Object> getTaskSupplierForGetRequest(final String datastoreName, - final String cmHandleId, - final String resourceIdentifier, + protected abstract Supplier<Object> getTaskSupplierForGetRequest(final CmResourceAddress cmResourceAddress, final String optionsParamInQuery, final String topicParamInQuery, final String requestId, diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpPassthroughResourceRequestHandler.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpPassthroughResourceRequestHandler.java index 430b749eff..75112caf14 100644 --- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpPassthroughResourceRequestHandler.java +++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpPassthroughResourceRequestHandler.java @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2022-2023 Nordix Foundation + * Copyright (C) 2022-2024 Nordix Foundation * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,6 +30,7 @@ import org.onap.cps.ncmp.api.NetworkCmProxyDataService; import org.onap.cps.ncmp.api.impl.exception.InvalidDatastoreException; import org.onap.cps.ncmp.api.impl.operations.DatastoreType; import org.onap.cps.ncmp.api.impl.operations.OperationType; +import org.onap.cps.ncmp.api.models.CmResourceAddress; import org.onap.cps.ncmp.api.models.DataOperationRequest; import org.onap.cps.ncmp.rest.exceptions.OperationNotSupportedException; import org.onap.cps.ncmp.rest.executor.CpsNcmpTaskExecutor; @@ -77,18 +78,15 @@ public class NcmpPassthroughResourceRequestHandler extends NcmpDatastoreRequestH } @Override - protected Supplier<Object> getTaskSupplierForGetRequest(final String datastoreName, - final String cmHandleId, - final String resourceIdentifier, + protected Supplier<Object> getTaskSupplierForGetRequest(final CmResourceAddress cmResourceAddress, final String optionsParamInQuery, final String topicParamInQuery, final String requestId, final boolean includeDescendants, final String authorization) { - return () -> networkCmProxyDataService.getResourceDataForCmHandle( - datastoreName, cmHandleId, resourceIdentifier, optionsParamInQuery, topicParamInQuery, requestId, - authorization); + return () -> networkCmProxyDataService.getResourceDataForCmHandle(cmResourceAddress, optionsParamInQuery, + topicParamInQuery, requestId, authorization); } private ResponseEntity<Object> getRequestIdAndSendDataOperationRequestToDmiService( diff --git a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy index 616492d4e2..a5b1f05ee1 100644 --- a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy +++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy @@ -39,6 +39,7 @@ import org.onap.cps.ncmp.api.impl.inventory.DataStoreSyncState import org.onap.cps.ncmp.api.impl.inventory.LockReasonCategory import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevel import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle +import org.onap.cps.ncmp.api.models.CmResourceAddress import org.onap.cps.ncmp.rest.controller.handlers.NcmpCachedResourceRequestHandler import org.onap.cps.ncmp.rest.controller.handlers.NcmpPassthroughResourceRequestHandler import org.onap.cps.ncmp.rest.executor.CpsNcmpTaskExecutor @@ -136,15 +137,15 @@ class NetworkCmProxyControllerSpec extends Specification { def NO_TOPIC = null def NO_REQUEST_ID = null def NO_AUTH_HEADER = null - def TIMOUT_FOR_TEST = 1234 + def TIMEOUT_FOR_TEST = 1234 def logger = Spy(ListAppender<ILoggingEvent>) def setup() { ncmpCachedResourceRequestHandler.notificationFeatureEnabled = true - ncmpCachedResourceRequestHandler.timeOutInMilliSeconds = TIMOUT_FOR_TEST + ncmpCachedResourceRequestHandler.timeOutInMilliSeconds = TIMEOUT_FOR_TEST ncmpPassthroughResourceRequestHandler.notificationFeatureEnabled = true - ncmpPassthroughResourceRequestHandler.timeOutInMilliSeconds = TIMOUT_FOR_TEST + ncmpPassthroughResourceRequestHandler.timeOutInMilliSeconds = TIMEOUT_FOR_TEST setupLogger() } @@ -154,31 +155,28 @@ class NetworkCmProxyControllerSpec extends Specification { def 'Get Resource Data from pass-through operational.'() { given: 'resource data url' - def getUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-operational" + - "?resourceIdentifier=parent/child&options=(a=1,b=2)" + def getUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-operational?resourceIdentifier=parent/child&options=(a=1,b=2)" + and: 'the expected cm resource address' + def expectedCmResourceAddress = new CmResourceAddress(PASSTHROUGH_OPERATIONAL.datastoreName, 'testCmHandle', 'parent/child') when: 'get data resource request is performed' - def response = mvc.perform( - get(getUrl) - .contentType(MediaType.APPLICATION_JSON) - ).andReturn().response - then: 'the NCMP data service is called with getResourceDataOperationalForCmHandle' - 1 * mockNetworkCmProxyDataService.getResourceDataForCmHandle(PASSTHROUGH_OPERATIONAL.datastoreName, 'testCmHandle', - 'parent/child','(a=1,b=2)', NO_TOPIC, NO_REQUEST_ID, NO_AUTH_HEADER) + def response = mvc.perform(get(getUrl).contentType(MediaType.APPLICATION_JSON)).andReturn().response + then: 'the NCMP data service is called with correct parameters' + 1 * mockNetworkCmProxyDataService.getResourceDataForCmHandle(expectedCmResourceAddress, '(a=1,b=2)', NO_TOPIC, NO_REQUEST_ID, NO_AUTH_HEADER) and: 'response status is Ok' - response.status == HttpStatus.OK.value() + assert response.status == HttpStatus.OK.value() } def 'Get Resource Data from ncmp-datastore:operational (cached) parameters handling with #scenario.'() { given: 'resource data url' - def getUrl = "$ncmpBasePathV1/ch/h123/data/ds/ncmp-datastore:operational" + - "?resourceIdentifier=parent/child${additionalUrlParam}" + def getUrl = "$ncmpBasePathV1/ch/h123/data/ds/ncmp-datastore:operational?resourceIdentifier=parent/child${additionalUrlParam}" + and: 'the expected cm resource address' + def expectedCmResourceAddress = new CmResourceAddress('ncmp-datastore:operational', 'h123', 'parent/child') when: 'get data resource request is performed' - def response = mvc.perform( - get(getUrl).contentType(MediaType.APPLICATION_JSON)).andReturn().response - then: 'task executor is called appropriate number of times' - 1 * mockNetworkCmProxyDataService.getResourceDataForCmHandle('ncmp-datastore:operational', 'h123', 'parent/child', expectedIncludeDescendants) + def response = mvc.perform(get(getUrl).contentType(MediaType.APPLICATION_JSON)).andReturn().response + then: 'the NCMP data service is called with correct parameters' + 1 * mockNetworkCmProxyDataService.getResourceDataForCmHandle(expectedCmResourceAddress, expectedIncludeDescendants) and: 'response status is OK' - response.status == HttpStatus.OK.value() + assert response.status == HttpStatus.OK.value() where: 'the following parameters are used' scenario | additionalUrlParam || expectedIncludeDescendants 'no additional param' | '' || OMIT_DESCENDANTS @@ -192,15 +190,11 @@ class NetworkCmProxyControllerSpec extends Specification { def 'Execute (async) data operation to read data from dmi service.'() { given: 'data operation url' def getUrl = "$ncmpBasePathV1/data?topic=my-topic-name" - def dataOperationRequestJsonData = jsonObjectMapper.asJsonString(getDataOperationRequest("read", datastore.datastoreName)) + def dataOperationRequestJsonData = jsonObjectMapper.asJsonString(getDataOperationRequest('read', datastore.datastoreName)) when: 'post data operation request is performed' - def response = mvc.perform( - post(getUrl) - .contentType(MediaType.APPLICATION_JSON) - .content(dataOperationRequestJsonData) - ).andReturn().response + def response = mvc.perform(post(getUrl).contentType(MediaType.APPLICATION_JSON).content(dataOperationRequestJsonData)).andReturn().response then: 'response status is Ok' - response.status == HttpStatus.OK.value() + assert response.status == HttpStatus.OK.value() and: 'async request id is generated' assert response.contentAsString.contains('requestId') then: 'the request is handled asynchronously' @@ -212,80 +206,57 @@ class NetworkCmProxyControllerSpec extends Specification { def 'Execute (async) data operation with some validation error.'() { given: 'data operation url' def getUrl = "$ncmpBasePathV1/data?topic=my-topic-name" - def dataOperationRequestJsonData = jsonObjectMapper.asJsonString( - getDataOperationRequest('read', 'invalid datastore')) + def dataOperationRequestJsonData = jsonObjectMapper.asJsonString(getDataOperationRequest('read', 'invalid datastore')) when: 'post data resource request is performed' - def response = mvc.perform( - post(getUrl) - .contentType(MediaType.APPLICATION_JSON) - .content(dataOperationRequestJsonData) - ).andReturn().response + def response = mvc.perform(post(getUrl).contentType(MediaType.APPLICATION_JSON).content(dataOperationRequestJsonData)).andReturn().response then: 'response status is BAD_REQUEST' - response.status == HttpStatus.BAD_REQUEST.value() + assert response.status == HttpStatus.BAD_REQUEST.value() } def 'Get data operation resource data when notification feature is disabled for datastore: #datastore.'() { given: 'data operation url' def getUrl = "$ncmpBasePathV1/data?topic=my-topic-name" - def dataOperationRequestJsonData = jsonObjectMapper.asJsonString( - getDataOperationRequest("read", PASSTHROUGH_RUNNING.datastoreName)) + def dataOperationRequestJsonData = jsonObjectMapper.asJsonString(getDataOperationRequest("read", PASSTHROUGH_RUNNING.datastoreName)) ncmpPassthroughResourceRequestHandler.notificationFeatureEnabled = false when: 'post data resource request is performed' - def response = mvc.perform( - post(getUrl) - .contentType(MediaType.APPLICATION_JSON) - .content(dataOperationRequestJsonData) + def response = mvc.perform(post(getUrl).contentType(MediaType.APPLICATION_JSON).content(dataOperationRequestJsonData) ).andReturn().response then: 'response status is Ok' - response.status == HttpStatus.OK.value() + assert response.status == HttpStatus.OK.value() and: 'async request id is unavailable' assert response.contentAsString == '{"status":"Asynchronous request is unavailable as notification feature is currently disabled."}' } def 'Query Resource Data from operational.'() { given: 'the query resource data url' - def getUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:operational/query" + - "?cps-path=/cps/path" + def getUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:operational/query?cps-path=/cps/path" when: 'the query data resource request is performed' - def response = mvc.perform( - get(getUrl) - .contentType(MediaType.APPLICATION_JSON) - ).andReturn().response + def response = mvc.perform(get(getUrl).contentType(MediaType.APPLICATION_JSON)).andReturn().response then: 'the NCMP query service is called with queryResourceDataOperationalForCmHandle' - 1 * mockNetworkCmProxyQueryService.queryResourceDataOperational('testCmHandle', - '/cps/path', - FetchDescendantsOption.OMIT_DESCENDANTS) + 1 * mockNetworkCmProxyQueryService.queryResourceDataOperational('testCmHandle','/cps/path',FetchDescendantsOption.OMIT_DESCENDANTS) and: 'response status is Ok' - response.status == HttpStatus.OK.value() + assert response.status == HttpStatus.OK.value() } def 'Query Resource Data with unsupported datastore'() { given: 'the query resource data url' - def getUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-running/query" + - "?cps-path=/cps/path" + def getUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-running/query?cps-path=/cps/path" when: 'the query data resource request is performed' - def response = mvc.perform( - get(getUrl) - .contentType(MediaType.APPLICATION_JSON) - ).andReturn().response + def response = mvc.perform(get(getUrl).contentType(MediaType.APPLICATION_JSON)).andReturn().response then: 'a 400 BAD_REQUEST is returned for the unsupported datastore' - response.status == 400 + assert response.status == 400 and: 'the error message is that the datastore is not supported' - response.contentAsString.contains("ncmp-datastore:passthrough-running is not supported") + assert response.contentAsString.contains("ncmp-datastore:passthrough-running is not supported") } def 'Get Resource Data from pass-through running with #scenario value in resource identifier param.'() { given: 'resource data url' - def getUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-running" + - "?resourceIdentifier=" + resourceIdentifier + "&options=(a=1,b=2)" + def getUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=$resourceIdentifier&options=(a=1,b=2)" and: 'ncmp service returns json object' - mockNetworkCmProxyDataService.getResourceDataForCmHandle(PASSTHROUGH_RUNNING.datastoreName, 'testCmHandle', - resourceIdentifier,'(a=1,b=2)', NO_TOPIC, NO_REQUEST_ID, NO_AUTH_HEADER) >> '{valid-json}' + def expectedCmResourceAddress = new CmResourceAddress(PASSTHROUGH_RUNNING.datastoreName, 'testCmHandle', resourceIdentifier) + mockNetworkCmProxyDataService.getResourceDataForCmHandle(expectedCmResourceAddress,'(a=1,b=2)', NO_TOPIC, NO_REQUEST_ID, NO_AUTH_HEADER) >> '{valid-json}' when: 'get data resource request is performed' - def response = mvc.perform( - get(getUrl) - .contentType(MediaType.APPLICATION_JSON) - ).andReturn().response + def response = mvc.perform(get(getUrl).contentType(MediaType.APPLICATION_JSON)).andReturn().response then: 'response status is Ok' response.status == HttpStatus.OK.value() and: 'response contains valid object body' @@ -302,34 +273,24 @@ class NetworkCmProxyControllerSpec extends Specification { def 'Update resource data from pass-through running.'() { given: 'update resource data url' - def updateUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-running" + - "?resourceIdentifier=parent/child" + def updateUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=parent/child" when: 'update data resource request is performed' - def response = mvc.perform( - put(updateUrl) - .contentType(MediaType.APPLICATION_JSON_VALUE).content(requestBody) - ).andReturn().response + def response = mvc.perform(put(updateUrl).contentType(MediaType.APPLICATION_JSON_VALUE).content(requestBody)).andReturn().response then: 'ncmp service method to update resource is called' - 1 * mockNetworkCmProxyDataService.writeResourceDataPassThroughRunningForCmHandle('testCmHandle', - 'parent/child', UPDATE, requestBody, 'application/json;charset=UTF-8', NO_AUTH_HEADER) + 1 * mockNetworkCmProxyDataService.writeResourceDataPassThroughRunningForCmHandle('testCmHandle','parent/child', UPDATE, requestBody, 'application/json;charset=UTF-8', NO_AUTH_HEADER) and: 'the response status is OK' - response.status == HttpStatus.OK.value() + assert response.status == HttpStatus.OK.value() } def 'Create Resource Data from pass-through running with #scenario.'() { given: 'resource data url' - def url = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-running" + - "?resourceIdentifier=parent/child" + def url = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=parent/child" when: 'create resource request is performed' - def response = mvc.perform( - post(url) - .contentType(MediaType.APPLICATION_JSON_VALUE).content(requestBody) - ).andReturn().response + def response = mvc.perform(post(url).contentType(MediaType.APPLICATION_JSON_VALUE).content(requestBody)).andReturn().response then: 'ncmp service method to create resource called' - 1 * mockNetworkCmProxyDataService.writeResourceDataPassThroughRunningForCmHandle('testCmHandle', - 'parent/child', CREATE, requestBody, 'application/json;charset=UTF-8', NO_AUTH_HEADER) + 1 * mockNetworkCmProxyDataService.writeResourceDataPassThroughRunningForCmHandle('testCmHandle', 'parent/child', CREATE, requestBody, 'application/json;charset=UTF-8', NO_AUTH_HEADER) and: 'resource is created' - response.status == HttpStatus.CREATED.value() + assert response.status == HttpStatus.CREATED.value() } def 'Get module references for the given dataspace and cm handle.'() { @@ -338,12 +299,11 @@ class NetworkCmProxyControllerSpec extends Specification { when: 'get module resource request is performed' def response = mvc.perform(get(getUrl)).andReturn().response then: 'ncmp service method to get yang resource module references is called' - mockNetworkCmProxyDataService.getYangResourcesModuleReferences('some-cmhandle') - >> [new ModuleReference(moduleName: 'some-name1', revision: '2021-10-03')] + mockNetworkCmProxyDataService.getYangResourcesModuleReferences('some-cmhandle') >> [new ModuleReference(moduleName: 'some-name1', revision: '2021-10-03')] and: 'response contains an array with the module name and revision' response.getContentAsString() == '[{"moduleName":"some-name1","revision":"2021-10-03"}]' and: 'response returns an OK http code' - response.status == HttpStatus.OK.value() + assert response.status == HttpStatus.OK.value() } def 'Retrieve cm handles.'() { @@ -364,13 +324,11 @@ class NetworkCmProxyControllerSpec extends Specification { and: 'map for trust level per cmHandle has value for only one cm handle' trustLevelPerCmHandle.put('ch-1', TrustLevel.NONE) when: 'the searches api is invoked' - def response = mvc.perform(post(searchesEndpoint) - .contentType(MediaType.APPLICATION_JSON) - .content(jsonString)).andReturn().response + def response = mvc.perform(post(searchesEndpoint).contentType(MediaType.APPLICATION_JSON).content(jsonString)).andReturn().response then: 'response status returns OK' - response.status == HttpStatus.OK.value() + assert response.status == HttpStatus.OK.value() and: 'the expected response content is returned' - response.contentAsString == '[{"cmHandle":"ch-1","publicCmHandleProperties":[{"color":"yellow"}],"state":null,"trustLevel":"NONE","moduleSetTag":null,"alternateId":null,"dataProducerIdentifier":null},{"cmHandle":"ch-2","publicCmHandleProperties":[{"color":"green"}],"state":null,"trustLevel":null,"moduleSetTag":"someModuleSetTag","alternateId":"someAlternateId","dataProducerIdentifier":"someDataProducerIdentifier"}]' + assert response.contentAsString == '[{"cmHandle":"ch-1","publicCmHandleProperties":[{"color":"yellow"}],"state":null,"trustLevel":"NONE","moduleSetTag":null,"alternateId":null,"dataProducerIdentifier":null},{"cmHandle":"ch-2","publicCmHandleProperties":[{"color":"green"}],"state":null,"trustLevel":null,"moduleSetTag":"someModuleSetTag","alternateId":"someAlternateId","dataProducerIdentifier":"someDataProducerIdentifier"}]' } def 'Get complete Cm Handle details by Cm Handle id.'() { @@ -396,7 +354,7 @@ class NetworkCmProxyControllerSpec extends Specification { and: 'the response contains the cm handle state' assertContainsState(response) and: 'the content does not contain dmi properties' - !response.contentAsString.contains("some DMI property") + assert !response.contentAsString.contains("some DMI property") } def 'Get Cm Handle public properties by Cm Handle id.'() { @@ -405,13 +363,11 @@ class NetworkCmProxyControllerSpec extends Specification { and: 'some cm handle public properties' def publicProperties = ['public prop': 'some public property'] and: 'the service method is invoked with the cm handle id returning the cm handle public properties' - 1 * mockNetworkCmProxyDataService - .getCmHandlePublicProperties('some-cm-handle') >> publicProperties + 1 * mockNetworkCmProxyDataService.getCmHandlePublicProperties('some-cm-handle') >> publicProperties when: 'the cm handle properties api is invoked' - def response = mvc.perform( - get(cmHandlePropertiesEndpoint)).andReturn().response + def response = mvc.perform(get(cmHandlePropertiesEndpoint)).andReturn().response then: 'the correct response is returned' - response.status == HttpStatus.OK.value() + assert response.status == HttpStatus.OK.value() and: 'the response contains the public properties' assertContainsPublicProperties(response) } @@ -422,15 +378,13 @@ class NetworkCmProxyControllerSpec extends Specification { and: 'some cm handle composite state' def compositeState = compositeStateTestObject() and: 'the service method is invoked with the cm handle id returning the cm handle composite state' - 1 * mockNetworkCmProxyDataService - .getCmHandleCompositeState('some-cm-handle') >> compositeState + 1 * mockNetworkCmProxyDataService.getCmHandleCompositeState('some-cm-handle') >> compositeState when: 'the cm handle state api is invoked' - def response = mvc.perform( - get(cmHandlePropertiesEndpoint)).andReturn().response + def response = mvc.perform(get(cmHandlePropertiesEndpoint)).andReturn().response then: 'the correct response is returned' response.status == HttpStatus.OK.value() and: 'the response contains the cm handle state' - assertContainsState(response) + assert assertContainsState(response) } def 'Call execute cm handle searches with unrecognized condition name.'() { @@ -449,12 +403,9 @@ class NetworkCmProxyControllerSpec extends Specification { trustLevelPerCmHandle.put('ch-1', TrustLevel.COMPLETE) trustLevelPerCmHandle.put('ch-2', TrustLevel.NONE) when: 'the searches api is invoked' - def response = mvc.perform( - post(searchesEndpoint) - .contentType(MediaType.APPLICATION_JSON) - .content(jsonString)).andReturn().response + def response = mvc.perform(post(searchesEndpoint).contentType(MediaType.APPLICATION_JSON).content(jsonString)).andReturn().response then: 'an empty cm handle identifier is returned' - response.contentAsString == '[{"cmHandle":"ch-1","publicCmHandleProperties":[{"color":"yellow"}],"state":null,"trustLevel":"COMPLETE","moduleSetTag":null,"alternateId":null,"dataProducerIdentifier":null},{"cmHandle":"ch-2","publicCmHandleProperties":[{"color":"green"}],"state":null,"trustLevel":"NONE","moduleSetTag":null,"alternateId":null,"dataProducerIdentifier":null}]' + assert response.contentAsString == '[{"cmHandle":"ch-1","publicCmHandleProperties":[{"color":"yellow"}],"state":null,"trustLevel":"COMPLETE","moduleSetTag":null,"alternateId":null,"dataProducerIdentifier":null},{"cmHandle":"ch-2","publicCmHandleProperties":[{"color":"green"}],"state":null,"trustLevel":"NONE","moduleSetTag":null,"alternateId":null,"dataProducerIdentifier":null}]' } def 'Query for cm handles matching query parameters'() { @@ -463,68 +414,47 @@ class NetworkCmProxyControllerSpec extends Specification { and: 'the service method is invoked with module names and returns cm handle ids' 1 * mockNetworkCmProxyDataService.executeCmHandleIdSearch(_) >> ['ch-1', 'ch-2'] when: 'the searches api is invoked' - def response = mvc.perform( - post(searchesEndpoint) - .contentType(MediaType.APPLICATION_JSON) - .content('{}')).andReturn().response + def response = mvc.perform(post(searchesEndpoint).contentType(MediaType.APPLICATION_JSON).content('{}')).andReturn().response then: 'cm handle ids are returned' - response.contentAsString == '["ch-1","ch-2"]' + assert response.contentAsString == '["ch-1","ch-2"]' } def 'Query for cm handles with invalid request payload'() { when: 'the searches api is invoked' def searchesEndpoint = "$ncmpBasePathV1/ch/id-searches" def invalidInputData = '{invalidJson}' - def response = mvc.perform( - post(searchesEndpoint) - .contentType(MediaType.APPLICATION_JSON) - .content(invalidInputData)).andReturn().response + def response = mvc.perform(post(searchesEndpoint).contentType(MediaType.APPLICATION_JSON).content(invalidInputData)).andReturn().response then: 'BAD_REQUEST is returned' - response.getStatus() == 400 + assert response.getStatus() == 400 } def 'Patch resource data in pass-through running datastore.'() { given: 'patch resource data url' - def url = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-running" + - "?resourceIdentifier=parent/child" + def url = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=parent/child" when: 'patch data resource request is performed' - def response = mvc.perform( - patch(url) - .contentType(MediaType.APPLICATION_JSON) - .accept(MediaType.APPLICATION_JSON).content(requestBody) - ).andReturn().response + def response = mvc.perform(patch(url).contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON).content(requestBody)).andReturn().response then: 'ncmp service method to update resource is called' - 1 * mockNetworkCmProxyDataService.writeResourceDataPassThroughRunningForCmHandle('testCmHandle', - 'parent/child', PATCH, requestBody, 'application/json;charset=UTF-8', NO_AUTH_HEADER) + 1 * mockNetworkCmProxyDataService.writeResourceDataPassThroughRunningForCmHandle('testCmHandle', 'parent/child', PATCH, requestBody, 'application/json;charset=UTF-8', NO_AUTH_HEADER) and: 'the response status is OK' - response.status == HttpStatus.OK.value() + assert response.status == HttpStatus.OK.value() } def 'Delete resource data in pass-through running datastore.'() { given: 'delete resource data url' - def url = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-running" + - "?resourceIdentifier=parent/child" + def url = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=parent/child" when: 'delete data resource request is performed' - def response = mvc.perform( - delete(url) - .contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON)).andReturn().response + def response = mvc.perform(delete(url).contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON)).andReturn().response then: 'the ncmp service method to delete resource is called (with null as body)' - 1 * mockNetworkCmProxyDataService.writeResourceDataPassThroughRunningForCmHandle('testCmHandle', - 'parent/child', DELETE, null, 'application/json;charset=UTF-8', NO_AUTH_HEADER) + 1 * mockNetworkCmProxyDataService.writeResourceDataPassThroughRunningForCmHandle('testCmHandle', 'parent/child', DELETE, null, 'application/json;charset=UTF-8', NO_AUTH_HEADER) and: 'the response is No Content' - response.status == HttpStatus.NO_CONTENT.value() + assert response.status == HttpStatus.NO_CONTENT.value() } def 'Get resource data from DMI with valid topic i.e. async request for #scenario'() { given: 'resource data url' - def getUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:${datastoreInUrl}" + - "?resourceIdentifier=parent/child&options=(a=1,b=2)&topic=my-topic-name" + def getUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:${datastoreInUrl}?resourceIdentifier=parent/child&options=(a=1,b=2)&topic=my-topic-name" when: 'get data resource request is performed' - def response = mvc.perform( - get(getUrl) - .contentType(MediaType.APPLICATION_JSON) - .accept(MediaType.APPLICATION_JSON_VALUE) - ).andReturn().response + def response = mvc.perform(get(getUrl).contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON_VALUE)).andReturn().response then: 'async request id is generated' assert response.contentAsString.contains("requestId") where: 'the following parameters are used' @@ -535,17 +465,14 @@ class NetworkCmProxyControllerSpec extends Specification { def 'Getting module definitions for a module'() { when: 'get module definition request is performed with module name' - def response = mvc.perform( - get("$ncmpBasePathV1/ch/some-cmhandle/modules/definitions?module-name=sampleModuleName")) - .andReturn().response + def response = mvc.perform(get("$ncmpBasePathV1/ch/some-cmhandle/modules/definitions?module-name=sampleModuleName")).andReturn().response then: 'ncmp service method is invoked with correct parameters' mockNetworkCmProxyDataService.getModuleDefinitionsByCmHandleAndModule('some-cmhandle', 'sampleModuleName', _) - >> [new ModuleDefinition('sampleModuleName', '2021-10-03', - 'module sampleModuleName{ sample module content }')] + >> [new ModuleDefinition('sampleModuleName', '2021-10-03','module sampleModuleName{ sample module content }')] and: 'response contains an array with the module name, revision and content' response.getContentAsString() == '[{"moduleName":"sampleModuleName","revision":"2021-10-03","content":"module sampleModuleName{ sample module content }"}]' and: 'response returns an OK http code' - response.status == HttpStatus.OK.value() + assert response.status == HttpStatus.OK.value() } def 'Getting module definitions filtering on #scenario'() { @@ -590,17 +517,15 @@ class NetworkCmProxyControllerSpec extends Specification { def 'Get Resource Data from operational with or without descendants'() { given: 'resource data url with descendants #enabled' - def getUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:operational" + - "?resourceIdentifier=parent/child&include-descendants=${booleanValue}" + def getUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:operational?resourceIdentifier=parent/child&include-descendants=${booleanValue}" + and: 'the expected target' + def expectedCmResourceAddress = new CmResourceAddress(OPERATIONAL.datastoreName, 'testCmHandle', 'parent/child') when: 'get data resource request is performed' - def response = mvc.perform( - get(getUrl) - .contentType(MediaType.APPLICATION_JSON) - ).andReturn().response + def response = mvc.perform(get(getUrl).contentType(MediaType.APPLICATION_JSON)).andReturn().response then: 'the NCMP data service is called with getResourceDataOperational with #descendantsOption' - 1 * mockNetworkCmProxyDataService.getResourceDataForCmHandle(OPERATIONAL.datastoreName, 'testCmHandle', 'parent/child', descendantsOption) + 1 * mockNetworkCmProxyDataService.getResourceDataForCmHandle(expectedCmResourceAddress, descendantsOption) and: 'response status is Ok' - response.status == HttpStatus.OK.value() + assert response.status == HttpStatus.OK.value() where: 'the following parameters are used' booleanValue | descendantsOption false | OMIT_DESCENDANTS diff --git a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/handlers/NcmpDatastoreRequestHandlerSpec.groovy b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/handlers/NcmpDatastoreRequestHandlerSpec.groovy index ddeac519c3..bdd0e716d8 100644 --- a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/handlers/NcmpDatastoreRequestHandlerSpec.groovy +++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/handlers/NcmpDatastoreRequestHandlerSpec.groovy @@ -25,6 +25,7 @@ import org.onap.cps.ncmp.api.impl.exception.InvalidDatastoreException import org.onap.cps.ncmp.api.impl.exception.InvalidOperationException import org.onap.cps.ncmp.api.models.DataOperationDefinition import org.onap.cps.ncmp.api.models.DataOperationRequest +import org.onap.cps.ncmp.api.models.CmResourceAddress import org.onap.cps.ncmp.rest.exceptions.OperationNotSupportedException import org.onap.cps.ncmp.rest.executor.CpsNcmpTaskExecutor import spock.lang.Specification @@ -48,12 +49,13 @@ class NcmpDatastoreRequestHandlerSpec extends Specification { objectUnderTest.notificationFeatureEnabled = notificationFeatureEnabled and: 'a flag to track the network service call' def networkServiceMethodCalled = false + and: 'a CM resource address' + def cmResourceAddress = new CmResourceAddress('ds', 'ch1', 'resource1') and: 'the (mocked) service will use the flag to indicate if it is called' - mockNetworkCmProxyDataService.getResourceDataForCmHandle('ds', 'ch1', 'resource1', 'options', _, _, NO_AUTH_HEADER) >> { - networkServiceMethodCalled = true - } + mockNetworkCmProxyDataService.getResourceDataForCmHandle(cmResourceAddress, 'options', _, _, NO_AUTH_HEADER) >> + { networkServiceMethodCalled = true } when: 'get request is executed with topic = #topic' - objectUnderTest.executeRequest('ds', 'ch1', 'resource1', 'options', topic, false, NO_AUTH_HEADER) + objectUnderTest.executeRequest(cmResourceAddress, 'options', topic, false, NO_AUTH_HEADER) then: 'the task is executed in an async fashion or not' expectedCalls * spiedCpsNcmpTaskExecutor.executeTask(*_) and: 'the service request is invoked' diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java index 4230140d26..20545d711d 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java @@ -29,6 +29,7 @@ import org.onap.cps.ncmp.api.impl.inventory.CompositeState; import org.onap.cps.ncmp.api.impl.operations.OperationType; import org.onap.cps.ncmp.api.models.CmHandleQueryApiParameters; import org.onap.cps.ncmp.api.models.CmHandleQueryServiceParameters; +import org.onap.cps.ncmp.api.models.CmResourceAddress; import org.onap.cps.ncmp.api.models.DataOperationRequest; import org.onap.cps.ncmp.api.models.DmiPluginRegistration; import org.onap.cps.ncmp.api.models.DmiPluginRegistrationResponse; @@ -53,18 +54,14 @@ public interface NetworkCmProxyDataService { /** * Get resource data for given data store using dmi. * - * @param datastoreName datastore name - * @param cmHandleId cm handle identifier - * @param resourceIdentifier resource identifier + * @param cmResourceAddress target datastore, cm handle and resource identifier * @param optionsParamInQuery options query * @param topicParamInQuery topic name for (triggering) async responses * @param requestId unique requestId for async request * @param authorization contents of Authorization header, or null if not present * @return {@code Object} resource data */ - Object getResourceDataForCmHandle(String datastoreName, - String cmHandleId, - String resourceIdentifier, + Object getResourceDataForCmHandle(CmResourceAddress cmResourceAddress, String optionsParamInQuery, String topicParamInQuery, String requestId, @@ -73,15 +70,11 @@ public interface NetworkCmProxyDataService { /** * Get resource data for operational. * - * @param datastoreName datastore name - * @param cmHandleId cm handle identifier - * @param resourceIdentifier resource identifier + * @param cmResourceAddress target datastore, cm handle and resource identifier * @Link FetchDescendantsOption fetch descendants option * @return {@code Object} resource data */ - Object getResourceDataForCmHandle(String datastoreName, - String cmHandleId, - String resourceIdentifier, + Object getResourceDataForCmHandle(CmResourceAddress cmResourceAddress, FetchDescendantsOption fetchDescendantsOption); /** @@ -110,11 +103,11 @@ public interface NetworkCmProxyDataService { * @return {@code Object} return data */ Object writeResourceDataPassThroughRunningForCmHandle(String cmHandleId, - String resourceIdentifier, - OperationType operationType, - String requestBody, - String contentType, - String authorization); + String resourceIdentifier, + OperationType operationType, + String requestBody, + String contentType, + String authorization); /** * Retrieve module references for the given cm handle. diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java index 6ab6eab653..c15df9c869 100755 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java @@ -72,6 +72,7 @@ import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle; import org.onap.cps.ncmp.api.models.CmHandleQueryApiParameters; import org.onap.cps.ncmp.api.models.CmHandleQueryServiceParameters; import org.onap.cps.ncmp.api.models.CmHandleRegistrationResponse; +import org.onap.cps.ncmp.api.models.CmResourceAddress; import org.onap.cps.ncmp.api.models.DataOperationRequest; import org.onap.cps.ncmp.api.models.DmiPluginRegistration; import org.onap.cps.ncmp.api.models.DmiPluginRegistrationResponse; @@ -127,15 +128,12 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService } @Override - public Object getResourceDataForCmHandle(final String datastoreName, - final String cmHandleId, - final String resourceIdentifier, + public Object getResourceDataForCmHandle(final CmResourceAddress cmResourceAddress, final String optionsParamInQuery, final String topicParamInQuery, final String requestId, final String authorization) { - final ResponseEntity<?> responseEntity = dmiDataOperations.getResourceDataFromDmi(datastoreName, cmHandleId, - resourceIdentifier, + final ResponseEntity<?> responseEntity = dmiDataOperations.getResourceDataFromDmi(cmResourceAddress, optionsParamInQuery, topicParamInQuery, requestId, @@ -144,12 +142,12 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService } @Override - public Object getResourceDataForCmHandle(final String datastoreName, - final String cmHandleId, - final String resourceIdentifier, + public Object getResourceDataForCmHandle(final CmResourceAddress cmResourceAddress, final FetchDescendantsOption fetchDescendantsOption) { - return cpsDataService.getDataNodes(datastoreName, cmHandleId, resourceIdentifier, - fetchDescendantsOption).iterator().next(); + return cpsDataService.getDataNodes(cmResourceAddress.datastoreName(), + cmResourceAddress.cmHandleId(), + cmResourceAddress.resourceIdentifier(), + fetchDescendantsOption).iterator().next(); } @Override diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/service/CmNotificationSubscriptionPersistenceService.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/service/CmNotificationSubscriptionPersistenceService.java index 38f3db98de..6b02adb654 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/service/CmNotificationSubscriptionPersistenceService.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/service/CmNotificationSubscriptionPersistenceService.java @@ -57,4 +57,15 @@ public interface CmNotificationSubscriptionPersistenceService { */ Collection<String> getOngoingCmNotificationSubscriptionIds(final DatastoreType datastoreType, final String cmHandleId, final String xpath); + + /** + * Add or update cm notification subscription. + * + * @param datastoreType valid datastore type + * @param cmHandle cmhandle id + * @param xpath valid xpath + * @param newSubscriptionId subscription Id to be added + */ + void addOrUpdateCmNotificationSubscription(final DatastoreType datastoreType, final String cmHandle, + final String xpath, final String newSubscriptionId); } diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/service/CmNotificationSubscriptionPersistenceServiceImpl.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/service/CmNotificationSubscriptionPersistenceServiceImpl.java index 6e4997a4dd..2efd321b8d 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/service/CmNotificationSubscriptionPersistenceServiceImpl.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/events/cmsubscription/service/CmNotificationSubscriptionPersistenceServiceImpl.java @@ -20,15 +20,25 @@ package org.onap.cps.ncmp.api.impl.events.cmsubscription.service; +import static org.onap.cps.spi.FetchDescendantsOption.OMIT_DESCENDANTS; + +import java.io.Serializable; +import java.time.OffsetDateTime; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.onap.cps.api.CpsDataService; import org.onap.cps.api.CpsQueryService; +import org.onap.cps.cpspath.parser.CpsPathUtil; import org.onap.cps.ncmp.api.impl.operations.DatastoreType; -import org.onap.cps.spi.FetchDescendantsOption; import org.onap.cps.spi.model.DataNode; +import org.onap.cps.utils.ContentType; +import org.onap.cps.utils.JsonObjectMapper; import org.springframework.stereotype.Service; @Slf4j @@ -37,14 +47,16 @@ import org.springframework.stereotype.Service; public class CmNotificationSubscriptionPersistenceServiceImpl implements CmNotificationSubscriptionPersistenceService { private static final String SUBSCRIPTION_ANCHOR_NAME = "cm-data-subscriptions"; - private static final String IS_ONGOING_CM_SUBSCRIPTION_CPS_PATH_QUERY = """ + private static final String CM_SUBSCRIPTION_CPS_PATH_QUERY = """ /datastores/datastore[@name='%s']/cm-handles/cm-handle[@id='%s']/filters/filter[@xpath='%s'] """.trim(); private static final String SUBSCRIPTION_IDS_CPS_PATH_QUERY = """ //filter/subscriptionIds[text()='%s'] """.trim(); + private final JsonObjectMapper jsonObjectMapper; private final CpsQueryService cpsQueryService; + private final CpsDataService cpsDataService; @Override public boolean isOngoingCmNotificationSubscription(final DatastoreType datastoreType, final String cmHandleId, @@ -56,7 +68,7 @@ public class CmNotificationSubscriptionPersistenceServiceImpl implements CmNotif public boolean isUniqueSubscriptionId(final String subscriptionId) { return cpsQueryService.queryDataNodes(NCMP_DATASPACE_NAME, SUBSCRIPTION_ANCHOR_NAME, SUBSCRIPTION_IDS_CPS_PATH_QUERY.formatted(subscriptionId), - FetchDescendantsOption.OMIT_DESCENDANTS).isEmpty(); + OMIT_DESCENDANTS).isEmpty(); } @Override @@ -64,17 +76,59 @@ public class CmNotificationSubscriptionPersistenceServiceImpl implements CmNotif final String cmHandleId, final String xpath) { final String isOngoingCmSubscriptionCpsPathQuery = - IS_ONGOING_CM_SUBSCRIPTION_CPS_PATH_QUERY.formatted(datastoreType.getDatastoreName(), cmHandleId, + CM_SUBSCRIPTION_CPS_PATH_QUERY.formatted(datastoreType.getDatastoreName(), cmHandleId, escapeQuotesByDoublingThem(xpath)); final Collection<DataNode> existingNodes = cpsQueryService.queryDataNodes(NCMP_DATASPACE_NAME, CM_SUBSCRIPTIONS_ANCHOR_NAME, - isOngoingCmSubscriptionCpsPathQuery, FetchDescendantsOption.OMIT_DESCENDANTS); + isOngoingCmSubscriptionCpsPathQuery, OMIT_DESCENDANTS); if (existingNodes.isEmpty()) { return Collections.emptyList(); } return (List<String>) existingNodes.iterator().next().getLeaves().get("subscriptionIds"); } + @Override + public void addOrUpdateCmNotificationSubscription(final DatastoreType datastoreType, final String cmHandleId, + final String xpath, final String newSubscriptionId) { + if (isOngoingCmNotificationSubscription(datastoreType, cmHandleId, xpath)) { + final DataNode existingFilterNode = + cpsQueryService.queryDataNodes(NCMP_DATASPACE_NAME, SUBSCRIPTION_ANCHOR_NAME, + CM_SUBSCRIPTION_CPS_PATH_QUERY.formatted(datastoreType.getDatastoreName(), cmHandleId, + escapeQuotesByDoublingThem(xpath)), + OMIT_DESCENDANTS).iterator().next(); + final Collection<String> existingSubscriptionIds = getOngoingCmNotificationSubscriptionIds(datastoreType, + cmHandleId, xpath); + if (!existingSubscriptionIds.contains(newSubscriptionId)) { + updateListOfSubscribers(existingSubscriptionIds, newSubscriptionId, existingFilterNode); + } + } else { + addNewSubscriptionViaDatastore(datastoreType, cmHandleId, xpath, newSubscriptionId); + } + } + + private void addNewSubscriptionViaDatastore(final DatastoreType datastoreType, final String cmHandleId, + final String xpath, final String newSubscriptionId) { + final String parentXpath = "/datastores/datastore[@name='%s']/cm-handles" + .formatted(datastoreType.getDatastoreName()); + final String updatedJson = String.format("{\"cm-handle\":[{\"id\":\"%s\",\"filters\":{\"filter\":" + + "[{\"xpath\":\"%s\",\"subscriptionIds\":[\"%s\"]}]}}]}", cmHandleId, xpath, newSubscriptionId); + cpsDataService.saveData(NCMP_DATASPACE_NAME, SUBSCRIPTION_ANCHOR_NAME, parentXpath, updatedJson, + OffsetDateTime.now(), ContentType.JSON); + } + + private void updateListOfSubscribers(final Collection<String> existingSubscriptionIds, + final String newSubscriptionId, final DataNode existingFilterNode) { + final String parentXpath = CpsPathUtil.getNormalizedParentXpath(existingFilterNode.getXpath()); + final List<String> updatedSubscribers = new ArrayList<>(existingSubscriptionIds); + updatedSubscribers.add(newSubscriptionId); + final Map<String, Serializable> updatedLeaves = new HashMap<>(); + updatedLeaves.put("xpath", existingFilterNode.getLeaves().get("xpath")); + updatedLeaves.put("subscriptionIds", (Serializable) updatedSubscribers); + final String updatedJson = "{\"filter\":[" + jsonObjectMapper.asJsonString(updatedLeaves) + "]}"; + cpsDataService.updateNodeLeaves(NCMP_DATASPACE_NAME, SUBSCRIPTION_ANCHOR_NAME, parentXpath, updatedJson, + OffsetDateTime.now()); + } + private static String escapeQuotesByDoublingThem(final String inputXpath) { return inputXpath.replace("'", "''"); } diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java index 2a4bceca23..a9ec1241bc 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java @@ -42,6 +42,7 @@ import org.onap.cps.ncmp.api.impl.inventory.InventoryPersistence; import org.onap.cps.ncmp.api.impl.utils.DmiServiceUrlBuilder; import org.onap.cps.ncmp.api.impl.utils.data.operation.ResourceDataOperationRequestUtils; import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle; +import org.onap.cps.ncmp.api.models.CmResourceAddress; import org.onap.cps.ncmp.api.models.DataOperationRequest; import org.onap.cps.spi.exceptions.CpsException; import org.onap.cps.utils.JsonObjectMapper; @@ -70,9 +71,7 @@ public class DmiDataOperations extends DmiOperations { * This method fetches the resource data from operational data store for given cm handle * identifier on given resource using dmi client. * - * @param dataStoreName name of data store - * @param cmHandleId network resource identifier - * @param resourceId resource identifier + * @param cmResourceAddress target datastore, cm handle and resource identifier * @param optionsParamInQuery options query * @param topicParamInQuery topic name for (triggering) async responses * @param requestId requestId for async responses @@ -82,19 +81,17 @@ public class DmiDataOperations extends DmiOperations { @Timed(value = "cps.ncmp.dmi.get", description = "Time taken to fetch the resource data from operational data store for given cm handle " + "identifier on given resource using dmi client") - public ResponseEntity<Object> getResourceDataFromDmi(final String dataStoreName, - final String cmHandleId, - final String resourceId, + public ResponseEntity<Object> getResourceDataFromDmi(final CmResourceAddress cmResourceAddress, final String optionsParamInQuery, final String topicParamInQuery, final String requestId, final String authorization) { - final YangModelCmHandle yangModelCmHandle = getYangModelCmHandle(cmHandleId); + final YangModelCmHandle yangModelCmHandle = getYangModelCmHandle(cmResourceAddress.cmHandleId()); final CmHandleState cmHandleState = yangModelCmHandle.getCompositeState().getCmHandleState(); validateIfCmHandleStateReady(yangModelCmHandle, cmHandleState); - final String jsonRequestBody = getDmiRequestBody(READ, requestId, null, null, - yangModelCmHandle); - final String dmiResourceDataUrl = getDmiRequestUrl(dataStoreName, cmHandleId, resourceId, optionsParamInQuery, + final String jsonRequestBody = getDmiRequestBody(READ, requestId, null, null, yangModelCmHandle); + final String dmiResourceDataUrl = getDmiRequestUrl(cmResourceAddress.datastoreName(), + cmResourceAddress.cmHandleId(), cmResourceAddress.resourceIdentifier(), optionsParamInQuery, topicParamInQuery, yangModelCmHandle.resolveDmiServiceName(RequiredDmiService.DATA)); return dmiRestClient.postOperationWithJsonData(dmiResourceDataUrl, jsonRequestBody, READ, authorization); } diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/AlternateIdChecker.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/AlternateIdChecker.java index f14439f690..60f39fcea0 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/AlternateIdChecker.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/AlternateIdChecker.java @@ -115,23 +115,7 @@ public class AlternateIdChecker { for (final NcmpServiceCmHandle ncmpServiceCmHandle : newNcmpServiceCmHandles) { final String cmHandleId = ncmpServiceCmHandle.getCmHandleId(); final String proposedAlternateId = ncmpServiceCmHandle.getAlternateId(); - final boolean isAcceptable; - if (StringUtils.isEmpty(proposedAlternateId)) { - isAcceptable = true; - } else { - if (acceptedAlternateIds.contains(proposedAlternateId)) { - isAcceptable = false; - log.warn("Alternate id update ignored, cannot update cm handle {}, alternate id is already " - + "assigned to a different cm handle (in this batch)", cmHandleId); - } else { - if (Operation.CREATE.equals(operation)) { - isAcceptable = canApplyAlternateId(cmHandleId, NO_CURRENT_ALTERNATE_ID, proposedAlternateId); - } else { - isAcceptable = canApplyAlternateId(cmHandleId, proposedAlternateId); - } - } - } - if (isAcceptable) { + if (isProposedAlternateIdAcceptable(proposedAlternateId, operation, acceptedAlternateIds, cmHandleId)) { acceptedAlternateIds.add(proposedAlternateId); } else { rejectedCmHandleIds.add(cmHandleId); @@ -140,6 +124,22 @@ public class AlternateIdChecker { return rejectedCmHandleIds; } + private boolean isProposedAlternateIdAcceptable(final String proposedAlternateId, final Operation operation, + final Set<String> acceptedAlternateIds, final String cmHandleId) { + if (StringUtils.isEmpty(proposedAlternateId)) { + return true; + } + if (acceptedAlternateIds.contains(proposedAlternateId)) { + log.warn("Alternate id update ignored, cannot update cm handle {}, alternate id is already " + + "assigned to a different cm handle (in this batch)", cmHandleId); + return false; + } + if (Operation.CREATE.equals(operation)) { + return canApplyAlternateId(cmHandleId, NO_CURRENT_ALTERNATE_ID, proposedAlternateId); + } + return canApplyAlternateId(cmHandleId, proposedAlternateId); + } + private boolean alternateIdAlreadyInDb(final String alternateId) { try { inventoryPersistence.getCmHandleDataNodeByAlternateId(alternateId); diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/CmResourceAddress.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/CmResourceAddress.java new file mode 100644 index 0000000000..21d82fcf56 --- /dev/null +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/CmResourceAddress.java @@ -0,0 +1,25 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2024 Nordix Foundation + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.cps.ncmp.api.models; + +public record CmResourceAddress(String datastoreName, String cmHandleId, String resourceIdentifier) { + +} diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/init/AbstractModelLoader.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/init/AbstractModelLoader.java index a3ebec3c54..4cc8cdaa66 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/init/AbstractModelLoader.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/init/AbstractModelLoader.java @@ -70,24 +70,6 @@ abstract class AbstractModelLoader implements ModelLoader { } } - void waitUntilDataspaceIsAvailable(final String dataspaceName) { - log.info("Model Loader start-up, waiting for database to be ready"); - int attemptCount = 0; - while (cpsDataspaceService.getDataspace(dataspaceName) == null) { - if (attemptCount < maximumAttemptCount) { - try { - Thread.sleep(attemptCount * retryTimeMs); - log.info("Retrieving dataspace {} ... {} attempt(s) ", dataspaceName, ++attemptCount); - } catch (final InterruptedException e) { - Thread.currentThread().interrupt(); - } - } else { - throw new NcmpStartUpException("Retrieval of NCMP dataspace failed", - dataspaceName + " not available (yet)"); - } - } - } - void createSchemaSet(final String dataspaceName, final String schemaSetName, final String... resourceNames) { try { final Map<String, String> yangResourcesContentMap = createYangResourcesToContentMap(resourceNames); @@ -100,6 +82,17 @@ abstract class AbstractModelLoader implements ModelLoader { } } + void createDataspace(final String dataspaceName) { + try { + cpsDataspaceService.createDataspace(dataspaceName); + } catch (final AlreadyDefinedException alreadyDefinedException) { + log.debug("Dataspace already exists"); + } catch (final Exception exception) { + log.error("Creating dataspace failed: {} ", exception.getMessage()); + throw new NcmpStartUpException("Creating dataspace failed", exception.getMessage()); + } + } + void deleteUnusedSchemaSets(final String dataspaceName, final String... schemaSetNames) { for (final String schemaSetName : schemaSetNames) { try { diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/init/CmDataSubscriptionModelLoader.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/init/CmDataSubscriptionModelLoader.java index 4c31719a29..a0b7bd5826 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/init/CmDataSubscriptionModelLoader.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/init/CmDataSubscriptionModelLoader.java @@ -51,12 +51,12 @@ public class CmDataSubscriptionModelLoader extends AbstractModelLoader { @Override public void onboardOrUpgradeModel() { - waitUntilDataspaceIsAvailable(NCMP_DATASPACE_NAME); onboardSubscriptionModels(); log.info("Subscription Models onboarded successfully"); } private void onboardSubscriptionModels() { + createDataspace(NCMP_DATASPACE_NAME); createSchemaSet(NCMP_DATASPACE_NAME, SCHEMASET_NAME, MODEL_FILENAME); createAnchor(NCMP_DATASPACE_NAME, SCHEMASET_NAME, ANCHOR_NAME); createTopLevelDataNode(NCMP_DATASPACE_NAME, ANCHOR_NAME, REGISTRY_DATANODE_NAME); diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/init/InventoryModelLoader.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/init/InventoryModelLoader.java index d0d63ab8eb..7c25953f0d 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/init/InventoryModelLoader.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/init/InventoryModelLoader.java @@ -22,6 +22,7 @@ package org.onap.cps.ncmp.init; import static org.onap.cps.ncmp.api.impl.ncmppersistence.NcmpPersistence.NCMP_DATASPACE_NAME; import static org.onap.cps.ncmp.api.impl.ncmppersistence.NcmpPersistence.NCMP_DMI_REGISTRY_ANCHOR; +import static org.onap.cps.ncmp.api.impl.ncmppersistence.NcmpPersistence.NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME; import lombok.extern.slf4j.Slf4j; import org.onap.cps.api.CpsAnchorService; @@ -33,9 +34,9 @@ import org.springframework.stereotype.Service; @Slf4j @Service public class InventoryModelLoader extends AbstractModelLoader { - private static final String NEW_MODEL_FILE_NAME = "dmi-registry@2024-02-23.yang"; private static final String NEW_SCHEMA_SET_NAME = "dmi-registry-2024-02-23"; + private static final String REGISTRY_DATANODE_NAME = "dmi-registry"; public InventoryModelLoader(final CpsDataspaceService cpsDataspaceService, final CpsModuleService cpsModuleService, @@ -46,20 +47,24 @@ public class InventoryModelLoader extends AbstractModelLoader { @Override public void onboardOrUpgradeModel() { - waitUntilDataspaceIsAvailable(NCMP_DATASPACE_NAME); updateInventoryModel(); log.info("Inventory Model updated successfully"); } private void updateInventoryModel() { + createDataspace(NCMP_DATASPACE_NAME); + createDataspace(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME); createSchemaSet(NCMP_DATASPACE_NAME, NEW_SCHEMA_SET_NAME, NEW_MODEL_FILE_NAME); + createAnchor(NCMP_DATASPACE_NAME, NEW_SCHEMA_SET_NAME, NCMP_DMI_REGISTRY_ANCHOR); updateAnchorSchemaSet(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, NEW_SCHEMA_SET_NAME); + createTopLevelDataNode(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, REGISTRY_DATANODE_NAME); deleteOldButNotThePreviousSchemaSets(); } private void deleteOldButNotThePreviousSchemaSets() { //No schema sets passed in yet, but wil be required for future updates deleteUnusedSchemaSets(NCMP_DATASPACE_NAME); + deleteUnusedSchemaSets(NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME); } } diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy index 74016e4c0c..d47be6cd5c 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy @@ -24,6 +24,7 @@ package org.onap.cps.ncmp.api.impl import org.onap.cps.ncmp.api.models.DmiPluginRegistrationResponse +import org.onap.cps.ncmp.api.models.CmResourceAddress import static org.onap.cps.ncmp.api.impl.ncmppersistence.NcmpPersistence.NFP_OPERATIONAL_DATASTORE_DATASPACE_NAME import static org.onap.cps.ncmp.api.impl.ncmppersistence.NcmpPersistence.NCMP_DATASPACE_NAME @@ -121,35 +122,27 @@ class NetworkCmProxyDataServiceImplSpec extends Specification { >> { new ResponseEntity<>(HttpStatus.CREATED) } } - def 'Get resource data for pass-through operational from DMI.'() { + def 'Get resource data for from DMI.'() { given: 'cpsDataService returns valid data node' mockDataNode() + and: 'some cm resource address' + def cmResourceAddress = new CmResourceAddress('some datastore','some CM Handle', 'some resource Id') and: 'get resource data from DMI is called' - mockDmiDataOperations.getResourceDataFromDmi(PASSTHROUGH_OPERATIONAL.datastoreName,'testCmHandle', 'testResourceId', OPTIONS_PARAM, NO_TOPIC, NO_REQUEST_ID, NO_AUTH_HEADER) >> + mockDmiDataOperations.getResourceDataFromDmi(cmResourceAddress, OPTIONS_PARAM, NO_TOPIC, NO_REQUEST_ID, NO_AUTH_HEADER) >> new ResponseEntity<>('dmi-response', HttpStatus.OK) - when: 'get resource data operational for cm-handle is called' - def response = objectUnderTest.getResourceDataForCmHandle(PASSTHROUGH_OPERATIONAL.datastoreName, 'testCmHandle', 'testResourceId', OPTIONS_PARAM, NO_TOPIC, NO_REQUEST_ID, NO_AUTH_HEADER) + when: 'get resource data operational for the given cm resource address is called' + def response = objectUnderTest.getResourceDataForCmHandle(cmResourceAddress, OPTIONS_PARAM, NO_TOPIC, NO_REQUEST_ID, NO_AUTH_HEADER) then: 'DMI returns a json response' assert response == 'dmi-response' } - def 'Get resource data for pass-through running from DMI.'() { - given: 'cpsDataService returns valid data node' - mockDataNode() - and: 'DMI returns valid response and data' - mockDmiDataOperations.getResourceDataFromDmi(PASSTHROUGH_RUNNING.datastoreName, 'testCmHandle', 'testResourceId', OPTIONS_PARAM, NO_TOPIC, NO_REQUEST_ID, NO_AUTH_HEADER) >> - new ResponseEntity<>('{dmi-response}', HttpStatus.OK) - when: 'get resource data is called' - def response = objectUnderTest.getResourceDataForCmHandle(PASSTHROUGH_RUNNING.datastoreName, 'testCmHandle', 'testResourceId', OPTIONS_PARAM, NO_TOPIC, NO_REQUEST_ID, NO_AUTH_HEADER) - then: 'get resource data returns expected response' - assert response == '{dmi-response}' - } - def 'Get resource data for operational (cached) data.'() { given: 'CPS Data service returns some object(s)' mockCpsDataService.getDataNodes(OPERATIONAL.datastoreName, 'testCmHandle', 'testResourceId', FetchDescendantsOption.OMIT_DESCENDANTS) >> ['First Object', 'other Object'] + and: 'a cm resource address for the same datastore, cm handle and resource id' + def cmResourceAddress = new CmResourceAddress(OPERATIONAL.datastoreName, 'testCmHandle', 'testResourceId') when: 'get resource data is called' - def response = objectUnderTest.getResourceDataForCmHandle(OPERATIONAL.datastoreName, 'testCmHandle', 'testResourceId', FetchDescendantsOption.OMIT_DESCENDANTS) + def response = objectUnderTest.getResourceDataForCmHandle(cmResourceAddress, FetchDescendantsOption.OMIT_DESCENDANTS) then: 'get resource data returns teh first object from the data service' assert response == 'First Object' } diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/events/cmsubscription/service/CmNotificationSubscriptionPersistenceServiceImplSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/events/cmsubscription/service/CmNotificationSubscriptionPersistenceServiceImplSpec.groovy index eb0e1100ed..19ebc3d711 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/events/cmsubscription/service/CmNotificationSubscriptionPersistenceServiceImplSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/events/cmsubscription/service/CmNotificationSubscriptionPersistenceServiceImplSpec.groovy @@ -20,18 +20,22 @@ package org.onap.cps.ncmp.api.impl.events.cmsubscription.service - +import org.onap.cps.api.CpsDataService import org.onap.cps.api.CpsQueryService import org.onap.cps.ncmp.api.impl.operations.DatastoreType import org.onap.cps.spi.FetchDescendantsOption import org.onap.cps.spi.model.DataNode +import org.onap.cps.utils.JsonObjectMapper +import com.fasterxml.jackson.databind.ObjectMapper import spock.lang.Specification class CmNotificationSubscriptionPersistenceServiceImplSpec extends Specification { + def jsonObjectMapper = new JsonObjectMapper(new ObjectMapper()) def mockCpsQueryService = Mock(CpsQueryService) + def mockCpsDataService = Mock(CpsDataService) - def objectUnderTest = new CmNotificationSubscriptionPersistenceServiceImpl(mockCpsQueryService) + def objectUnderTest = new CmNotificationSubscriptionPersistenceServiceImpl(jsonObjectMapper, mockCpsQueryService, mockCpsDataService) def 'Check ongoing cm subscription #scenario'() { given: 'a valid cm subscription query' @@ -64,4 +68,43 @@ class CmNotificationSubscriptionPersistenceServiceImplSpec extends Specification 'datanodes present' | [new DataNode()] || false 'no datanodes present' | [] || true } + + def 'Add new subscriber to an ongoing cm notification subscription'() { + given: 'a valid cm subscription path query' + def cpsPathQuery = objectUnderTest.CM_SUBSCRIPTION_CPS_PATH_QUERY.formatted('ncmp-datastore:passthrough-running', 'ch-1', '/x/y'); + and: 'a dataNode exists for the given cps path query' + mockCpsQueryService.queryDataNodes('NCMP-Admin', 'cm-data-subscriptions', + cpsPathQuery, FetchDescendantsOption.OMIT_DESCENDANTS) >> [new DataNode(xpath: cpsPathQuery, leaves: ['xpath': '/x/y','subscriptionIds': ['sub-1']])] + when: 'the method to add/update cm notification subscription is called' + objectUnderTest.addOrUpdateCmNotificationSubscription(DatastoreType.PASSTHROUGH_RUNNING, 'ch-1','/x/y', 'newSubId') + then: 'data service method to update list of subscribers is called once' + 1 * mockCpsDataService.updateNodeLeaves( + 'NCMP-Admin', + 'cm-data-subscriptions', + '/datastores/datastore[@name=\'ncmp-datastore:passthrough-running\']/cm-handles/cm-handle[@id=\'ch-1\']/filters', + '{"filter":[{"xpath":"/x/y","subscriptionIds":["sub-1","newSubId"]}]}', _) + } + + def 'Add new cm notification subscription for #datastoreType'() { + given: 'a valid cm subscription path query' + def cpsPathQuery = objectUnderTest.CM_SUBSCRIPTION_CPS_PATH_QUERY.formatted(datastoreName, 'ch-1', '/x/y') + and: 'a parent node xpath for given path above' + def parentNodeXpath = '/datastores/datastore[@name=\'%s\']/cm-handles' + and: 'a datanode does not exist for the given cps path query' + mockCpsQueryService.queryDataNodes('NCMP-Admin', 'cm-data-subscriptions', + cpsPathQuery.formatted(datastoreName), + FetchDescendantsOption.OMIT_DESCENDANTS) >> [] + when: 'the method to add/update cm notification subscription is called' + objectUnderTest.addOrUpdateCmNotificationSubscription(datastoreType, 'ch-1','/x/y', 'newSubId') + then: 'data service method to update list of subscribers is called once with the correct parameters' + 1 * mockCpsDataService.saveData( + 'NCMP-Admin', + 'cm-data-subscriptions', + parentNodeXpath.formatted(datastoreName), + '{"cm-handle":[{"id":"ch-1","filters":{"filter":[{"xpath":"/x/y","subscriptionIds":["newSubId"]}]}}]}', _,_) + where: + scenario | datastoreType || datastoreName + 'passthrough_running' | DatastoreType.PASSTHROUGH_RUNNING || "ncmp-datastore:passthrough-running" + 'passthrough_operational' | DatastoreType.PASSTHROUGH_OPERATIONAL || "ncmp-datastore:passthrough-operational" + } }
\ No newline at end of file diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operations/DmiDataOperationsSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operations/DmiDataOperationsSpec.groovy index e154588a10..eb6c7a0f48 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operations/DmiDataOperationsSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operations/DmiDataOperationsSpec.groovy @@ -28,6 +28,7 @@ import org.onap.cps.ncmp.api.impl.exception.HttpClientRequestException import org.onap.cps.ncmp.api.impl.utils.DmiServiceUrlBuilder import org.onap.cps.ncmp.api.impl.utils.context.CpsApplicationContext import org.onap.cps.ncmp.api.models.DataOperationRequest +import org.onap.cps.ncmp.api.models.CmResourceAddress import org.onap.cps.ncmp.events.async1_0_0.DataOperationEvent import org.onap.cps.ncmp.utils.TestUtils import org.onap.cps.utils.JsonObjectMapper @@ -81,8 +82,8 @@ class DmiDataOperationsSpec extends DmiOperationsBaseSpec { mockDmiRestClient.postOperationWithJsonData(expectedUrl, expectedJson, READ, NO_AUTH_HEADER) >> responseFromDmi dmiServiceUrlBuilder.getDmiDatastoreUrl(_, _) >> expectedUrl when: 'get resource data is invoked' - def result = objectUnderTest.getResourceDataFromDmi(dataStore.datastoreName, cmHandleId, resourceIdentifier, - options, NO_TOPIC, NO_REQUEST_ID, NO_AUTH_HEADER) + def cmResourceAddress = new CmResourceAddress(dataStore.datastoreName, cmHandleId, resourceIdentifier) + def result = objectUnderTest.getResourceDataFromDmi(cmResourceAddress, options, NO_TOPIC, NO_REQUEST_ID, NO_AUTH_HEADER) then: 'the result is the response from the DMI service' assert result == responseFromDmi where: 'the following parameters are used' diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/AlternateIdCheckerSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/AlternateIdCheckerSpec.groovy index 0eabaa1d28..1e843676be 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/AlternateIdCheckerSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/AlternateIdCheckerSpec.groovy @@ -80,7 +80,8 @@ class AlternateIdCheckerSpec extends Specification { assert result == expectedRejectedCmHandleIds where: 'the following alternate ids are used' scenario | alt1 | alt2 | altAlreadyInDb || expectedRejectedCmHandleIds - 'no alternate ids' | '' | '' | ['dont matter'] || [] + 'blank alternate ids' | '' | '' | ['dont matter'] || [] + 'null alternate ids' | null | null | ['dont matter'] || [] 'new alternate ids' | 'fdn1' | 'fdn2' | ['other fdn'] || [] 'one already used alternate id' | 'fdn1' | 'fdn2' | ['fdn1'] || ['ch-1'] 'duplicate alternate id in batch' | 'fdn1' | 'fdn1' | ['dont matter'] || ['ch-2'] diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/init/AbstractModelLoaderSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/init/AbstractModelLoaderSpec.groovy index f122b57634..b0be29d933 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/init/AbstractModelLoaderSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/init/AbstractModelLoaderSpec.groovy @@ -81,14 +81,6 @@ class AbstractModelLoaderSpec extends Specification { assert logs.contains('test message') } - def 'Wait for non-existing dataspace'() { - when: 'wait for the dataspace' - objectUnderTest.waitUntilDataspaceIsAvailable('some dataspace') - then: 'a startup exception is thrown' - def thrown = thrown(NcmpStartUpException) - assert thrown.message.contains('Retrieval of NCMP dataspace failed') - } - def 'Create schema set.'() { when: 'creating a schema set' objectUnderTest.createSchemaSet('some dataspace','new name','cm-data-subscriptions@2024-02-12.yang') diff --git a/cps-parent/pom.xml b/cps-parent/pom.xml index 699bf3c9ac..b6e12c0082 100644 --- a/cps-parent/pom.xml +++ b/cps-parent/pom.xml @@ -159,7 +159,7 @@ <dependency> <groupId>com.github.spotbugs</groupId> <artifactId>spotbugs</artifactId> - <version>4.2.0</version> + <version>4.2.3</version> </dependency> <dependency> <groupId>${project.groupId}</groupId> diff --git a/cps-ri/src/main/resources/changelog/changelog-master.yaml b/cps-ri/src/main/resources/changelog/changelog-master.yaml index e10ce633d3..5909ef149b 100644 --- a/cps-ri/src/main/resources/changelog/changelog-master.yaml +++ b/cps-ri/src/main/resources/changelog/changelog-master.yaml @@ -19,44 +19,4 @@ databaseChangeLog: - include: file: changelog/db/changes/01-createCPSTables.yaml - include: - file: changelog/db/changes/02-loadData-dataspace.yaml - - include: - file: changelog/db/changes/03-loadData-schema-set.yaml - - include: - file: changelog/db/changes/04-loadData-anchor.yaml - - include: - file: changelog/db/changes/05-loadData-fragment.yaml - - include: - file: changelog/db/changes/06-delete-not-required-fragment-index.yaml - - include: - file: changelog/db/changes/07-update-yang-resource-checksums.yaml - - include: - file: changelog/db/changes/08-update-yang-resources.yaml - - include: - file: changelog/db/changes/09-loadData-dmi-registry-schema-set.yaml - - include: - file: changelog/db/changes/10-loadData-dmi-registry-fragment.yaml - - include: - file: changelog/db/changes/11-add-column-to-yang-resources-table.yaml - - include: - file: changelog/db/changes/12-delete-all-previous-dmi-registry-schema-set.yaml - - include: - file: changelog/db/changes/13-insert-dmi-registry-2022-02-10-schema-set.yaml - - include: - file: changelog/db/changes/14-loadData-dmi-registry-2022-05-10-schema-set.yaml - - include: - file: changelog/db/changes/15-rename-column-yang-resource-table.yaml - - include: - file: changelog/db/changes/16-insert-cm-handle-state.yaml - - include: - file: changelog/db/changes/17-add-index-to-schema-set-yang-resources.yaml - - include: - file: changelog/db/changes/18-cascade-delete-fragment-children.yaml - - include: - file: changelog/db/changes/19-delete-not-required-dataspace-id-from-fragment.yaml - - include: - file: changelog/db/changes/20-change-foreign-key-id-types-to-integer.yaml - - include: - file: changelog/db/changes/21-escape-quotes-in-xpath.yaml - - include: file: changelog/db/changes/22-fragment-id-sequence.yaml diff --git a/cps-ri/src/main/resources/changelog/db/changes/01-createCPSTables.yaml b/cps-ri/src/main/resources/changelog/db/changes/01-createCPSTables.yaml index 07ffb93196..c9fbf8faaf 100644 --- a/cps-ri/src/main/resources/changelog/db/changes/01-createCPSTables.yaml +++ b/cps-ri/src/main/resources/changelog/db/changes/01-createCPSTables.yaml @@ -14,6 +14,7 @@ # limitations under the License. # ============LICENSE_END========================================================= +# For legacy reasons, previous files for changeset Ids: 6, 11, 15, 17-21 have been condensed into this file. databaseChangeLog: - changeSet: id: 1-1 @@ -573,4 +574,242 @@ databaseChangeLog: referencedColumnNames: id referencedTableName: schema_node validate: true + - changeSet: + logicalFilePath: changelog/db/changes/06-delete-not-required-fragment-index.yaml + id: 6 + author: cps + comment: Drop unique index for dataspace and xpath on fragment table + changes: + - dropIndex: + indexName: UQ_FRAGMENT_XPATH + tableName: fragment + rollback: + - createIndex: + columns: + - column: + name: xpath + - column: + name: dataspace_id + indexName: UQ_FRAGMENT_XPATH + tableName: fragment + unique: true + - changeSet: + logicalFilePath: changelog/db/changes/11-add-column-to-yang-resources-table.yaml + id: 11 + label: add-module-name-and-revision-column + author: cps + changes: + - addColumn: + tableName: yang_resource + columns: + - column: + name: module_name + type: TEXT + - column: + name: revision + type: TEXT + - changeSet: + logicalFilePath: changelog/db/changes/11-add-column-to-yang-resources-table.yaml + id: 11.1 + label: update-previous-data-module-name-and-revision + author: cps + changes: + - sql: + sql: update yang_resource set module_name = 'dummy_module_name', revision = '2021-08-04' where module_name is null and revision is null + rollback: + sql: update yang_resource set module_name = null, revision = null where module_name = 'dummy_module_name' and revision = '2021-08-04' + - changeSet: + logicalFilePath: changelog/db/changes/15-rename-column-yang-resource-table.yaml + author: cps + label: yang-resource-rename-column + id: 15 + changes: + - renameColumn: + tableName: yang_resource + columnDataType: TEXT + oldColumnName: name + newColumnName: file_name + rollback: + - sql: + sql: alter table yang_resource rename column file_name to name + - changeSet: + logicalFilePath: changelog/db/changes/17-add-index-to-schema-set-yang-resources.yaml + author: cps + id: 17 + changes: + - createIndex: + columns: + - column: + name: schema_set_id + indexName: FKI_SCHEMA_SET_YANG_RESOURCES_SCHEMA_SET_ID_FK + tableName: schema_set_yang_resources + rollback: + - dropIndex: + indexName: FKI_SCHEMA_SET_YANG_RESOURCES_SCHEMA_SET_ID_FK + tableName: schema_set_yang_resources + - changeSet: + logicalFilePath: changelog/db/changes/18-cascade-delete-fragment-children.yaml + author: cps + id: 18 + changes: + - dropForeignKeyConstraint: + baseTableName: fragment + constraintName: fragment_parent_id_fkey + - addForeignKeyConstraint: + baseColumnNames: parent_id + baseTableName: fragment + constraintName: fragment_parent_id_fkey + deferrable: false + initiallyDeferred: false + onDelete: CASCADE + onUpdate: NO ACTION + referencedColumnNames: id + referencedTableName: fragment + validate: true + rollback: + - dropForeignKeyConstraint: + baseTableName: fragment + constraintName: fragment_parent_id_fkey + - addForeignKeyConstraint: + baseColumnNames: parent_id + baseTableName: fragment + constraintName: fragment_parent_id_fkey + deferrable: false + initiallyDeferred: false + onDelete: NO ACTION + onUpdate: NO ACTION + referencedColumnNames: id + referencedTableName: fragment + validate: true + - changeSet: + logicalFilePath: changelog/db/changes/19-delete-not-required-dataspace-id-from-fragment.yaml + id: 19-1 + author: cps + changes: + - dropIndex: + indexName: FKI_FRAGMENT_DATASPACE_ID_FK + tableName: fragment + rollback: + - createIndex: + columns: + - column: + name: dataspace_id + indexName: FKI_FRAGMENT_DATASPACE_ID_FK + tableName: fragment + - changeSet: + logicalFilePath: changelog/db/changes/19-delete-not-required-dataspace-id-from-fragment.yaml + id: 19-2 + author: cps + changes: + - dropUniqueConstraint: + constraintName: fragment_dataspace_id_anchor_id_xpath_key + tableName: fragment + - addUniqueConstraint: + columnNames: anchor_id, xpath + constraintName: fragment_anchor_id_xpath_key + tableName: fragment + rollback: + - dropUniqueConstraint: + constraintName: fragment_anchor_id_xpath_key + tableName: fragment + - addUniqueConstraint: + columnNames: dataspace_id, anchor_id, xpath + constraintName: fragment_dataspace_id_anchor_id_xpath_key + tableName: fragment + - changeSet: + logicalFilePath: changelog/db/changes/19-delete-not-required-dataspace-id-from-fragment.yaml + id: 19-3 + author: cps + changes: + - dropForeignKeyConstraint: + baseTableName: fragment + constraintName: fragment_dataspace_id_fkey + rollback: + - addForeignKeyConstraint: + baseColumnNames: dataspace_id + baseTableName: fragment + constraintName: fragment_dataspace_id_fkey + deferrable: false + initiallyDeferred: false + onDelete: NO ACTION + onUpdate: NO ACTION + referencedColumnNames: id + referencedTableName: dataspace + validate: true + - changeSet: + logicalFilePath: changelog/db/changes/19-delete-not-required-dataspace-id-from-fragment.yaml + id: 19-4 + author: cps + changes: + - dropColumn: + columnName: dataspace_id + tableName: fragment + rollback: + - addColumn: + tableName: fragment + columns: + - column: + name: dataspace_id + type: INTEGER + - sqlFile: + path: changelog/db/changes/19-repopulate-dataspace-id-for-rollback.sql + - addNotNullConstraint: + tableName: fragment + columnName: dataspace_id + columnDataType: INTEGER + + - changeSet: + logicalFilePath: changelog/db/changes/19-delete-not-required-dataspace-id-from-fragment.yaml + id: 19-5 + author: cps + changes: + - addNotNullConstraint: + tableName: fragment + columnName: anchor_id + columnDataType: BIGINT + rollback: + - dropNotNullConstraint: + tableName: fragment + columnName: anchor_id + columnDataType: BIGINT + - changeSet: + author: cps + logicalFilePath: changelog/db/changes/20-change-foreign-key-id-types-to-integer.yaml + id: 20 + changes: + - modifyDataType: + columnName: dataspace_id + newDataType: INTEGER + tableName: schema_set + - modifyDataType: + columnName: schema_set_id + newDataType: INTEGER + tableName: schema_set_yang_resources + - modifyDataType: + columnName: yang_resource_id + newDataType: INTEGER + tableName: schema_set_yang_resources + rollback: + - modifyDataType: + columnName: dataspace_id + newDataType: BIGINT + tableName: schema_set + - modifyDataType: + columnName: schema_set_id + newDataType: BIGINT + tableName: schema_set_yang_resources + - modifyDataType: + columnName: yang_resource_id + newDataType: BIGINT + tableName: schema_set_yang_resources + - changeSet: + logicalFilePath: changelog/db/changes/21-escape-quotes-in-xpath.yaml + id: 21 + author: cps + changes: + - sqlFile: + path: changelog/db/changes/21-escape-quotes-in-xpath-forward.sql + rollback: + - sqlFile: + path: changelog/db/changes/21-escape-quotes-in-xpath-rollback.sql
\ No newline at end of file diff --git a/cps-ri/src/main/resources/changelog/db/changes/02-loadData-dataspace.yaml b/cps-ri/src/main/resources/changelog/db/changes/02-loadData-dataspace.yaml deleted file mode 100644 index b5ee253121..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/02-loadData-dataspace.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (c) 2021 Bell Canada. -# ================================================================================ -# 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. -# ============LICENSE_END========================================================= - -databaseChangeLog: - - changeSet: - author: cps - label: xnf-data-preload - id: 2 - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/dataspace.csv' - onlyUpdate: 'false' - primaryKey: 'id' - quotchar: '"' - separator: '|' - tableName: 'dataspace'
\ No newline at end of file diff --git a/cps-ri/src/main/resources/changelog/db/changes/03-loadData-schema-set.yaml b/cps-ri/src/main/resources/changelog/db/changes/03-loadData-schema-set.yaml deleted file mode 100644 index 6ed28257be..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/03-loadData-schema-set.yaml +++ /dev/null @@ -1,69 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (c) 2021 Bell Canada. -# ================================================================================ -# 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. -# ============LICENSE_END========================================================= - -databaseChangeLog: - - changeSet: - author: cps - label: xnf-data-preload - id: 3.1 - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/schema_set.csv' - onlyUpdate: 'false' - primaryKey: 'id' - quotchar: '"' - separator: '|' - tableName: 'schema_set' - - - changeSet: - author: cps - label: xnf-data-preload - id: 3.2 - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/yang_resource.csv' - onlyUpdate: 'false' - primaryKey: 'id' - quotchar: '"' - separator: '|' - tableName: 'yang_resource' - columns: - - column: - header: name - name: name - type: STRING - - column: - header: content - name: content - type: STRING - - column: - header: checkstyle - name: checkstyle - type: STRING - - - changeSet: - author: cps - label: xnf-data-preload - id: 3.3 - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/schema_set_yang_resources.csv' - quotchar: '"' - primaryKey: 'schema_set_id,yang_resource_id' - separator: '|' - tableName: 'schema_set_yang_resources' - usePreparedStatements: true - diff --git a/cps-ri/src/main/resources/changelog/db/changes/04-loadData-anchor.yaml b/cps-ri/src/main/resources/changelog/db/changes/04-loadData-anchor.yaml deleted file mode 100644 index 04955cec6c..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/04-loadData-anchor.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (c) 2021 Bell Canada. -# ================================================================================ -# 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. -# ============LICENSE_END========================================================= - -databaseChangeLog: - - changeSet: - author: cps - label: xnf-data-preload - id: 4 - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/anchor.csv' - onlyUpdate: 'false' - primaryKey: 'id' - quotchar: '"' - separator: '|' - tableName: 'anchor' diff --git a/cps-ri/src/main/resources/changelog/db/changes/05-loadData-fragment.yaml b/cps-ri/src/main/resources/changelog/db/changes/05-loadData-fragment.yaml deleted file mode 100644 index bd95a00e37..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/05-loadData-fragment.yaml +++ /dev/null @@ -1,84 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (C) 2021-2022 Nordix Foundation -# Modifications Copyright (C) 2021 Pantheon.tech -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# ============LICENSE_END========================================================= - -databaseChangeLog: - - changeSet: - author: cps - label: xnf-data-preload - id: 5 - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/fragment.csv' - onlyUpdate: 'false' - primaryKey: 'id' - quotchar: '"' - separator: '|' - tableName: 'fragment' - columns: - - column: - header: id - name: id - type: NUMERIC - - column: - header: xpath - name: xpath - type: STRING - - column: - header: attributes - name: attributes - type: CLOB - - column: - header: anchor_id - name: anchor_id - type: NUMERIC - - column: - header: parent_id - name: parent_id - type: NUMERIC - - column: - header: dataspace_id - name: dataspace_id - type: NUMERIC - - column: - header: schema_node_id - name: schema_node_id - type: NUMERIC - - - changeSet: - author: cps - label: xnf-data-preload - id: 5.1 - changes: - - sql: - comment: Fixes the id sequence after data insert with predefined ids - dbms: postgresql - sql: ALTER SEQUENCE IF EXISTS fragment_id_seq RESTART WITH 200 - - - changeSet: - author: cps - label: dmi-registry-schema-preload - id: 5.2 - changes: - - sql: - comment: Sets sequence value to current max value of the ID from the fragment table - dbms: postgresql - sql: SELECT setval('fragment_id_seq', (SELECT MAX(ID) FROM fragment)) - rollback: - sql: SELECT setval('fragment_id_seq', 200) - comment: Rollback Sequence to restart with the sequence number in the last changeset
\ No newline at end of file diff --git a/cps-ri/src/main/resources/changelog/db/changes/06-delete-not-required-fragment-index.yaml b/cps-ri/src/main/resources/changelog/db/changes/06-delete-not-required-fragment-index.yaml deleted file mode 100644 index bfb0cf411c..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/06-delete-not-required-fragment-index.yaml +++ /dev/null @@ -1,35 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (c) 2021 Bell Canada. -# ================================================================================ -# 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. -# ============LICENSE_END========================================================= - -databaseChangeLog: - - changeSet: - id: 6 - author: cps - comment: Drop unique index for dataspace and xpath on fragment table - changes: - - dropIndex: - indexName: UQ_FRAGMENT_XPATH - tableName: fragment - rollback: - - createIndex: - columns: - - column: - name: xpath - - column: - name: dataspace_id - indexName: UQ_FRAGMENT_XPATH - tableName: fragment - unique: true diff --git a/cps-ri/src/main/resources/changelog/db/changes/07-update-yang-resource-checksums.yaml b/cps-ri/src/main/resources/changelog/db/changes/07-update-yang-resource-checksums.yaml deleted file mode 100644 index 2ef1f16818..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/07-update-yang-resource-checksums.yaml +++ /dev/null @@ -1,45 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (C) 2021 Nordix Foundation -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# ============LICENSE_END========================================================= - -databaseChangeLog: - - changeSet: - id: 7 - author: cps - comment: Change checsum on yang resource due to new hash algoritm - changes: - - update: - columns: - - column: - name: checksum - value: 417a7b14944f6236ad0e2b1ef956158c050cff9b74e3561ca80af32d11be240b - tableName: yang_resource - where: checksum='fd06e465f26f1e7d0253bbf77e7e55e1' - - update: - columns: - - column: - name: checksum - value: 436fef591eba7f38d1a0c5e3cbd3c122f01ab41dfab37cc5a9cbca1ed53b29fb - tableName: yang_resource - where: checksum='0337045143fa2e592243243f82699b93' - - update: - columns: - - column: - name: checksum - value: 25516798613f862ad20831e59ba02b75ecdc9c6f5547ed5d90bda76143bf0112 - tableName: yang_resource - where: checksum='57d603ee9ab0c49355ad0695c0709c93' diff --git a/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources-cps-ran-model-forward.sql b/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources-cps-ran-model-forward.sql deleted file mode 100644 index 6bbcd96d3c..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources-cps-ran-model-forward.sql +++ /dev/null @@ -1,1306 +0,0 @@ -update yang_resource set -name = 'cps-ran-schema-model@2021-01-28.yang', -checksum = 'a825c571c4a1d585a7f09a3716dedbfab1146abc4725b75a16f9ac89440bf46b', -content = 'module cps-ran-schema-model { - yang-version 1.1; - namespace "org:onap:ccsdk:features:sdnr:northbound:cps-ran-schema-model"; - prefix rn; - - import ietf-inet-types { - prefix inet; - } - import ietf-yang-types { - prefix yang; - } - - organization - "Open Network Automation Platform - ONAP - <https://www.onap.org>"; - contact - "Editors: - Sandeep Shah - <mailto:sandeep.shah@ibm.com> - - Swaminathan Seetharaman - <mailto:swaminathan.seetharaman@wipro.com>"; - description - "This module contains a collection of YANG definitions for capturing - relationships among managed elements of the radio access Network - to be stored in ONAP CPS platform. - - Copyright 2020-2021 IBM. - - 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."; - - revision 2021-01-28 { - description - "CPS RAN Network YANG Model for ONAP/O-RAN POC"; - reference - "https://wiki.onap.org/display/DW/E2E+Network+Slicing+Use+Case+in+R7+Guilin"; - } - - typedef usageState { - type enumeration { - enum IDLE { - description - "TODO"; - } - enum ACTIVE { - description - "TODO"; - } - enum BUSY { - description - "TODO"; - } - } - description - "It describes whether or not the resource is actively in - use at a specific instant, and if so, whether or not it has spare - capacity for additional users at that instant. The value is READ-ONLY."; - reference - "ITU T Recommendation X.731"; - } - - typedef Mcc { - type string; - description - "The mobile country code consists of three decimal digits, - The first digit of the mobile country code identifies the geographic - region (the digits 1 and 8 are not used):"; - reference - "3GPP TS 23.003 subclause 2.2 and 12.1"; - } - - typedef Mnc { - type string; - description - "The mobile network code consists of two or three - decimal digits (for example: MNC of 001 is not the same as MNC of 01)"; - reference - "3GPP TS 23.003 subclause 2.2 and 12.1"; - } - - typedef Nci { - type string; - description - "NR Cell Identity. The NCI shall be of fixed length of 36 bits - and shall be coded using full hexadecimal representation. - The exact coding of the NCI is the responsibility of each PLMN operator"; - reference - "TS 23.003"; - } - - typedef OperationalState { - type enumeration { - enum DISABLED { - value 0; - description - "The resource is totally inoperable."; - } - enum ENABLED { - value 1; - description - "The resource is partially or fully operable."; - } - } - description - "TODO"; - reference - "3GPP TS 28.625 and ITU-T X.731"; - } - - typedef AvailabilityStatus { - type enumeration { - enum IN_TEST { - description - "TODO"; - } - enum FAILED { - description - "TODO"; - } - enum POWER_OFF { - description - "TODO"; - } - enum OFF_LINE { - description - "TODO"; - } - enum OFF_DUTY { - description - "TODO"; - } - enum DEPENDENCY { - description - "TODO"; - } - enum DEGRADED { - description - "TODO"; - } - enum NOT_INSTALLED { - description - "TODO"; - } - enum LOG_FULL { - description - "TODO"; - } - } - description - "TODO"; - reference - "TODO"; - } - - typedef CellState { - type enumeration { - enum IDLE { - description - "TODO"; - } - enum INACTIVE { - description - "TODO"; - } - enum ACTIVE { - description - "TODO"; - } - } - description - "TODO"; - reference - "TODO"; - } - - typedef SNssai { - type string; - description - "Single Network Slice Selection Assistance Information."; - reference - "TS 23.501 clause 5.15.2"; - } - - typedef Sst { - type uint8; - description - "TODO"; - reference - "TODO"; - } - - typedef Nrpci { - type uint32; - description - "Physical Cell Identity (PCI) of the NR cell."; - reference - "TS 36.211 subclause 6.11"; - } - - typedef Tac { - type int32 { - range "0..16777215"; - } - description - "Tracking Area Code"; - reference - "TS 23.003 clause 19.4.2.3"; - } - - typedef AmfRegionId { - type string; - description - ""; - reference - "clause 2.10.1 of 3GPP TS 23.003"; - } - - typedef AmfSetId { - type string; - description - ""; - reference - "clause 2.10.1 of 3GPP TS 23.003"; - } - - typedef AmfPointer { - type string; - description - ""; - reference - "clause 2.10.1 of 3GPP TS 23.003"; - } - - // type definitions especially for core NFs - - typedef NfType { - type enumeration { - enum NRF { - description - "TODO"; - } - enum UDM { - description - "TODO"; - } - enum AMF { - description - "TODO"; - } - enum SMF { - description - "TODO"; - } - enum AUSF { - description - "TODO"; - } - enum NEF { - description - "TODO"; - } - enum PCF { - description - "TODO"; - } - enum SMSF { - description - "TODO"; - } - enum NSSF { - description - "TODO"; - } - enum UDR { - description - "TODO"; - } - enum LMF { - description - "TODO"; - } - enum GMLC { - description - "TODO"; - } - enum 5G_EIR { - description - "TODO"; - } - enum SEPP { - description - "TODO"; - } - enum UPF { - description - "TODO"; - } - enum N3IWF { - description - "TODO"; - } - enum AF { - description - "TODO"; - } - enum UDSF { - description - "TODO"; - } - enum BSF { - description - "TODO"; - } - enum CHF { - description - "TODO"; - } - } - description - "TODO"; - } - - typedef NotificationType { - type enumeration { - enum N1_MESSAGES { - description - "TODO"; - } - enum N2_INFORMATION { - description - "TODO"; - } - enum LOCATION_NOTIFICATION { - description - "TODO"; - } - } - description - "TODO"; - } - - typedef Load { - type uint8 { - range "0..100"; - } - description - "Latest known load information of the NF, percentage "; - } - - typedef N1MessageClass { - type enumeration { - enum 5GMM { - description - "TODO"; - } - enum SM { - description - "TODO"; - } - enum LPP { - description - "TODO"; - } - enum SMS { - description - "TODO"; - } - } - description - "TODO"; - } - - typedef N2InformationClass { - type enumeration { - enum SM { - description - "TODO"; - } - enum NRPPA { - description - "TODO"; - } - enum PWS { - description - "TODO"; - } - enum PWS_BCAL { - description - "TODO"; - } - enum PWS_RF { - description - "TODO"; - } - } - description - "TODO"; - reference - "TODO"; - } - - typedef NsiId { - type string; - description - "TODO"; - } - - typedef UeMobilityLevel { - type enumeration { - enum STATIONARY { - description - "TODO"; - } - enum NOMADIC { - description - "TODO"; - } - enum RESTRICTED_MOBILITY { - description - "TODO"; - } - enum FULLY_MOBILITY { - description - "TODO"; - } - } - description - "TODO"; - reference - "TODO"; - } - - typedef ResourceSharingLevel { - type enumeration { - enum SHARED { - description - "TODO"; - } - enum NOT_SHARED { - description - "TODO"; - } - } - description - "TODO"; - reference - "TODO"; - } - - typedef TxDirection { - type enumeration { - enum DL { - description - "TODO"; - } - enum UL { - description - "TODO"; - } - enum DL_AND_UL { - description - "TODO"; - } - } - description - "TODO"; - reference - "TODO"; - } - - typedef DistinguishedName { // TODO is this equivalent to TS 32.300 ? - type string; - description - "Represents the international standard for the representation - of Distinguished Name (RFC 4512). - The format of the DistinguishedName REGEX is: - {AttributeType = AttributeValue} - - AttributeType consists of alphanumeric and hyphen (OIDs not allowed). - All other characters are restricted. - The Attribute value cannot contain control characters or the - following characters : > < ; \" + , (Comma) and White space - The Attribute value can contain the following characters if they - are excaped : > < ; \" + , (Comma) and White space - The Attribute value can contain control characters if its an escaped - double digit hex number. - Examples could be - UID=nobody@example.com,DC=example,DC=com - CN=John Smith,OU=Sales,O=ACME Limited,L=Moab,ST=Utah,C=US"; - reference - "RFC 4512 Lightweight Directory Access Protocol (LDAP): - Directory Information Models"; - } // recheck regexp it doesn''t handle posix [:cntrl:] - - typedef QOffsetRange { - type int8; - units "dB"; - description - "TODO"; - reference - "TODO"; - } - - typedef QuotaType { - type enumeration { - enum STRICT { - description - "TODO"; - } - enum FLOAT { - description - "TODO"; - } - } - description - "TODO"; - } - - typedef CyclicPrefix { - type enumeration { - enum NORMAL { - description - "TODO"; - } - enum EXTENDED { - description - "TODO"; - } - } - description - "TODO"; - } - - grouping PLMNInfo { - description - "The PLMNInfo data type define a S-NSSAI member in a specific PLMNId, and it have - two attributes PLMNId and S-NSSAI (PLMNId, S-NSSAI). The PLMNId represents a data type that - is comprised of mcc (mobile country code) and mnc (mobile network code), (See TS 23.003 - subclause 2.2 and 12.1) and S-NSSAI represents an data type, that is comprised of an SST - (Slice/Service type) and an optional SD (Slice Differentiator) field, (See TS 23.003 [13])."; - uses PLMNId; - list sNSSAIList { - key "sNssai"; - uses sNSSAIConfig; - description "List of sNSSAIs"; - } - } - - grouping ManagedNFProfile { - description - "Defines profile for managed NF"; - reference - "3GPP TS 23.501"; - leaf idx { - type uint32; - description - "TODO"; - reference - "3GPP TS 23.501"; - } - leaf nfInstanceID { - type yang:uuid; - config false; - mandatory false; - description - "This parameter defines profile for managed NF. - The format of the NF Instance ID shall be a - Universally Unique Identifier (UUID) version 4, - as described in IETF RFC 4122 "; - } - leaf-list nfType { - type NfType; - config false; - min-elements 1; - description - "Type of the Network Function"; - } - leaf hostAddr { - type inet:host; - mandatory false; - description - "Host address of a NF"; - } - leaf authzInfo { - type string; - description - "This parameter defines NF Specific Service authorization - information. It shall include the NF type (s) and NF realms/origins - allowed to consume NF Service(s) of NF Service Producer."; - reference - "See TS 23.501"; - } - leaf location { - type string; - description - "Information about the location of the NF instance - (e.g. geographic location, data center) defined by operator"; - reference - "TS 29.510"; - } - leaf capacity { - type uint16; - mandatory false; - description - "This parameter defines static capacity information - in the range of 0-65535, expressed as a weight relative to other - NF instances of the same type; if capacity is also present in the - nfServiceList parameters, those will have precedence over this value."; - reference - "TS 29.510"; - } - leaf nFSrvGroupId { - type string; - description - "This parameter defines identity of the group that is - served by the NF instance. - May be config false or true depending on the ManagedFunction. - Config=true for Udrinfo. Config=false for UdmInfo and AusfInfo. - Shall be present if ../nfType = UDM or AUSF or UDR. "; - reference - "TS 29.510"; - } - leaf-list supportedDataSetIds { - type enumeration { - enum SUBSCRIPTION { - description - "TODO"; - } - enum POLICY { - description - "TODO"; - } - enum EXPOSURE { - description - "TODO"; - } - enum APPLICATION { - description - "TODO"; - } - } - description - "List of supported data sets in the UDR instance. - May be present if ../nfType = UDR"; - reference - "TS 29.510"; - } - leaf-list smfServingAreas { - type string; - description - "Defines the SMF service area(s) the UPF can serve. - Shall be present if ../nfType = UPF"; - reference - "TS 29.510"; - } - leaf priority { - type uint16; - description - "This parameter defines Priority (relative to other NFs - of the same type) in the range of 0-65535, to be used for NF selection; - lower values indicate a higher priority. If priority is also present - in the nfServiceList parameters, those will have precedence over - this value. Shall be present if ../nfType = AMF "; - reference - "TS 29.510"; - } - } - - - grouping PLMNId { - description - "TODO"; - reference - "TS 23.658"; - leaf mcc { - type Mcc; - mandatory true; - description - "TODO"; - } - leaf mnc { - type Mnc; - mandatory true; - description - "TODO"; - } - } - - grouping AmfIdentifier { - description - "The AMFI is constructed from an AMF Region ID, - an AMF Set ID and an AMF Pointer. - The AMF Region ID identifies the region, - the AMF Set ID uniquely identifies the AMF Set within the AMF Region, and - the AMF Pointer uniquely identifies the AMF within the AMF Set. "; - leaf amfRegionId { - type AmfRegionId; - description - "TODO"; - } - leaf amfSetId { - type AmfSetId; - description - "TODO"; - } - leaf amfPointer { - type AmfPointer; - description - "TODO"; - } - } - - grouping DefaultNotificationSubscription { - description - "TODO"; - leaf notificationType { - type NotificationType; - description - "TODO"; - } - leaf callbackUri { - type inet:uri; - description - "TODO"; - } - leaf n1MessageClass { - type N1MessageClass; - description - "TODO"; - } - leaf n2InformationClass { - type N2InformationClass; - description - "TODO"; - } - } - - grouping Ipv4AddressRange { - description - "TODO"; - leaf start { - type inet:ipv4-address; - description - "TODO"; - } - leaf end { - type inet:ipv4-address; - description - "TODO"; - } - } - - grouping Ipv6PrefixRange { - description - "TODO"; - leaf start { - type inet:ipv6-prefix; - description - "TODO"; - } - leaf end { - type inet:ipv6-prefix; - description - "TODO"; - } - } - - grouping AddressWithVlan { - description - "TODO"; - leaf ipAddress { - type inet:ip-address; - description - "TODO"; - } - leaf vlanId { - type uint16; - description - "TODO"; - } - } - - grouping ManagedElementGroup { - description - "Abstract class representing telecommunications resources."; - leaf dnPrefix { - type DistinguishedName; - description - "Provides naming context and splits the DN into a DN Prefix and Local DN"; - } - leaf userLabel { - type string; - description - "A user-friendly name of this object."; - } - leaf locationName { - type string; - config false; - description - "The physical location (e.g. an address) of an entity"; - } - leaf-list managedBy { - type DistinguishedName; - config false; - description - "Relates to the role played by ManagementSystem"; - } - leaf-list managedElementTypeList { - type string; - config false; - min-elements 1; - description - "The type of functionality provided by the ManagedElement. - It may represent one ME functionality or a combination of - Two examples of allowed values are: - - NodeB; - - HLR, VLR."; - } - } // Managed Element grouping - - grouping NearRTRICGroup { - description - "Abstract class representing Near RT RIC."; - leaf dnPrefix { - type DistinguishedName; - description - "Provides naming context and splits the DN into a DN Prefix and Local DN"; - } - leaf userLabel { - type string; - description - "A user-friendly name of this object."; - } - leaf locationName { - type string; - config false; - description - "The physical location (e.g. an address) of an entity"; - } - leaf gNBId { - type int64 { range "0..4294967295"; } - config false; - description "Identifies a gNB within a PLMN. The gNB Identifier (gNB ID) - is part of the NR Cell Identifier (NCI) of the gNB cells."; - reference "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413"; - } - - list pLMNInfoList { - uses PLMNInfo; - key "mcc mnc"; - description "The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs that can be served by the nearRTRIC."; - } - list RRMPolicyRatio { - key id; - leaf id { - type string; - description - "Key leaf"; - } - container attributes { - uses RRMPolicyRatioGroup; - } - description " The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both - standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC. For details see subclause 4.3.36."; - } - - } // Near RT RIC grouping - - - - grouping Configuration{ - leaf configParameter{ - type string; - description "Type of the configuration parameter"; - } - leaf configValue{ - type int64; - description "Identifies the configuration to be done for the network elements under the NearRTRIC"; - - } - } - - - grouping GNBDUFunctionGroup { - description - "Represents the GNBDUFunction IOC."; - reference - "3GPP TS 28.541"; - - leaf gNBId { - type int64 { - range "0..4294967295"; - } - config false; - mandatory false; - description - "Identifies a gNB within a PLMN. The gNB Identifier (gNB ID) - is part of the NR Cell Identifier (NCI) of the gNB cells."; - reference - "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413"; - } - leaf gNBIdLength { - type int32 { - range "22..32"; - } - mandatory false; - description - "Indicates the number of bits for encoding the gNB ID."; - reference - "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413"; - } - leaf gNBDUId { - type int64 { - range "0..68719476735"; - } - mandatory false; - description - "Uniquely identifies the DU at least within a gNB."; - reference - "3GPP TS 38.473"; - } - leaf gNBDUName { - type string { - length "1..150"; - } - description - "Identifies the Distributed Unit of an NR node"; - reference - "3GPP TS 38.473"; - } - list RRMPolicyRatio { - key id; - leaf id { - type string; - description - "Key leaf"; - } - container attributes { - uses RRMPolicyRatioGroup; - } - description " The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both - standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC. For details see subclause 4.3.36."; - } - } - - grouping NRCellDUGroup { - description - "Represents the NRCellDU IOC."; - reference - "3GPP TS 28.541"; - list RRMPolicyRatio { - key id; - leaf id { - type string; - description - "Key leaf"; - } - container attributes { - uses RRMPolicyRatioGroup; - } - description " The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both - standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC. For details see subclause 4.3.36."; - } - leaf cellLocalId { - type int32 { - range "0..16383"; - } - mandatory false; - description - "Identifies an NR cell of a gNB. Together with the - corresponding gNB identifier in forms the NR Cell Identity (NCI)."; - reference - "NCI in 3GPP TS 38.300"; - } - list pLMNInfoList { - key "mcc mnc"; - min-elements 1; - description - "The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs that - can be served by the NR cell, and which S-NSSAIs that can be supported by the NR cell for - corresponding PLMN in case of network slicing feature is supported. The plMNId of the first - entry of the list is the PLMNId used to construct the nCGI for the NR cell."; - uses PLMNInfo; - } - leaf nRPCI { - type int32 { - range "0..1007"; - } - mandatory false; - description - "The Physical Cell Identity (PCI) of the NR cell."; - reference - "3GPP TS 36.211"; - } - leaf nRTAC { - type Tac; - description - "The common 5GS Tracking Area Code for the PLMNs."; - reference - "3GPP TS 23.003, 3GPP TS 38.473"; - } - } // grouping - - grouping rRMPolicyMemberGroup { - description - "TODO"; - uses PLMNId; - leaf sNSSAI { - type SNssai; - description - "This data type represents an RRM Policy member that will be part of a - rRMPolicyMemberList. A RRMPolicyMember is defined by its pLMNId and sNSSAI (S-NSSAI). - The members in a rRMPolicyMemberList are assigned a specific amount of RRM resources - based on settings in RRMPolicy."; - } - } - - grouping RRMPolicyRatioGroup { - - uses RRMPolicy_Group; // Inherits RRMPolicy_ - - leaf quotaType { - type QuotaType; - mandatory false; - description "The type of the quota which allows to allocate resources as - strictly usable for defined slice(s) (strict quota) or allows that - resources to be used by other slice(s) when defined slice(s) do not - need them (float quota)."; - } - - leaf rRMPolicyMaxRatio { - type uint8; - mandatory false; - units percent; - description "The RRM policy setting the maximum percentage of radio - resources to be allocated to the corresponding S-NSSAI list. This - quota can be strict or float quota. Strict quota means resources are - not allowed for other sNSSAIs even when they are not used by the - defined sNSSAIList. Float quota resources can be used by other sNSSAIs - when the defined sNSSAIList do not need them. Value 0 indicates that - there is no maximum limit."; - } - - leaf rRMPolicyMinRatio { - type uint8; - mandatory false; - units percent; - description "The RRM policy setting the minimum percentage of radio - resources to be allocated to the corresponding S-NSSAI list. This - quota can be strict or float quota. Strict quota means resources are - not allowed for other sNSSAIs even when they are not used by the - defined sNSSAIList. Float quota resources can be used by other sNSSAIs - when the defined sNSSAIList do not need them. Value 0 indicates that - there is no minimum limit."; - } - leaf rRMPolicyDedicatedRatio { - type uint8; - units percent; - description "Dedicated Ration."; - } - description "Represents the RRMPolicyRatio concrete IOC."; - } - - - grouping sNSSAIConfig{ - leaf sNssai { - type string; - description "s-NSSAI of a network slice."; - reference "3GPP TS 23.003"; - } - leaf status { - type string; - description "status of s-NSSAI"; - } - list configData{ - uses Configuration; - key "configParameter"; - description "List of configurations to be done at the network elements"; - } - } - - grouping RRMPolicy_Group { - description - "This IOC represents the properties of an abstract RRMPolicy. The RRMPolicy_ IOC - needs to be subclassed to be instantiated. It defines two attributes apart from those - inherited from Top IOC, the resourceType attribute defines type of resource (PRB, RRC - connected users, DRB usage etc.) and the rRMPolicyMemberList attribute defines the - RRMPolicyMember(s)that are subject to this policy. An RRM resource (defined in resourceType - attribute) is located in NRCellDU, NRCellCU, GNBDUFunction, GNBCUCPFunction or in - GNBCUUPFunction. The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in TS 28.541 Figure 4.2.1.2-1. This RRM framework allows adding new policies, - both standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC."; - leaf resourceType { - type string; - mandatory false; - description - "The resourceType attribute defines type of resource (PRB, RRC connected users, - DRB usage etc.) that is subject to policy. Valid values are ''PRB'', ''RRC'' or ''DRB''"; - } - list rRMPolicyMemberList { - key "idx"; - leaf idx { - type uint32; - description - "TODO"; - } - description - "It represents the list of RRMPolicyMember (s) that the managed object - is supporting. A RRMPolicyMember <<dataType>> include the PLMNId <<dataType>> - and S-NSSAI <<dataType>>."; - uses rRMPolicyMemberGroup; - } - } // grouping - - grouping GNBCUUPFunctionGroup { - description - "Represents the GNBCUUPFunction IOC."; - reference - "3GPP TS 28.541"; - - list RRMPolicyRatio { - key id; - leaf id { - type string; - description - "Key leaf"; - } - container attributes { - uses RRMPolicyRatioGroup; - } - description " The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both - standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC. For details see subclause 4.3.36."; - } - leaf gNBCUUPId { - type uint64 { - range "0..68719476735"; - } - config false; - mandatory false; - description - "Identifies the gNB-CU-UP at least within a gNB-CU-CP"; - reference - "''gNB-CU-UP ID'' in subclause 9.3.1.15 of 3GPP TS 38.463"; - } - leaf gNBId { - type int64 { - range "0..4294967295"; - } - mandatory false; - description - "Indicates the number of bits for encoding the gNB Id."; - reference - "gNB Id in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413"; - } - list pLMNInfoList { - key "mcc mnc"; - description - "The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs that - can be served by the GNBCUUPFunction and which S-NSSAIs can be supported by the - GNBCUUPFunction for corresponding PLMN in case of network slicing feature is supported"; - uses PLMNInfo; - } - } // grouping - - grouping GNBCUCPFunctionGroup { - description - "Represents the GNBCUCPFunction IOC."; - reference - "3GPP TS 28.541"; - list RRMPolicyRatio { - key id; - leaf id { - type string; - description - "Key leaf"; - } - container attributes { - uses RRMPolicyRatioGroup; - } - description " The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both - standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC. For details see subclause 4.3.36."; - } - leaf gNBId { - type int64 { - range "0..4294967295"; - } - mandatory false; - description - "Identifies a gNB within a PLMN. The gNB Identifier (gNB ID) - is part of the NR Cell Identifier (NCI) of the gNB cells."; - reference - "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413"; - } - leaf gNBIdLength { - type int32 { - range "22..32"; - } - mandatory false; - description - "Indicates the number of bits for encoding the gNB ID."; - reference - "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413"; - } - leaf gNBCUName { - type string { - length "1..150"; - } - mandatory false; - description - "Identifies the Central Unit of an gNB."; - reference - "3GPP TS 38.473"; - } - list pLMNId { - key "mcc mnc"; - min-elements 1; - max-elements 1; - description - "The PLMN identifier to be used as part of the global RAN - node identity."; - uses PLMNId; - } - } // grouping - - grouping NRCellCUGroup { - description - "Represents the NRCellCU IOC."; - reference - "3GPP TS 28.541"; - leaf cellLocalId { - type int32 { - range "0..16383"; - } - mandatory false; - description - "Identifies an NR cell of a gNB. Together with corresponding - gNB ID it forms the NR Cell Identifier (NCI)."; - } - list pLMNInfoList { - key "mcc mnc"; - min-elements 1; - description - "The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs - that can be served by the NR cell, and which S-NSSAIs that can be supported by the - NR cell for corresponding PLMN in case of network slicing feature is supported."; - uses PLMNInfo; - // Note: Whether the attribute pLMNId in the pLMNInfo can be writable depends on the implementation. - } - list RRMPolicyRatio { - key id; - leaf id { - type string; - description - "Key leaf"; - } - container attributes { - uses RRMPolicyRatioGroup; - } - description " The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both - standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC. For details see subclause 4.3.36."; - } - } // grouping NRCellCUGroup - - grouping NRCellRelationGroup { - description - "Represents the NRCellRelation IOC."; - reference - "3GPP TS 28.541"; - leaf nRTCI { - type uint64; - description - "Target NR Cell Identifier. It consists of NR Cell - Identifier (NCI) and Physical Cell Identifier of the target NR cell - (nRPCI)."; - } - } -} -' -where name = 'cps-ran-schema-model2021-01-28.yang' -and checksum = '436fef591eba7f38d1a0c5e3cbd3c122f01ab41dfab37cc5a9cbca1ed53b29fb'; diff --git a/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources-cps-ran-model-rollback.sql b/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources-cps-ran-model-rollback.sql deleted file mode 100644 index d8cfed2237..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources-cps-ran-model-rollback.sql +++ /dev/null @@ -1,1303 +0,0 @@ -update yang_resource set -name = 'cps-ran-schema-model2021-01-28.yang', -checksum = '436fef591eba7f38d1a0c5e3cbd3c122f01ab41dfab37cc5a9cbca1ed53b29fb', -content = 'module cps-ran-schema-model { - yang-version 1.1; - namespace "org:onap:ccsdk:features:sdnr:northbound:cps-ran-schema-model"; - prefix rn; - - import ietf-inet-types { - prefix inet; - } - import ietf-yang-types { - prefix yang; - } - - organization - "Open Network Automation Platform - ONAP - <https://www.onap.org>"; - contact - "Editors: - Sandeep Shah - <mailto:sandeep.shah@ibm.com> - - Swaminathan Seetharaman - <mailto:swaminathan.seetharaman@wipro.com>"; - description - "This module contains a collection of YANG definitions for capturing - relationships among managed elements of the radio access Network - to be stored in ONAP CPS platform. - - Copyright 2020-2021 IBM. - - 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."; - - revision 2021-01-28 { - description - "CPS RAN Network YANG Model for ONAP/O-RAN POC"; - reference - "https://wiki.onap.org/display/DW/E2E+Network+Slicing+Use+Case+in+R7+Guilin"; - } - - typedef usageState { - type enumeration { - enum IDLE { - description - "TODO"; - } - enum ACTIVE { - description - "TODO"; - } - enum BUSY { - description - "TODO"; - } - } - description - "It describes whether or not the resource is actively in - use at a specific instant, and if so, whether or not it has spare - capacity for additional users at that instant. The value is READ-ONLY."; - reference - "ITU T Recommendation X.731"; - } - - typedef Mcc { - type string; - description - "The mobile country code consists of three decimal digits, - The first digit of the mobile country code identifies the geographic - region (the digits 1 and 8 are not used):"; - reference - "3GPP TS 23.003 subclause 2.2 and 12.1"; - } - - typedef Mnc { - type string; - description - "The mobile network code consists of two or three - decimal digits (for example: MNC of 001 is not the same as MNC of 01)"; - reference - "3GPP TS 23.003 subclause 2.2 and 12.1"; - } - - typedef Nci { - type string; - description - "NR Cell Identity. The NCI shall be of fixed length of 36 bits - and shall be coded using full hexadecimal representation. - The exact coding of the NCI is the responsibility of each PLMN operator"; - reference - "TS 23.003"; - } - - typedef OperationalState { - type enumeration { - enum DISABLED { - value 0; - description - "The resource is totally inoperable."; - } - enum ENABLED { - value 1; - description - "The resource is partially or fully operable."; - } - } - description - "TODO"; - reference - "3GPP TS 28.625 and ITU-T X.731"; - } - - typedef AvailabilityStatus { - type enumeration { - enum IN_TEST { - description - "TODO"; - } - enum FAILED { - description - "TODO"; - } - enum POWER_OFF { - description - "TODO"; - } - enum OFF_LINE { - description - "TODO"; - } - enum OFF_DUTY { - description - "TODO"; - } - enum DEPENDENCY { - description - "TODO"; - } - enum DEGRADED { - description - "TODO"; - } - enum NOT_INSTALLED { - description - "TODO"; - } - enum LOG_FULL { - description - "TODO"; - } - } - description - "TODO"; - reference - "TODO"; - } - - typedef CellState { - type enumeration { - enum IDLE { - description - "TODO"; - } - enum INACTIVE { - description - "TODO"; - } - enum ACTIVE { - description - "TODO"; - } - } - description - "TODO"; - reference - "TODO"; - } - - typedef SNssai { - type string; - description - "Single Network Slice Selection Assistance Information."; - reference - "TS 23.501 clause 5.15.2"; - } - - typedef Sst { - type uint8; - description - "TODO"; - reference - "TODO"; - } - - typedef Nrpci { - type uint32; - description - "Physical Cell Identity (PCI) of the NR cell."; - reference - "TS 36.211 subclause 6.11"; - } - - typedef Tac { - type int32 { - range "0..16777215"; - } - description - "Tracking Area Code"; - reference - "TS 23.003 clause 19.4.2.3"; - } - - typedef AmfRegionId { - type string; - description - ""; - reference - "clause 2.10.1 of 3GPP TS 23.003"; - } - - typedef AmfSetId { - type string; - description - ""; - reference - "clause 2.10.1 of 3GPP TS 23.003"; - } - - typedef AmfPointer { - type string; - description - ""; - reference - "clause 2.10.1 of 3GPP TS 23.003"; - } - - // type definitions especially for core NFs - - typedef NfType { - type enumeration { - enum NRF { - description - "TODO"; - } - enum UDM { - description - "TODO"; - } - enum AMF { - description - "TODO"; - } - enum SMF { - description - "TODO"; - } - enum AUSF { - description - "TODO"; - } - enum NEF { - description - "TODO"; - } - enum PCF { - description - "TODO"; - } - enum SMSF { - description - "TODO"; - } - enum NSSF { - description - "TODO"; - } - enum UDR { - description - "TODO"; - } - enum LMF { - description - "TODO"; - } - enum GMLC { - description - "TODO"; - } - enum 5G_EIR { - description - "TODO"; - } - enum SEPP { - description - "TODO"; - } - enum UPF { - description - "TODO"; - } - enum N3IWF { - description - "TODO"; - } - enum AF { - description - "TODO"; - } - enum UDSF { - description - "TODO"; - } - enum BSF { - description - "TODO"; - } - enum CHF { - description - "TODO"; - } - } - description - "TODO"; - } - - typedef NotificationType { - type enumeration { - enum N1_MESSAGES { - description - "TODO"; - } - enum N2_INFORMATION { - description - "TODO"; - } - enum LOCATION_NOTIFICATION { - description - "TODO"; - } - } - description - "TODO"; - } - - typedef Load { - type uint8 { - range "0..100"; - } - description - "Latest known load information of the NF, percentage "; - } - - typedef N1MessageClass { - type enumeration { - enum 5GMM { - description - "TODO"; - } - enum SM { - description - "TODO"; - } - enum LPP { - description - "TODO"; - } - enum SMS { - description - "TODO"; - } - } - description - "TODO"; - } - - typedef N2InformationClass { - type enumeration { - enum SM { - description - "TODO"; - } - enum NRPPA { - description - "TODO"; - } - enum PWS { - description - "TODO"; - } - enum PWS_BCAL { - description - "TODO"; - } - enum PWS_RF { - description - "TODO"; - } - } - description - "TODO"; - reference - "TODO"; - } - - typedef NsiId { - type string; - description - "TODO"; - } - - typedef UeMobilityLevel { - type enumeration { - enum STATIONARY { - description - "TODO"; - } - enum NOMADIC { - description - "TODO"; - } - enum RESTRICTED_MOBILITY { - description - "TODO"; - } - enum FULLY_MOBILITY { - description - "TODO"; - } - } - description - "TODO"; - reference - "TODO"; - } - - typedef ResourceSharingLevel { - type enumeration { - enum SHARED { - description - "TODO"; - } - enum NOT_SHARED { - description - "TODO"; - } - } - description - "TODO"; - reference - "TODO"; - } - - typedef TxDirection { - type enumeration { - enum DL { - description - "TODO"; - } - enum UL { - description - "TODO"; - } - enum DL_AND_UL { - description - "TODO"; - } - } - description - "TODO"; - reference - "TODO"; - } - - typedef DistinguishedName { // TODO is this equivalent to TS 32.300 ? - type string; - description - "Represents the international standard for the representation - of Distinguished Name (RFC 4512). - The format of the DistinguishedName REGEX is: - {AttributeType = AttributeValue} - - AttributeType consists of alphanumeric and hyphen (OIDs not allowed). - All other characters are restricted. - The Attribute value cannot contain control characters or the - following characters : > < ; " + , (Comma) and White space - The Attribute value can contain the following characters if they - are excaped : > < ; " + , (Comma) and White space - The Attribute value can contain control characters if its an escaped - double digit hex number. - Examples could be - UID=nobody@example.com,DC=example,DC=com - CN=John Smith,OU=Sales,O=ACME Limited,L=Moab,ST=Utah,C=US"; - reference - "RFC 4512 Lightweight Directory Access Protocol (LDAP): - Directory Information Models"; - } // recheck regexp it doesn''''t handle posix [:cntrl:] - - typedef QOffsetRange { - type int8; - units "dB"; - description - "TODO"; - reference - "TODO"; - } - - typedef QuotaType { - type enumeration { - enum STRICT { - description - "TODO"; - } - enum FLOAT { - description - "TODO"; - } - } - description - "TODO"; - } - - typedef CyclicPrefix { - type enumeration { - enum NORMAL { - description - "TODO"; - } - enum EXTENDED { - description - "TODO"; - } - } - description - "TODO"; - } - - grouping PLMNInfo { - description - "The PLMNInfo data type define a S-NSSAI member in a specific PLMNId, and it have - two attributes PLMNId and S-NSSAI (PLMNId, S-NSSAI). The PLMNId represents a data type that - is comprised of mcc (mobile country code) and mnc (mobile network code), (See TS 23.003 - subclause 2.2 and 12.1) and S-NSSAI represents an data type, that is comprised of an SST - (Slice/Service type) and an optional SD (Slice Differentiator) field, (See TS 23.003 [13])."; - uses PLMNId; - list sNSSAIList { - key "sNssai"; - uses sNSSAIConfig; - description "List of sNSSAIs"; - } - } - - grouping ManagedNFProfile { - description - "Defines profile for managed NF"; - reference - "3GPP TS 23.501"; - leaf idx { - type uint32; - description - "TODO"; - reference - "3GPP TS 23.501"; - } - leaf nfInstanceID { - type yang:uuid; - config false; - mandatory false; - description - "This parameter defines profile for managed NF. - The format of the NF Instance ID shall be a - Universally Unique Identifier (UUID) version 4, - as described in IETF RFC 4122 "; - } - leaf-list nfType { - type NfType; - config false; - min-elements 1; - description - "Type of the Network Function"; - } - leaf hostAddr { - type inet:host; - mandatory false; - description - "Host address of a NF"; - } - leaf authzInfo { - type string; - description - "This parameter defines NF Specific Service authorization - information. It shall include the NF type (s) and NF realms/origins - allowed to consume NF Service(s) of NF Service Producer."; - reference - "See TS 23.501"; - } - leaf location { - type string; - description - "Information about the location of the NF instance - (e.g. geographic location, data center) defined by operator"; - reference - "TS 29.510"; - } - leaf capacity { - type uint16; - mandatory false; - description - "This parameter defines static capacity information - in the range of 0-65535, expressed as a weight relative to other - NF instances of the same type; if capacity is also present in the - nfServiceList parameters, those will have precedence over this value."; - reference - "TS 29.510"; - } - leaf nFSrvGroupId { - type string; - description - "This parameter defines identity of the group that is - served by the NF instance. - May be config false or true depending on the ManagedFunction. - Config=true for Udrinfo. Config=false for UdmInfo and AusfInfo. - Shall be present if ../nfType = UDM or AUSF or UDR. "; - reference - "TS 29.510"; - } - leaf-list supportedDataSetIds { - type enumeration { - enum SUBSCRIPTION { - description - "TODO"; - } - enum POLICY { - description - "TODO"; - } - enum EXPOSURE { - description - "TODO"; - } - enum APPLICATION { - description - "TODO"; - } - } - description - "List of supported data sets in the UDR instance. - May be present if ../nfType = UDR"; - reference - "TS 29.510"; - } - leaf-list smfServingAreas { - type string; - description - "Defines the SMF service area(s) the UPF can serve. - Shall be present if ../nfType = UPF"; - reference - "TS 29.510"; - } - leaf priority { - type uint16; - description - "This parameter defines Priority (relative to other NFs - of the same type) in the range of 0-65535, to be used for NF selection; - lower values indicate a higher priority. If priority is also present - in the nfServiceList parameters, those will have precedence over - this value. Shall be present if ../nfType = AMF "; - reference - "TS 29.510"; - } - } - - - grouping PLMNId { - description - "TODO"; - reference - "TS 23.658"; - leaf mcc { - type Mcc; - mandatory true; - description - "TODO"; - } - leaf mnc { - type Mnc; - mandatory true; - description - "TODO"; - } - } - - grouping AmfIdentifier { - description - "The AMFI is constructed from an AMF Region ID, - an AMF Set ID and an AMF Pointer. - The AMF Region ID identifies the region, - the AMF Set ID uniquely identifies the AMF Set within the AMF Region, and - the AMF Pointer uniquely identifies the AMF within the AMF Set. "; - leaf amfRegionId { - type AmfRegionId; - description - "TODO"; - } - leaf amfSetId { - type AmfSetId; - description - "TODO"; - } - leaf amfPointer { - type AmfPointer; - description - "TODO"; - } - } - - grouping DefaultNotificationSubscription { - description - "TODO"; - leaf notificationType { - type NotificationType; - description - "TODO"; - } - leaf callbackUri { - type inet:uri; - description - "TODO"; - } - leaf n1MessageClass { - type N1MessageClass; - description - "TODO"; - } - leaf n2InformationClass { - type N2InformationClass; - description - "TODO"; - } - } - - grouping Ipv4AddressRange { - description - "TODO"; - leaf start { - type inet:ipv4-address; - description - "TODO"; - } - leaf end { - type inet:ipv4-address; - description - "TODO"; - } - } - - grouping Ipv6PrefixRange { - description - "TODO"; - leaf start { - type inet:ipv6-prefix; - description - "TODO"; - } - leaf end { - type inet:ipv6-prefix; - description - "TODO"; - } - } - - grouping AddressWithVlan { - description - "TODO"; - leaf ipAddress { - type inet:ip-address; - description - "TODO"; - } - leaf vlanId { - type uint16; - description - "TODO"; - } - } - - grouping ManagedElementGroup { - description - "Abstract class representing telecommunications resources."; - leaf dnPrefix { - type DistinguishedName; - description - "Provides naming context and splits the DN into a DN Prefix and Local DN"; - } - leaf userLabel { - type string; - description - "A user-friendly name of this object."; - } - leaf locationName { - type string; - config false; - description - "The physical location (e.g. an address) of an entity"; - } - leaf-list managedBy { - type DistinguishedName; - config false; - description - "Relates to the role played by ManagementSystem"; - } - leaf-list managedElementTypeList { - type string; - config false; - min-elements 1; - description - "The type of functionality provided by the ManagedElement. - It may represent one ME functionality or a combination of - Two examples of allowed values are: - - NodeB; - - HLR, VLR."; - } - } // Managed Element grouping - - grouping NearRTRICGroup { - description - "Abstract class representing Near RT RIC."; - leaf dnPrefix { - type DistinguishedName; - description - "Provides naming context and splits the DN into a DN Prefix and Local DN"; - } - leaf userLabel { - type string; - description - "A user-friendly name of this object."; - } - leaf locationName { - type string; - config false; - description - "The physical location (e.g. an address) of an entity"; - } - leaf gNBId { - type int64 { range "0..4294967295"; } - config false; - description "Identifies a gNB within a PLMN. The gNB Identifier (gNB ID) - is part of the NR Cell Identifier (NCI) of the gNB cells."; - reference "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413"; - } - - list pLMNInfoList { - uses PLMNInfo; - key "mcc mnc"; - description "The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs that can be served by the nearRTRIC."; - } - list RRMPolicyRatio { - key id; - leaf id { - type string; - description - "Key leaf"; - } - container attributes { - uses RRMPolicyRatioGroup; - } - description " The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both - standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC. For details see subclause 4.3.36."; - } - - } // Near RT RIC grouping - - - - grouping Configuration{ - leaf configParameter{ - type string; - description "Type of the configuration parameter"; - } - leaf configValue{ - type int64; - description "Identifies the configuration to be done for the network elements under the NearRTRIC"; - - } - } - - - grouping GNBDUFunctionGroup { - description - "Represents the GNBDUFunction IOC."; - reference - "3GPP TS 28.541"; - - leaf gNBId { - type int64 { - range "0..4294967295"; - } - config false; - mandatory false; - description - "Identifies a gNB within a PLMN. The gNB Identifier (gNB ID) - is part of the NR Cell Identifier (NCI) of the gNB cells."; - reference - "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413"; - } - leaf gNBIdLength { - type int32 { - range "22..32"; - } - mandatory false; - description - "Indicates the number of bits for encoding the gNB ID."; - reference - "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413"; - } - leaf gNBDUId { - type int64 { - range "0..68719476735"; - } - mandatory false; - description - "Uniquely identifies the DU at least within a gNB."; - reference - "3GPP TS 38.473"; - } - leaf gNBDUName { - type string { - length "1..150"; - } - description - "Identifies the Distributed Unit of an NR node"; - reference - "3GPP TS 38.473"; - } - list RRMPolicyRatio { - key id; - leaf id { - type string; - description - "Key leaf"; - } - container attributes { - uses RRMPolicyRatioGroup; - } - description " The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both - standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC. For details see subclause 4.3.36."; - } - } - - grouping NRCellDUGroup { - description - "Represents the NRCellDU IOC."; - reference - "3GPP TS 28.541"; - list RRMPolicyRatio { - key id; - leaf id { - type string; - description - "Key leaf"; - } - container attributes { - uses RRMPolicyRatioGroup; - } - description " The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both - standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC. For details see subclause 4.3.36."; - } - leaf cellLocalId { - type int32 { - range "0..16383"; - } - mandatory false; - description - "Identifies an NR cell of a gNB. Together with the - corresponding gNB identifier in forms the NR Cell Identity (NCI)."; - reference - "NCI in 3GPP TS 38.300"; - } - list pLMNInfoList { - key "mcc mnc"; - min-elements 1; - description - "The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs that - can be served by the NR cell, and which S-NSSAIs that can be supported by the NR cell for - corresponding PLMN in case of network slicing feature is supported. The plMNId of the first - entry of the list is the PLMNId used to construct the nCGI for the NR cell."; - uses PLMNInfo; - } - leaf nRPCI { - type int32 { - range "0..1007"; - } - mandatory false; - description - "The Physical Cell Identity (PCI) of the NR cell."; - reference - "3GPP TS 36.211"; - } - leaf nRTAC { - type Tac; - description - "The common 5GS Tracking Area Code for the PLMNs."; - reference - "3GPP TS 23.003, 3GPP TS 38.473"; - } - } // grouping - - grouping rRMPolicyMemberGroup { - description - "TODO"; - uses PLMNId; - leaf sNSSAI { - type SNssai; - description - "This data type represents an RRM Policy member that will be part of a - rRMPolicyMemberList. A RRMPolicyMember is defined by its pLMNId and sNSSAI (S-NSSAI). - The members in a rRMPolicyMemberList are assigned a specific amount of RRM resources - based on settings in RRMPolicy."; - } - } - - grouping RRMPolicyRatioGroup { - - uses RRMPolicy_Group; // Inherits RRMPolicy_ - - leaf quotaType { - type QuotaType; - mandatory false; - description "The type of the quota which allows to allocate resources as - strictly usable for defined slice(s) (strict quota) or allows that - resources to be used by other slice(s) when defined slice(s) do not - need them (float quota)."; - } - - leaf rRMPolicyMaxRatio { - type uint8; - mandatory false; - units percent; - description "The RRM policy setting the maximum percentage of radio - resources to be allocated to the corresponding S-NSSAI list. This - quota can be strict or float quota. Strict quota means resources are - not allowed for other sNSSAIs even when they are not used by the - defined sNSSAIList. Float quota resources can be used by other sNSSAIs - when the defined sNSSAIList do not need them. Value 0 indicates that - there is no maximum limit."; - } - - leaf rRMPolicyMinRatio { - type uint8; - mandatory false; - units percent; - description "The RRM policy setting the minimum percentage of radio - resources to be allocated to the corresponding S-NSSAI list. This - quota can be strict or float quota. Strict quota means resources are - not allowed for other sNSSAIs even when they are not used by the - defined sNSSAIList. Float quota resources can be used by other sNSSAIs - when the defined sNSSAIList do not need them. Value 0 indicates that - there is no minimum limit."; - } - leaf rRMPolicyDedicatedRatio { - type uint8; - units percent; - description "Dedicated Ration."; - } - description "Represents the RRMPolicyRatio concrete IOC."; - } - - - grouping sNSSAIConfig{ - leaf sNssai { - type string; - description "s-NSSAI of a network slice."; - reference "3GPP TS 23.003"; - } - leaf status { - type string; - description "status of s-NSSAI"; - } - list configData{ - uses Configuration; - key "configParameter"; - description "List of configurations to be done at the network elements"; - } - } - - grouping RRMPolicy_Group { - description - "This IOC represents the properties of an abstract RRMPolicy. The RRMPolicy_ IOC - needs to be subclassed to be instantiated. It defines two attributes apart from those - inherited from Top IOC, the resourceType attribute defines type of resource (PRB, RRC - connected users, DRB usage etc.) and the rRMPolicyMemberList attribute defines the - RRMPolicyMember(s)that are subject to this policy. An RRM resource (defined in resourceType - attribute) is located in NRCellDU, NRCellCU, GNBDUFunction, GNBCUCPFunction or in - GNBCUUPFunction. The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in TS 28.541 Figure 4.2.1.2-1. This RRM framework allows adding new policies, - both standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC."; - leaf resourceType { - type string; - mandatory false; - description - "The resourceType attribute defines type of resource (PRB, RRC connected users, - DRB usage etc.) that is subject to policy. Valid values are ''''PRB'''', ''''RRC'''' or ''''DRB''''"; - } - list rRMPolicyMemberList { - key "idx"; - leaf idx { - type uint32; - description - "TODO"; - } - description - "It represents the list of RRMPolicyMember (s) that the managed object - is supporting. A RRMPolicyMember <<dataType>> include the PLMNId <<dataType>> - and S-NSSAI <<dataType>>."; - uses rRMPolicyMemberGroup; - } - } // grouping - - grouping GNBCUUPFunctionGroup { - description - "Represents the GNBCUUPFunction IOC."; - reference - "3GPP TS 28.541"; - - list RRMPolicyRatio { - key id; - leaf id { - type string; - description - "Key leaf"; - } - container attributes { - uses RRMPolicyRatioGroup; - } - description " The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both - standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC. For details see subclause 4.3.36."; - } - leaf gNBCUUPId { - type uint64 { - range "0..68719476735"; - } - config false; - mandatory false; - description - "Identifies the gNB-CU-UP at least within a gNB-CU-CP"; - reference - "''''gNB-CU-UP ID'''' in subclause 9.3.1.15 of 3GPP TS 38.463"; - } - leaf gNBId { - type int64 { - range "0..4294967295"; - } - mandatory false; - description - "Indicates the number of bits for encoding the gNB Id."; - reference - "gNB Id in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413"; - } - list pLMNInfoList { - key "mcc mnc"; - description - "The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs that - can be served by the GNBCUUPFunction and which S-NSSAIs can be supported by the - GNBCUUPFunction for corresponding PLMN in case of network slicing feature is supported"; - uses PLMNInfo; - } - } // grouping - - grouping GNBCUCPFunctionGroup { - description - "Represents the GNBCUCPFunction IOC."; - reference - "3GPP TS 28.541"; - list RRMPolicyRatio { - key id; - leaf id { - type string; - description - "Key leaf"; - } - container attributes { - uses RRMPolicyRatioGroup; - } - description " The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both - standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC. For details see subclause 4.3.36."; - } - leaf gNBId { - type int64 { - range "0..4294967295"; - } - mandatory false; - description - "Identifies a gNB within a PLMN. The gNB Identifier (gNB ID) - is part of the NR Cell Identifier (NCI) of the gNB cells."; - reference - "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413"; - } - leaf gNBIdLength { - type int32 { - range "22..32"; - } - mandatory false; - description - "Indicates the number of bits for encoding the gNB ID."; - reference - "gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413"; - } - leaf gNBCUName { - type string { - length "1..150"; - } - mandatory false; - description - "Identifies the Central Unit of an gNB."; - reference - "3GPP TS 38.473"; - } - list pLMNId { - key "mcc mnc"; - min-elements 1; - max-elements 1; - description - "The PLMN identifier to be used as part of the global RAN - node identity."; - uses PLMNId; - } - } // grouping - - grouping NRCellCUGroup { - description - "Represents the NRCellCU IOC."; - reference - "3GPP TS 28.541"; - leaf cellLocalId { - type int32 { - range "0..16383"; - } - mandatory false; - description - "Identifies an NR cell of a gNB. Together with corresponding - gNB ID it forms the NR Cell Identifier (NCI)."; - } - list pLMNInfoList { - key "mcc mnc"; - min-elements 1; - description - "The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs - that can be served by the NR cell, and which S-NSSAIs that can be supported by the - NR cell for corresponding PLMN in case of network slicing feature is supported."; - uses PLMNInfo; - // Note: Whether the attribute pLMNId in the pLMNInfo can be writable depends on the implementation. - } - list RRMPolicyRatio { - key id; - leaf id { - type string; - description - "Key leaf"; - } - container attributes { - uses RRMPolicyRatioGroup; - } - description " The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both - standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC. For details see subclause 4.3.36."; - } - } // grouping NRCellCUGroup - - grouping NRCellRelationGroup { - description - "Represents the NRCellRelation IOC."; - reference - "3GPP TS 28.541"; - leaf nRTCI { - type uint64; - description - "Target NR Cell Identifier. It consists of NR Cell - Identifier (NCI) and Physical Cell Identifier of the target NR cell - (nRPCI)."; - ' -where name = 'cps-ran-schema-model@2021-01-28.yang' -and checksum = 'a825c571c4a1d585a7f09a3716dedbfab1146abc4725b75a16f9ac89440bf46b'; diff --git a/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources-ietf-inet-types-forward.sql b/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources-ietf-inet-types-forward.sql deleted file mode 100644 index dfab942a82..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources-ietf-inet-types-forward.sql +++ /dev/null @@ -1,462 +0,0 @@ -update yang_resource set -checksum = '64e7b04e6126acc3f598f68677aa487502c6e0682d2732c817669becdfb099ba', -content = 'module ietf-inet-types { - - namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types"; - prefix "inet"; - - organization - "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; - - contact - "WG Web: <http://tools.ietf.org/wg/netmod/> - WG List: <mailto:netmod@ietf.org> - - WG Chair: David Kessens - <mailto:david.kessens@nsn.com> - - WG Chair: Juergen Schoenwaelder - <mailto:j.schoenwaelder@jacobs-university.de> - - Editor: Juergen Schoenwaelder - <mailto:j.schoenwaelder@jacobs-university.de>"; - - description - "This module contains a collection of generally useful derived - YANG data types for Internet addresses and related things. - - Copyright (c) 2013 IETF Trust and the persons identified as - authors of the code. All rights reserved. - - Redistribution and use in source and binary forms, with or - without modification, is permitted pursuant to, and subject - to the license terms contained in, the Simplified BSD License - set forth in Section 4.c of the IETF Trust''s Legal Provisions - Relating to IETF Documents - (http://trustee.ietf.org/license-info). - - This version of this YANG module is part of RFC 6991; see - the RFC itself for full legal notices."; - - revision 2013-07-15 { - description - "This revision adds the following new data types: - - ip-address-no-zone - - ipv4-address-no-zone - - ipv6-address-no-zone"; - reference - "RFC 6991: Common YANG Data Types"; - } - - revision 2010-09-24 { - description - "Initial revision."; - reference - "RFC 6021: Common YANG Data Types"; - } - - /*** collection of types related to protocol fields ***/ - - typedef ip-version { - type enumeration { - enum unknown { - value "0"; - description - "An unknown or unspecified version of the Internet - protocol."; - } - enum ipv4 { - value "1"; - description - "The IPv4 protocol as defined in RFC 791."; - } - enum ipv6 { - value "2"; - description - "The IPv6 protocol as defined in RFC 2460."; - } - } - description - "This value represents the version of the IP protocol. - - In the value set and its semantics, this type is equivalent - to the InetVersion textual convention of the SMIv2."; - reference - "RFC 791: Internet Protocol - RFC 2460: Internet Protocol, Version 6 (IPv6) Specification - RFC 4001: Textual Conventions for Internet Network Addresses"; - } - - typedef dscp { - type uint8 { - range "0..63"; - } - description - "The dscp type represents a Differentiated Services Code Point - that may be used for marking packets in a traffic stream. - In the value set and its semantics, this type is equivalent - to the Dscp textual convention of the SMIv2."; - reference - "RFC 3289: Management Information Base for the Differentiated - Services Architecture - RFC 2474: Definition of the Differentiated Services Field - (DS Field) in the IPv4 and IPv6 Headers - RFC 2780: IANA Allocation Guidelines For Values In - the Internet Protocol and Related Headers"; - } - - typedef ipv6-flow-label { - type uint32 { - range "0..1048575"; - } - description - "The ipv6-flow-label type represents the flow identifier or Flow - Label in an IPv6 packet header that may be used to - discriminate traffic flows. - - In the value set and its semantics, this type is equivalent - to the IPv6FlowLabel textual convention of the SMIv2."; - reference - "RFC 3595: Textual Conventions for IPv6 Flow Label - RFC 2460: Internet Protocol, Version 6 (IPv6) Specification"; - } - - typedef port-number { - type uint16 { - range "0..65535"; - } - description - "The port-number type represents a 16-bit port number of an - Internet transport-layer protocol such as UDP, TCP, DCCP, or - SCTP. Port numbers are assigned by IANA. A current list of - all assignments is available from <http://www.iana.org/>. - - Note that the port number value zero is reserved by IANA. In - situations where the value zero does not make sense, it can - be excluded by subtyping the port-number type. - In the value set and its semantics, this type is equivalent - to the InetPortNumber textual convention of the SMIv2."; - reference - "RFC 768: User Datagram Protocol - RFC 793: Transmission Control Protocol - RFC 4960: Stream Control Transmission Protocol - RFC 4340: Datagram Congestion Control Protocol (DCCP) - RFC 4001: Textual Conventions for Internet Network Addresses"; - } - - /*** collection of types related to autonomous systems ***/ - - typedef as-number { - type uint32; - description - "The as-number type represents autonomous system numbers - which identify an Autonomous System (AS). An AS is a set - of routers under a single technical administration, using - an interior gateway protocol and common metrics to route - packets within the AS, and using an exterior gateway - protocol to route packets to other ASes. IANA maintains - the AS number space and has delegated large parts to the - regional registries. - - Autonomous system numbers were originally limited to 16 - bits. BGP extensions have enlarged the autonomous system - number space to 32 bits. This type therefore uses an uint32 - base type without a range restriction in order to support - a larger autonomous system number space. - - In the value set and its semantics, this type is equivalent - to the InetAutonomousSystemNumber textual convention of - the SMIv2."; - reference - "RFC 1930: Guidelines for creation, selection, and registration - of an Autonomous System (AS) - RFC 4271: A Border Gateway Protocol 4 (BGP-4) - RFC 4001: Textual Conventions for Internet Network Addresses - RFC 6793: BGP Support for Four-Octet Autonomous System (AS) - Number Space"; - } - - /*** collection of types related to IP addresses and hostnames ***/ - - typedef ip-address { - type union { - type inet:ipv4-address; - type inet:ipv6-address; - } - description - "The ip-address type represents an IP address and is IP - version neutral. The format of the textual representation - implies the IP version. This type supports scoped addresses - by allowing zone identifiers in the address format."; - reference - "RFC 4007: IPv6 Scoped Address Architecture"; - } - - typedef ipv4-address { - type string { - pattern - ''(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).){3}'' - + ''([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'' - + ''(%[p{N}p{L}]+)?''; - } - description - "The ipv4-address type represents an IPv4 address in - dotted-quad notation. The IPv4 address may include a zone - index, separated by a % sign. - - The zone index is used to disambiguate identical address - values. For link-local addresses, the zone index will - typically be the interface index number or the name of an - interface. If the zone index is not present, the default - zone of the device will be used. - - The canonical format for the zone index is the numerical - format"; - } - - typedef ipv6-address { - type string { - pattern ''((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'' - + ''((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'' - + ''(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9]).){3}'' - + ''(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'' - + ''(%[p{N}p{L}]+)?''; - pattern ''(([^:]+:){6}(([^:]+:[^:]+)|(.*..*)))|'' - + ''((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'' - + ''(%.+)?''; - } - description - "The ipv6-address type represents an IPv6 address in full, - mixed, shortened, and shortened-mixed notation. The IPv6 - address may include a zone index, separated by a % sign. - - The zone index is used to disambiguate identical address - values. For link-local addresses, the zone index will - typically be the interface index number or the name of an - interface. If the zone index is not present, the default - zone of the device will be used. - - The canonical format of IPv6 addresses uses the textual - representation defined in Section 4 of RFC 5952. The - canonical format for the zone index is the numerical - format as described in Section 11.2 of RFC 4007."; - reference - "RFC 4291: IP Version 6 Addressing Architecture - RFC 4007: IPv6 Scoped Address Architecture - RFC 5952: A Recommendation for IPv6 Address Text - Representation"; - } - - typedef ip-address-no-zone { - type union { - type inet:ipv4-address-no-zone; - type inet:ipv6-address-no-zone; - } - description - "The ip-address-no-zone type represents an IP address and is - IP version neutral. The format of the textual representation - implies the IP version. This type does not support scoped - addresses since it does not allow zone identifiers in the - address format."; - reference - "RFC 4007: IPv6 Scoped Address Architecture"; - } - - typedef ipv4-address-no-zone { - type inet:ipv4-address { - pattern ''[0-9.]*''; - } - description - "An IPv4 address without a zone index. This type, derived from - ipv4-address, may be used in situations where the zone is - known from the context and hence no zone index is needed."; - } - - typedef ipv6-address-no-zone { - type inet:ipv6-address { - pattern ''[0-9a-fA-F:.]*''; - } - description - "An IPv6 address without a zone index. This type, derived from - ipv6-address, may be used in situations where the zone is - known from the context and hence no zone index is needed."; - reference - "RFC 4291: IP Version 6 Addressing Architecture - RFC 4007: IPv6 Scoped Address Architecture - RFC 5952: A Recommendation for IPv6 Address Text - Representation"; - } - - typedef ip-prefix { - type union { - type inet:ipv4-prefix; - type inet:ipv6-prefix; - } - description - "The ip-prefix type represents an IP prefix and is IP - version neutral. The format of the textual representations - implies the IP version."; - } - - typedef ipv4-prefix { - type string { - pattern - ''(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).){3}'' - + ''([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'' - + ''/(([0-9])|([1-2][0-9])|(3[0-2]))''; - } - description - "The ipv4-prefix type represents an IPv4 address prefix. - The prefix length is given by the number following the - slash character and must be less than or equal to 32. - - A prefix length value of n corresponds to an IP address - mask that has n contiguous 1-bits from the most - significant bit (MSB) and all other bits set to 0. - - The canonical format of an IPv4 prefix has all bits of - the IPv4 address set to zero that are not part of the - IPv4 prefix."; - } - - typedef ipv6-prefix { - type string { - pattern ''((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'' - + ''((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'' - + ''(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9]).){3}'' - + ''(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'' - + ''(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))''; - pattern ''(([^:]+:){6}(([^:]+:[^:]+)|(.*..*)))|'' - + ''((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'' - + ''(/.+)''; - } - description - "The ipv6-prefix type represents an IPv6 address prefix. - The prefix length is given by the number following the - slash character and must be less than or equal to 128. - - A prefix length value of n corresponds to an IP address - mask that has n contiguous 1-bits from the most - significant bit (MSB) and all other bits set to 0. - - The IPv6 address should have all bits that do not belong - to the prefix set to zero. - - The canonical format of an IPv6 prefix has all bits of - the IPv6 address set to zero that are not part of the - IPv6 prefix. Furthermore, the IPv6 address is represented - as defined in Section 4 of RFC 5952."; - reference - "RFC 5952: A Recommendation for IPv6 Address Text - Representation"; - } - - /*** collection of domain name and URI types ***/ - - typedef domain-name { - type string { - length "1..253"; - pattern - ''((([a-zA-Z0-9_]([a-zA-Z0-9-_]){0,61})?[a-zA-Z0-9].)*'' - + ''([a-zA-Z0-9_]([a-zA-Z0-9-_]){0,61})?[a-zA-Z0-9].?)'' - + ''|.''; - } - description - "The domain-name type represents a DNS domain name. The - name SHOULD be fully qualified whenever possible. - - Internet domain names are only loosely specified. Section - 3.5 of RFC 1034 recommends a syntax (modified in Section - 2.1 of RFC 1123). The pattern above is intended to allow - for current practice in domain name use, and some possible - future expansion. It is designed to hold various types of - domain names, including names used for A or AAAA records - (host names) and other records, such as SRV records. Note - that Internet host names have a stricter syntax (described - in RFC 952) than the DNS recommendations in RFCs 1034 and - 1123, and that systems that want to store host names in - schema nodes using the domain-name type are recommended to - adhere to this stricter standard to ensure interoperability. - - The encoding of DNS names in the DNS protocol is limited - to 255 characters. Since the encoding consists of labels - prefixed by a length bytes and there is a trailing NULL - byte, only 253 characters can appear in the textual dotted - notation. - - The description clause of schema nodes using the domain-name - type MUST describe when and how these names are resolved to - IP addresses. Note that the resolution of a domain-name value - may require to query multiple DNS records (e.g., A for IPv4 - and AAAA for IPv6). The order of the resolution process and - which DNS record takes precedence can either be defined - explicitly or may depend on the configuration of the - resolver. - - Domain-name values use the US-ASCII encoding. Their canonical - format uses lowercase US-ASCII characters. Internationalized - domain names MUST be A-labels as per RFC 5890."; - reference - "RFC 952: DoD Internet Host Table Specification - RFC 1034: Domain Names - Concepts and Facilities - RFC 1123: Requirements for Internet Hosts -- Application - and Support - RFC 2782: A DNS RR for specifying the location of services - (DNS SRV) - RFC 5890: Internationalized Domain Names in Applications - (IDNA): Definitions and Document Framework"; - } - - typedef host { - type union { - type inet:ip-address; - type inet:domain-name; - } - description - "The host type represents either an IP address or a DNS - domain name."; - } - - typedef uri { - type string; - description - "The uri type represents a Uniform Resource Identifier - (URI) as defined by STD 66. - - Objects using the uri type MUST be in US-ASCII encoding, - and MUST be normalized as described by RFC 3986 Sections - 6.2.1, 6.2.2.1, and 6.2.2.2. All unnecessary - percent-encoding is removed, and all case-insensitive - characters are set to lowercase except for hexadecimal - digits, which are normalized to uppercase as described in - Section 6.2.2.1. - - The purpose of this normalization is to help provide - unique URIs. Note that this normalization is not - sufficient to provide uniqueness. Two URIs that are - textually distinct after this normalization may still be - equivalent. - - Objects using the uri type may restrict the schemes that - they permit. For example, ''data:'' and ''urn:'' schemes - might not be appropriate. - - A zero-length URI is not a valid URI. This can be used to - express ''URI absent'' where required. - - In the value set and its semantics, this type is equivalent - to the Uri SMIv2 textual convention defined in RFC 5017."; - reference - "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax - RFC 3305: Report from the Joint W3C/IETF URI Planning Interest - Group: Uniform Resource Identifiers (URIs), URLs, - and Uniform Resource Names (URNs): Clarifications - and Recommendations - RFC 5017: MIB Textual Conventions for Uniform Resource - Identifiers (URIs)"; - } - -} -' -where name = 'ietf-inet-types.yang' -and checksum = '417a7b14944f6236ad0e2b1ef956158c050cff9b74e3561ca80af32d11be240b'; diff --git a/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources-ietf-inet-types-rollback.sql b/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources-ietf-inet-types-rollback.sql deleted file mode 100644 index d67610a8e0..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources-ietf-inet-types-rollback.sql +++ /dev/null @@ -1,461 +0,0 @@ -update yang_resource set -checksum = '417a7b14944f6236ad0e2b1ef956158c050cff9b74e3561ca80af32d11be240b', -content = 'module ietf-inet-types { - - namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types"; - prefix "inet"; - - organization - "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; - - contact - "WG Web: <http://tools.ietf.org/wg/netmod/> - WG List: <mailto:netmod@ietf.org> - - WG Chair: David Kessens - <mailto:david.kessens@nsn.com> - - WG Chair: Juergen Schoenwaelder - <mailto:j.schoenwaelder@jacobs-university.de> - - Editor: Juergen Schoenwaelder - <mailto:j.schoenwaelder@jacobs-university.de>"; - - description - "This module contains a collection of generally useful derived - YANG data types for Internet addresses and related things. - - Copyright (c) 2013 IETF Trust and the persons identified as - authors of the code. All rights reserved. - - Redistribution and use in source and binary forms, with or - without modification, is permitted pursuant to, and subject - to the license terms contained in, the Simplified BSD License - set forth in Section 4.c of the IETF Trust''''s Legal Provisions - Relating to IETF Documents - (http://trustee.ietf.org/license-info). - - This version of this YANG module is part of RFC 6991; see - the RFC itself for full legal notices."; - - revision 2013-07-15 { - description - "This revision adds the following new data types: - - ip-address-no-zone - - ipv4-address-no-zone - - ipv6-address-no-zone"; - reference - "RFC 6991: Common YANG Data Types"; - } - - revision 2010-09-24 { - description - "Initial revision."; - reference - "RFC 6021: Common YANG Data Types"; - } - - /*** collection of types related to protocol fields ***/ - - typedef ip-version { - type enumeration { - enum unknown { - value "0"; - description - "An unknown or unspecified version of the Internet - protocol."; - } - enum ipv4 { - value "1"; - description - "The IPv4 protocol as defined in RFC 791."; - } - enum ipv6 { - value "2"; - description - "The IPv6 protocol as defined in RFC 2460."; - } - } - description - "This value represents the version of the IP protocol. - - In the value set and its semantics, this type is equivalent - to the InetVersion textual convention of the SMIv2."; - reference - "RFC 791: Internet Protocol - RFC 2460: Internet Protocol, Version 6 (IPv6) Specification - RFC 4001: Textual Conventions for Internet Network Addresses"; - } - - typedef dscp { - type uint8 { - range "0..63"; - } - description - "The dscp type represents a Differentiated Services Code Point - that may be used for marking packets in a traffic stream. - In the value set and its semantics, this type is equivalent - to the Dscp textual convention of the SMIv2."; - reference - "RFC 3289: Management Information Base for the Differentiated - Services Architecture - RFC 2474: Definition of the Differentiated Services Field - (DS Field) in the IPv4 and IPv6 Headers - RFC 2780: IANA Allocation Guidelines For Values In - the Internet Protocol and Related Headers"; - } - - typedef ipv6-flow-label { - type uint32 { - range "0..1048575"; - } - description - "The ipv6-flow-label type represents the flow identifier or Flow - Label in an IPv6 packet header that may be used to - discriminate traffic flows. - - In the value set and its semantics, this type is equivalent - to the IPv6FlowLabel textual convention of the SMIv2."; - reference - "RFC 3595: Textual Conventions for IPv6 Flow Label - RFC 2460: Internet Protocol, Version 6 (IPv6) Specification"; - } - - typedef port-number { - type uint16 { - range "0..65535"; - } - description - "The port-number type represents a 16-bit port number of an - Internet transport-layer protocol such as UDP, TCP, DCCP, or - SCTP. Port numbers are assigned by IANA. A current list of - all assignments is available from <http://www.iana.org/>. - - Note that the port number value zero is reserved by IANA. In - situations where the value zero does not make sense, it can - be excluded by subtyping the port-number type. - In the value set and its semantics, this type is equivalent - to the InetPortNumber textual convention of the SMIv2."; - reference - "RFC 768: User Datagram Protocol - RFC 793: Transmission Control Protocol - RFC 4960: Stream Control Transmission Protocol - RFC 4340: Datagram Congestion Control Protocol (DCCP) - RFC 4001: Textual Conventions for Internet Network Addresses"; - } - - /*** collection of types related to autonomous systems ***/ - - typedef as-number { - type uint32; - description - "The as-number type represents autonomous system numbers - which identify an Autonomous System (AS). An AS is a set - of routers under a single technical administration, using - an interior gateway protocol and common metrics to route - packets within the AS, and using an exterior gateway - protocol to route packets to other ASes. IANA maintains - the AS number space and has delegated large parts to the - regional registries. - - Autonomous system numbers were originally limited to 16 - bits. BGP extensions have enlarged the autonomous system - number space to 32 bits. This type therefore uses an uint32 - base type without a range restriction in order to support - a larger autonomous system number space. - - In the value set and its semantics, this type is equivalent - to the InetAutonomousSystemNumber textual convention of - the SMIv2."; - reference - "RFC 1930: Guidelines for creation, selection, and registration - of an Autonomous System (AS) - RFC 4271: A Border Gateway Protocol 4 (BGP-4) - RFC 4001: Textual Conventions for Internet Network Addresses - RFC 6793: BGP Support for Four-Octet Autonomous System (AS) - Number Space"; - } - - /*** collection of types related to IP addresses and hostnames ***/ - - typedef ip-address { - type union { - type inet:ipv4-address; - type inet:ipv6-address; - } - description - "The ip-address type represents an IP address and is IP - version neutral. The format of the textual representation - implies the IP version. This type supports scoped addresses - by allowing zone identifiers in the address format."; - reference - "RFC 4007: IPv6 Scoped Address Architecture"; - } - - typedef ipv4-address { - type string { - pattern - ''''(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).){3}'''' - + ''''([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'''' - + ''''(%[p{N}p{L}]+)?''''; - } - description - "The ipv4-address type represents an IPv4 address in - dotted-quad notation. The IPv4 address may include a zone - index, separated by a % sign. - - The zone index is used to disambiguate identical address - values. For link-local addresses, the zone index will - typically be the interface index number or the name of an - interface. If the zone index is not present, the default - zone of the device will be used. - - The canonical format for the zone index is the numerical - format"; - } - - typedef ipv6-address { - type string { - pattern ''''((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'''' - + ''''((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'''' - + ''''(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9]).){3}'''' - + ''''(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'''' - + ''''(%[p{N}p{L}]+)?''''; - pattern ''''(([^:]+:){6}(([^:]+:[^:]+)|(.*..*)))|'''' - + ''''((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'''' - + ''''(%.+)?''''; - } - description - "The ipv6-address type represents an IPv6 address in full, - mixed, shortened, and shortened-mixed notation. The IPv6 - address may include a zone index, separated by a % sign. - - The zone index is used to disambiguate identical address - values. For link-local addresses, the zone index will - typically be the interface index number or the name of an - interface. If the zone index is not present, the default - zone of the device will be used. - - The canonical format of IPv6 addresses uses the textual - representation defined in Section 4 of RFC 5952. The - canonical format for the zone index is the numerical - format as described in Section 11.2 of RFC 4007."; - reference - "RFC 4291: IP Version 6 Addressing Architecture - RFC 4007: IPv6 Scoped Address Architecture - RFC 5952: A Recommendation for IPv6 Address Text - Representation"; - } - - typedef ip-address-no-zone { - type union { - type inet:ipv4-address-no-zone; - type inet:ipv6-address-no-zone; - } - description - "The ip-address-no-zone type represents an IP address and is - IP version neutral. The format of the textual representation - implies the IP version. This type does not support scoped - addresses since it does not allow zone identifiers in the - address format."; - reference - "RFC 4007: IPv6 Scoped Address Architecture"; - } - - typedef ipv4-address-no-zone { - type inet:ipv4-address { - pattern ''''[0-9.]*''''; - } - description - "An IPv4 address without a zone index. This type, derived from - ipv4-address, may be used in situations where the zone is - known from the context and hence no zone index is needed."; - } - - typedef ipv6-address-no-zone { - type inet:ipv6-address { - pattern ''''[0-9a-fA-F:.]*''''; - } - description - "An IPv6 address without a zone index. This type, derived from - ipv6-address, may be used in situations where the zone is - known from the context and hence no zone index is needed."; - reference - "RFC 4291: IP Version 6 Addressing Architecture - RFC 4007: IPv6 Scoped Address Architecture - RFC 5952: A Recommendation for IPv6 Address Text - Representation"; - } - - typedef ip-prefix { - type union { - type inet:ipv4-prefix; - type inet:ipv6-prefix; - } - description - "The ip-prefix type represents an IP prefix and is IP - version neutral. The format of the textual representations - implies the IP version."; - } - - typedef ipv4-prefix { - type string { - pattern - ''''(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).){3}'''' - + ''''([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'''' - + ''''/(([0-9])|([1-2][0-9])|(3[0-2]))''''; - } - description - "The ipv4-prefix type represents an IPv4 address prefix. - The prefix length is given by the number following the - slash character and must be less than or equal to 32. - - A prefix length value of n corresponds to an IP address - mask that has n contiguous 1-bits from the most - significant bit (MSB) and all other bits set to 0. - - The canonical format of an IPv4 prefix has all bits of - the IPv4 address set to zero that are not part of the - IPv4 prefix."; - } - - typedef ipv6-prefix { - type string { - pattern ''''((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'''' - + ''''((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'''' - + ''''(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9]).){3}'''' - + ''''(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'''' - + ''''(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))''''; - pattern ''''(([^:]+:){6}(([^:]+:[^:]+)|(.*..*)))|'''' - + ''''((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'''' - + ''''(/.+)''''; - } - description - "The ipv6-prefix type represents an IPv6 address prefix. - The prefix length is given by the number following the - slash character and must be less than or equal to 128. - - A prefix length value of n corresponds to an IP address - mask that has n contiguous 1-bits from the most - significant bit (MSB) and all other bits set to 0. - - The IPv6 address should have all bits that do not belong - to the prefix set to zero. - - The canonical format of an IPv6 prefix has all bits of - the IPv6 address set to zero that are not part of the - IPv6 prefix. Furthermore, the IPv6 address is represented - as defined in Section 4 of RFC 5952."; - reference - "RFC 5952: A Recommendation for IPv6 Address Text - Representation"; - } - - /*** collection of domain name and URI types ***/ - - typedef domain-name { - type string { - length "1..253"; - pattern - ''''((([a-zA-Z0-9_]([a-zA-Z0-9-_]){0,61})?[a-zA-Z0-9].)*'''' - + ''''([a-zA-Z0-9_]([a-zA-Z0-9-_]){0,61})?[a-zA-Z0-9].?)'''' - + ''''|.''''; - } - description - "The domain-name type represents a DNS domain name. The - name SHOULD be fully qualified whenever possible. - - Internet domain names are only loosely specified. Section - 3.5 of RFC 1034 recommends a syntax (modified in Section - 2.1 of RFC 1123). The pattern above is intended to allow - for current practice in domain name use, and some possible - future expansion. It is designed to hold various types of - domain names, including names used for A or AAAA records - (host names) and other records, such as SRV records. Note - that Internet host names have a stricter syntax (described - in RFC 952) than the DNS recommendations in RFCs 1034 and - 1123, and that systems that want to store host names in - schema nodes using the domain-name type are recommended to - adhere to this stricter standard to ensure interoperability. - - The encoding of DNS names in the DNS protocol is limited - to 255 characters. Since the encoding consists of labels - prefixed by a length bytes and there is a trailing NULL - byte, only 253 characters can appear in the textual dotted - notation. - - The description clause of schema nodes using the domain-name - type MUST describe when and how these names are resolved to - IP addresses. Note that the resolution of a domain-name value - may require to query multiple DNS records (e.g., A for IPv4 - and AAAA for IPv6). The order of the resolution process and - which DNS record takes precedence can either be defined - explicitly or may depend on the configuration of the - resolver. - - Domain-name values use the US-ASCII encoding. Their canonical - format uses lowercase US-ASCII characters. Internationalized - domain names MUST be A-labels as per RFC 5890."; - reference - "RFC 952: DoD Internet Host Table Specification - RFC 1034: Domain Names - Concepts and Facilities - RFC 1123: Requirements for Internet Hosts -- Application - and Support - RFC 2782: A DNS RR for specifying the location of services - (DNS SRV) - RFC 5890: Internationalized Domain Names in Applications - (IDNA): Definitions and Document Framework"; - } - - typedef host { - type union { - type inet:ip-address; - type inet:domain-name; - } - description - "The host type represents either an IP address or a DNS - domain name."; - } - - typedef uri { - type string; - description - "The uri type represents a Uniform Resource Identifier - (URI) as defined by STD 66. - - Objects using the uri type MUST be in US-ASCII encoding, - and MUST be normalized as described by RFC 3986 Sections - 6.2.1, 6.2.2.1, and 6.2.2.2. All unnecessary - percent-encoding is removed, and all case-insensitive - characters are set to lowercase except for hexadecimal - digits, which are normalized to uppercase as described in - Section 6.2.2.1. - - The purpose of this normalization is to help provide - unique URIs. Note that this normalization is not - sufficient to provide uniqueness. Two URIs that are - textually distinct after this normalization may still be - equivalent. - - Objects using the uri type may restrict the schemes that - they permit. For example, ''''data:'''' and ''''urn:'''' schemes - might not be appropriate. - - A zero-length URI is not a valid URI. This can be used to - express ''''URI absent'''' where required. - - In the value set and its semantics, this type is equivalent - to the Uri SMIv2 textual convention defined in RFC 5017."; - reference - "RFC 3986: Uniform Resource Identifier (URI): Generic Syntax - RFC 3305: Report from the Joint W3C/IETF URI Planning Interest - Group: Uniform Resource Identifiers (URIs), URLs, - and Uniform Resource Names (URNs): Clarifications - and Recommendations - RFC 5017: MIB Textual Conventions for Uniform Resource - Identifiers (URIs)"; - } - -}' -where name = 'ietf-inet-types.yang' -and checksum = '64e7b04e6126acc3f598f68677aa487502c6e0682d2732c817669becdfb099ba'; diff --git a/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources-ietf-yang-types-forward.sql b/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources-ietf-yang-types-forward.sql deleted file mode 100644 index 48282aad2c..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources-ietf-yang-types-forward.sql +++ /dev/null @@ -1,485 +0,0 @@ -update yang_resource set -checksum = '0c68c544f846c01751c71317339d02a504519ab05e45f50653605562df64295f', -content = 'module ietf-yang-types { - - namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types"; - prefix "yang"; - - organization - "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; - - contact - "WG Web: <http://tools.ietf.org/wg/netmod/> - WG List: <mailto:netmod@ietf.org> - - WG Chair: David Kessens - <mailto:david.kessens@nsn.com> - - WG Chair: Juergen Schoenwaelder - <mailto:j.schoenwaelder@jacobs-university.de> - - Editor: Juergen Schoenwaelder - <mailto:j.schoenwaelder@jacobs-university.de>"; - - description - "This module contains a collection of generally useful derived - YANG data types. - - Copyright (c) 2013 IETF Trust and the persons identified as - authors of the code. All rights reserved. - - Redistribution and use in source and binary forms, with or - without modification, is permitted pursuant to, and subject - to the license terms contained in, the Simplified BSD License - set forth in Section 4.c of the IETF Trust''s Legal Provisions - Relating to IETF Documents - (http://trustee.ietf.org/license-info). - - This version of this YANG module is part of RFC 6991; see - the RFC itself for full legal notices."; - - revision 2013-07-15 { - description - "This revision adds the following new data types: - - yang-identifier - - hex-string - - uuid - - dotted-quad"; - reference - "RFC 6991: Common YANG Data Types"; - } - - revision 2010-09-24 { - description - "Initial revision."; - reference - "RFC 6021: Common YANG Data Types"; - } - - /*** collection of counter and gauge types ***/ - - typedef counter32 { - type uint32; - description - "The counter32 type represents a non-negative integer - that monotonically increases until it reaches a - maximum value of 2^32-1 (4294967295 decimal), when it - wraps around and starts increasing again from zero. - - Counters have no defined ''initial'' value, and thus, a - single value of a counter has (in general) no information - content. Discontinuities in the monotonically increasing - value normally occur at re-initialization of the - management system, and at other times as specified in the - description of a schema node using this type. If such - other times can occur, for example, the creation of - a schema node of type counter32 at times other than - re-initialization, then a corresponding schema node - should be defined, with an appropriate type, to indicate - the last discontinuity. - - The counter32 type should not be used for configuration - schema nodes. A default statement SHOULD NOT be used in - combination with the type counter32. - - In the value set and its semantics, this type is equivalent - to the Counter32 type of the SMIv2."; - reference - "RFC 2578: Structure of Management Information Version 2 - (SMIv2)"; - } - - typedef zero-based-counter32 { - type yang:counter32; - default "0"; - description - "The zero-based-counter32 type represents a counter32 - that has the defined ''initial'' value zero. - - A schema node of this type will be set to zero (0) on creation - and will thereafter increase monotonically until it reaches - a maximum value of 2^32-1 (4294967295 decimal), when it - wraps around and starts increasing again from zero. - - Provided that an application discovers a new schema node - of this type within the minimum time to wrap, it can use the - ''initial'' value as a delta. It is important for a management - station to be aware of this minimum time and the actual time - between polls, and to discard data if the actual time is too - long or there is no defined minimum time. - - In the value set and its semantics, this type is equivalent - to the ZeroBasedCounter32 textual convention of the SMIv2."; - reference - "RFC 4502: Remote Network Monitoring Management Information - Base Version 2"; - } - - typedef counter64 { - type uint64; - description - "The counter64 type represents a non-negative integer - that monotonically increases until it reaches a - maximum value of 2^64-1 (18446744073709551615 decimal), - when it wraps around and starts increasing again from zero. - - Counters have no defined ''initial'' value, and thus, a - single value of a counter has (in general) no information - content. Discontinuities in the monotonically increasing - value normally occur at re-initialization of the - management system, and at other times as specified in the - description of a schema node using this type. If such - other times can occur, for example, the creation of - a schema node of type counter64 at times other than - re-initialization, then a corresponding schema node - should be defined, with an appropriate type, to indicate - the last discontinuity. - - The counter64 type should not be used for configuration - schema nodes. A default statement SHOULD NOT be used in - combination with the type counter64. - - In the value set and its semantics, this type is equivalent - to the Counter64 type of the SMIv2."; - reference - "RFC 2578: Structure of Management Information Version 2 - (SMIv2)"; - } - - typedef zero-based-counter64 { - type yang:counter64; - default "0"; - description - "The zero-based-counter64 type represents a counter64 that - has the defined ''initial'' value zero. - - - - - A schema node of this type will be set to zero (0) on creation - and will thereafter increase monotonically until it reaches - a maximum value of 2^64-1 (18446744073709551615 decimal), - when it wraps around and starts increasing again from zero. - - Provided that an application discovers a new schema node - of this type within the minimum time to wrap, it can use the - ''initial'' value as a delta. It is important for a management - station to be aware of this minimum time and the actual time - between polls, and to discard data if the actual time is too - long or there is no defined minimum time. - - In the value set and its semantics, this type is equivalent - to the ZeroBasedCounter64 textual convention of the SMIv2."; - reference - "RFC 2856: Textual Conventions for Additional High Capacity - Data Types"; - } - - typedef gauge32 { - type uint32; - description - "The gauge32 type represents a non-negative integer, which - may increase or decrease, but shall never exceed a maximum - value, nor fall below a minimum value. The maximum value - cannot be greater than 2^32-1 (4294967295 decimal), and - the minimum value cannot be smaller than 0. The value of - a gauge32 has its maximum value whenever the information - being modeled is greater than or equal to its maximum - value, and has its minimum value whenever the information - being modeled is smaller than or equal to its minimum value. - If the information being modeled subsequently decreases - below (increases above) the maximum (minimum) value, the - gauge32 also decreases (increases). - - In the value set and its semantics, this type is equivalent - to the Gauge32 type of the SMIv2."; - reference - "RFC 2578: Structure of Management Information Version 2 - (SMIv2)"; - } - - typedef gauge64 { - type uint64; - description - "The gauge64 type represents a non-negative integer, which - may increase or decrease, but shall never exceed a maximum - value, nor fall below a minimum value. The maximum value - cannot be greater than 2^64-1 (18446744073709551615), and - the minimum value cannot be smaller than 0. The value of - a gauge64 has its maximum value whenever the information - being modeled is greater than or equal to its maximum - value, and has its minimum value whenever the information - being modeled is smaller than or equal to its minimum value. - If the information being modeled subsequently decreases - below (increases above) the maximum (minimum) value, the - gauge64 also decreases (increases). - - In the value set and its semantics, this type is equivalent - to the CounterBasedGauge64 SMIv2 textual convention defined - in RFC 2856"; - reference - "RFC 2856: Textual Conventions for Additional High Capacity - Data Types"; - } - - /*** collection of identifier-related types ***/ - - typedef object-identifier { - type string { - pattern ''(([0-1](.[1-3]?[0-9]))|(2.(0|([1-9]d*))))'' - + ''(.(0|([1-9]d*)))*''; - } - description - "The object-identifier type represents administratively - assigned names in a registration-hierarchical-name tree. - - Values of this type are denoted as a sequence of numerical - non-negative sub-identifier values. Each sub-identifier - value MUST NOT exceed 2^32-1 (4294967295). Sub-identifiers - are separated by single dots and without any intermediate - whitespace. - - The ASN.1 standard restricts the value space of the first - sub-identifier to 0, 1, or 2. Furthermore, the value space - of the second sub-identifier is restricted to the range - 0 to 39 if the first sub-identifier is 0 or 1. Finally, - the ASN.1 standard requires that an object identifier - has always at least two sub-identifiers. The pattern - captures these restrictions. - - Although the number of sub-identifiers is not limited, - module designers should realize that there may be - implementations that stick with the SMIv2 limit of 128 - sub-identifiers. - - This type is a superset of the SMIv2 OBJECT IDENTIFIER type - since it is not restricted to 128 sub-identifiers. Hence, - this type SHOULD NOT be used to represent the SMIv2 OBJECT - IDENTIFIER type; the object-identifier-128 type SHOULD be - used instead."; - reference - "ISO9834-1: Information technology -- Open Systems - Interconnection -- Procedures for the operation of OSI - Registration Authorities: General procedures and top - arcs of the ASN.1 Object Identifier tree"; - } - - typedef object-identifier-128 { - type object-identifier { - pattern ''d*(.d*){1,127}''; - } - description - "This type represents object-identifiers restricted to 128 - sub-identifiers. - - In the value set and its semantics, this type is equivalent - to the OBJECT IDENTIFIER type of the SMIv2."; - reference - "RFC 2578: Structure of Management Information Version 2 - (SMIv2)"; - } - - typedef yang-identifier { - type string { - length "1..max"; - pattern ''[a-zA-Z_][a-zA-Z0-9-_.]*''; - pattern ''.|..|[^xX].*|.[^mM].*|..[^lL].*''; - } - description - "A YANG identifier string as defined by the ''identifier'' - rule in Section 12 of RFC 6020. An identifier must - start with an alphabetic character or an underscore - followed by an arbitrary sequence of alphabetic or - numeric characters, underscores, hyphens, or dots. - - A YANG identifier MUST NOT start with any possible - combination of the lowercase or uppercase character - sequence ''xml''."; - reference - "RFC 6020: YANG - A Data Modeling Language for the Network - Configuration Protocol (NETCONF)"; - } - - /*** collection of types related to date and time***/ - - typedef date-and-time { - type string { - pattern ''d{4}-d{2}-d{2}Td{2}:d{2}:d{2}(.d+)?'' - + ''(Z|[+-]d{2}:d{2})''; - } - description - "The date-and-time type is a profile of the ISO 8601 - standard for representation of dates and times using the - Gregorian calendar. The profile is defined by the - date-time production in Section 5.6 of RFC 3339. - - The date-and-time type is compatible with the dateTime XML - schema type with the following notable exceptions: - - (a) The date-and-time type does not allow negative years. - - (b) The date-and-time time-offset -00:00 indicates an unknown - time zone (see RFC 3339) while -00:00 and +00:00 and Z - all represent the same time zone in dateTime. - - (c) The canonical format (see below) of data-and-time values - differs from the canonical format used by the dateTime XML - schema type, which requires all times to be in UTC using - the time-offset ''Z''. - - This type is not equivalent to the DateAndTime textual - convention of the SMIv2 since RFC 3339 uses a different - separator between full-date and full-time and provides - higher resolution of time-secfrac. - - The canonical format for date-and-time values with a known time - zone uses a numeric time zone offset that is calculated using - the device''s configured known offset to UTC time. A change of - the device''s offset to UTC time will cause date-and-time values - to change accordingly. Such changes might happen periodically - in case a server follows automatically daylight saving time - (DST) time zone offset changes. The canonical format for - date-and-time values with an unknown time zone (usually - referring to the notion of local time) uses the time-offset - -00:00."; - reference - "RFC 3339: Date and Time on the Internet: Timestamps - RFC 2579: Textual Conventions for SMIv2 - XSD-TYPES: XML Schema Part 2: Datatypes Second Edition"; - } - - typedef timeticks { - type uint32; - description - "The timeticks type represents a non-negative integer that - represents the time, modulo 2^32 (4294967296 decimal), in - hundredths of a second between two epochs. When a schema - node is defined that uses this type, the description of - the schema node identifies both of the reference epochs. - - In the value set and its semantics, this type is equivalent - to the TimeTicks type of the SMIv2."; - reference - "RFC 2578: Structure of Management Information Version 2 - (SMIv2)"; - } - - typedef timestamp { - type yang:timeticks; - description - "The timestamp type represents the value of an associated - timeticks schema node at which a specific occurrence - happened. The specific occurrence must be defined in the - description of any schema node defined using this type. When - the specific occurrence occurred prior to the last time the - associated timeticks attribute was zero, then the timestamp - value is zero. Note that this requires all timestamp values - to be reset to zero when the value of the associated timeticks - attribute reaches 497+ days and wraps around to zero. - - The associated timeticks schema node must be specified - in the description of any schema node using this type. - - In the value set and its semantics, this type is equivalent - to the TimeStamp textual convention of the SMIv2."; - reference - "RFC 2579: Textual Conventions for SMIv2"; - } - - /*** collection of generic address types ***/ - - typedef phys-address { - type string { - pattern ''([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?''; - } - - - - - description - "Represents media- or physical-level addresses represented - as a sequence octets, each octet represented by two hexadecimal - numbers. Octets are separated by colons. The canonical - representation uses lowercase characters. - - In the value set and its semantics, this type is equivalent - to the PhysAddress textual convention of the SMIv2."; - reference - "RFC 2579: Textual Conventions for SMIv2"; - } - - typedef mac-address { - type string { - pattern ''[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}''; - } - description - "The mac-address type represents an IEEE 802 MAC address. - The canonical representation uses lowercase characters. - - In the value set and its semantics, this type is equivalent - to the MacAddress textual convention of the SMIv2."; - reference - "IEEE 802: IEEE Standard for Local and Metropolitan Area - Networks: Overview and Architecture - RFC 2579: Textual Conventions for SMIv2"; - } - - /*** collection of XML-specific types ***/ - - typedef xpath1.0 { - type string; - description - "This type represents an XPATH 1.0 expression. - - When a schema node is defined that uses this type, the - description of the schema node MUST specify the XPath - context in which the XPath expression is evaluated."; - reference - "XPATH: XML Path Language (XPath) Version 1.0"; - } - - /*** collection of string types ***/ - - typedef hex-string { - type string { - pattern ''([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?''; - } - description - "A hexadecimal string with octets represented as hex digits - separated by colons. The canonical representation uses - lowercase characters."; - } - - typedef uuid { - type string { - pattern ''[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'' - + ''[0-9a-fA-F]{4}-[0-9a-fA-F]{12}''; - } - description - "A Universally Unique IDentifier in the string representation - defined in RFC 4122. The canonical representation uses - lowercase characters. - - The following is an example of a UUID in string representation: - f81d4fae-7dec-11d0-a765-00a0c91e6bf6 - "; - reference - "RFC 4122: A Universally Unique IDentifier (UUID) URN - Namespace"; - } - - typedef dotted-quad { - type string { - pattern - ''(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).){3}'' - + ''([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])''; - } - description - "An unsigned 32-bit number expressed in the dotted-quad - notation, i.e., four octets written as decimal numbers - and separated with the ''.'' (full stop) character."; - } -} -' -where name = 'ietf-yang-types.yang' -and checksum = '25516798613f862ad20831e59ba02b75ecdc9c6f5547ed5d90bda76143bf0112'; diff --git a/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources-ietf-yang-types-rollback.sql b/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources-ietf-yang-types-rollback.sql deleted file mode 100644 index db79f0df5a..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources-ietf-yang-types-rollback.sql +++ /dev/null @@ -1,484 +0,0 @@ -update yang_resource set -checksum = '25516798613f862ad20831e59ba02b75ecdc9c6f5547ed5d90bda76143bf0112', -content = 'module ietf-yang-types { - - namespace "urn:ietf:params:xml:ns:yang:ietf-yang-types"; - prefix "yang"; - - organization - "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; - - contact - "WG Web: <http://tools.ietf.org/wg/netmod/> - WG List: <mailto:netmod@ietf.org> - - WG Chair: David Kessens - <mailto:david.kessens@nsn.com> - - WG Chair: Juergen Schoenwaelder - <mailto:j.schoenwaelder@jacobs-university.de> - - Editor: Juergen Schoenwaelder - <mailto:j.schoenwaelder@jacobs-university.de>"; - - description - "This module contains a collection of generally useful derived - YANG data types. - - Copyright (c) 2013 IETF Trust and the persons identified as - authors of the code. All rights reserved. - - Redistribution and use in source and binary forms, with or - without modification, is permitted pursuant to, and subject - to the license terms contained in, the Simplified BSD License - set forth in Section 4.c of the IETF Trust''''s Legal Provisions - Relating to IETF Documents - (http://trustee.ietf.org/license-info). - - This version of this YANG module is part of RFC 6991; see - the RFC itself for full legal notices."; - - revision 2013-07-15 { - description - "This revision adds the following new data types: - - yang-identifier - - hex-string - - uuid - - dotted-quad"; - reference - "RFC 6991: Common YANG Data Types"; - } - - revision 2010-09-24 { - description - "Initial revision."; - reference - "RFC 6021: Common YANG Data Types"; - } - - /*** collection of counter and gauge types ***/ - - typedef counter32 { - type uint32; - description - "The counter32 type represents a non-negative integer - that monotonically increases until it reaches a - maximum value of 2^32-1 (4294967295 decimal), when it - wraps around and starts increasing again from zero. - - Counters have no defined ''''initial'''' value, and thus, a - single value of a counter has (in general) no information - content. Discontinuities in the monotonically increasing - value normally occur at re-initialization of the - management system, and at other times as specified in the - description of a schema node using this type. If such - other times can occur, for example, the creation of - a schema node of type counter32 at times other than - re-initialization, then a corresponding schema node - should be defined, with an appropriate type, to indicate - the last discontinuity. - - The counter32 type should not be used for configuration - schema nodes. A default statement SHOULD NOT be used in - combination with the type counter32. - - In the value set and its semantics, this type is equivalent - to the Counter32 type of the SMIv2."; - reference - "RFC 2578: Structure of Management Information Version 2 - (SMIv2)"; - } - - typedef zero-based-counter32 { - type yang:counter32; - default "0"; - description - "The zero-based-counter32 type represents a counter32 - that has the defined ''''initial'''' value zero. - - A schema node of this type will be set to zero (0) on creation - and will thereafter increase monotonically until it reaches - a maximum value of 2^32-1 (4294967295 decimal), when it - wraps around and starts increasing again from zero. - - Provided that an application discovers a new schema node - of this type within the minimum time to wrap, it can use the - ''''initial'''' value as a delta. It is important for a management - station to be aware of this minimum time and the actual time - between polls, and to discard data if the actual time is too - long or there is no defined minimum time. - - In the value set and its semantics, this type is equivalent - to the ZeroBasedCounter32 textual convention of the SMIv2."; - reference - "RFC 4502: Remote Network Monitoring Management Information - Base Version 2"; - } - - typedef counter64 { - type uint64; - description - "The counter64 type represents a non-negative integer - that monotonically increases until it reaches a - maximum value of 2^64-1 (18446744073709551615 decimal), - when it wraps around and starts increasing again from zero. - - Counters have no defined ''''initial'''' value, and thus, a - single value of a counter has (in general) no information - content. Discontinuities in the monotonically increasing - value normally occur at re-initialization of the - management system, and at other times as specified in the - description of a schema node using this type. If such - other times can occur, for example, the creation of - a schema node of type counter64 at times other than - re-initialization, then a corresponding schema node - should be defined, with an appropriate type, to indicate - the last discontinuity. - - The counter64 type should not be used for configuration - schema nodes. A default statement SHOULD NOT be used in - combination with the type counter64. - - In the value set and its semantics, this type is equivalent - to the Counter64 type of the SMIv2."; - reference - "RFC 2578: Structure of Management Information Version 2 - (SMIv2)"; - } - - typedef zero-based-counter64 { - type yang:counter64; - default "0"; - description - "The zero-based-counter64 type represents a counter64 that - has the defined ''''initial'''' value zero. - - - - - A schema node of this type will be set to zero (0) on creation - and will thereafter increase monotonically until it reaches - a maximum value of 2^64-1 (18446744073709551615 decimal), - when it wraps around and starts increasing again from zero. - - Provided that an application discovers a new schema node - of this type within the minimum time to wrap, it can use the - ''''initial'''' value as a delta. It is important for a management - station to be aware of this minimum time and the actual time - between polls, and to discard data if the actual time is too - long or there is no defined minimum time. - - In the value set and its semantics, this type is equivalent - to the ZeroBasedCounter64 textual convention of the SMIv2."; - reference - "RFC 2856: Textual Conventions for Additional High Capacity - Data Types"; - } - - typedef gauge32 { - type uint32; - description - "The gauge32 type represents a non-negative integer, which - may increase or decrease, but shall never exceed a maximum - value, nor fall below a minimum value. The maximum value - cannot be greater than 2^32-1 (4294967295 decimal), and - the minimum value cannot be smaller than 0. The value of - a gauge32 has its maximum value whenever the information - being modeled is greater than or equal to its maximum - value, and has its minimum value whenever the information - being modeled is smaller than or equal to its minimum value. - If the information being modeled subsequently decreases - below (increases above) the maximum (minimum) value, the - gauge32 also decreases (increases). - - In the value set and its semantics, this type is equivalent - to the Gauge32 type of the SMIv2."; - reference - "RFC 2578: Structure of Management Information Version 2 - (SMIv2)"; - } - - typedef gauge64 { - type uint64; - description - "The gauge64 type represents a non-negative integer, which - may increase or decrease, but shall never exceed a maximum - value, nor fall below a minimum value. The maximum value - cannot be greater than 2^64-1 (18446744073709551615), and - the minimum value cannot be smaller than 0. The value of - a gauge64 has its maximum value whenever the information - being modeled is greater than or equal to its maximum - value, and has its minimum value whenever the information - being modeled is smaller than or equal to its minimum value. - If the information being modeled subsequently decreases - below (increases above) the maximum (minimum) value, the - gauge64 also decreases (increases). - - In the value set and its semantics, this type is equivalent - to the CounterBasedGauge64 SMIv2 textual convention defined - in RFC 2856"; - reference - "RFC 2856: Textual Conventions for Additional High Capacity - Data Types"; - } - - /*** collection of identifier-related types ***/ - - typedef object-identifier { - type string { - pattern ''''(([0-1](.[1-3]?[0-9]))|(2.(0|([1-9]d*))))'''' - + ''''(.(0|([1-9]d*)))*''''; - } - description - "The object-identifier type represents administratively - assigned names in a registration-hierarchical-name tree. - - Values of this type are denoted as a sequence of numerical - non-negative sub-identifier values. Each sub-identifier - value MUST NOT exceed 2^32-1 (4294967295). Sub-identifiers - are separated by single dots and without any intermediate - whitespace. - - The ASN.1 standard restricts the value space of the first - sub-identifier to 0, 1, or 2. Furthermore, the value space - of the second sub-identifier is restricted to the range - 0 to 39 if the first sub-identifier is 0 or 1. Finally, - the ASN.1 standard requires that an object identifier - has always at least two sub-identifiers. The pattern - captures these restrictions. - - Although the number of sub-identifiers is not limited, - module designers should realize that there may be - implementations that stick with the SMIv2 limit of 128 - sub-identifiers. - - This type is a superset of the SMIv2 OBJECT IDENTIFIER type - since it is not restricted to 128 sub-identifiers. Hence, - this type SHOULD NOT be used to represent the SMIv2 OBJECT - IDENTIFIER type; the object-identifier-128 type SHOULD be - used instead."; - reference - "ISO9834-1: Information technology -- Open Systems - Interconnection -- Procedures for the operation of OSI - Registration Authorities: General procedures and top - arcs of the ASN.1 Object Identifier tree"; - } - - typedef object-identifier-128 { - type object-identifier { - pattern ''''d*(.d*){1,127}''''; - } - description - "This type represents object-identifiers restricted to 128 - sub-identifiers. - - In the value set and its semantics, this type is equivalent - to the OBJECT IDENTIFIER type of the SMIv2."; - reference - "RFC 2578: Structure of Management Information Version 2 - (SMIv2)"; - } - - typedef yang-identifier { - type string { - length "1..max"; - pattern ''''[a-zA-Z_][a-zA-Z0-9-_.]*''''; - pattern ''''.|..|[^xX].*|.[^mM].*|..[^lL].*''''; - } - description - "A YANG identifier string as defined by the ''''identifier'''' - rule in Section 12 of RFC 6020. An identifier must - start with an alphabetic character or an underscore - followed by an arbitrary sequence of alphabetic or - numeric characters, underscores, hyphens, or dots. - - A YANG identifier MUST NOT start with any possible - combination of the lowercase or uppercase character - sequence ''''xml''''."; - reference - "RFC 6020: YANG - A Data Modeling Language for the Network - Configuration Protocol (NETCONF)"; - } - - /*** collection of types related to date and time***/ - - typedef date-and-time { - type string { - pattern ''''d{4}-d{2}-d{2}Td{2}:d{2}:d{2}(.d+)?'''' - + ''''(Z|[+-]d{2}:d{2})''''; - } - description - "The date-and-time type is a profile of the ISO 8601 - standard for representation of dates and times using the - Gregorian calendar. The profile is defined by the - date-time production in Section 5.6 of RFC 3339. - - The date-and-time type is compatible with the dateTime XML - schema type with the following notable exceptions: - - (a) The date-and-time type does not allow negative years. - - (b) The date-and-time time-offset -00:00 indicates an unknown - time zone (see RFC 3339) while -00:00 and +00:00 and Z - all represent the same time zone in dateTime. - - (c) The canonical format (see below) of data-and-time values - differs from the canonical format used by the dateTime XML - schema type, which requires all times to be in UTC using - the time-offset ''''Z''''. - - This type is not equivalent to the DateAndTime textual - convention of the SMIv2 since RFC 3339 uses a different - separator between full-date and full-time and provides - higher resolution of time-secfrac. - - The canonical format for date-and-time values with a known time - zone uses a numeric time zone offset that is calculated using - the device''''s configured known offset to UTC time. A change of - the device''''s offset to UTC time will cause date-and-time values - to change accordingly. Such changes might happen periodically - in case a server follows automatically daylight saving time - (DST) time zone offset changes. The canonical format for - date-and-time values with an unknown time zone (usually - referring to the notion of local time) uses the time-offset - -00:00."; - reference - "RFC 3339: Date and Time on the Internet: Timestamps - RFC 2579: Textual Conventions for SMIv2 - XSD-TYPES: XML Schema Part 2: Datatypes Second Edition"; - } - - typedef timeticks { - type uint32; - description - "The timeticks type represents a non-negative integer that - represents the time, modulo 2^32 (4294967296 decimal), in - hundredths of a second between two epochs. When a schema - node is defined that uses this type, the description of - the schema node identifies both of the reference epochs. - - In the value set and its semantics, this type is equivalent - to the TimeTicks type of the SMIv2."; - reference - "RFC 2578: Structure of Management Information Version 2 - (SMIv2)"; - } - - typedef timestamp { - type yang:timeticks; - description - "The timestamp type represents the value of an associated - timeticks schema node at which a specific occurrence - happened. The specific occurrence must be defined in the - description of any schema node defined using this type. When - the specific occurrence occurred prior to the last time the - associated timeticks attribute was zero, then the timestamp - value is zero. Note that this requires all timestamp values - to be reset to zero when the value of the associated timeticks - attribute reaches 497+ days and wraps around to zero. - - The associated timeticks schema node must be specified - in the description of any schema node using this type. - - In the value set and its semantics, this type is equivalent - to the TimeStamp textual convention of the SMIv2."; - reference - "RFC 2579: Textual Conventions for SMIv2"; - } - - /*** collection of generic address types ***/ - - typedef phys-address { - type string { - pattern ''''([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?''''; - } - - - - - description - "Represents media- or physical-level addresses represented - as a sequence octets, each octet represented by two hexadecimal - numbers. Octets are separated by colons. The canonical - representation uses lowercase characters. - - In the value set and its semantics, this type is equivalent - to the PhysAddress textual convention of the SMIv2."; - reference - "RFC 2579: Textual Conventions for SMIv2"; - } - - typedef mac-address { - type string { - pattern ''''[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}''''; - } - description - "The mac-address type represents an IEEE 802 MAC address. - The canonical representation uses lowercase characters. - - In the value set and its semantics, this type is equivalent - to the MacAddress textual convention of the SMIv2."; - reference - "IEEE 802: IEEE Standard for Local and Metropolitan Area - Networks: Overview and Architecture - RFC 2579: Textual Conventions for SMIv2"; - } - - /*** collection of XML-specific types ***/ - - typedef xpath1.0 { - type string; - description - "This type represents an XPATH 1.0 expression. - - When a schema node is defined that uses this type, the - description of the schema node MUST specify the XPath - context in which the XPath expression is evaluated."; - reference - "XPATH: XML Path Language (XPath) Version 1.0"; - } - - /*** collection of string types ***/ - - typedef hex-string { - type string { - pattern ''''([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?''''; - } - description - "A hexadecimal string with octets represented as hex digits - separated by colons. The canonical representation uses - lowercase characters."; - } - - typedef uuid { - type string { - pattern ''''[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'''' - + ''''[0-9a-fA-F]{4}-[0-9a-fA-F]{12}''''; - } - description - "A Universally Unique IDentifier in the string representation - defined in RFC 4122. The canonical representation uses - lowercase characters. - - The following is an example of a UUID in string representation: - f81d4fae-7dec-11d0-a765-00a0c91e6bf6 - "; - reference - "RFC 4122: A Universally Unique IDentifier (UUID) URN - Namespace"; - } - - typedef dotted-quad { - type string { - pattern - ''''(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).){3}'''' - + ''''([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])''''; - } - description - "An unsigned 32-bit number expressed in the dotted-quad - notation, i.e., four octets written as decimal numbers - and separated with the ''''.'''' (full stop) character."; - } -}' -where name = 'ietf-yang-types.yang' -and checksum = '0c68c544f846c01751c71317339d02a504519ab05e45f50653605562df64295f'; diff --git a/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources.yaml b/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources.yaml deleted file mode 100644 index a71b59a311..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/08-update-yang-resources.yaml +++ /dev/null @@ -1,36 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (c) 2021 Bell Canada. -# ================================================================================ -# 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. -# ============LICENSE_END========================================================= - -databaseChangeLog: - - changeSet: - id: 8 - author: cps - label: xnf-data-preload - comment: Fix Yang model for cps ran - changes: - - sqlFile: - path: changelog/db/changes/08-update-yang-resources-cps-ran-model-forward.sql - - sqlFile: - path: changelog/db/changes/08-update-yang-resources-ietf-yang-types-forward.sql - - sqlFile: - path: changelog/db/changes/08-update-yang-resources-ietf-inet-types-forward.sql - rollback: - - sqlFile: - path: changelog/db/changes/08-update-yang-resources-cps-ran-model-rollback.sql - - sqlFile: - path: changelog/db/changes/08-update-yang-resources-ietf-yang-types-rollback.sql - - sqlFile: - path: changelog/db/changes/08-update-yang-resources-ietf-inet-types-rollback.sql diff --git a/cps-ri/src/main/resources/changelog/db/changes/09-loadData-dmi-registry-schema-set.yaml b/cps-ri/src/main/resources/changelog/db/changes/09-loadData-dmi-registry-schema-set.yaml deleted file mode 100644 index 723c2b9ecb..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/09-loadData-dmi-registry-schema-set.yaml +++ /dev/null @@ -1,210 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (C) 2021-2022 Nordix Foundation. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# ============LICENSE_END========================================================= - -databaseChangeLog: - - changeSet: - author: cps - label: dmi-registry-schema-preload - id: 9 - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/dmi/dataspace.csv' - onlyUpdate: 'false' - primaryKey: 'id' - quotchar: '"' - separator: '|' - tableName: 'dataspace' - rollback: - - sql: - sql: delete from dataspace where name = 'NCMP-Admin' - - - changeSet: - author: cps - label: dmi-registry-schema-preload - id: 9.1 - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/dmi/schema_set.csv' - onlyUpdate: 'false' - primaryKey: 'id' - quotchar: '"' - separator: '|' - tableName: 'schema_set' - rollback: - - sql: - sql: delete from schema_set where name = 'ncmp-dmi-registry-model' - - - changeSet: - author: cps - label: dmi-registry-schema-preload - id: 9.2 - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/dmi/yang_resource.csv' - onlyUpdate: 'false' - primaryKey: 'id' - quotchar: '"' - separator: '|' - tableName: 'yang_resource' - columns: - - column: - header: name - name: name - type: STRING - - column: - header: content - name: content - type: STRING - - column: - header: checksum - name: checksum - type: STRING - rollback: - - sql: - sql: delete from yang_resource where name = 'dmi-registry@2021-05-20.yang' - - - changeSet: - author: cps - label: dmi-registry-schema-preload - id: 9.3 - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/dmi/schema_set_yang_resources.csv' - quotchar: '"' - primaryKey: 'schema_set_id,yang_resource_id' - separator: '|' - tableName: 'schema_set_yang_resources' - usePreparedStatements: true - rollback: - - sql: - sql: > - delete from schema_set_yang_resources - where schema_set_id = (select id from schema_set where name = 'ncmp-dmi-registry-model') - and yang_resource_id = (select id from yang_resource where name = 'dmi-registry@2021-05-20.yang') - - - changeSet: - author: cps - label: dmi-registry-schema-preload - id: 9.4 - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/dmi/anchor.csv' - onlyUpdate: 'false' - primaryKey: 'id' - quotchar: '"' - separator: '|' - tableName: 'anchor' - rollback: - - sql: - sql: delete from anchor where name = 'ncmp-dmi-registry' - - - changeSet: - author: cps - label: dmi-registry-schema-preload - id: 9.5 - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/dmi/yang_resource@2021-10-20.csv' - onlyUpdate: 'false' - primaryKey: 'id' - quotchar: '"' - separator: '|' - tableName: 'yang_resource' - columns: - - column: - header: name - name: name - type: STRING - - column: - header: content - name: content - type: STRING - - column: - header: checksum - name: checksum - type: STRING - rollback: - - sql: - sql: delete from yang_resource where name = 'dmi-registry@2021-10-20.yang' - - - changeSet: - author: cps - label: dmi-registry-schema-preload - id: 9.6 - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/dmi/schema_set_yang_resources@2021-10-20.csv' - quotchar: '"' - primaryKey: 'schema_set_id,yang_resource_id' - separator: '|' - tableName: 'schema_set_yang_resources' - usePreparedStatements: true - rollback: - - sql: - sql: > - delete from schema_set_yang_resources - where schema_set_id = (select id from schema_set where name = 'ncmp-dmi-registry-model') - and yang_resource_id = (select id from yang_resource where name = 'dmi-registry@2021-10-20.yang') - - - changeSet: - author: cps - label: dmi-registry-schema-preload - id: 9.7 - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/dmi//generated-csv/generated_yang_resource_dmi-registry@2021-12-13.csv' - onlyUpdate: 'false' - primaryKey: 'id' - quotchar: '"' - separator: '|' - tableName: 'yang_resource' - columns: - - column: - header: name - name: name - type: STRING - - column: - header: content - name: content - type: STRING - - column: - header: checksum - name: checksum - type: STRING - rollback: - - sql: - sql: delete from yang_resource where name = 'dmi-registry@2021-12-13.yang' - - - changeSet: - author: cps - label: dmi-registry-schema-preload - id: 9.8 - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/dmi/schema_set_yang_resources@2021-12-13.csv' - quotchar: '"' - primaryKey: 'schema_set_id,yang_resource_id' - separator: '|' - tableName: 'schema_set_yang_resources' - usePreparedStatements: true - rollback: - - sql: - sql: > - delete from schema_set_yang_resources - where schema_set_id = (select id from schema_set where name = 'ncmp-dmi-registry-model') - and yang_resource_id = (select id from yang_resource where name = 'dmi-registry@2021-12-13.yang')
\ No newline at end of file diff --git a/cps-ri/src/main/resources/changelog/db/changes/10-loadData-dmi-registry-fragment.yaml b/cps-ri/src/main/resources/changelog/db/changes/10-loadData-dmi-registry-fragment.yaml deleted file mode 100644 index b78c920ad0..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/10-loadData-dmi-registry-fragment.yaml +++ /dev/null @@ -1,88 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (C) 2021-2022 Nordix Foundation. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# ============LICENSE_END========================================================= - -databaseChangeLog: - - changeSet: - author: cps - label: dmi-registry-schema-preload - id: 10 - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/dmi/fragment.csv' - onlyUpdate: 'false' - primaryKey: 'id' - quotchar: '"' - separator: '|' - tableName: 'fragment' - columns: - - column: - header: id - name: id - type: NUMERIC - - column: - header: xpath - name: xpath - type: STRING - - column: - header: attributes - name: attributes - type: CLOB - - column: - header: anchor_id - name: anchor_id - type: NUMERIC - - column: - header: parent_id - name: parent_id - type: NUMERIC - - column: - header: dataspace_id - name: dataspace_id - type: NUMERIC - - column: - header: schema_node_id - name: schema_node_id - type: NUMERIC - rollback: - sql: DELETE FROM fragment WHERE xpath = '/dmi-registry' AND anchor_id = (select id from anchor where name='ncmp-dmi-registry') AND dataspace_id = (select id from dataspace where name='NCMP-Admin') - comment: Removes the fragment added by fragment.csv file - - - changeSet: - author: cps - label: dmi-registry-schema-preload - id: 10.1 - changes: - - sql: - comment: Fixes the id sequence after data insert with predefined ids - dbms: postgresql - sql: ALTER SEQUENCE IF EXISTS fragment_id_seq RESTART WITH 200 - rollback: - comment: Rollback for 10.1 is not supported. Please rollback change set 10 to undo change set 10.1. Cannot revert sequence altering. - - - changeSet: - author: cps - label: dmi-registry-schema-preload - id: 10.2 - changes: - - sql: - comment: Sets sequence value to current max value of the ID from the fragment table - dbms: postgresql - sql: SELECT setval('fragment_id_seq', (SELECT MAX(ID) FROM fragment)) - rollback: - sql: SELECT setval('fragment_id_seq', 200) - comment: Rollback Sequence to restart with the sequence number in the last changeset
\ No newline at end of file diff --git a/cps-ri/src/main/resources/changelog/db/changes/11-add-column-to-yang-resources-table.yaml b/cps-ri/src/main/resources/changelog/db/changes/11-add-column-to-yang-resources-table.yaml deleted file mode 100644 index 8643a05454..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/11-add-column-to-yang-resources-table.yaml +++ /dev/null @@ -1,43 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (C) 2021-2022 Nordix Foundation. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# ============LICENSE_END========================================================= - -databaseChangeLog: - - changeSet: - id: 11 - label: add-module-name-and-revision-column - author: cps - changes: - - addColumn: - tableName: yang_resource - columns: - - column: - name: module_name - type: TEXT - - column: - name: revision - type: TEXT - - - changeSet: - id: 11.1 - label: update-previous-data-module-name-and-revision - author: cps - changes: - - sql: - sql: update yang_resource set module_name = 'dummy_module_name', revision = '2021-08-04' where module_name is null and revision is null - rollback: - sql: update yang_resource set module_name = null, revision = null where module_name = 'dummy_module_name' and revision = '2021-08-04'
\ No newline at end of file diff --git a/cps-ri/src/main/resources/changelog/db/changes/12-delete-all-previous-dmi-registry-schema-set.yaml b/cps-ri/src/main/resources/changelog/db/changes/12-delete-all-previous-dmi-registry-schema-set.yaml deleted file mode 100644 index 9eda029b95..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/12-delete-all-previous-dmi-registry-schema-set.yaml +++ /dev/null @@ -1,157 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (C) 2022 Nordix Foundation. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# ============LICENSE_END========================================================= - -databaseChangeLog: - - changeSet: - author: cps - label: dmi-registry-schema-delete - id: 12 - sql: delete from schema_set_yang_resources - where schema_set_id = (select id from schema_set where name = 'ncmp-dmi-registry-model') - and yang_resource_id = (select id from yang_resource where name = 'dmi-registry@2021-05-20.yang') - rollback: - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/dmi/schema_set_yang_resources.csv' - quotchar: '"' - primaryKey: 'schema_set_id,yang_resource_id' - separator: '|' - tableName: 'schema_set_yang_resources' - usePreparedStatements: true - - - changeSet: - author: cps - label: dmi-registry-schema-delete - id: 12.1 - sql: delete from yang_resource where name = 'dmi-registry@2021-05-20.yang' - rollback: - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/dmi/yang_resource.csv' - onlyUpdate: 'false' - primaryKey: 'id' - quotchar: '"' - separator: '|' - tableName: 'yang_resource' - columns: - - column: - header: name - name: name - type: STRING - - column: - header: content - name: content - type: STRING - - column: - header: checksum - name: checksum - type: STRING - sql: update yang_resource set module_name = 'dummy_module_name', revision = '2021-08-04' where module_name is null and revision is null - - - changeSet: - author: cps - label: dmi-registry-schema-delete - id: 12.2 - sql: delete from schema_set_yang_resources - where schema_set_id = (select id from schema_set where name = 'ncmp-dmi-registry-model') - and yang_resource_id = (select id from yang_resource where name = 'dmi-registry@2021-10-20.yang') - rollback: - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/dmi/schema_set_yang_resources@2021-10-20.csv' - quotchar: '"' - primaryKey: 'schema_set_id,yang_resource_id' - separator: '|' - tableName: 'schema_set_yang_resources' - usePreparedStatements: true - - - changeSet: - author: cps - label: dmi-registry-schema-delete - id: 12.3 - sql: delete from yang_resource where name = 'dmi-registry@2021-10-20.yang' - rollback: - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/dmi/yang_resource@2021-10-20.csv' - onlyUpdate: 'false' - primaryKey: 'id' - quotchar: '"' - separator: '|' - tableName: 'yang_resource' - columns: - - column: - header: name - name: name - type: STRING - - column: - header: content - name: content - type: STRING - - column: - header: checksum - name: checksum - type: STRING - sql: update yang_resource set module_name = 'dummy_module_name', revision = '2021-08-04' where module_name is null and revision is null - - - changeSet: - author: cps - label: dmi-registry-schema-delete - id: 12.4 - sql: delete from schema_set_yang_resources - where schema_set_id = (select id from schema_set where name = 'ncmp-dmi-registry-model') - and yang_resource_id = (select id from yang_resource where name = 'dmi-registry@2021-12-13.yang') - rollback: - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/dmi/schema_set_yang_resources@2021-12-13.csv' - quotchar: '"' - primaryKey: 'schema_set_id,yang_resource_id' - separator: '|' - tableName: 'schema_set_yang_resources' - usePreparedStatements: true - - - changeSet: - author: cps - label: dmi-registry-schema-delete - id: 12.5 - sql: delete from yang_resource where name = 'dmi-registry@2021-12-13.yang' - rollback: - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/dmi//generated-csv/generated_yang_resource_dmi-registry@2021-12-13.csv' - onlyUpdate: 'false' - primaryKey: 'id' - quotchar: '"' - separator: '|' - tableName: 'yang_resource' - columns: - - column: - header: name - name: name - type: STRING - - column: - header: content - name: content - type: STRING - - column: - header: checksum - name: checksum - type: STRING - sql: update yang_resource set module_name = 'dummy_module_name', revision = '2021-08-04' where module_name is null and revision is null - diff --git a/cps-ri/src/main/resources/changelog/db/changes/13-insert-dmi-registry-2022-02-10-schema-set.yaml b/cps-ri/src/main/resources/changelog/db/changes/13-insert-dmi-registry-2022-02-10-schema-set.yaml deleted file mode 100644 index 3351b5419b..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/13-insert-dmi-registry-2022-02-10-schema-set.yaml +++ /dev/null @@ -1,66 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (C) 2022 Nordix Foundation. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# ============LICENSE_END========================================================= - -databaseChangeLog: - - changeSet: - author: cps - label: dmi-registry-schema-load-revision-2022-02-10 - id: 13 - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/dmi/generated-csv/generated_yang_resource_dmi-registry@2022-02-10.csv' - onlyUpdate: 'false' - primaryKey: 'id' - quotchar: '"' - separator: '|' - tableName: 'yang_resource' - columns: - - column: - header: name - name: name - type: STRING - - column: - header: content - name: content - type: STRING - - column: - header: checksum - name: checksum - type: STRING - - column: - header: module_name - name: module_name - type: STRING - - column: - header: revision - name: revision - type: STRING - rollback: - - sql: - sql: delete from yang_resource where name = 'dmi-registry@2022-02-10.yang' - - - changeSet: - author: cps - label: dmi-registry-schema-load-revision-2022-02-10 - id: 13.1 - sql: INSERT INTO schema_set_yang_resources (schema_set_id, yang_resource_id) - VALUES ((select id from schema_set where name = 'ncmp-dmi-registry-model'), (select id from yang_resource where name = 'dmi-registry@2022-02-10.yang')); - rollback: - sql: delete from schema_set_yang_resources - where schema_set_id = (select id from schema_set where name = 'ncmp-dmi-registry-model') - and yang_resource_id = (select id from yang_resource where name = 'dmi-registry@2022-02-10.yang')
\ No newline at end of file diff --git a/cps-ri/src/main/resources/changelog/db/changes/14-loadData-dmi-registry-2022-05-10-schema-set.yaml b/cps-ri/src/main/resources/changelog/db/changes/14-loadData-dmi-registry-2022-05-10-schema-set.yaml deleted file mode 100644 index da39d221c0..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/14-loadData-dmi-registry-2022-05-10-schema-set.yaml +++ /dev/null @@ -1,113 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (C) 2022 Nordix Foundation. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# ============LICENSE_END========================================================= - -databaseChangeLog: - - changeSet: - author: cps - label: dmi-registry-schema-delete - id: 14 - sql: DELETE FROM schema_set_yang_resources - where schema_set_id = (select id from schema_set where name = 'ncmp-dmi-registry-model') - and yang_resource_id = (select id from yang_resource where name = 'dmi-registry@2022-02-10.yang') - rollback: - sql: INSERT INTO schema_set_yang_resources (schema_set_id, yang_resource_id) - VALUES ((select id from schema_set where name = 'ncmp-dmi-registry-model'), (select id from yang_resource where name = 'dmi-registry@2022-02-10.yang')); - - - changeSet: - author: cps - label: dmi-registry-schema-delete - id: 14.1 - sql: DELETE FROM yang_resource where name = 'dmi-registry@2022-02-10.yang' - rollback: - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/dmi//generated-csv/generated_yang_resource_dmi-registry@2022-02-10.csv' - onlyUpdate: 'false' - primaryKey: 'id' - quotchar: '"' - separator: '|' - tableName: 'yang_resource' - columns: - - column: - header: name - name: name - type: STRING - - column: - header: content - name: content - type: STRING - - column: - header: checksum - name: checksum - type: STRING - - column: - header: module_name - name: module_name - type: STRING - - column: - header: revision - name: revision - type: STRING - - - changeSet: - author: cps - label: dmi-registry-schema-load-revision-2022-05-10 - id: 14.2 - loadUpdateData: - encoding: UTF-8 - file: 'changelog/db/changes/data/dmi/generated-csv/generated_yang_resource_dmi-registry@2022-05-10.csv' - onlyUpdate: 'false' - primaryKey: 'id' - quotchar: '"' - separator: '|' - tableName: 'yang_resource' - columns: - - column: - header: name - name: name - type: STRING - - column: - header: content - name: content - type: STRING - - column: - header: checksum - name: checksum - type: STRING - - column: - header: module_name - name: module_name - type: STRING - - column: - header: revision - name: revision - type: STRING - rollback: - - sql: - sql: DELETE FROM yang_resource where name = 'dmi-registry@2022-05-10.yang' - - - changeSet: - author: cps - label: dmi-registry-schema-load-revision-2022-05-10 - id: 14.3 - sql: INSERT INTO schema_set_yang_resources (schema_set_id, yang_resource_id) - VALUES ((select id from schema_set where name = 'ncmp-dmi-registry-model'), (select id from yang_resource where name = 'dmi-registry@2022-05-10.yang')); - rollback: - sql: DELETE FROM schema_set_yang_resources - where schema_set_id = (select id from schema_set where name = 'ncmp-dmi-registry-model') - and yang_resource_id = (select id from yang_resource where name = 'dmi-registry@2022-05-10.yang')
\ No newline at end of file diff --git a/cps-ri/src/main/resources/changelog/db/changes/15-rename-column-yang-resource-table.yaml b/cps-ri/src/main/resources/changelog/db/changes/15-rename-column-yang-resource-table.yaml deleted file mode 100644 index 71f11a5382..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/15-rename-column-yang-resource-table.yaml +++ /dev/null @@ -1,14 +0,0 @@ -databaseChangeLog: - - changeSet: - author: cps - label: yang-resource-rename-column - id: 15 - changes: - - renameColumn: - tableName: yang_resource - columnDataType: TEXT - oldColumnName: name - newColumnName: file_name - rollback: - - sql: - sql: alter table yang_resource rename column file_name to name
\ No newline at end of file diff --git a/cps-ri/src/main/resources/changelog/db/changes/16-insert-cm-handle-state-forward.sql b/cps-ri/src/main/resources/changelog/db/changes/16-insert-cm-handle-state-forward.sql deleted file mode 100644 index 01d441f460..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/16-insert-cm-handle-state-forward.sql +++ /dev/null @@ -1,137 +0,0 @@ -INSERT INTO - fragment( - xpath, - attributes, - anchor_id, - parent_id, - dataspace_id, - schema_node_id - ) -SELECT - concat(cmHandles.xpath, '/state') AS xpath, - to_jsonb( - concat( - '{"cm-handle-state": "READY", "last-update-time": "', - to_char( - now(), - 'YYYY-MM-DD"T"HH24:MI:SS.MSTZHTZM' - ), - '", "data-sync-enabled": false}' - ) :: json - ) AS attributes, - cmHandles.anchor_id, - cmHandles.id, - cmHandles.dataspace_id, - cmHandles.schema_node_id -FROM - ( - SELECT - id, - xpath, - anchor_id, - dataspace_id, - schema_node_id - FROM - fragment - WHERE - xpath ~* '^/dmi-registry/cm-handles\[@id=''[\w\-]+''\]$' - AND xpath NOT IN ( - SELECT - SUBSTRING( - xpath - FROM - '^/dmi-registry/cm-handles\[@id=''[\w\-]+''\]' - ) - FROM - fragment - WHERE - xpath ~* '^/dmi-registry/cm-handles\[@id=''[\w\-]+''\]/state$' - ) - ) AS cmHandles; -INSERT INTO - fragment( - xpath, - attributes, - anchor_id, - parent_id, - dataspace_id, - schema_node_id - ) -SELECT - concat(cmHandlesStates.xpath, '/datastores'), - to_jsonb('{}' :: json), - cmHandlesStates.anchor_id, - cmHandlesStates.id, - cmHandlesStates.dataspace_id, - cmHandlesStates.schema_node_id -FROM - ( - SELECT - id, - xpath, - anchor_id, - dataspace_id, - schema_node_id - FROM - fragment - WHERE - xpath ~* '^/dmi-registry/cm-handles\[@id=''[\w\-]+''\]/state$' - AND xpath NOT IN ( - SELECT - SUBSTRING( - xpath - FROM - '^/dmi-registry/cm-handles\[@id=''[\w\-]+''\]/state' - ) - FROM - fragment - WHERE - xpath ~* '^/dmi-registry/cm-handles\[@id=''[\w\-]+''\]/state/datastores$' - ) - ) AS cmHandlesStates; -INSERT INTO - fragment( - xpath, - attributes, - anchor_id, - parent_id, - dataspace_id, - schema_node_id - ) -SELECT - concat( - cmHandlesDatastores.xpath, - '/operational' - ), - to_jsonb( - concat('{"sync-state": "NONE_REQUESTED"}') :: json - ), - cmHandlesDatastores.anchor_id, - cmHandlesDatastores.id, - cmHandlesDatastores.dataspace_id, - cmHandlesDatastores.schema_node_id -FROM - ( - SELECT - id, - xpath, - anchor_id, - dataspace_id, - schema_node_id - FROM - fragment - WHERE - xpath ~* '^/dmi-registry/cm-handles\[@id=''[\w\-]+''\]/state/datastores$' - AND xpath NOT IN ( - SELECT - SUBSTRING( - xpath - FROM - '^/dmi-registry/cm-handles\[@id=''[\w\-]+''\]/state/datastores' - ) - FROM - fragment - WHERE - xpath ~* '^/dmi-registry/cm-handles\[@id=''[\w\-]+''\]/state/datastores/operational$' - ) - ) AS cmHandlesDatastores;
\ No newline at end of file diff --git a/cps-ri/src/main/resources/changelog/db/changes/16-insert-cm-handle-state-rollback.sql b/cps-ri/src/main/resources/changelog/db/changes/16-insert-cm-handle-state-rollback.sql deleted file mode 100644 index 4b006ef0e2..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/16-insert-cm-handle-state-rollback.sql +++ /dev/null @@ -1,4 +0,0 @@ -DELETE FROM fragment WHERE xpath ~* '^/dmi-registry/cm-handles\[@id=''[\w\-]+''\]/state/lock-reason$'; -DELETE FROM fragment WHERE xpath ~* '^/dmi-registry/cm-handles\[@id=''[\w\-]+''\]/state/datastores/operational$'; -DELETE FROM fragment WHERE xpath ~* '^/dmi-registry/cm-handles\[@id=''[\w\-]+''\]/state/datastores$'; -DELETE FROM fragment WHERE xpath ~* '^/dmi-registry/cm-handles\[@id=''[\w\-]+''\]/state$';
\ No newline at end of file diff --git a/cps-ri/src/main/resources/changelog/db/changes/16-insert-cm-handle-state.yaml b/cps-ri/src/main/resources/changelog/db/changes/16-insert-cm-handle-state.yaml deleted file mode 100644 index 0f8c429f4a..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/16-insert-cm-handle-state.yaml +++ /dev/null @@ -1,11 +0,0 @@ -databaseChangeLog: - - changeSet: - author: cps - label: insert-cm-handle-state - id: 16 - changes: - - sqlFile: - path: changelog/db/changes/16-insert-cm-handle-state-forward.sql - rollback: - - sqlFile: - path: changelog/db/changes/16-insert-cm-handle-state-rollback.sql
\ No newline at end of file diff --git a/cps-ri/src/main/resources/changelog/db/changes/17-add-index-to-schema-set-yang-resources.yaml b/cps-ri/src/main/resources/changelog/db/changes/17-add-index-to-schema-set-yang-resources.yaml deleted file mode 100644 index bc16725109..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/17-add-index-to-schema-set-yang-resources.yaml +++ /dev/null @@ -1,15 +0,0 @@ -databaseChangeLog: - - changeSet: - author: cps - id: 17 - changes: - - createIndex: - columns: - - column: - name: schema_set_id - indexName: FKI_SCHEMA_SET_YANG_RESOURCES_SCHEMA_SET_ID_FK - tableName: schema_set_yang_resources - rollback: - - dropIndex: - indexName: FKI_SCHEMA_SET_YANG_RESOURCES_SCHEMA_SET_ID_FK - tableName: schema_set_yang_resources diff --git a/cps-ri/src/main/resources/changelog/db/changes/18-cascade-delete-fragment-children.yaml b/cps-ri/src/main/resources/changelog/db/changes/18-cascade-delete-fragment-children.yaml deleted file mode 100644 index 62a9e2f636..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/18-cascade-delete-fragment-children.yaml +++ /dev/null @@ -1,34 +0,0 @@ -databaseChangeLog: - - changeSet: - author: cps - id: 18 - changes: - - dropForeignKeyConstraint: - baseTableName: fragment - constraintName: fragment_parent_id_fkey - - addForeignKeyConstraint: - baseColumnNames: parent_id - baseTableName: fragment - constraintName: fragment_parent_id_fkey - deferrable: false - initiallyDeferred: false - onDelete: CASCADE - onUpdate: NO ACTION - referencedColumnNames: id - referencedTableName: fragment - validate: true - rollback: - - dropForeignKeyConstraint: - baseTableName: fragment - constraintName: fragment_parent_id_fkey - - addForeignKeyConstraint: - baseColumnNames: parent_id - baseTableName: fragment - constraintName: fragment_parent_id_fkey - deferrable: false - initiallyDeferred: false - onDelete: NO ACTION - onUpdate: NO ACTION - referencedColumnNames: id - referencedTableName: fragment - validate: true diff --git a/cps-ri/src/main/resources/changelog/db/changes/19-delete-not-required-dataspace-id-from-fragment.yaml b/cps-ri/src/main/resources/changelog/db/changes/19-delete-not-required-dataspace-id-from-fragment.yaml deleted file mode 100644 index 7b91bd5b38..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/19-delete-not-required-dataspace-id-from-fragment.yaml +++ /dev/null @@ -1,109 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (C) 2023 Nordix Foundation. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# ============LICENSE_END========================================================= - -databaseChangeLog: - - - changeSet: - id: 19-1 - author: cps - changes: - - dropIndex: - indexName: FKI_FRAGMENT_DATASPACE_ID_FK - tableName: fragment - rollback: - - createIndex: - columns: - - column: - name: dataspace_id - indexName: FKI_FRAGMENT_DATASPACE_ID_FK - tableName: fragment - - - changeSet: - id: 19-2 - author: cps - changes: - - dropUniqueConstraint: - constraintName: fragment_dataspace_id_anchor_id_xpath_key - tableName: fragment - - addUniqueConstraint: - columnNames: anchor_id, xpath - constraintName: fragment_anchor_id_xpath_key - tableName: fragment - rollback: - - dropUniqueConstraint: - constraintName: fragment_anchor_id_xpath_key - tableName: fragment - - addUniqueConstraint: - columnNames: dataspace_id, anchor_id, xpath - constraintName: fragment_dataspace_id_anchor_id_xpath_key - tableName: fragment - - - changeSet: - id: 19-3 - author: cps - changes: - - dropForeignKeyConstraint: - baseTableName: fragment - constraintName: fragment_dataspace_id_fkey - rollback: - - addForeignKeyConstraint: - baseColumnNames: dataspace_id - baseTableName: fragment - constraintName: fragment_dataspace_id_fkey - deferrable: false - initiallyDeferred: false - onDelete: NO ACTION - onUpdate: NO ACTION - referencedColumnNames: id - referencedTableName: dataspace - validate: true - - - changeSet: - id: 19-4 - author: cps - changes: - - dropColumn: - columnName: dataspace_id - tableName: fragment - rollback: - - addColumn: - tableName: fragment - columns: - - column: - name: dataspace_id - type: INTEGER - - sqlFile: - path: changelog/db/changes/19-repopulate-dataspace-id-for-rollback.sql - - addNotNullConstraint: - tableName: fragment - columnName: dataspace_id - columnDataType: INTEGER - - - changeSet: - id: 19-5 - author: cps - changes: - - addNotNullConstraint: - tableName: fragment - columnName: anchor_id - columnDataType: BIGINT - rollback: - - dropNotNullConstraint: - tableName: fragment - columnName: anchor_id - columnDataType: BIGINT diff --git a/cps-ri/src/main/resources/changelog/db/changes/20-change-foreign-key-id-types-to-integer.yaml b/cps-ri/src/main/resources/changelog/db/changes/20-change-foreign-key-id-types-to-integer.yaml deleted file mode 100644 index 4c0cd9f336..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/20-change-foreign-key-id-types-to-integer.yaml +++ /dev/null @@ -1,48 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (C) 2023 Nordix Foundation. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# ============LICENSE_END========================================================= - -databaseChangeLog: - - changeSet: - author: cps - id: 20 - changes: - - modifyDataType: - columnName: dataspace_id - newDataType: INTEGER - tableName: schema_set - - modifyDataType: - columnName: schema_set_id - newDataType: INTEGER - tableName: schema_set_yang_resources - - modifyDataType: - columnName: yang_resource_id - newDataType: INTEGER - tableName: schema_set_yang_resources - rollback: - - modifyDataType: - columnName: dataspace_id - newDataType: BIGINT - tableName: schema_set - - modifyDataType: - columnName: schema_set_id - newDataType: BIGINT - tableName: schema_set_yang_resources - - modifyDataType: - columnName: yang_resource_id - newDataType: BIGINT - tableName: schema_set_yang_resources diff --git a/cps-ri/src/main/resources/changelog/db/changes/21-escape-quotes-in-xpath.yaml b/cps-ri/src/main/resources/changelog/db/changes/21-escape-quotes-in-xpath.yaml deleted file mode 100644 index 7b5b1dbd07..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/21-escape-quotes-in-xpath.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# ============LICENSE_START======================================================= -# Copyright (C) 2023 Nordix Foundation. -# ================================================================================ -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# ============LICENSE_END========================================================= - -databaseChangeLog: - - - changeSet: - id: 21 - author: cps - changes: - - sqlFile: - path: changelog/db/changes/21-escape-quotes-in-xpath-forward.sql - rollback: - - sqlFile: - path: changelog/db/changes/21-escape-quotes-in-xpath-rollback.sql diff --git a/cps-ri/src/main/resources/changelog/db/changes/data/anchor.csv b/cps-ri/src/main/resources/changelog/db/changes/data/anchor.csv deleted file mode 100644 index 78dd91419b..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/data/anchor.csv +++ /dev/null @@ -1,2 +0,0 @@ -name|schema_set_id|dataspace_id -ran-network-simulation|(select id from schema_set where name='cps-ran-schema-model')|(select id from dataspace where name='NFP-Operational') diff --git a/cps-ri/src/main/resources/changelog/db/changes/data/dataspace.csv b/cps-ri/src/main/resources/changelog/db/changes/data/dataspace.csv deleted file mode 100644 index 70b4af6816..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/data/dataspace.csv +++ /dev/null @@ -1,2 +0,0 @@ -name -NFP-Operational diff --git a/cps-ri/src/main/resources/changelog/db/changes/data/dmi/anchor.csv b/cps-ri/src/main/resources/changelog/db/changes/data/dmi/anchor.csv deleted file mode 100644 index 7a0df2137a..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/data/dmi/anchor.csv +++ /dev/null @@ -1,2 +0,0 @@ -name|schema_set_id|dataspace_id -ncmp-dmi-registry|(select id from schema_set where name='ncmp-dmi-registry-model')|(select id from dataspace where name='NCMP-Admin') diff --git a/cps-ri/src/main/resources/changelog/db/changes/data/dmi/dataspace.csv b/cps-ri/src/main/resources/changelog/db/changes/data/dmi/dataspace.csv deleted file mode 100644 index 4fb2eec19c..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/data/dmi/dataspace.csv +++ /dev/null @@ -1,2 +0,0 @@ -name -NCMP-Admin diff --git a/cps-ri/src/main/resources/changelog/db/changes/data/dmi/fragment.csv b/cps-ri/src/main/resources/changelog/db/changes/data/dmi/fragment.csv deleted file mode 100644 index 52aef0e239..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/data/dmi/fragment.csv +++ /dev/null @@ -1,2 +0,0 @@ -id|xpath|attributes|anchor_id|parent_id|dataspace_id|schema_node_id -144|/dmi-registry|{}|(select id from anchor where name='ncmp-dmi-registry')|null|(select id from dataspace where name='NCMP-Admin')|null
\ No newline at end of file diff --git a/cps-ri/src/main/resources/changelog/db/changes/data/dmi/schema_set.csv b/cps-ri/src/main/resources/changelog/db/changes/data/dmi/schema_set.csv deleted file mode 100644 index 936239b37a..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/data/dmi/schema_set.csv +++ /dev/null @@ -1,2 +0,0 @@ -name|dataspace_id -ncmp-dmi-registry-model|(select id from dataspace where name='NCMP-Admin') diff --git a/cps-ri/src/main/resources/changelog/db/changes/data/dmi/schema_set_yang_resources.csv b/cps-ri/src/main/resources/changelog/db/changes/data/dmi/schema_set_yang_resources.csv deleted file mode 100644 index 9183d38ff5..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/data/dmi/schema_set_yang_resources.csv +++ /dev/null @@ -1,3 +0,0 @@ -schema_set_id|yang_resource_id -(select id from schema_set where name='ncmp-dmi-registry-model')|(select id from yang_resource where name='dmi-registry@2021-05-20.yang') - diff --git a/cps-ri/src/main/resources/changelog/db/changes/data/dmi/schema_set_yang_resources@2021-10-20.csv b/cps-ri/src/main/resources/changelog/db/changes/data/dmi/schema_set_yang_resources@2021-10-20.csv deleted file mode 100644 index d419fc92b4..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/data/dmi/schema_set_yang_resources@2021-10-20.csv +++ /dev/null @@ -1,3 +0,0 @@ -schema_set_id|yang_resource_id -(select id from schema_set where name='ncmp-dmi-registry-model')|(select id from yang_resource where name='dmi-registry@2021-10-20.yang') - diff --git a/cps-ri/src/main/resources/changelog/db/changes/data/dmi/schema_set_yang_resources@2021-12-13.csv b/cps-ri/src/main/resources/changelog/db/changes/data/dmi/schema_set_yang_resources@2021-12-13.csv deleted file mode 100644 index 3e8afdd4e5..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/data/dmi/schema_set_yang_resources@2021-12-13.csv +++ /dev/null @@ -1,3 +0,0 @@ -schema_set_id|yang_resource_id -(select id from schema_set where name='ncmp-dmi-registry-model')|(select id from yang_resource where name='dmi-registry@2021-12-13.yang') - diff --git a/cps-ri/src/main/resources/changelog/db/changes/data/dmi/yang_resource.csv b/cps-ri/src/main/resources/changelog/db/changes/data/dmi/yang_resource.csv deleted file mode 100644 index 35e2bcdd83..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/data/dmi/yang_resource.csv +++ /dev/null @@ -1,48 +0,0 @@ -name|content|checksum -dmi-registry@2021-05-20.yang|"module dmi-registry { - - yang-version 1.1; - - namespace \"org:onap:cps:ncmp\"; - - prefix dmi-reg; - - organization \"Nordix Foundation\"; - - contact \"rahul.tyagi@est.tech\"; - - revision \"2021-05-20\" { - description - \"Initial Version\"; - } - - container dmi-registry { - - list cm-handles { - - key \"id\"; - - leaf id { - type string; - } - - leaf dmi-service-name { - type string; - } - - list additional-properties { - - key \"name\"; - - leaf name { - type string; - } - - leaf value { - type string; - } - } - } - } -} -"|257b264cd091436f74f9c92512b507459615391f7006fc40b74b6866dbe1b379
\ No newline at end of file diff --git a/cps-ri/src/main/resources/changelog/db/changes/data/dmi/yang_resource@2021-10-20.csv b/cps-ri/src/main/resources/changelog/db/changes/data/dmi/yang_resource@2021-10-20.csv deleted file mode 100644 index 80caea2142..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/data/dmi/yang_resource@2021-10-20.csv +++ /dev/null @@ -1,53 +0,0 @@ -name|content|checksum -dmi-registry@2021-10-20.yang|"module dmi-registry { - - yang-version 1.1; - - namespace \"org:onap:cps:ncmp\"; - - prefix dmi-reg; - - organization \"Nordix Foundation\"; - - contact \"rahul.tyagi@est.tech\"; - - revision \"2021-10-20\" { - description - \"Added dmi-data-service-name & dmi-model-service-name to allow separate DMI instances for each responsibility\"; - } - - container dmi-registry { - - list cm-handles { - - key \"id\"; - - leaf id { - type string; - } - - leaf dmi-service-name { - type string; - } - - leaf dmi-data-service-name { - type string; - } - - leaf dmi-model-service-name { - type string; - } - - list additional-properties { - key \"name\"; - leaf name { - type string; - } - leaf value { - type string; - } - } - } - } -} -"|f9145662dfc97363297dc1c06b8bde3a8621c658abefd56946faaab240714181 diff --git a/cps-ri/src/main/resources/changelog/db/changes/data/fragment.csv b/cps-ri/src/main/resources/changelog/db/changes/data/fragment.csv deleted file mode 100644 index 81c379d0d5..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/data/fragment.csv +++ /dev/null @@ -1,144 +0,0 @@ -id|xpath|attributes|anchor_id|parent_id|dataspace_id|schema_node_id -1|/cps-ran-schema|{}|(select id from anchor where name='ran-network-simulation')|null|(select id from dataspace where name='NFP-Operational')|null -2|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]|"{"idNearRTRIC": "11"}"|(select id from anchor where name='ran-network-simulation')|1|(select id from dataspace where name='NFP-Operational')|null -73|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]|"{"idNearRTRIC": "22"}"|(select id from anchor where name='ran-network-simulation')|1|(select id from dataspace where name='NFP-Operational')|null -3|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]|"{"idGNBCUCPFunction": "cucpserver1"}"|(select id from anchor where name='ran-network-simulation')|2|(select id from dataspace where name='NFP-Operational')|null -35|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="1"]|"{"idGNBDUFunction": "1"}"|(select id from anchor where name='ran-network-simulation')|2|(select id from dataspace where name='NFP-Operational')|null -47|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="2"]|"{"idGNBDUFunction": "2"}"|(select id from anchor where name='ran-network-simulation')|2|(select id from dataspace where name='NFP-Operational')|null -59|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="3"]|"{"idGNBDUFunction": "3"}"|(select id from anchor where name='ran-network-simulation')|2|(select id from dataspace where name='NFP-Operational')|null -71|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUUPFunction[@idGNBCUUPFunction="1111"]|"{"idGNBCUUPFunction": "1111"}"|(select id from anchor where name='ran-network-simulation')|2|(select id from dataspace where name='NFP-Operational')|null -4|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/attributes|"{"gNBId": 98763, "gNBCUName": "cucpserver1", "gNBIdLength": 32}"|(select id from anchor where name='ran-network-simulation')|3|(select id from dataspace where name='NFP-Operational')|null -5|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15290"]|"{"idNRCellCU": "15290"}"|(select id from anchor where name='ran-network-simulation')|3|(select id from dataspace where name='NFP-Operational')|null -7|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15175"]|"{"idNRCellCU": "15175"}"|(select id from anchor where name='ran-network-simulation')|3|(select id from dataspace where name='NFP-Operational')|null -9|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15296"]|"{"idNRCellCU": "15296"}"|(select id from anchor where name='ran-network-simulation')|3|(select id from dataspace where name='NFP-Operational')|null -11|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15176"]|"{"idNRCellCU": "15176"}"|(select id from anchor where name='ran-network-simulation')|3|(select id from dataspace where name='NFP-Operational')|null -13|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15174"]|"{"idNRCellCU": "15174"}"|(select id from anchor where name='ran-network-simulation')|3|(select id from dataspace where name='NFP-Operational')|null -15|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15289"]|"{"idNRCellCU": "15289"}"|(select id from anchor where name='ran-network-simulation')|3|(select id from dataspace where name='NFP-Operational')|null -17|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="14000"]|"{"idNRCellCU": "14000"}"|(select id from anchor where name='ran-network-simulation')|3|(select id from dataspace where name='NFP-Operational')|null -19|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15155"]|"{"idNRCellCU": "15155"}"|(select id from anchor where name='ran-network-simulation')|3|(select id from dataspace where name='NFP-Operational')|null -21|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15425"]|"{"idNRCellCU": "15425"}"|(select id from anchor where name='ran-network-simulation')|3|(select id from dataspace where name='NFP-Operational')|null -23|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15689"]|"{"idNRCellCU": "15689"}"|(select id from anchor where name='ran-network-simulation')|3|(select id from dataspace where name='NFP-Operational')|null -25|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15426"]|"{"idNRCellCU": "15426"}"|(select id from anchor where name='ran-network-simulation')|3|(select id from dataspace where name='NFP-Operational')|null -27|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15687"]|"{"idNRCellCU": "15687"}"|(select id from anchor where name='ran-network-simulation')|3|(select id from dataspace where name='NFP-Operational')|null -29|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15825"]|"{"idNRCellCU": "15825"}"|(select id from anchor where name='ran-network-simulation')|3|(select id from dataspace where name='NFP-Operational')|null -31|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15826"]|"{"idNRCellCU": "15826"}"|(select id from anchor where name='ran-network-simulation')|3|(select id from dataspace where name='NFP-Operational')|null -33|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="13999"]|"{"idNRCellCU": "13999"}"|(select id from anchor where name='ran-network-simulation')|3|(select id from dataspace where name='NFP-Operational')|null -6|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15290"]/attributes|"{"cellLocalId": 15290}"|(select id from anchor where name='ran-network-simulation')|5|(select id from dataspace where name='NFP-Operational')|null -8|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15175"]/attributes|"{"cellLocalId": 15175}"|(select id from anchor where name='ran-network-simulation')|7|(select id from dataspace where name='NFP-Operational')|null -10|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15296"]/attributes|"{"cellLocalId": 15296}"|(select id from anchor where name='ran-network-simulation')|9|(select id from dataspace where name='NFP-Operational')|null -12|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15176"]/attributes|"{"cellLocalId": 15176}"|(select id from anchor where name='ran-network-simulation')|11|(select id from dataspace where name='NFP-Operational')|null -14|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15174"]/attributes|"{"cellLocalId": 15174}"|(select id from anchor where name='ran-network-simulation')|13|(select id from dataspace where name='NFP-Operational')|null -16|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15289"]/attributes|"{"cellLocalId": 15289}"|(select id from anchor where name='ran-network-simulation')|15|(select id from dataspace where name='NFP-Operational')|null -18|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="14000"]/attributes|"{"cellLocalId": 14000}"|(select id from anchor where name='ran-network-simulation')|17|(select id from dataspace where name='NFP-Operational')|null -20|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15155"]/attributes|"{"cellLocalId": 15155}"|(select id from anchor where name='ran-network-simulation')|19|(select id from dataspace where name='NFP-Operational')|null -22|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15425"]/attributes|"{"cellLocalId": 15425}"|(select id from anchor where name='ran-network-simulation')|21|(select id from dataspace where name='NFP-Operational')|null -24|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15689"]/attributes|"{"cellLocalId": 15689}"|(select id from anchor where name='ran-network-simulation')|23|(select id from dataspace where name='NFP-Operational')|null -26|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15426"]/attributes|"{"cellLocalId": 15426}"|(select id from anchor where name='ran-network-simulation')|25|(select id from dataspace where name='NFP-Operational')|null -28|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15687"]/attributes|"{"cellLocalId": 15687}"|(select id from anchor where name='ran-network-simulation')|27|(select id from dataspace where name='NFP-Operational')|null -30|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15825"]/attributes|"{"cellLocalId": 15825}"|(select id from anchor where name='ran-network-simulation')|29|(select id from dataspace where name='NFP-Operational')|null -32|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="15826"]/attributes|"{"cellLocalId": 15826}"|(select id from anchor where name='ran-network-simulation')|31|(select id from dataspace where name='NFP-Operational')|null -34|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver1"]/NRCellCU[@idNRCellCU="13999"]/attributes|"{"cellLocalId": 13999}"|(select id from anchor where name='ran-network-simulation')|33|(select id from dataspace where name='NFP-Operational')|null -36|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="1"]/attributes|"{"gNBDUId": 1, "gNBDUName": "gnduserver1", "gNBIdLength": 32}"|(select id from anchor where name='ran-network-simulation')|35|(select id from dataspace where name='NFP-Operational')|null -37|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="1"]/NRCellDU[@idNRCellDU="15289"]|"{"idNRCellDU": "15289"}"|(select id from anchor where name='ran-network-simulation')|35|(select id from dataspace where name='NFP-Operational')|null -39|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="1"]/NRCellDU[@idNRCellDU="15290"]|"{"idNRCellDU": "15290"}"|(select id from anchor where name='ran-network-simulation')|35|(select id from dataspace where name='NFP-Operational')|null -41|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="1"]/NRCellDU[@idNRCellDU="15296"]|"{"idNRCellDU": "15296"}"|(select id from anchor where name='ran-network-simulation')|35|(select id from dataspace where name='NFP-Operational')|null -43|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="1"]/NRCellDU[@idNRCellDU="15689"]|"{"idNRCellDU": "15689"}"|(select id from anchor where name='ran-network-simulation')|35|(select id from dataspace where name='NFP-Operational')|null -45|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="1"]/NRCellDU[@idNRCellDU="15687"]|"{"idNRCellDU": "15687"}"|(select id from anchor where name='ran-network-simulation')|35|(select id from dataspace where name='NFP-Operational')|null -38|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="1"]/NRCellDU[@idNRCellDU="15289"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 15289}"|(select id from anchor where name='ran-network-simulation')|37|(select id from dataspace where name='NFP-Operational')|null -40|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="1"]/NRCellDU[@idNRCellDU="15290"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 15290}"|(select id from anchor where name='ran-network-simulation')|39|(select id from dataspace where name='NFP-Operational')|null -42|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="1"]/NRCellDU[@idNRCellDU="15296"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 15296}"|(select id from anchor where name='ran-network-simulation')|41|(select id from dataspace where name='NFP-Operational')|null -44|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="1"]/NRCellDU[@idNRCellDU="15689"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 15689}"|(select id from anchor where name='ran-network-simulation')|43|(select id from dataspace where name='NFP-Operational')|null -46|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="1"]/NRCellDU[@idNRCellDU="15687"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 15687}"|(select id from anchor where name='ran-network-simulation')|45|(select id from dataspace where name='NFP-Operational')|null -48|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="2"]/attributes|"{"gNBDUId": 2, "gNBDUName": "gnduserver2", "gNBIdLength": 32}"|(select id from anchor where name='ran-network-simulation')|47|(select id from dataspace where name='NFP-Operational')|null -49|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="2"]/NRCellDU[@idNRCellDU="15825"]|"{"idNRCellDU": "15825"}"|(select id from anchor where name='ran-network-simulation')|47|(select id from dataspace where name='NFP-Operational')|null -51|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="2"]/NRCellDU[@idNRCellDU="15155"]|"{"idNRCellDU": "15155"}"|(select id from anchor where name='ran-network-simulation')|47|(select id from dataspace where name='NFP-Operational')|null -53|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="2"]/NRCellDU[@idNRCellDU="15175"]|"{"idNRCellDU": "15175"}"|(select id from anchor where name='ran-network-simulation')|47|(select id from dataspace where name='NFP-Operational')|null -55|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="2"]/NRCellDU[@idNRCellDU="15176"]|"{"idNRCellDU": "15176"}"|(select id from anchor where name='ran-network-simulation')|47|(select id from dataspace where name='NFP-Operational')|null -57|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="2"]/NRCellDU[@idNRCellDU="15174"]|"{"idNRCellDU": "15174"}"|(select id from anchor where name='ran-network-simulation')|47|(select id from dataspace where name='NFP-Operational')|null -50|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="2"]/NRCellDU[@idNRCellDU="15825"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 15825}"|(select id from anchor where name='ran-network-simulation')|49|(select id from dataspace where name='NFP-Operational')|null -52|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="2"]/NRCellDU[@idNRCellDU="15155"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 15155}"|(select id from anchor where name='ran-network-simulation')|51|(select id from dataspace where name='NFP-Operational')|null -54|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="2"]/NRCellDU[@idNRCellDU="15175"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 15175}"|(select id from anchor where name='ran-network-simulation')|53|(select id from dataspace where name='NFP-Operational')|null -56|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="2"]/NRCellDU[@idNRCellDU="15176"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 15176}"|(select id from anchor where name='ran-network-simulation')|55|(select id from dataspace where name='NFP-Operational')|null -58|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="2"]/NRCellDU[@idNRCellDU="15174"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 15174}"|(select id from anchor where name='ran-network-simulation')|57|(select id from dataspace where name='NFP-Operational')|null -60|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="3"]/attributes|"{"gNBDUId": 3, "gNBDUName": "gnduserver3", "gNBIdLength": 32}"|(select id from anchor where name='ran-network-simulation')|59|(select id from dataspace where name='NFP-Operational')|null -61|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="3"]/NRCellDU[@idNRCellDU="15826"]|"{"idNRCellDU": "15826"}"|(select id from anchor where name='ran-network-simulation')|59|(select id from dataspace where name='NFP-Operational')|null -63|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="3"]/NRCellDU[@idNRCellDU="14000"]|"{"idNRCellDU": "14000"}"|(select id from anchor where name='ran-network-simulation')|59|(select id from dataspace where name='NFP-Operational')|null -65|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="3"]/NRCellDU[@idNRCellDU="13999"]|"{"idNRCellDU": "13999"}"|(select id from anchor where name='ran-network-simulation')|59|(select id from dataspace where name='NFP-Operational')|null -67|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="3"]/NRCellDU[@idNRCellDU="15425"]|"{"idNRCellDU": "15425"}"|(select id from anchor where name='ran-network-simulation')|59|(select id from dataspace where name='NFP-Operational')|null -69|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="3"]/NRCellDU[@idNRCellDU="15426"]|"{"idNRCellDU": "15426"}"|(select id from anchor where name='ran-network-simulation')|59|(select id from dataspace where name='NFP-Operational')|null -62|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="3"]/NRCellDU[@idNRCellDU="15826"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 15826}"|(select id from anchor where name='ran-network-simulation')|61|(select id from dataspace where name='NFP-Operational')|null -64|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="3"]/NRCellDU[@idNRCellDU="14000"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 14000}"|(select id from anchor where name='ran-network-simulation')|63|(select id from dataspace where name='NFP-Operational')|null -66|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="3"]/NRCellDU[@idNRCellDU="13999"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 13999}"|(select id from anchor where name='ran-network-simulation')|65|(select id from dataspace where name='NFP-Operational')|null -68|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="3"]/NRCellDU[@idNRCellDU="15425"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 15425}"|(select id from anchor where name='ran-network-simulation')|67|(select id from dataspace where name='NFP-Operational')|null -70|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBDUFunction[@idGNBDUFunction="3"]/NRCellDU[@idNRCellDU="15426"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 15426}"|(select id from anchor where name='ran-network-simulation')|69|(select id from dataspace where name='NFP-Operational')|null -72|/cps-ran-schema/NearRTRIC[@idNearRTRIC="11"]/GNBCUUPFunction[@idGNBCUUPFunction="1111"]/attributes|"{"gNBId": 98763}"|(select id from anchor where name='ran-network-simulation')|71|(select id from dataspace where name='NFP-Operational')|null -74|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]|"{"idGNBCUCPFunction": "cucpserver2"}"|(select id from anchor where name='ran-network-simulation')|73|(select id from dataspace where name='NFP-Operational')|null -106|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="4"]|"{"idGNBDUFunction": "4"}"|(select id from anchor where name='ran-network-simulation')|73|(select id from dataspace where name='NFP-Operational')|null -118|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="5"]|"{"idGNBDUFunction": "5"}"|(select id from anchor where name='ran-network-simulation')|73|(select id from dataspace where name='NFP-Operational')|null -130|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="6"]|"{"idGNBDUFunction": "6"}"|(select id from anchor where name='ran-network-simulation')|73|(select id from dataspace where name='NFP-Operational')|null -142|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUUPFunction[@idGNBCUUPFunction="2222"]|"{"idGNBCUUPFunction": "2222"}"|(select id from anchor where name='ran-network-simulation')|73|(select id from dataspace where name='NFP-Operational')|null -75|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/attributes|"{"gNBId": 98763, "gNBCUName": "cucpserver2", "gNBIdLength": 32}"|(select id from anchor where name='ran-network-simulation')|74|(select id from dataspace where name='NFP-Operational')|null -76|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="15360"]|"{"idNRCellCU": "15360"}"|(select id from anchor where name='ran-network-simulation')|74|(select id from dataspace where name='NFP-Operational')|null -78|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="15361"]|"{"idNRCellCU": "15361"}"|(select id from anchor where name='ran-network-simulation')|74|(select id from dataspace where name='NFP-Operational')|null -80|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="11561"]|"{"idNRCellCU": "11561"}"|(select id from anchor where name='ran-network-simulation')|74|(select id from dataspace where name='NFP-Operational')|null -82|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="11562"]|"{"idNRCellCU": "11562"}"|(select id from anchor where name='ran-network-simulation')|74|(select id from dataspace where name='NFP-Operational')|null -84|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="14655"]|"{"idNRCellCU": "14655"}"|(select id from anchor where name='ran-network-simulation')|74|(select id from dataspace where name='NFP-Operational')|null -86|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="14656"]|"{"idNRCellCU": "14656"}"|(select id from anchor where name='ran-network-simulation')|74|(select id from dataspace where name='NFP-Operational')|null -88|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="13910"]|"{"idNRCellCU": "13910"}"|(select id from anchor where name='ran-network-simulation')|74|(select id from dataspace where name='NFP-Operational')|null -90|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="10896"]|"{"idNRCellCU": "10896"}"|(select id from anchor where name='ran-network-simulation')|74|(select id from dataspace where name='NFP-Operational')|null -92|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="10897"]|"{"idNRCellCU": "10897"}"|(select id from anchor where name='ran-network-simulation')|74|(select id from dataspace where name='NFP-Operational')|null -94|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="11568"]|"{"idNRCellCU": "11568"}"|(select id from anchor where name='ran-network-simulation')|74|(select id from dataspace where name='NFP-Operational')|null -96|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="15548"]|"{"idNRCellCU": "15548"}"|(select id from anchor where name='ran-network-simulation')|74|(select id from dataspace where name='NFP-Operational')|null -98|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="11569"]|"{"idNRCellCU": "11569"}"|(select id from anchor where name='ran-network-simulation')|74|(select id from dataspace where name='NFP-Operational')|null -100|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="14427"]|"{"idNRCellCU": "14427"}"|(select id from anchor where name='ran-network-simulation')|74|(select id from dataspace where name='NFP-Operational')|null -102|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="15549"]|"{"idNRCellCU": "15549"}"|(select id from anchor where name='ran-network-simulation')|74|(select id from dataspace where name='NFP-Operational')|null -104|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="13905"]|"{"idNRCellCU": "13905"}"|(select id from anchor where name='ran-network-simulation')|74|(select id from dataspace where name='NFP-Operational')|null -77|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="15360"]/attributes|"{"cellLocalId": 15360}"|(select id from anchor where name='ran-network-simulation')|76|(select id from dataspace where name='NFP-Operational')|null -79|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="15361"]/attributes|"{"cellLocalId": 15361}"|(select id from anchor where name='ran-network-simulation')|78|(select id from dataspace where name='NFP-Operational')|null -81|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="11561"]/attributes|"{"cellLocalId": 11561}"|(select id from anchor where name='ran-network-simulation')|80|(select id from dataspace where name='NFP-Operational')|null -83|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="11562"]/attributes|"{"cellLocalId": 11562}"|(select id from anchor where name='ran-network-simulation')|82|(select id from dataspace where name='NFP-Operational')|null -85|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="14655"]/attributes|"{"cellLocalId": 14655}"|(select id from anchor where name='ran-network-simulation')|84|(select id from dataspace where name='NFP-Operational')|null -87|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="14656"]/attributes|"{"cellLocalId": 14656}"|(select id from anchor where name='ran-network-simulation')|86|(select id from dataspace where name='NFP-Operational')|null -89|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="13910"]/attributes|"{"cellLocalId": 13910}"|(select id from anchor where name='ran-network-simulation')|88|(select id from dataspace where name='NFP-Operational')|null -91|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="10896"]/attributes|"{"cellLocalId": 10896}"|(select id from anchor where name='ran-network-simulation')|90|(select id from dataspace where name='NFP-Operational')|null -93|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="10897"]/attributes|"{"cellLocalId": 10897}"|(select id from anchor where name='ran-network-simulation')|92|(select id from dataspace where name='NFP-Operational')|null -95|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="11568"]/attributes|"{"cellLocalId": 11568}"|(select id from anchor where name='ran-network-simulation')|94|(select id from dataspace where name='NFP-Operational')|null -97|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="15548"]/attributes|"{"cellLocalId": 15548}"|(select id from anchor where name='ran-network-simulation')|96|(select id from dataspace where name='NFP-Operational')|null -99|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="11569"]/attributes|"{"cellLocalId": 11569}"|(select id from anchor where name='ran-network-simulation')|98|(select id from dataspace where name='NFP-Operational')|null -101|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="14427"]/attributes|"{"cellLocalId": 14427}"|(select id from anchor where name='ran-network-simulation')|100|(select id from dataspace where name='NFP-Operational')|null -103|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="15549"]/attributes|"{"cellLocalId": 15549}"|(select id from anchor where name='ran-network-simulation')|102|(select id from dataspace where name='NFP-Operational')|null -105|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUCPFunction[@idGNBCUCPFunction="cucpserver2"]/NRCellCU[@idNRCellCU="13905"]/attributes|"{"cellLocalId": 13905}"|(select id from anchor where name='ran-network-simulation')|104|(select id from dataspace where name='NFP-Operational')|null -107|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="4"]/attributes|"{"gNBDUId": 4, "gNBDUName": "gnduserver4", "gNBIdLength": 32}"|(select id from anchor where name='ran-network-simulation')|106|(select id from dataspace where name='NFP-Operational')|null -108|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="4"]/NRCellDU[@idNRCellDU="10896"]|"{"idNRCellDU": "10896"}"|(select id from anchor where name='ran-network-simulation')|106|(select id from dataspace where name='NFP-Operational')|null -110|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="4"]/NRCellDU[@idNRCellDU="11568"]|"{"idNRCellDU": "11568"}"|(select id from anchor where name='ran-network-simulation')|106|(select id from dataspace where name='NFP-Operational')|null -112|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="4"]/NRCellDU[@idNRCellDU="11561"]|"{"idNRCellDU": "11561"}"|(select id from anchor where name='ran-network-simulation')|106|(select id from dataspace where name='NFP-Operational')|null -114|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="4"]/NRCellDU[@idNRCellDU="11569"]|"{"idNRCellDU": "11569"}"|(select id from anchor where name='ran-network-simulation')|106|(select id from dataspace where name='NFP-Operational')|null -116|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="4"]/NRCellDU[@idNRCellDU="11562"]|"{"idNRCellDU": "11562"}"|(select id from anchor where name='ran-network-simulation')|106|(select id from dataspace where name='NFP-Operational')|null -109|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="4"]/NRCellDU[@idNRCellDU="10896"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 10896}"|(select id from anchor where name='ran-network-simulation')|108|(select id from dataspace where name='NFP-Operational')|null -111|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="4"]/NRCellDU[@idNRCellDU="11568"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 11568}"|(select id from anchor where name='ran-network-simulation')|110|(select id from dataspace where name='NFP-Operational')|null -113|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="4"]/NRCellDU[@idNRCellDU="11561"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 11561}"|(select id from anchor where name='ran-network-simulation')|112|(select id from dataspace where name='NFP-Operational')|null -115|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="4"]/NRCellDU[@idNRCellDU="11569"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 11569}"|(select id from anchor where name='ran-network-simulation')|114|(select id from dataspace where name='NFP-Operational')|null -117|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="4"]/NRCellDU[@idNRCellDU="11562"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 11562}"|(select id from anchor where name='ran-network-simulation')|116|(select id from dataspace where name='NFP-Operational')|null -119|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="5"]/attributes|"{"gNBDUId": 5, "gNBDUName": "gnduserver5", "gNBIdLength": 32}"|(select id from anchor where name='ran-network-simulation')|118|(select id from dataspace where name='NFP-Operational')|null -120|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="5"]/NRCellDU[@idNRCellDU="13910"]|"{"idNRCellDU": "13910"}"|(select id from anchor where name='ran-network-simulation')|118|(select id from dataspace where name='NFP-Operational')|null -122|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="5"]/NRCellDU[@idNRCellDU="10897"]|"{"idNRCellDU": "10897"}"|(select id from anchor where name='ran-network-simulation')|118|(select id from dataspace where name='NFP-Operational')|null -124|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="5"]/NRCellDU[@idNRCellDU="14655"]|"{"idNRCellDU": "14655"}"|(select id from anchor where name='ran-network-simulation')|118|(select id from dataspace where name='NFP-Operational')|null -126|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="5"]/NRCellDU[@idNRCellDU="14656"]|"{"idNRCellDU": "14656"}"|(select id from anchor where name='ran-network-simulation')|118|(select id from dataspace where name='NFP-Operational')|null -128|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="5"]/NRCellDU[@idNRCellDU="13905"]|"{"idNRCellDU": "13905"}"|(select id from anchor where name='ran-network-simulation')|118|(select id from dataspace where name='NFP-Operational')|null -121|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="5"]/NRCellDU[@idNRCellDU="13910"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 13910}"|(select id from anchor where name='ran-network-simulation')|120|(select id from dataspace where name='NFP-Operational')|null -123|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="5"]/NRCellDU[@idNRCellDU="10897"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 10897}"|(select id from anchor where name='ran-network-simulation')|122|(select id from dataspace where name='NFP-Operational')|null -125|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="5"]/NRCellDU[@idNRCellDU="14655"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 14655}"|(select id from anchor where name='ran-network-simulation')|124|(select id from dataspace where name='NFP-Operational')|null -127|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="5"]/NRCellDU[@idNRCellDU="14656"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 14656}"|(select id from anchor where name='ran-network-simulation')|126|(select id from dataspace where name='NFP-Operational')|null -129|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="5"]/NRCellDU[@idNRCellDU="13905"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 13905}"|(select id from anchor where name='ran-network-simulation')|128|(select id from dataspace where name='NFP-Operational')|null -131|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="6"]/attributes|"{"gNBDUId": 6, "gNBDUName": "gnduserver6", "gNBIdLength": 32}"|(select id from anchor where name='ran-network-simulation')|130|(select id from dataspace where name='NFP-Operational')|null -132|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="6"]/NRCellDU[@idNRCellDU="15548"]|"{"idNRCellDU": "15548"}"|(select id from anchor where name='ran-network-simulation')|130|(select id from dataspace where name='NFP-Operational')|null -134|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="6"]/NRCellDU[@idNRCellDU="14427"]|"{"idNRCellDU": "14427"}"|(select id from anchor where name='ran-network-simulation')|130|(select id from dataspace where name='NFP-Operational')|null -136|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="6"]/NRCellDU[@idNRCellDU="15549"]|"{"idNRCellDU": "15549"}"|(select id from anchor where name='ran-network-simulation')|130|(select id from dataspace where name='NFP-Operational')|null -138|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="6"]/NRCellDU[@idNRCellDU="15360"]|"{"idNRCellDU": "15360"}"|(select id from anchor where name='ran-network-simulation')|130|(select id from dataspace where name='NFP-Operational')|null -140|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="6"]/NRCellDU[@idNRCellDU="15361"]|"{"idNRCellDU": "15361"}"|(select id from anchor where name='ran-network-simulation')|130|(select id from dataspace where name='NFP-Operational')|null -133|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="6"]/NRCellDU[@idNRCellDU="15548"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 15548}"|(select id from anchor where name='ran-network-simulation')|132|(select id from dataspace where name='NFP-Operational')|null -135|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="6"]/NRCellDU[@idNRCellDU="14427"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 14427}"|(select id from anchor where name='ran-network-simulation')|134|(select id from dataspace where name='NFP-Operational')|null -137|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="6"]/NRCellDU[@idNRCellDU="15549"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 15549}"|(select id from anchor where name='ran-network-simulation')|136|(select id from dataspace where name='NFP-Operational')|null -139|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="6"]/NRCellDU[@idNRCellDU="15360"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 15360}"|(select id from anchor where name='ran-network-simulation')|138|(select id from dataspace where name='NFP-Operational')|null -141|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBDUFunction[@idGNBDUFunction="6"]/NRCellDU[@idNRCellDU="15361"]/attributes|"{"nRPCI": 12, "nRTAC": 310, "cellLocalId": 15361}"|(select id from anchor where name='ran-network-simulation')|140|(select id from dataspace where name='NFP-Operational')|null -143|/cps-ran-schema/NearRTRIC[@idNearRTRIC="22"]/GNBCUUPFunction[@idGNBCUUPFunction="2222"]/attributes|"{"gNBId": 98763}"|(select id from anchor where name='ran-network-simulation')|142|(select id from dataspace where name='NFP-Operational')|null diff --git a/cps-ri/src/main/resources/changelog/db/changes/data/schema_set.csv b/cps-ri/src/main/resources/changelog/db/changes/data/schema_set.csv deleted file mode 100644 index 39de8a4579..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/data/schema_set.csv +++ /dev/null @@ -1,2 +0,0 @@ -name|dataspace_id -cps-ran-schema-model|(select id from dataspace where name='NFP-Operational') diff --git a/cps-ri/src/main/resources/changelog/db/changes/data/schema_set_yang_resources.csv b/cps-ri/src/main/resources/changelog/db/changes/data/schema_set_yang_resources.csv deleted file mode 100644 index 9a258c2aea..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/data/schema_set_yang_resources.csv +++ /dev/null @@ -1,4 +0,0 @@ -schema_set_id|yang_resource_id -(select id from schema_set where name='cps-ran-schema-model')|"(select id from yang_resource where name='ietf-inet-types.yang')" -(select id from schema_set where name='cps-ran-schema-model')|(select id from yang_resource where name='cps-ran-schema-model2021-01-28.yang') -(select id from schema_set where name='cps-ran-schema-model')|(select id from yang_resource where name='ietf-yang-types.yang') diff --git a/cps-ri/src/main/resources/changelog/db/changes/data/yang_resource.csv b/cps-ri/src/main/resources/changelog/db/changes/data/yang_resource.csv deleted file mode 100644 index 4dd3127458..0000000000 --- a/cps-ri/src/main/resources/changelog/db/changes/data/yang_resource.csv +++ /dev/null @@ -1,2236 +0,0 @@ -name|content|checksum -ietf-inet-types.yang|"module ietf-inet-types { - - namespace \"urn:ietf:params:xml:ns:yang:ietf-inet-types\"; - prefix \"inet\"; - - organization - \"IETF NETMOD (NETCONF Data Modeling Language) Working Group\"; - - contact - \"WG Web: <http://tools.ietf.org/wg/netmod/> - WG List: <mailto:netmod@ietf.org> - - WG Chair: David Kessens - <mailto:david.kessens@nsn.com> - - WG Chair: Juergen Schoenwaelder - <mailto:j.schoenwaelder@jacobs-university.de> - - Editor: Juergen Schoenwaelder - <mailto:j.schoenwaelder@jacobs-university.de>\"; - - description - \"This module contains a collection of generally useful derived - YANG data types for Internet addresses and related things. - - Copyright (c) 2013 IETF Trust and the persons identified as - authors of the code. All rights reserved. - - Redistribution and use in source and binary forms, with or - without modification, is permitted pursuant to, and subject - to the license terms contained in, the Simplified BSD License - set forth in Section 4.c of the IETF Trust''s Legal Provisions - Relating to IETF Documents - (http://trustee.ietf.org/license-info). - - This version of this YANG module is part of RFC 6991; see - the RFC itself for full legal notices.\"; - - revision 2013-07-15 { - description - \"This revision adds the following new data types: - - ip-address-no-zone - - ipv4-address-no-zone - - ipv6-address-no-zone\"; - reference - \"RFC 6991: Common YANG Data Types\"; - } - - revision 2010-09-24 { - description - \"Initial revision.\"; - reference - \"RFC 6021: Common YANG Data Types\"; - } - - /*** collection of types related to protocol fields ***/ - - typedef ip-version { - type enumeration { - enum unknown { - value \"0\"; - description - \"An unknown or unspecified version of the Internet - protocol.\"; - } - enum ipv4 { - value \"1\"; - description - \"The IPv4 protocol as defined in RFC 791.\"; - } - enum ipv6 { - value \"2\"; - description - \"The IPv6 protocol as defined in RFC 2460.\"; - } - } - description - \"This value represents the version of the IP protocol. - - In the value set and its semantics, this type is equivalent - to the InetVersion textual convention of the SMIv2.\"; - reference - \"RFC 791: Internet Protocol - RFC 2460: Internet Protocol, Version 6 (IPv6) Specification - RFC 4001: Textual Conventions for Internet Network Addresses\"; - } - - typedef dscp { - type uint8 { - range \"0..63\"; - } - description - \"The dscp type represents a Differentiated Services Code Point - that may be used for marking packets in a traffic stream. - In the value set and its semantics, this type is equivalent - to the Dscp textual convention of the SMIv2.\"; - reference - \"RFC 3289: Management Information Base for the Differentiated - Services Architecture - RFC 2474: Definition of the Differentiated Services Field - (DS Field) in the IPv4 and IPv6 Headers - RFC 2780: IANA Allocation Guidelines For Values In - the Internet Protocol and Related Headers\"; - } - - typedef ipv6-flow-label { - type uint32 { - range \"0..1048575\"; - } - description - \"The ipv6-flow-label type represents the flow identifier or Flow - Label in an IPv6 packet header that may be used to - discriminate traffic flows. - - In the value set and its semantics, this type is equivalent - to the IPv6FlowLabel textual convention of the SMIv2.\"; - reference - \"RFC 3595: Textual Conventions for IPv6 Flow Label - RFC 2460: Internet Protocol, Version 6 (IPv6) Specification\"; - } - - typedef port-number { - type uint16 { - range \"0..65535\"; - } - description - \"The port-number type represents a 16-bit port number of an - Internet transport-layer protocol such as UDP, TCP, DCCP, or - SCTP. Port numbers are assigned by IANA. A current list of - all assignments is available from <http://www.iana.org/>. - - Note that the port number value zero is reserved by IANA. In - situations where the value zero does not make sense, it can - be excluded by subtyping the port-number type. - In the value set and its semantics, this type is equivalent - to the InetPortNumber textual convention of the SMIv2.\"; - reference - \"RFC 768: User Datagram Protocol - RFC 793: Transmission Control Protocol - RFC 4960: Stream Control Transmission Protocol - RFC 4340: Datagram Congestion Control Protocol (DCCP) - RFC 4001: Textual Conventions for Internet Network Addresses\"; - } - - /*** collection of types related to autonomous systems ***/ - - typedef as-number { - type uint32; - description - \"The as-number type represents autonomous system numbers - which identify an Autonomous System (AS). An AS is a set - of routers under a single technical administration, using - an interior gateway protocol and common metrics to route - packets within the AS, and using an exterior gateway - protocol to route packets to other ASes. IANA maintains - the AS number space and has delegated large parts to the - regional registries. - - Autonomous system numbers were originally limited to 16 - bits. BGP extensions have enlarged the autonomous system - number space to 32 bits. This type therefore uses an uint32 - base type without a range restriction in order to support - a larger autonomous system number space. - - In the value set and its semantics, this type is equivalent - to the InetAutonomousSystemNumber textual convention of - the SMIv2.\"; - reference - \"RFC 1930: Guidelines for creation, selection, and registration - of an Autonomous System (AS) - RFC 4271: A Border Gateway Protocol 4 (BGP-4) - RFC 4001: Textual Conventions for Internet Network Addresses - RFC 6793: BGP Support for Four-Octet Autonomous System (AS) - Number Space\"; - } - - /*** collection of types related to IP addresses and hostnames ***/ - - typedef ip-address { - type union { - type inet:ipv4-address; - type inet:ipv6-address; - } - description - \"The ip-address type represents an IP address and is IP - version neutral. The format of the textual representation - implies the IP version. This type supports scoped addresses - by allowing zone identifiers in the address format.\"; - reference - \"RFC 4007: IPv6 Scoped Address Architecture\"; - } - - typedef ipv4-address { - type string { - pattern - ''(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).){3}'' - + ''([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'' - + ''(%[p{N}p{L}]+)?''; - } - description - \"The ipv4-address type represents an IPv4 address in - dotted-quad notation. The IPv4 address may include a zone - index, separated by a % sign. - - The zone index is used to disambiguate identical address - values. For link-local addresses, the zone index will - typically be the interface index number or the name of an - interface. If the zone index is not present, the default - zone of the device will be used. - - The canonical format for the zone index is the numerical - format\"; - } - - typedef ipv6-address { - type string { - pattern ''((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'' - + ''((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'' - + ''(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9]).){3}'' - + ''(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'' - + ''(%[p{N}p{L}]+)?''; - pattern ''(([^:]+:){6}(([^:]+:[^:]+)|(.*..*)))|'' - + ''((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'' - + ''(%.+)?''; - } - description - \"The ipv6-address type represents an IPv6 address in full, - mixed, shortened, and shortened-mixed notation. The IPv6 - address may include a zone index, separated by a % sign. - - The zone index is used to disambiguate identical address - values. For link-local addresses, the zone index will - typically be the interface index number or the name of an - interface. If the zone index is not present, the default - zone of the device will be used. - - The canonical format of IPv6 addresses uses the textual - representation defined in Section 4 of RFC 5952. The - canonical format for the zone index is the numerical - format as described in Section 11.2 of RFC 4007.\"; - reference - \"RFC 4291: IP Version 6 Addressing Architecture - RFC 4007: IPv6 Scoped Address Architecture - RFC 5952: A Recommendation for IPv6 Address Text - Representation\"; - } - - typedef ip-address-no-zone { - type union { - type inet:ipv4-address-no-zone; - type inet:ipv6-address-no-zone; - } - description - \"The ip-address-no-zone type represents an IP address and is - IP version neutral. The format of the textual representation - implies the IP version. This type does not support scoped - addresses since it does not allow zone identifiers in the - address format.\"; - reference - \"RFC 4007: IPv6 Scoped Address Architecture\"; - } - - typedef ipv4-address-no-zone { - type inet:ipv4-address { - pattern ''[0-9.]*''; - } - description - \"An IPv4 address without a zone index. This type, derived from - ipv4-address, may be used in situations where the zone is - known from the context and hence no zone index is needed.\"; - } - - typedef ipv6-address-no-zone { - type inet:ipv6-address { - pattern ''[0-9a-fA-F:.]*''; - } - description - \"An IPv6 address without a zone index. This type, derived from - ipv6-address, may be used in situations where the zone is - known from the context and hence no zone index is needed.\"; - reference - \"RFC 4291: IP Version 6 Addressing Architecture - RFC 4007: IPv6 Scoped Address Architecture - RFC 5952: A Recommendation for IPv6 Address Text - Representation\"; - } - - typedef ip-prefix { - type union { - type inet:ipv4-prefix; - type inet:ipv6-prefix; - } - description - \"The ip-prefix type represents an IP prefix and is IP - version neutral. The format of the textual representations - implies the IP version.\"; - } - - typedef ipv4-prefix { - type string { - pattern - ''(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).){3}'' - + ''([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'' - + ''/(([0-9])|([1-2][0-9])|(3[0-2]))''; - } - description - \"The ipv4-prefix type represents an IPv4 address prefix. - The prefix length is given by the number following the - slash character and must be less than or equal to 32. - - A prefix length value of n corresponds to an IP address - mask that has n contiguous 1-bits from the most - significant bit (MSB) and all other bits set to 0. - - The canonical format of an IPv4 prefix has all bits of - the IPv4 address set to zero that are not part of the - IPv4 prefix.\"; - } - - typedef ipv6-prefix { - type string { - pattern ''((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'' - + ''((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'' - + ''(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9]).){3}'' - + ''(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'' - + ''(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))''; - pattern ''(([^:]+:){6}(([^:]+:[^:]+)|(.*..*)))|'' - + ''((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'' - + ''(/.+)''; - } - description - \"The ipv6-prefix type represents an IPv6 address prefix. - The prefix length is given by the number following the - slash character and must be less than or equal to 128. - - A prefix length value of n corresponds to an IP address - mask that has n contiguous 1-bits from the most - significant bit (MSB) and all other bits set to 0. - - The IPv6 address should have all bits that do not belong - to the prefix set to zero. - - The canonical format of an IPv6 prefix has all bits of - the IPv6 address set to zero that are not part of the - IPv6 prefix. Furthermore, the IPv6 address is represented - as defined in Section 4 of RFC 5952.\"; - reference - \"RFC 5952: A Recommendation for IPv6 Address Text - Representation\"; - } - - /*** collection of domain name and URI types ***/ - - typedef domain-name { - type string { - length \"1..253\"; - pattern - ''((([a-zA-Z0-9_]([a-zA-Z0-9-_]){0,61})?[a-zA-Z0-9].)*'' - + ''([a-zA-Z0-9_]([a-zA-Z0-9-_]){0,61})?[a-zA-Z0-9].?)'' - + ''|.''; - } - description - \"The domain-name type represents a DNS domain name. The - name SHOULD be fully qualified whenever possible. - - Internet domain names are only loosely specified. Section - 3.5 of RFC 1034 recommends a syntax (modified in Section - 2.1 of RFC 1123). The pattern above is intended to allow - for current practice in domain name use, and some possible - future expansion. It is designed to hold various types of - domain names, including names used for A or AAAA records - (host names) and other records, such as SRV records. Note - that Internet host names have a stricter syntax (described - in RFC 952) than the DNS recommendations in RFCs 1034 and - 1123, and that systems that want to store host names in - schema nodes using the domain-name type are recommended to - adhere to this stricter standard to ensure interoperability. - - The encoding of DNS names in the DNS protocol is limited - to 255 characters. Since the encoding consists of labels - prefixed by a length bytes and there is a trailing NULL - byte, only 253 characters can appear in the textual dotted - notation. - - The description clause of schema nodes using the domain-name - type MUST describe when and how these names are resolved to - IP addresses. Note that the resolution of a domain-name value - may require to query multiple DNS records (e.g., A for IPv4 - and AAAA for IPv6). The order of the resolution process and - which DNS record takes precedence can either be defined - explicitly or may depend on the configuration of the - resolver. - - Domain-name values use the US-ASCII encoding. Their canonical - format uses lowercase US-ASCII characters. Internationalized - domain names MUST be A-labels as per RFC 5890.\"; - reference - \"RFC 952: DoD Internet Host Table Specification - RFC 1034: Domain Names - Concepts and Facilities - RFC 1123: Requirements for Internet Hosts -- Application - and Support - RFC 2782: A DNS RR for specifying the location of services - (DNS SRV) - RFC 5890: Internationalized Domain Names in Applications - (IDNA): Definitions and Document Framework\"; - } - - typedef host { - type union { - type inet:ip-address; - type inet:domain-name; - } - description - \"The host type represents either an IP address or a DNS - domain name.\"; - } - - typedef uri { - type string; - description - \"The uri type represents a Uniform Resource Identifier - (URI) as defined by STD 66. - - Objects using the uri type MUST be in US-ASCII encoding, - and MUST be normalized as described by RFC 3986 Sections - 6.2.1, 6.2.2.1, and 6.2.2.2. All unnecessary - percent-encoding is removed, and all case-insensitive - characters are set to lowercase except for hexadecimal - digits, which are normalized to uppercase as described in - Section 6.2.2.1. - - The purpose of this normalization is to help provide - unique URIs. Note that this normalization is not - sufficient to provide uniqueness. Two URIs that are - textually distinct after this normalization may still be - equivalent. - - Objects using the uri type may restrict the schemes that - they permit. For example, ''data:'' and ''urn:'' schemes - might not be appropriate. - - A zero-length URI is not a valid URI. This can be used to - express ''URI absent'' where required. - - In the value set and its semantics, this type is equivalent - to the Uri SMIv2 textual convention defined in RFC 5017.\"; - reference - \"RFC 3986: Uniform Resource Identifier (URI): Generic Syntax - RFC 3305: Report from the Joint W3C/IETF URI Planning Interest - Group: Uniform Resource Identifiers (URIs), URLs, - and Uniform Resource Names (URNs): Clarifications - and Recommendations - RFC 5017: MIB Textual Conventions for Uniform Resource - Identifiers (URIs)\"; - } - -}"|fd06e465f26f1e7d0253bbf77e7e55e1 -cps-ran-schema-model2021-01-28.yang|"module cps-ran-schema-model { - yang-version 1.1; - namespace \"org:onap:ccsdk:features:sdnr:northbound:cps-ran-schema-model\"; - prefix rn; - - import ietf-inet-types { - prefix inet; - } - import ietf-yang-types { - prefix yang; - } - - organization - \"Open Network Automation Platform - ONAP - <https://www.onap.org>\"; - contact - \"Editors: - Sandeep Shah - <mailto:sandeep.shah@ibm.com> - - Swaminathan Seetharaman - <mailto:swaminathan.seetharaman@wipro.com>\"; - description - \"This module contains a collection of YANG definitions for capturing - relationships among managed elements of the radio access Network - to be stored in ONAP CPS platform. - - Copyright 2020-2021 IBM. - - 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.\"; - - revision 2021-01-28 { - description - \"CPS RAN Network YANG Model for ONAP/O-RAN POC\"; - reference - \"https://wiki.onap.org/display/DW/E2E+Network+Slicing+Use+Case+in+R7+Guilin\"; - } - - typedef usageState { - type enumeration { - enum IDLE { - description - \"TODO\"; - } - enum ACTIVE { - description - \"TODO\"; - } - enum BUSY { - description - \"TODO\"; - } - } - description - \"It describes whether or not the resource is actively in - use at a specific instant, and if so, whether or not it has spare - capacity for additional users at that instant. The value is READ-ONLY.\"; - reference - \"ITU T Recommendation X.731\"; - } - - typedef Mcc { - type string; - description - \"The mobile country code consists of three decimal digits, - The first digit of the mobile country code identifies the geographic - region (the digits 1 and 8 are not used):\"; - reference - \"3GPP TS 23.003 subclause 2.2 and 12.1\"; - } - - typedef Mnc { - type string; - description - \"The mobile network code consists of two or three - decimal digits (for example: MNC of 001 is not the same as MNC of 01)\"; - reference - \"3GPP TS 23.003 subclause 2.2 and 12.1\"; - } - - typedef Nci { - type string; - description - \"NR Cell Identity. The NCI shall be of fixed length of 36 bits - and shall be coded using full hexadecimal representation. - The exact coding of the NCI is the responsibility of each PLMN operator\"; - reference - \"TS 23.003\"; - } - - typedef OperationalState { - type enumeration { - enum DISABLED { - value 0; - description - \"The resource is totally inoperable.\"; - } - enum ENABLED { - value 1; - description - \"The resource is partially or fully operable.\"; - } - } - description - \"TODO\"; - reference - \"3GPP TS 28.625 and ITU-T X.731\"; - } - - typedef AvailabilityStatus { - type enumeration { - enum IN_TEST { - description - \"TODO\"; - } - enum FAILED { - description - \"TODO\"; - } - enum POWER_OFF { - description - \"TODO\"; - } - enum OFF_LINE { - description - \"TODO\"; - } - enum OFF_DUTY { - description - \"TODO\"; - } - enum DEPENDENCY { - description - \"TODO\"; - } - enum DEGRADED { - description - \"TODO\"; - } - enum NOT_INSTALLED { - description - \"TODO\"; - } - enum LOG_FULL { - description - \"TODO\"; - } - } - description - \"TODO\"; - reference - \"TODO\"; - } - - typedef CellState { - type enumeration { - enum IDLE { - description - \"TODO\"; - } - enum INACTIVE { - description - \"TODO\"; - } - enum ACTIVE { - description - \"TODO\"; - } - } - description - \"TODO\"; - reference - \"TODO\"; - } - - typedef SNssai { - type string; - description - \"Single Network Slice Selection Assistance Information.\"; - reference - \"TS 23.501 clause 5.15.2\"; - } - - typedef Sst { - type uint8; - description - \"TODO\"; - reference - \"TODO\"; - } - - typedef Nrpci { - type uint32; - description - \"Physical Cell Identity (PCI) of the NR cell.\"; - reference - \"TS 36.211 subclause 6.11\"; - } - - typedef Tac { - type int32 { - range \"0..16777215\"; - } - description - \"Tracking Area Code\"; - reference - \"TS 23.003 clause 19.4.2.3\"; - } - - typedef AmfRegionId { - type string; - description - \"\"; - reference - \"clause 2.10.1 of 3GPP TS 23.003\"; - } - - typedef AmfSetId { - type string; - description - \"\"; - reference - \"clause 2.10.1 of 3GPP TS 23.003\"; - } - - typedef AmfPointer { - type string; - description - \"\"; - reference - \"clause 2.10.1 of 3GPP TS 23.003\"; - } - - // type definitions especially for core NFs - - typedef NfType { - type enumeration { - enum NRF { - description - \"TODO\"; - } - enum UDM { - description - \"TODO\"; - } - enum AMF { - description - \"TODO\"; - } - enum SMF { - description - \"TODO\"; - } - enum AUSF { - description - \"TODO\"; - } - enum NEF { - description - \"TODO\"; - } - enum PCF { - description - \"TODO\"; - } - enum SMSF { - description - \"TODO\"; - } - enum NSSF { - description - \"TODO\"; - } - enum UDR { - description - \"TODO\"; - } - enum LMF { - description - \"TODO\"; - } - enum GMLC { - description - \"TODO\"; - } - enum 5G_EIR { - description - \"TODO\"; - } - enum SEPP { - description - \"TODO\"; - } - enum UPF { - description - \"TODO\"; - } - enum N3IWF { - description - \"TODO\"; - } - enum AF { - description - \"TODO\"; - } - enum UDSF { - description - \"TODO\"; - } - enum BSF { - description - \"TODO\"; - } - enum CHF { - description - \"TODO\"; - } - } - description - \"TODO\"; - } - - typedef NotificationType { - type enumeration { - enum N1_MESSAGES { - description - \"TODO\"; - } - enum N2_INFORMATION { - description - \"TODO\"; - } - enum LOCATION_NOTIFICATION { - description - \"TODO\"; - } - } - description - \"TODO\"; - } - - typedef Load { - type uint8 { - range \"0..100\"; - } - description - \"Latest known load information of the NF, percentage \"; - } - - typedef N1MessageClass { - type enumeration { - enum 5GMM { - description - \"TODO\"; - } - enum SM { - description - \"TODO\"; - } - enum LPP { - description - \"TODO\"; - } - enum SMS { - description - \"TODO\"; - } - } - description - \"TODO\"; - } - - typedef N2InformationClass { - type enumeration { - enum SM { - description - \"TODO\"; - } - enum NRPPA { - description - \"TODO\"; - } - enum PWS { - description - \"TODO\"; - } - enum PWS_BCAL { - description - \"TODO\"; - } - enum PWS_RF { - description - \"TODO\"; - } - } - description - \"TODO\"; - reference - \"TODO\"; - } - - typedef NsiId { - type string; - description - \"TODO\"; - } - - typedef UeMobilityLevel { - type enumeration { - enum STATIONARY { - description - \"TODO\"; - } - enum NOMADIC { - description - \"TODO\"; - } - enum RESTRICTED_MOBILITY { - description - \"TODO\"; - } - enum FULLY_MOBILITY { - description - \"TODO\"; - } - } - description - \"TODO\"; - reference - \"TODO\"; - } - - typedef ResourceSharingLevel { - type enumeration { - enum SHARED { - description - \"TODO\"; - } - enum NOT_SHARED { - description - \"TODO\"; - } - } - description - \"TODO\"; - reference - \"TODO\"; - } - - typedef TxDirection { - type enumeration { - enum DL { - description - \"TODO\"; - } - enum UL { - description - \"TODO\"; - } - enum DL_AND_UL { - description - \"TODO\"; - } - } - description - \"TODO\"; - reference - \"TODO\"; - } - - typedef DistinguishedName { // TODO is this equivalent to TS 32.300 ? - type string; - description - \"Represents the international standard for the representation - of Distinguished Name (RFC 4512). - The format of the DistinguishedName REGEX is: - {AttributeType = AttributeValue} - - AttributeType consists of alphanumeric and hyphen (OIDs not allowed). - All other characters are restricted. - The Attribute value cannot contain control characters or the - following characters : \ > < ; \" + , (Comma) and White space - The Attribute value can contain the following characters if they - are excaped : \ > < ; \" + , (Comma) and White space - The Attribute value can contain control characters if its an escaped - double digit hex number. - Examples could be - UID=nobody@example.com,DC=example,DC=com - CN=John Smith,OU=Sales,O=ACME Limited,L=Moab,ST=Utah,C=US\"; - reference - \"RFC 4512 Lightweight Directory Access Protocol (LDAP): - Directory Information Models\"; - } // recheck regexp it doesn''t handle posix [:cntrl:] - - typedef QOffsetRange { - type int8; - units \"dB\"; - description - \"TODO\"; - reference - \"TODO\"; - } - - typedef QuotaType { - type enumeration { - enum STRICT { - description - \"TODO\"; - } - enum FLOAT { - description - \"TODO\"; - } - } - description - \"TODO\"; - } - - typedef CyclicPrefix { - type enumeration { - enum NORMAL { - description - \"TODO\"; - } - enum EXTENDED { - description - \"TODO\"; - } - } - description - \"TODO\"; - } - - grouping PLMNInfo { - description - \"The PLMNInfo data type define a S-NSSAI member in a specific PLMNId, and it have - two attributes PLMNId and S-NSSAI (PLMNId, S-NSSAI). The PLMNId represents a data type that - is comprised of mcc (mobile country code) and mnc (mobile network code), (See TS 23.003 - subclause 2.2 and 12.1) and S-NSSAI represents an data type, that is comprised of an SST - (Slice/Service type) and an optional SD (Slice Differentiator) field, (See TS 23.003 [13]).\"; - uses PLMNId; - list sNSSAIList { - key \"sNssai\"; - uses sNSSAIConfig; - description \"List of sNSSAIs\"; - } - } - - grouping ManagedNFProfile { - description - \"Defines profile for managed NF\"; - reference - \"3GPP TS 23.501\"; - leaf idx { - type uint32; - description - \"TODO\"; - reference - \"3GPP TS 23.501\"; - } - leaf nfInstanceID { - type yang:uuid; - config false; - mandatory false; - description - \"This parameter defines profile for managed NF. - The format of the NF Instance ID shall be a - Universally Unique Identifier (UUID) version 4, - as described in IETF RFC 4122 \"; - } - leaf-list nfType { - type NfType; - config false; - min-elements 1; - description - \"Type of the Network Function\"; - } - leaf hostAddr { - type inet:host; - mandatory false; - description - \"Host address of a NF\"; - } - leaf authzInfo { - type string; - description - \"This parameter defines NF Specific Service authorization - information. It shall include the NF type (s) and NF realms/origins - allowed to consume NF Service(s) of NF Service Producer.\"; - reference - \"See TS 23.501\"; - } - leaf location { - type string; - description - \"Information about the location of the NF instance - (e.g. geographic location, data center) defined by operator\"; - reference - \"TS 29.510\"; - } - leaf capacity { - type uint16; - mandatory false; - description - \"This parameter defines static capacity information - in the range of 0-65535, expressed as a weight relative to other - NF instances of the same type; if capacity is also present in the - nfServiceList parameters, those will have precedence over this value.\"; - reference - \"TS 29.510\"; - } - leaf nFSrvGroupId { - type string; - description - \"This parameter defines identity of the group that is - served by the NF instance. - May be config false or true depending on the ManagedFunction. - Config=true for Udrinfo. Config=false for UdmInfo and AusfInfo. - Shall be present if ../nfType = UDM or AUSF or UDR. \"; - reference - \"TS 29.510\"; - } - leaf-list supportedDataSetIds { - type enumeration { - enum SUBSCRIPTION { - description - \"TODO\"; - } - enum POLICY { - description - \"TODO\"; - } - enum EXPOSURE { - description - \"TODO\"; - } - enum APPLICATION { - description - \"TODO\"; - } - } - description - \"List of supported data sets in the UDR instance. - May be present if ../nfType = UDR\"; - reference - \"TS 29.510\"; - } - leaf-list smfServingAreas { - type string; - description - \"Defines the SMF service area(s) the UPF can serve. - Shall be present if ../nfType = UPF\"; - reference - \"TS 29.510\"; - } - leaf priority { - type uint16; - description - \"This parameter defines Priority (relative to other NFs - of the same type) in the range of 0-65535, to be used for NF selection; - lower values indicate a higher priority. If priority is also present - in the nfServiceList parameters, those will have precedence over - this value. Shall be present if ../nfType = AMF \"; - reference - \"TS 29.510\"; - } - } - - - grouping PLMNId { - description - \"TODO\"; - reference - \"TS 23.658\"; - leaf mcc { - type Mcc; - mandatory true; - description - \"TODO\"; - } - leaf mnc { - type Mnc; - mandatory true; - description - \"TODO\"; - } - } - - grouping AmfIdentifier { - description - \"The AMFI is constructed from an AMF Region ID, - an AMF Set ID and an AMF Pointer. - The AMF Region ID identifies the region, - the AMF Set ID uniquely identifies the AMF Set within the AMF Region, and - the AMF Pointer uniquely identifies the AMF within the AMF Set. \"; - leaf amfRegionId { - type AmfRegionId; - description - \"TODO\"; - } - leaf amfSetId { - type AmfSetId; - description - \"TODO\"; - } - leaf amfPointer { - type AmfPointer; - description - \"TODO\"; - } - } - - grouping DefaultNotificationSubscription { - description - \"TODO\"; - leaf notificationType { - type NotificationType; - description - \"TODO\"; - } - leaf callbackUri { - type inet:uri; - description - \"TODO\"; - } - leaf n1MessageClass { - type N1MessageClass; - description - \"TODO\"; - } - leaf n2InformationClass { - type N2InformationClass; - description - \"TODO\"; - } - } - - grouping Ipv4AddressRange { - description - \"TODO\"; - leaf start { - type inet:ipv4-address; - description - \"TODO\"; - } - leaf end { - type inet:ipv4-address; - description - \"TODO\"; - } - } - - grouping Ipv6PrefixRange { - description - \"TODO\"; - leaf start { - type inet:ipv6-prefix; - description - \"TODO\"; - } - leaf end { - type inet:ipv6-prefix; - description - \"TODO\"; - } - } - - grouping AddressWithVlan { - description - \"TODO\"; - leaf ipAddress { - type inet:ip-address; - description - \"TODO\"; - } - leaf vlanId { - type uint16; - description - \"TODO\"; - } - } - - grouping ManagedElementGroup { - description - \"Abstract class representing telecommunications resources.\"; - leaf dnPrefix { - type DistinguishedName; - description - \"Provides naming context and splits the DN into a DN Prefix and Local DN\"; - } - leaf userLabel { - type string; - description - \"A user-friendly name of this object.\"; - } - leaf locationName { - type string; - config false; - description - \"The physical location (e.g. an address) of an entity\"; - } - leaf-list managedBy { - type DistinguishedName; - config false; - description - \"Relates to the role played by ManagementSystem\"; - } - leaf-list managedElementTypeList { - type string; - config false; - min-elements 1; - description - \"The type of functionality provided by the ManagedElement. - It may represent one ME functionality or a combination of - Two examples of allowed values are: - - NodeB; - - HLR, VLR.\"; - } - } // Managed Element grouping - - grouping NearRTRICGroup { - description - \"Abstract class representing Near RT RIC.\"; - leaf dnPrefix { - type DistinguishedName; - description - \"Provides naming context and splits the DN into a DN Prefix and Local DN\"; - } - leaf userLabel { - type string; - description - \"A user-friendly name of this object.\"; - } - leaf locationName { - type string; - config false; - description - \"The physical location (e.g. an address) of an entity\"; - } - leaf gNBId { - type int64 { range \"0..4294967295\"; } - config false; - description \"Identifies a gNB within a PLMN. The gNB Identifier (gNB ID) - is part of the NR Cell Identifier (NCI) of the gNB cells.\"; - reference \"gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413\"; - } - - list pLMNInfoList { - uses PLMNInfo; - key \"mcc mnc\"; - description \"The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs that can be served by the nearRTRIC.\"; - } - list RRMPolicyRatio { - key id; - leaf id { - type string; - description - \"Key leaf\"; - } - container attributes { - uses RRMPolicyRatioGroup; - } - description \" The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both - standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC. For details see subclause 4.3.36.\"; - } - - } // Near RT RIC grouping - - - - grouping Configuration{ - leaf configParameter{ - type string; - description \"Type of the configuration parameter\"; - } - leaf configValue{ - type int64; - description \"Identifies the configuration to be done for the network elements under the NearRTRIC\"; - - } - } - - - grouping GNBDUFunctionGroup { - description - \"Represents the GNBDUFunction IOC.\"; - reference - \"3GPP TS 28.541\"; - - leaf gNBId { - type int64 { - range \"0..4294967295\"; - } - config false; - mandatory false; - description - \"Identifies a gNB within a PLMN. The gNB Identifier (gNB ID) - is part of the NR Cell Identifier (NCI) of the gNB cells.\"; - reference - \"gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413\"; - } - leaf gNBIdLength { - type int32 { - range \"22..32\"; - } - mandatory false; - description - \"Indicates the number of bits for encoding the gNB ID.\"; - reference - \"gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413\"; - } - leaf gNBDUId { - type int64 { - range \"0..68719476735\"; - } - mandatory false; - description - \"Uniquely identifies the DU at least within a gNB.\"; - reference - \"3GPP TS 38.473\"; - } - leaf gNBDUName { - type string { - length \"1..150\"; - } - description - \"Identifies the Distributed Unit of an NR node\"; - reference - \"3GPP TS 38.473\"; - } - list RRMPolicyRatio { - key id; - leaf id { - type string; - description - \"Key leaf\"; - } - container attributes { - uses RRMPolicyRatioGroup; - } - description \" The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both - standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC. For details see subclause 4.3.36.\"; - } - } - - grouping NRCellDUGroup { - description - \"Represents the NRCellDU IOC.\"; - reference - \"3GPP TS 28.541\"; - list RRMPolicyRatio { - key id; - leaf id { - type string; - description - \"Key leaf\"; - } - container attributes { - uses RRMPolicyRatioGroup; - } - description \" The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both - standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC. For details see subclause 4.3.36.\"; - } - leaf cellLocalId { - type int32 { - range \"0..16383\"; - } - mandatory false; - description - \"Identifies an NR cell of a gNB. Together with the - corresponding gNB identifier in forms the NR Cell Identity (NCI).\"; - reference - \"NCI in 3GPP TS 38.300\"; - } - list pLMNInfoList { - key \"mcc mnc\"; - min-elements 1; - description - \"The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs that - can be served by the NR cell, and which S-NSSAIs that can be supported by the NR cell for - corresponding PLMN in case of network slicing feature is supported. The plMNId of the first - entry of the list is the PLMNId used to construct the nCGI for the NR cell.\"; - uses PLMNInfo; - } - leaf nRPCI { - type int32 { - range \"0..1007\"; - } - mandatory false; - description - \"The Physical Cell Identity (PCI) of the NR cell.\"; - reference - \"3GPP TS 36.211\"; - } - leaf nRTAC { - type Tac; - description - \"The common 5GS Tracking Area Code for the PLMNs.\"; - reference - \"3GPP TS 23.003, 3GPP TS 38.473\"; - } - } // grouping - - grouping rRMPolicyMemberGroup { - description - \"TODO\"; - uses PLMNId; - leaf sNSSAI { - type SNssai; - description - \"This data type represents an RRM Policy member that will be part of a - rRMPolicyMemberList. A RRMPolicyMember is defined by its pLMNId and sNSSAI (S-NSSAI). - The members in a rRMPolicyMemberList are assigned a specific amount of RRM resources - based on settings in RRMPolicy.\"; - } - } - - grouping RRMPolicyRatioGroup { - - uses RRMPolicy_Group; // Inherits RRMPolicy_ - - leaf quotaType { - type QuotaType; - mandatory false; - description \"The type of the quota which allows to allocate resources as - strictly usable for defined slice(s) (strict quota) or allows that - resources to be used by other slice(s) when defined slice(s) do not - need them (float quota).\"; - } - - leaf rRMPolicyMaxRatio { - type uint8; - mandatory false; - units percent; - description \"The RRM policy setting the maximum percentage of radio - resources to be allocated to the corresponding S-NSSAI list. This - quota can be strict or float quota. Strict quota means resources are - not allowed for other sNSSAIs even when they are not used by the - defined sNSSAIList. Float quota resources can be used by other sNSSAIs - when the defined sNSSAIList do not need them. Value 0 indicates that - there is no maximum limit.\"; - } - - leaf rRMPolicyMinRatio { - type uint8; - mandatory false; - units percent; - description \"The RRM policy setting the minimum percentage of radio - resources to be allocated to the corresponding S-NSSAI list. This - quota can be strict or float quota. Strict quota means resources are - not allowed for other sNSSAIs even when they are not used by the - defined sNSSAIList. Float quota resources can be used by other sNSSAIs - when the defined sNSSAIList do not need them. Value 0 indicates that - there is no minimum limit.\"; - } - leaf rRMPolicyDedicatedRatio { - type uint8; - units percent; - description \"Dedicated Ration.\"; - } - description \"Represents the RRMPolicyRatio concrete IOC.\"; - } - - - grouping sNSSAIConfig{ - leaf sNssai { - type string; - description \"s-NSSAI of a network slice.\"; - reference \"3GPP TS 23.003\"; - } - leaf status { - type string; - description \"status of s-NSSAI\"; - } - list configData{ - uses Configuration; - key \"configParameter\"; - description \"List of configurations to be done at the network elements\"; - } - } - - grouping RRMPolicy_Group { - description - \"This IOC represents the properties of an abstract RRMPolicy. The RRMPolicy_ IOC - needs to be subclassed to be instantiated. It defines two attributes apart from those - inherited from Top IOC, the resourceType attribute defines type of resource (PRB, RRC - connected users, DRB usage etc.) and the rRMPolicyMemberList attribute defines the - RRMPolicyMember(s)that are subject to this policy. An RRM resource (defined in resourceType - attribute) is located in NRCellDU, NRCellCU, GNBDUFunction, GNBCUCPFunction or in - GNBCUUPFunction. The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in TS 28.541 Figure 4.2.1.2-1. This RRM framework allows adding new policies, - both standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC.\"; - leaf resourceType { - type string; - mandatory false; - description - \"The resourceType attribute defines type of resource (PRB, RRC connected users, - DRB usage etc.) that is subject to policy. Valid values are ''PRB'', ''RRC'' or ''DRB''\"; - } - list rRMPolicyMemberList { - key \"idx\"; - leaf idx { - type uint32; - description - \"TODO\"; - } - description - \"It represents the list of RRMPolicyMember (s) that the managed object - is supporting. A RRMPolicyMember <<dataType>> include the PLMNId <<dataType>> - and S-NSSAI <<dataType>>.\"; - uses rRMPolicyMemberGroup; - } - } // grouping - - grouping GNBCUUPFunctionGroup { - description - \"Represents the GNBCUUPFunction IOC.\"; - reference - \"3GPP TS 28.541\"; - - list RRMPolicyRatio { - key id; - leaf id { - type string; - description - \"Key leaf\"; - } - container attributes { - uses RRMPolicyRatioGroup; - } - description \" The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both - standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC. For details see subclause 4.3.36.\"; - } - leaf gNBCUUPId { - type uint64 { - range \"0..68719476735\"; - } - config false; - mandatory false; - description - \"Identifies the gNB-CU-UP at least within a gNB-CU-CP\"; - reference - \"''gNB-CU-UP ID'' in subclause 9.3.1.15 of 3GPP TS 38.463\"; - } - leaf gNBId { - type int64 { - range \"0..4294967295\"; - } - mandatory false; - description - \"Indicates the number of bits for encoding the gNB Id.\"; - reference - \"gNB Id in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413\"; - } - list pLMNInfoList { - key \"mcc mnc\"; - description - \"The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs that - can be served by the GNBCUUPFunction and which S-NSSAIs can be supported by the - GNBCUUPFunction for corresponding PLMN in case of network slicing feature is supported\"; - uses PLMNInfo; - } - } // grouping - - grouping GNBCUCPFunctionGroup { - description - \"Represents the GNBCUCPFunction IOC.\"; - reference - \"3GPP TS 28.541\"; - list RRMPolicyRatio { - key id; - leaf id { - type string; - description - \"Key leaf\"; - } - container attributes { - uses RRMPolicyRatioGroup; - } - description \" The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both - standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC. For details see subclause 4.3.36.\"; - } - leaf gNBId { - type int64 { - range \"0..4294967295\"; - } - mandatory false; - description - \"Identifies a gNB within a PLMN. The gNB Identifier (gNB ID) - is part of the NR Cell Identifier (NCI) of the gNB cells.\"; - reference - \"gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413\"; - } - leaf gNBIdLength { - type int32 { - range \"22..32\"; - } - mandatory false; - description - \"Indicates the number of bits for encoding the gNB ID.\"; - reference - \"gNB ID in 3GPP TS 38.300, Global gNB ID in 3GPP TS 38.413\"; - } - leaf gNBCUName { - type string { - length \"1..150\"; - } - mandatory false; - description - \"Identifies the Central Unit of an gNB.\"; - reference - \"3GPP TS 38.473\"; - } - list pLMNId { - key \"mcc mnc\"; - min-elements 1; - max-elements 1; - description - \"The PLMN identifier to be used as part of the global RAN - node identity.\"; - uses PLMNId; - } - } // grouping - - grouping NRCellCUGroup { - description - \"Represents the NRCellCU IOC.\"; - reference - \"3GPP TS 28.541\"; - leaf cellLocalId { - type int32 { - range \"0..16383\"; - } - mandatory false; - description - \"Identifies an NR cell of a gNB. Together with corresponding - gNB ID it forms the NR Cell Identifier (NCI).\"; - } - list pLMNInfoList { - key \"mcc mnc\"; - min-elements 1; - description - \"The PLMNInfoList is a list of PLMNInfo data type. It defines which PLMNs - that can be served by the NR cell, and which S-NSSAIs that can be supported by the - NR cell for corresponding PLMN in case of network slicing feature is supported.\"; - uses PLMNInfo; - // Note: Whether the attribute pLMNId in the pLMNInfo can be writable depends on the implementation. - } - list RRMPolicyRatio { - key id; - leaf id { - type string; - description - \"Key leaf\"; - } - container attributes { - uses RRMPolicyRatioGroup; - } - description \" The RRMPolicyRatio IOC is one realization of a RRMPolicy_ IOC, see the - inheritance in Figure 4.2.1.2-1. This RRM framework allows adding new policies, both - standardized (like RRMPolicyRatio) or as vendor specific, by inheriting from the - abstract RRMPolicy_ IOC. For details see subclause 4.3.36.\"; - } - } // grouping NRCellCUGroup - - grouping NRCellRelationGroup { - description - \"Represents the NRCellRelation IOC.\"; - reference - \"3GPP TS 28.541\"; - leaf nRTCI { - type uint64; - description - \"Target NR Cell Identifier. It consists of NR Cell - Identifier (NCI) and Physical Cell Identifier of the target NR cell - (nRPCI).\"; - "|0337045143fa2e592243243f82699b93 -ietf-yang-types.yang|"module ietf-yang-types { - - namespace \"urn:ietf:params:xml:ns:yang:ietf-yang-types\"; - prefix \"yang\"; - - organization - \"IETF NETMOD (NETCONF Data Modeling Language) Working Group\"; - - contact - \"WG Web: <http://tools.ietf.org/wg/netmod/> - WG List: <mailto:netmod@ietf.org> - - WG Chair: David Kessens - <mailto:david.kessens@nsn.com> - - WG Chair: Juergen Schoenwaelder - <mailto:j.schoenwaelder@jacobs-university.de> - - Editor: Juergen Schoenwaelder - <mailto:j.schoenwaelder@jacobs-university.de>\"; - - description - \"This module contains a collection of generally useful derived - YANG data types. - - Copyright (c) 2013 IETF Trust and the persons identified as - authors of the code. All rights reserved. - - Redistribution and use in source and binary forms, with or - without modification, is permitted pursuant to, and subject - to the license terms contained in, the Simplified BSD License - set forth in Section 4.c of the IETF Trust''s Legal Provisions - Relating to IETF Documents - (http://trustee.ietf.org/license-info). - - This version of this YANG module is part of RFC 6991; see - the RFC itself for full legal notices.\"; - - revision 2013-07-15 { - description - \"This revision adds the following new data types: - - yang-identifier - - hex-string - - uuid - - dotted-quad\"; - reference - \"RFC 6991: Common YANG Data Types\"; - } - - revision 2010-09-24 { - description - \"Initial revision.\"; - reference - \"RFC 6021: Common YANG Data Types\"; - } - - /*** collection of counter and gauge types ***/ - - typedef counter32 { - type uint32; - description - \"The counter32 type represents a non-negative integer - that monotonically increases until it reaches a - maximum value of 2^32-1 (4294967295 decimal), when it - wraps around and starts increasing again from zero. - - Counters have no defined ''initial'' value, and thus, a - single value of a counter has (in general) no information - content. Discontinuities in the monotonically increasing - value normally occur at re-initialization of the - management system, and at other times as specified in the - description of a schema node using this type. If such - other times can occur, for example, the creation of - a schema node of type counter32 at times other than - re-initialization, then a corresponding schema node - should be defined, with an appropriate type, to indicate - the last discontinuity. - - The counter32 type should not be used for configuration - schema nodes. A default statement SHOULD NOT be used in - combination with the type counter32. - - In the value set and its semantics, this type is equivalent - to the Counter32 type of the SMIv2.\"; - reference - \"RFC 2578: Structure of Management Information Version 2 - (SMIv2)\"; - } - - typedef zero-based-counter32 { - type yang:counter32; - default \"0\"; - description - \"The zero-based-counter32 type represents a counter32 - that has the defined ''initial'' value zero. - - A schema node of this type will be set to zero (0) on creation - and will thereafter increase monotonically until it reaches - a maximum value of 2^32-1 (4294967295 decimal), when it - wraps around and starts increasing again from zero. - - Provided that an application discovers a new schema node - of this type within the minimum time to wrap, it can use the - ''initial'' value as a delta. It is important for a management - station to be aware of this minimum time and the actual time - between polls, and to discard data if the actual time is too - long or there is no defined minimum time. - - In the value set and its semantics, this type is equivalent - to the ZeroBasedCounter32 textual convention of the SMIv2.\"; - reference - \"RFC 4502: Remote Network Monitoring Management Information - Base Version 2\"; - } - - typedef counter64 { - type uint64; - description - \"The counter64 type represents a non-negative integer - that monotonically increases until it reaches a - maximum value of 2^64-1 (18446744073709551615 decimal), - when it wraps around and starts increasing again from zero. - - Counters have no defined ''initial'' value, and thus, a - single value of a counter has (in general) no information - content. Discontinuities in the monotonically increasing - value normally occur at re-initialization of the - management system, and at other times as specified in the - description of a schema node using this type. If such - other times can occur, for example, the creation of - a schema node of type counter64 at times other than - re-initialization, then a corresponding schema node - should be defined, with an appropriate type, to indicate - the last discontinuity. - - The counter64 type should not be used for configuration - schema nodes. A default statement SHOULD NOT be used in - combination with the type counter64. - - In the value set and its semantics, this type is equivalent - to the Counter64 type of the SMIv2.\"; - reference - \"RFC 2578: Structure of Management Information Version 2 - (SMIv2)\"; - } - - typedef zero-based-counter64 { - type yang:counter64; - default \"0\"; - description - \"The zero-based-counter64 type represents a counter64 that - has the defined ''initial'' value zero. - - - - - A schema node of this type will be set to zero (0) on creation - and will thereafter increase monotonically until it reaches - a maximum value of 2^64-1 (18446744073709551615 decimal), - when it wraps around and starts increasing again from zero. - - Provided that an application discovers a new schema node - of this type within the minimum time to wrap, it can use the - ''initial'' value as a delta. It is important for a management - station to be aware of this minimum time and the actual time - between polls, and to discard data if the actual time is too - long or there is no defined minimum time. - - In the value set and its semantics, this type is equivalent - to the ZeroBasedCounter64 textual convention of the SMIv2.\"; - reference - \"RFC 2856: Textual Conventions for Additional High Capacity - Data Types\"; - } - - typedef gauge32 { - type uint32; - description - \"The gauge32 type represents a non-negative integer, which - may increase or decrease, but shall never exceed a maximum - value, nor fall below a minimum value. The maximum value - cannot be greater than 2^32-1 (4294967295 decimal), and - the minimum value cannot be smaller than 0. The value of - a gauge32 has its maximum value whenever the information - being modeled is greater than or equal to its maximum - value, and has its minimum value whenever the information - being modeled is smaller than or equal to its minimum value. - If the information being modeled subsequently decreases - below (increases above) the maximum (minimum) value, the - gauge32 also decreases (increases). - - In the value set and its semantics, this type is equivalent - to the Gauge32 type of the SMIv2.\"; - reference - \"RFC 2578: Structure of Management Information Version 2 - (SMIv2)\"; - } - - typedef gauge64 { - type uint64; - description - \"The gauge64 type represents a non-negative integer, which - may increase or decrease, but shall never exceed a maximum - value, nor fall below a minimum value. The maximum value - cannot be greater than 2^64-1 (18446744073709551615), and - the minimum value cannot be smaller than 0. The value of - a gauge64 has its maximum value whenever the information - being modeled is greater than or equal to its maximum - value, and has its minimum value whenever the information - being modeled is smaller than or equal to its minimum value. - If the information being modeled subsequently decreases - below (increases above) the maximum (minimum) value, the - gauge64 also decreases (increases). - - In the value set and its semantics, this type is equivalent - to the CounterBasedGauge64 SMIv2 textual convention defined - in RFC 2856\"; - reference - \"RFC 2856: Textual Conventions for Additional High Capacity - Data Types\"; - } - - /*** collection of identifier-related types ***/ - - typedef object-identifier { - type string { - pattern ''(([0-1](.[1-3]?[0-9]))|(2.(0|([1-9]d*))))'' - + ''(.(0|([1-9]d*)))*''; - } - description - \"The object-identifier type represents administratively - assigned names in a registration-hierarchical-name tree. - - Values of this type are denoted as a sequence of numerical - non-negative sub-identifier values. Each sub-identifier - value MUST NOT exceed 2^32-1 (4294967295). Sub-identifiers - are separated by single dots and without any intermediate - whitespace. - - The ASN.1 standard restricts the value space of the first - sub-identifier to 0, 1, or 2. Furthermore, the value space - of the second sub-identifier is restricted to the range - 0 to 39 if the first sub-identifier is 0 or 1. Finally, - the ASN.1 standard requires that an object identifier - has always at least two sub-identifiers. The pattern - captures these restrictions. - - Although the number of sub-identifiers is not limited, - module designers should realize that there may be - implementations that stick with the SMIv2 limit of 128 - sub-identifiers. - - This type is a superset of the SMIv2 OBJECT IDENTIFIER type - since it is not restricted to 128 sub-identifiers. Hence, - this type SHOULD NOT be used to represent the SMIv2 OBJECT - IDENTIFIER type; the object-identifier-128 type SHOULD be - used instead.\"; - reference - \"ISO9834-1: Information technology -- Open Systems - Interconnection -- Procedures for the operation of OSI - Registration Authorities: General procedures and top - arcs of the ASN.1 Object Identifier tree\"; - } - - typedef object-identifier-128 { - type object-identifier { - pattern ''d*(.d*){1,127}''; - } - description - \"This type represents object-identifiers restricted to 128 - sub-identifiers. - - In the value set and its semantics, this type is equivalent - to the OBJECT IDENTIFIER type of the SMIv2.\"; - reference - \"RFC 2578: Structure of Management Information Version 2 - (SMIv2)\"; - } - - typedef yang-identifier { - type string { - length \"1..max\"; - pattern ''[a-zA-Z_][a-zA-Z0-9-_.]*''; - pattern ''.|..|[^xX].*|.[^mM].*|..[^lL].*''; - } - description - \"A YANG identifier string as defined by the ''identifier'' - rule in Section 12 of RFC 6020. An identifier must - start with an alphabetic character or an underscore - followed by an arbitrary sequence of alphabetic or - numeric characters, underscores, hyphens, or dots. - - A YANG identifier MUST NOT start with any possible - combination of the lowercase or uppercase character - sequence ''xml''.\"; - reference - \"RFC 6020: YANG - A Data Modeling Language for the Network - Configuration Protocol (NETCONF)\"; - } - - /*** collection of types related to date and time***/ - - typedef date-and-time { - type string { - pattern ''d{4}-d{2}-d{2}Td{2}:d{2}:d{2}(.d+)?'' - + ''(Z|[+-]d{2}:d{2})''; - } - description - \"The date-and-time type is a profile of the ISO 8601 - standard for representation of dates and times using the - Gregorian calendar. The profile is defined by the - date-time production in Section 5.6 of RFC 3339. - - The date-and-time type is compatible with the dateTime XML - schema type with the following notable exceptions: - - (a) The date-and-time type does not allow negative years. - - (b) The date-and-time time-offset -00:00 indicates an unknown - time zone (see RFC 3339) while -00:00 and +00:00 and Z - all represent the same time zone in dateTime. - - (c) The canonical format (see below) of data-and-time values - differs from the canonical format used by the dateTime XML - schema type, which requires all times to be in UTC using - the time-offset ''Z''. - - This type is not equivalent to the DateAndTime textual - convention of the SMIv2 since RFC 3339 uses a different - separator between full-date and full-time and provides - higher resolution of time-secfrac. - - The canonical format for date-and-time values with a known time - zone uses a numeric time zone offset that is calculated using - the device''s configured known offset to UTC time. A change of - the device''s offset to UTC time will cause date-and-time values - to change accordingly. Such changes might happen periodically - in case a server follows automatically daylight saving time - (DST) time zone offset changes. The canonical format for - date-and-time values with an unknown time zone (usually - referring to the notion of local time) uses the time-offset - -00:00.\"; - reference - \"RFC 3339: Date and Time on the Internet: Timestamps - RFC 2579: Textual Conventions for SMIv2 - XSD-TYPES: XML Schema Part 2: Datatypes Second Edition\"; - } - - typedef timeticks { - type uint32; - description - \"The timeticks type represents a non-negative integer that - represents the time, modulo 2^32 (4294967296 decimal), in - hundredths of a second between two epochs. When a schema - node is defined that uses this type, the description of - the schema node identifies both of the reference epochs. - - In the value set and its semantics, this type is equivalent - to the TimeTicks type of the SMIv2.\"; - reference - \"RFC 2578: Structure of Management Information Version 2 - (SMIv2)\"; - } - - typedef timestamp { - type yang:timeticks; - description - \"The timestamp type represents the value of an associated - timeticks schema node at which a specific occurrence - happened. The specific occurrence must be defined in the - description of any schema node defined using this type. When - the specific occurrence occurred prior to the last time the - associated timeticks attribute was zero, then the timestamp - value is zero. Note that this requires all timestamp values - to be reset to zero when the value of the associated timeticks - attribute reaches 497+ days and wraps around to zero. - - The associated timeticks schema node must be specified - in the description of any schema node using this type. - - In the value set and its semantics, this type is equivalent - to the TimeStamp textual convention of the SMIv2.\"; - reference - \"RFC 2579: Textual Conventions for SMIv2\"; - } - - /*** collection of generic address types ***/ - - typedef phys-address { - type string { - pattern ''([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?''; - } - - - - - description - \"Represents media- or physical-level addresses represented - as a sequence octets, each octet represented by two hexadecimal - numbers. Octets are separated by colons. The canonical - representation uses lowercase characters. - - In the value set and its semantics, this type is equivalent - to the PhysAddress textual convention of the SMIv2.\"; - reference - \"RFC 2579: Textual Conventions for SMIv2\"; - } - - typedef mac-address { - type string { - pattern ''[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}''; - } - description - \"The mac-address type represents an IEEE 802 MAC address. - The canonical representation uses lowercase characters. - - In the value set and its semantics, this type is equivalent - to the MacAddress textual convention of the SMIv2.\"; - reference - \"IEEE 802: IEEE Standard for Local and Metropolitan Area - Networks: Overview and Architecture - RFC 2579: Textual Conventions for SMIv2\"; - } - - /*** collection of XML-specific types ***/ - - typedef xpath1.0 { - type string; - description - \"This type represents an XPATH 1.0 expression. - - When a schema node is defined that uses this type, the - description of the schema node MUST specify the XPath - context in which the XPath expression is evaluated.\"; - reference - \"XPATH: XML Path Language (XPath) Version 1.0\"; - } - - /*** collection of string types ***/ - - typedef hex-string { - type string { - pattern ''([0-9a-fA-F]{2}(:[0-9a-fA-F]{2})*)?''; - } - description - \"A hexadecimal string with octets represented as hex digits - separated by colons. The canonical representation uses - lowercase characters.\"; - } - - typedef uuid { - type string { - pattern ''[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-'' - + ''[0-9a-fA-F]{4}-[0-9a-fA-F]{12}''; - } - description - \"A Universally Unique IDentifier in the string representation - defined in RFC 4122. The canonical representation uses - lowercase characters. - - The following is an example of a UUID in string representation: - f81d4fae-7dec-11d0-a765-00a0c91e6bf6 - \"; - reference - \"RFC 4122: A Universally Unique IDentifier (UUID) URN - Namespace\"; - } - - typedef dotted-quad { - type string { - pattern - ''(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]).){3}'' - + ''([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])''; - } - description - \"An unsigned 32-bit number expressed in the dotted-quad - notation, i.e., four octets written as decimal numbers - and separated with the ''.'' (full stop) character.\"; - } -}"|57d603ee9ab0c49355ad0695c0709c93 diff --git a/csit/tests/cps-admin/cps-admin.robot b/csit/tests/cps-admin/cps-admin.robot index cf7a90c4ac..0df67b6245 100644 --- a/csit/tests/cps-admin/cps-admin.robot +++ b/csit/tests/cps-admin/cps-admin.robot @@ -33,7 +33,6 @@ ${dataspaceName} CSIT-Dataspace ${schemaSetName} CSIT-SchemaSet ${anchorName} CSIT-Anchor ${ranDataspaceName} NFP-Operational -${ranSchemaSetName} cps-ran-schema-model *** Test Cases *** Create Dataspace @@ -77,11 +76,3 @@ Create Anchor ${headers}= Create Dictionary Authorization=${auth} ${response}= POST On Session CPS_URL ${uri} params=${params} headers=${headers} Should Be Equal As Strings ${response.status_code} 201 - -Get CPS RAN Schema Set info - ${uri}= Set Variable ${basePath}/v1/dataspaces/${ranDataspaceName}/schema-sets/${ranSchemaSetName} - ${headers}= Create Dictionary Authorization=${auth} - ${response}= Get On Session CPS_URL ${uri} headers=${headers} expected_status=200 - ${responseJson}= Set Variable ${response.json()} - Should Be Equal As Strings ${responseJson['name']} ${ranSchemaSetName} - Should Be Equal As Strings ${responseJson['dataspaceName']} ${ranDataspaceName} diff --git a/docs/deployment.rst b/docs/deployment.rst index de276ce28f..ba8fcd9347 100644 --- a/docs/deployment.rst +++ b/docs/deployment.rst @@ -12,6 +12,13 @@ CPS Deployment .. contents:: :depth: 2 +Database configuration +====================== +CPS uses PostgreSQL database. As per the `PostgreSQL documentation on resource consumption +<https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-SHARED-BUFFERS>`_, the *shared_buffers* +parameter should be set between 25% and 40% of total memory. It has a default value of 128 megabytes, so this should be +set appropriately. For example, given a database with 2GB of memory, 512MB is a recommended value. + CPS OOM Charts ============== The CPS kubernetes chart is located in the `OOM repository <https://github.com/onap/oom/tree/master/kubernetes/cps>`_. diff --git a/docs/release-notes.rst b/docs/release-notes.rst index 2202d11391..3bed581259 100644 --- a/docs/release-notes.rst +++ b/docs/release-notes.rst @@ -43,6 +43,8 @@ Bug Fixes Features -------- +3.4.7 + - `CPS-2061 <https://jira.onap.org/browse/CPS-2061>`_ Liquibase Steps Condensing and Cleanup. Version: 3.4.6 ============== diff --git a/integration-test/pom.xml b/integration-test/pom.xml index b379e9ff19..ca2b26d1c9 100644 --- a/integration-test/pom.xml +++ b/integration-test/pom.xml @@ -68,6 +68,11 @@ <scope>test</scope> </dependency> <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-web</artifactId> + <scope>test</scope> + </dependency> + <dependency> <groupId>org.spockframework</groupId> <artifactId>spock-spring</artifactId> <scope>test</scope> @@ -78,6 +83,11 @@ <scope>test</scope> </dependency> <dependency> + <groupId>org.springframework.kafka</groupId> + <artifactId>spring-kafka-test</artifactId> + <scope>test</scope> + </dependency> + <dependency> <groupId>org.testcontainers</groupId> <artifactId>postgresql</artifactId> <scope>test</scope> @@ -88,8 +98,8 @@ <scope>test</scope> </dependency> <dependency> - <groupId>org.springframework</groupId> - <artifactId>spring-web</artifactId> + <groupId>org.testcontainers</groupId> + <artifactId>kafka</artifactId> <scope>test</scope> </dependency> </dependencies> diff --git a/integration-test/src/test/groovy/org/onap/cps/integration/base/CpsIntegrationSpecBase.groovy b/integration-test/src/test/groovy/org/onap/cps/integration/base/CpsIntegrationSpecBase.groovy index 33945a6c21..2603c48edf 100644 --- a/integration-test/src/test/groovy/org/onap/cps/integration/base/CpsIntegrationSpecBase.groovy +++ b/integration-test/src/test/groovy/org/onap/cps/integration/base/CpsIntegrationSpecBase.groovy @@ -21,12 +21,14 @@ package org.onap.cps.integration.base import java.time.OffsetDateTime +import java.time.format.DateTimeFormatter import org.onap.cps.api.CpsAnchorService import org.onap.cps.api.CpsDataService import org.onap.cps.api.CpsDataspaceService import org.onap.cps.api.CpsModuleService import org.onap.cps.api.CpsQueryService import org.onap.cps.integration.DatabaseTestContainer +import org.onap.cps.integration.KafkaTestContainer import org.onap.cps.ncmp.api.NetworkCmProxyCmHandleQueryService import org.onap.cps.ncmp.api.NetworkCmProxyDataService import org.onap.cps.ncmp.api.NetworkCmProxyQueryService @@ -38,6 +40,7 @@ import org.onap.cps.spi.exceptions.DataspaceNotFoundException import org.onap.cps.spi.model.DataNode import org.onap.cps.spi.repository.DataspaceRepository import org.onap.cps.spi.utils.SessionManager +import org.onap.cps.utils.JsonObjectMapper import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.autoconfigure.EnableAutoConfiguration import org.springframework.boot.autoconfigure.domain.EntityScan @@ -55,13 +58,11 @@ import spock.lang.Shared import spock.lang.Specification import spock.util.concurrent.PollingConditions -import java.time.format.DateTimeFormatter - +import static org.onap.cps.ncmp.api.impl.ncmppersistence.NcmpPersistence.NCMP_DATASPACE_NAME +import static org.onap.cps.ncmp.api.impl.ncmppersistence.NcmpPersistence.NCMP_DMI_REGISTRY_ANCHOR +import static org.onap.cps.ncmp.api.impl.ncmppersistence.NcmpPersistence.NCMP_DMI_REGISTRY_PARENT import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo import static org.springframework.test.web.client.response.MockRestResponseCreators.withStatus -import static org.onap.cps.ncmp.api.impl.ncmppersistence.NcmpPersistence.NCMP_DATASPACE_NAME; -import static org.onap.cps.ncmp.api.impl.ncmppersistence.NcmpPersistence.NCMP_DMI_REGISTRY_ANCHOR; -import static org.onap.cps.ncmp.api.impl.ncmppersistence.NcmpPersistence.NCMP_DMI_REGISTRY_PARENT; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK, classes = [CpsDataspaceService]) @Testcontainers @@ -75,8 +76,11 @@ abstract class CpsIntegrationSpecBase extends Specification { @Shared DatabaseTestContainer databaseTestContainer = DatabaseTestContainer.getInstance() + @Shared + KafkaTestContainer kafkaTestContainer = KafkaTestContainer.getInstance() + @Autowired - MockMvc mvc; + MockMvc mvc @Autowired CpsDataspaceService cpsDataspaceService @@ -111,6 +115,9 @@ abstract class CpsIntegrationSpecBase extends Specification { @Autowired ModuleSyncWatchdog moduleSyncWatchdog + @Autowired + JsonObjectMapper jsonObjectMapper + MockRestServiceServer mockDmiServer = null static final DMI_URL = 'http://mock-dmi-server' diff --git a/integration-test/src/test/groovy/org/onap/cps/integration/functional/NcmpCmHandleCreateSpec.groovy b/integration-test/src/test/groovy/org/onap/cps/integration/functional/NcmpCmHandleCreateSpec.groovy index 6b6f62edf9..f03872d56b 100644 --- a/integration-test/src/test/groovy/org/onap/cps/integration/functional/NcmpCmHandleCreateSpec.groovy +++ b/integration-test/src/test/groovy/org/onap/cps/integration/functional/NcmpCmHandleCreateSpec.groovy @@ -20,7 +20,11 @@ package org.onap.cps.integration.functional +import java.time.Duration import java.time.OffsetDateTime +import org.apache.kafka.common.TopicPartition +import org.apache.kafka.common.serialization.StringDeserializer +import org.onap.cps.integration.KafkaTestContainer import org.onap.cps.integration.base.CpsIntegrationSpecBase import org.onap.cps.ncmp.api.NetworkCmProxyDataService import org.onap.cps.ncmp.api.impl.inventory.CmHandleState @@ -28,12 +32,15 @@ import org.onap.cps.ncmp.api.impl.inventory.LockReasonCategory import org.onap.cps.ncmp.api.models.CmHandleRegistrationResponse import org.onap.cps.ncmp.api.models.DmiPluginRegistration import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle +import org.onap.cps.ncmp.events.lcm.v1.LcmEvent import spock.util.concurrent.PollingConditions class NcmpCmHandleCreateSpec extends CpsIntegrationSpecBase { NetworkCmProxyDataService objectUnderTest + def kafkaConsumer = KafkaTestContainer.getConsumer('ncmp-group', StringDeserializer.class) + static final MODULE_REFERENCES_RESPONSE_A = readResourceDataFile('mock-dmi-responses/bookStoreAWithModules_M1_M2_Response.json') static final MODULE_RESOURCES_RESPONSE_A = readResourceDataFile('mock-dmi-responses/bookStoreAWithModules_M1_M2_ResourcesResponse.json') static final MODULE_REFERENCES_RESPONSE_B = readResourceDataFile('mock-dmi-responses/bookStoreBWithModules_M1_M3_Response.json') @@ -47,6 +54,9 @@ class NcmpCmHandleCreateSpec extends CpsIntegrationSpecBase { given: 'DMI will return modules when requested' mockDmiResponsesForModuleSync(DMI_URL, 'ch-1', MODULE_REFERENCES_RESPONSE_A, MODULE_RESOURCES_RESPONSE_A) + and: 'consumer subscribed to topic' + kafkaConsumer.subscribe(['ncmp-events']) + when: 'a CM-handle is registered for creation' def cmHandleToCreate = new NcmpServiceCmHandle(cmHandleId: 'ch-1') def dmiPluginRegistration = new DmiPluginRegistration(dmiPlugin: DMI_URL, createdCmHandles: [cmHandleToCreate]) @@ -66,6 +76,14 @@ class NcmpCmHandleCreateSpec extends CpsIntegrationSpecBase { assert CmHandleState.READY == objectUnderTest.getCmHandleCompositeState('ch-1').cmHandleState }) + and: 'the messages is polled' + def message = kafkaConsumer.poll(Duration.ofMillis(10000)) + def records = message.records(new TopicPartition('ncmp-events', 0)) + + and: 'the newest lcm event notification is received with READY state' + def notificationMessage = jsonObjectMapper.convertJsonString(records.last().value().toString(), LcmEvent) + assert notificationMessage.event.newValues.cmHandleState.value() == 'READY' + and: 'the CM-handle has expected modules' assert ['M1', 'M2'] == objectUnderTest.getYangResourcesModuleReferences('ch-1').moduleName.sort() diff --git a/integration-test/src/test/groovy/org/onap/cps/integration/functional/NcmpCmNotificationSubscriptionSpec.groovy b/integration-test/src/test/groovy/org/onap/cps/integration/functional/NcmpCmNotificationSubscriptionSpec.groovy new file mode 100644 index 0000000000..df74a05b50 --- /dev/null +++ b/integration-test/src/test/groovy/org/onap/cps/integration/functional/NcmpCmNotificationSubscriptionSpec.groovy @@ -0,0 +1,46 @@ +package org.onap.cps.integration.functional + +import static org.onap.cps.ncmp.api.impl.operations.DatastoreType.PASSTHROUGH_RUNNING; +import org.onap.cps.integration.base.CpsIntegrationSpecBase; +import org.onap.cps.ncmp.api.impl.events.cmsubscription.service.CmNotificationSubscriptionPersistenceService; +import org.springframework.beans.factory.annotation.Autowired; + +class NcmpCmNotificationSubscriptionSpec extends CpsIntegrationSpecBase { + + @Autowired + CmNotificationSubscriptionPersistenceService cmNotificationSubscriptionPersistenceService; + + def 'Adding a new cm notification subscription'() { + given: 'there is no ongoing cm subscription for the following' + def datastoreType = PASSTHROUGH_RUNNING + def cmHandleId = 'ch-1' + def xpath = '/x/y' + assert cmNotificationSubscriptionPersistenceService. + getOngoingCmNotificationSubscriptionIds(datastoreType,cmHandleId,xpath).size() == 0 + when: 'we add a new cm notification subscription' + cmNotificationSubscriptionPersistenceService.addOrUpdateCmNotificationSubscription(datastoreType,cmHandleId,xpath, + 'subId-1') + then: 'there is an ongoing cm subscription for that CM handle and xpath' + assert cmNotificationSubscriptionPersistenceService.isOngoingCmNotificationSubscription(datastoreType,cmHandleId,xpath) + and: 'only one subscription id is related to now ongoing cm subscription' + assert cmNotificationSubscriptionPersistenceService. + getOngoingCmNotificationSubscriptionIds(datastoreType,cmHandleId,xpath).size() == 1 + } + + def 'Adding a cm notification subscription to an already existing'() { + given: 'an ongoing cm subscription' + def datastoreType = PASSTHROUGH_RUNNING + def cmHandleId = 'ch-1' + def xpath = '/x/y' + cmNotificationSubscriptionPersistenceService.addOrUpdateCmNotificationSubscription(datastoreType,cmHandleId,xpath, + 'subId-1') + when: 'a new cm notification subscription is made for the SAME CM handle and xpath' + cmNotificationSubscriptionPersistenceService.addOrUpdateCmNotificationSubscription(datastoreType,cmHandleId,xpath, + 'subId-2') + then: 'it is added to the ongoing list of subscription ids' + def subscriptionIds = cmNotificationSubscriptionPersistenceService.getOngoingCmNotificationSubscriptionIds(datastoreType,cmHandleId,xpath) + assert subscriptionIds.size() == 2 + and: 'both subscription ids exists for the CM handle and xpath' + assert subscriptionIds.contains("subId-1") && subscriptionIds.contains("subId-2") + } +} diff --git a/integration-test/src/test/java/org/onap/cps/integration/KafkaTestContainer.java b/integration-test/src/test/java/org/onap/cps/integration/KafkaTestContainer.java new file mode 100644 index 0000000000..d41f752912 --- /dev/null +++ b/integration-test/src/test/java/org/onap/cps/integration/KafkaTestContainer.java @@ -0,0 +1,86 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2024 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.cps.integration; + +import java.util.HashMap; +import java.util.Map; +import org.apache.kafka.clients.consumer.ConsumerConfig; +import org.apache.kafka.clients.consumer.KafkaConsumer; +import org.apache.kafka.common.serialization.StringDeserializer; +import org.testcontainers.containers.KafkaContainer; +import org.testcontainers.utility.DockerImageName; + +/** + * The Apache Kafka test container wrapper. + * Allow to use specific image and version with Singleton design pattern. + * This ensures only one instance of Kafka container across the integration tests. + * Avoid unnecessary resource and time consumption. + */ +public class KafkaTestContainer extends KafkaContainer { + + private static final String IMAGE_NAME_AND_VERSION = "registry.nordix.org/onaptest/confluentinc/cp-kafka:6.2.1"; + + private static KafkaTestContainer kafkaTestContainer; + + private KafkaTestContainer() { + super(DockerImageName.parse(IMAGE_NAME_AND_VERSION).asCompatibleSubstituteFor("confluentinc/cp-kafka")); + } + + /** + * Provides an instance of Kafka test container wrapper. + * This will allow to initialize Kafka messaging support before any integration test run. + * + * @return KafkaTestContainer the unique Kafka instance + */ + public static KafkaTestContainer getInstance() { + if (kafkaTestContainer == null) { + kafkaTestContainer = new KafkaTestContainer(); + Runtime.getRuntime().addShutdownHook(new Thread(kafkaTestContainer::close)); + } + return kafkaTestContainer; + } + + public static KafkaConsumer getConsumer(final String consumerGroupId, final Object valueDeserializer) { + return new KafkaConsumer<>(consumerProperties(consumerGroupId, valueDeserializer)); + } + + @Override + public void start() { + super.start(); + System.setProperty("spring.kafka.properties.bootstrap.servers", kafkaTestContainer.getBootstrapServers()); + } + + @Override + public void stop() { + // Method intentionally left blank + } + + private static Map<String, Object> consumerProperties(final String consumerGroupId, + final Object valueDeserializer) { + final Map<String, Object> configProps = new HashMap<>(); + configProps.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaTestContainer.getBootstrapServers()); + configProps.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); + configProps.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, valueDeserializer); + configProps.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest"); + configProps.put(ConsumerConfig.GROUP_ID_CONFIG, consumerGroupId); + return configProps; + } + +} |