From bc6231f7d4d44ab5f269683c42eb90c2ce4ec9a6 Mon Sep 17 00:00:00 2001 From: xuegao Date: Mon, 24 Oct 2022 11:13:31 +0200 Subject: [PATCH] Fix/add use cases under SMO package Fix K8s use case and add Network Slicing use case under SMO package. Issue-ID: INT-147 Signed-off-by: xuegao Change-Id: I81fc33fe9e7f92a8962a1e5c0b2eff39f6d142b9 Signed-off-by: xuegao --- .../network-slicing/onap-override.yaml | 401 +++++++ .../pythonsdk-tests/onap-override.yaml | 8 +- smo-install/onap_oom | 2 +- smo-install/oran_oom/Makefile | 4 +- smo-install/scripts/layer-0/0-setup-helm3.sh | 8 +- smo-install/scripts/sub-scripts/install-onap.sh | 2 +- .../test/pythonsdk/src/oransdk/aai/__init__.py | 23 + smo-install/test/pythonsdk/src/oransdk/aai/aai.py | 48 + .../src/oransdk/aai/service_design_and_creation.py | 54 + .../oransdk/aai/templates/aai_model_create.json.j2 | 12 + .../test/pythonsdk/src/oransdk/msb/__init__.py | 23 + .../pythonsdk/src/oransdk/msb/msb_microservice.py | 68 ++ .../test/pythonsdk/src/oransdk/oof/__init__.py | 23 + smo-install/test/pythonsdk/src/oransdk/oof/oof.py | 40 + .../policy/templates/commission_k8s.json.j2 | 9 +- .../policy/templates/create_instance_k8s.json.j2 | 7 +- .../test/pythonsdk/src/oransdk/sdc/__init__.py | 23 + .../src/oransdk/sdc/category_management.py | 51 + smo-install/test/pythonsdk/src/oransdk/sdc/sdc.py | 306 ++++++ .../test/pythonsdk/src/oransdk/sdc/service.py | 207 ++++ .../sdc/templates/component_declare_input.json.j2 | 37 + .../templates/sdc_add_cs_properties_input.json.j2 | 435 ++++++++ .../sdc_add_service_profile_input.json.j2 | 493 +++++++++ .../templates/sdc_add_slice_profile_input.json.j2 | 1117 ++++++++++++++++++++ .../test/pythonsdk/src/oransdk/so/__init__.py | 23 + smo-install/test/pythonsdk/src/oransdk/so/so.py | 41 + .../pythonsdk/src/oransdk/utils/healthcheck.py | 186 ++++ .../test/pythonsdk/src/oransdk/utils/jinja.py | 4 +- .../network_slicing/preparation/aai_preparation.py | 51 + .../network_slicing/preparation/msb_preparation.py | 75 ++ .../network_slicing/preparation/oof_preparation.py | 110 ++ .../network_slicing/preparation/sdc_preparation.py | 392 +++++++ .../network_slicing/preparation/so_preparation.py | 137 +++ .../network_slicing/preparation/uui_preparation.py | 61 ++ .../orantests/network_slicing/resources/eMBB.zip | Bin 0 -> 727 bytes .../resources/policies_option2.tar.gz | Bin 0 -> 4232 bytes .../resources/subnetCapability.json | 31 + .../network_slicing/test_network_slicing.py | 95 ++ .../src/orantests/{ => oran_tests}/conftest.py | 0 .../resources/cl-test-helm-chart/odu-app-1.0.0.tgz | Bin 0 -> 25276 bytes .../odu-app-ics-version-1.0.0.tgz | Bin 0 -> 25346 bytes .../resources/cl-test-helm-chart/oru-app-1.0.0.tgz | Bin 0 -> 279277 bytes .../resources/faults-config/event-settings-du.json | 0 .../resources/faults-config/event-settings-ru.json | 0 .../network-simulators-override.yaml | 0 .../network-simulators-topology-override.yaml | 0 .../src/orantests/{ => oran_tests}/smo/__init__.py | 0 .../orantests/{ => oran_tests}/smo/cl_usecase.py | 4 +- .../src/orantests/{ => oran_tests}/smo/dmaap.py | 0 .../{ => oran_tests}/smo/network_simulators.py | 0 .../src/orantests/{ => oran_tests}/smo/nonrtric.py | 0 .../src/orantests/{ => oran_tests}/smo/onap.py | 0 .../src/orantests/{ => oran_tests}/smo/smo.py | 0 .../src/orantests/{ => oran_tests}/test_a1sim.py | 0 .../orantests/{ => oran_tests}/test_apex_policy.py | 0 .../src/orantests/{ => oran_tests}/test_cl_apex.py | 0 .../src/orantests/{ => oran_tests}/test_cl_k8s.py | 39 +- .../src/orantests/{ => oran_tests}/test_o1.py | 0 smo-install/test/pythonsdk/tox.ini | 13 +- smo-install/tests_oom/Makefile | 4 +- 60 files changed, 4619 insertions(+), 48 deletions(-) create mode 100644 smo-install/helm-override/network-slicing/onap-override.yaml create mode 100644 smo-install/test/pythonsdk/src/oransdk/aai/__init__.py create mode 100644 smo-install/test/pythonsdk/src/oransdk/aai/aai.py create mode 100644 smo-install/test/pythonsdk/src/oransdk/aai/service_design_and_creation.py create mode 100644 smo-install/test/pythonsdk/src/oransdk/aai/templates/aai_model_create.json.j2 create mode 100644 smo-install/test/pythonsdk/src/oransdk/msb/__init__.py create mode 100644 smo-install/test/pythonsdk/src/oransdk/msb/msb_microservice.py create mode 100644 smo-install/test/pythonsdk/src/oransdk/oof/__init__.py create mode 100644 smo-install/test/pythonsdk/src/oransdk/oof/oof.py create mode 100644 smo-install/test/pythonsdk/src/oransdk/sdc/__init__.py create mode 100644 smo-install/test/pythonsdk/src/oransdk/sdc/category_management.py create mode 100644 smo-install/test/pythonsdk/src/oransdk/sdc/sdc.py create mode 100644 smo-install/test/pythonsdk/src/oransdk/sdc/service.py create mode 100644 smo-install/test/pythonsdk/src/oransdk/sdc/templates/component_declare_input.json.j2 create mode 100644 smo-install/test/pythonsdk/src/oransdk/sdc/templates/sdc_add_cs_properties_input.json.j2 create mode 100644 smo-install/test/pythonsdk/src/oransdk/sdc/templates/sdc_add_service_profile_input.json.j2 create mode 100644 smo-install/test/pythonsdk/src/oransdk/sdc/templates/sdc_add_slice_profile_input.json.j2 create mode 100644 smo-install/test/pythonsdk/src/oransdk/so/__init__.py create mode 100644 smo-install/test/pythonsdk/src/oransdk/so/so.py create mode 100644 smo-install/test/pythonsdk/src/oransdk/utils/healthcheck.py create mode 100644 smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/aai_preparation.py create mode 100644 smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/msb_preparation.py create mode 100644 smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/oof_preparation.py create mode 100644 smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/sdc_preparation.py create mode 100644 smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/so_preparation.py create mode 100644 smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/uui_preparation.py create mode 100644 smo-install/test/pythonsdk/src/orantests/network_slicing/resources/eMBB.zip create mode 100644 smo-install/test/pythonsdk/src/orantests/network_slicing/resources/policies_option2.tar.gz create mode 100644 smo-install/test/pythonsdk/src/orantests/network_slicing/resources/subnetCapability.json create mode 100644 smo-install/test/pythonsdk/src/orantests/network_slicing/test_network_slicing.py rename smo-install/test/pythonsdk/src/orantests/{ => oran_tests}/conftest.py (100%) create mode 100755 smo-install/test/pythonsdk/src/orantests/oran_tests/resources/cl-test-helm-chart/odu-app-1.0.0.tgz create mode 100755 smo-install/test/pythonsdk/src/orantests/oran_tests/resources/cl-test-helm-chart/odu-app-ics-version-1.0.0.tgz create mode 100644 smo-install/test/pythonsdk/src/orantests/oran_tests/resources/cl-test-helm-chart/oru-app-1.0.0.tgz rename smo-install/test/pythonsdk/src/orantests/{ => oran_tests}/resources/faults-config/event-settings-du.json (100%) rename smo-install/test/pythonsdk/src/orantests/{ => oran_tests}/resources/faults-config/event-settings-ru.json (100%) rename smo-install/test/pythonsdk/src/orantests/{ => oran_tests}/resources/network-simulators-topology/network-simulators-override.yaml (100%) rename smo-install/test/pythonsdk/src/orantests/{ => oran_tests}/resources/network-simulators-topology/network-simulators-topology-override.yaml (100%) rename smo-install/test/pythonsdk/src/orantests/{ => oran_tests}/smo/__init__.py (100%) rename smo-install/test/pythonsdk/src/orantests/{ => oran_tests}/smo/cl_usecase.py (97%) rename smo-install/test/pythonsdk/src/orantests/{ => oran_tests}/smo/dmaap.py (100%) rename smo-install/test/pythonsdk/src/orantests/{ => oran_tests}/smo/network_simulators.py (100%) rename smo-install/test/pythonsdk/src/orantests/{ => oran_tests}/smo/nonrtric.py (100%) rename smo-install/test/pythonsdk/src/orantests/{ => oran_tests}/smo/onap.py (100%) rename smo-install/test/pythonsdk/src/orantests/{ => oran_tests}/smo/smo.py (100%) rename smo-install/test/pythonsdk/src/orantests/{ => oran_tests}/test_a1sim.py (100%) rename smo-install/test/pythonsdk/src/orantests/{ => oran_tests}/test_apex_policy.py (100%) rename smo-install/test/pythonsdk/src/orantests/{ => oran_tests}/test_cl_apex.py (100%) rename smo-install/test/pythonsdk/src/orantests/{ => oran_tests}/test_cl_k8s.py (82%) rename smo-install/test/pythonsdk/src/orantests/{ => oran_tests}/test_o1.py (100%) diff --git a/smo-install/helm-override/network-slicing/onap-override.yaml b/smo-install/helm-override/network-slicing/onap-override.yaml new file mode 100644 index 00000000..d5ce917e --- /dev/null +++ b/smo-install/helm-override/network-slicing/onap-override.yaml @@ -0,0 +1,401 @@ +# Copyright © 2017 Amdocs, Bell Canada +# +# Modifications Copyright © 2021 AT&T +# +# 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. + +################################################################# +# Global configuration overrides. +# +# These overrides will affect all helm charts (ie. applications) +# that are listed below and are 'enabled'. +################################################################# +global: + # Change to an unused port prefix range to prevent port conflicts + # with other instances running within the same k8s cluster + repository: nexus3.onap.org:10001 #__docker_proxy__ + nodePortPrefix: 302 + nodePortPrefixExt: 304 + masterPassword: secretpassword + addTestingComponents: true + cmpv2Enabled: false + flavor: unlimited + # ONAP Repository + # Uncomment the following to enable the use of a single docker + # repository but ONLY if your repository mirrors all ONAP + # docker images. This includes all images from dockerhub and + # any other repository that hosts images for ONAP components. + #repository: nexus3.onap.org:10001 + + # readiness check - temporary repo until images migrated to nexus3 + readinessRepository: oomk8s + # logging agent - temporary repo until images migrated to nexus3 + loggingRepository: docker.elastic.co + + # image pull policy + pullPolicy: IfNotPresent + + # override default mount path root directory + # referenced by persistent volumes and log files + persistence: + mountPath: /dockerdata-nfs + + # flag to enable debugging - application support required + debugEnabled: false + +################################################################# +# Enable/disable and configure helm charts (ie. applications) +# to customize the ONAP deployment. +################################################################# +a1policymanagement: + enabled: false + rics: + - name: ric1 + link: http://a1-sim-osc-0.nonrtric:8085 + controller: controller1 + managedElementIds: + - kista_1 + - kista_2 + - name: ric2 + link: http://a1-sim-osc-1.nonrtric:8085 + controller: controller1 + managedElementIds: + - kista_1 + - kista_2 + - name: ric3 + link: http://a1-sim-std-0.nonrtric:8085 + controller: controller1 + managedElementIds: + - kista_1 + - kista_2 + - name: ric4 + link: http://a1-sim-std-1.nonrtric:8085 + controller: controller1 + managedElementIds: + - kista_1 + - kista_2 + - name: ric5 + link: http://a1-sim-std2-0.nonrtric:8085 + controller: controller1 + managedElementIds: + - kista_1 + - kista_2 + - name: ric6 + link: http://a1-sim-std2-1.nonrtric:8085 + controller: controller1 + managedElementIds: + - kista_1 + - kista_2 +aaf: + enabled: true + aaf-service: + readiness: + initialDelaySeconds: 150 +aai: + enabled: true + flavorOverride: unlimited + global: + flavorOverride: unlimited + cassandra: + replicas: 1 + aai-cassandra: + flavorOverride: unlimited + replicaCount: 1 + aai-babel: + flavorOverride: unlimited + aai-data-router: + flavorOverride: unlimited + aai-elasticsearch: + flavorOverride: unlimited + aai-graphadmin: + flavorOverride: unlimited + aai-modelloader: + flavorOverride: unlimited + aai-resources: + flavorOverride: unlimited + aai-schema-service: + flavorOverride: unlimited + aai-search-data: + flavorOverride: unlimited + aai-sparky-be: + flavorOverride: unlimited + readiness: + initialDelaySeconds: 150 + periodSeconds: 20 + timeoutSeconds: 10 + aai-traversal: + flavorOverride: unlimited +appc: + enabled: false +cassandra: + enabled: true + replicaCount: 1 + config: + cluster_domain: cluster.local + heap: + max: 1G + min: 256M + liveness: + initialDelaySeconds: 60 + periodSeconds: 20 + timeoutSeconds: 10 + successThreshold: 1 + failureThreshold: 3 + # necessary to disable liveness probe when setting breakpoints + # in debugger so K8s doesn't restart unresponsive container + enabled: true + + readiness: + initialDelaySeconds: 120 + periodSeconds: 20 + timeoutSeconds: 10 + successThreshold: 1 + failureThreshold: 3 +cds: + enabled: false +cli: + enabled: false +contrib: + enabled: true + awx: + enabled: false + netbox: + enabled: false +consul: + enabled: false + consul-server: + replicaCount: 1 +cps: + enabled: false +dcaegen2: + enabled: false + dcae-bootstrap: + enabled: false + dcae-cloudify-manager: + enabled: false + dcae-config-binding-service: + enabled: false + dcae-dashboard: + enabled: false + dcae-deployment-handler: + enabled: false + dcae-healthcheck: + enabled: false + dcae-inventory-api: + enabled: false + dcae-policy-handler: + enabled: false + dcae-servicechange-handler: + enabled: false + dcae-ves-openapi-manager: + enabled: false +dcaegen2-services: + enabled: true + dcae-bbs-eventprocessor-ms: + enabled: false + dcae-datafile-collector: + enabled: true + dcae-datalake-admin-ui: + enabled: false + dcae-datalake-des: + enabled: true + dcae-datalake-feeder: + enabled: true + dcae-heartbeat: + enabled: false + dcae-hv-ves-collector: + enabled: false + dcae-kpi-ms: + enabled: false + dcae-ms-healthcheck: + enabled: false + dcae-pm-mapper: + enabled: true + dcae-pmsh: + enabled: false + dcae-prh: + enabled: false + dcae-restconf-collector: + enabled: false + dcae-slice-analysis-ms: + enabled: true + dcae-snmptrap-collector: + enabled: false + dcae-son-handler: + enabled: false + dcae-tcagen2: + enabled: false + dcae-ves-collector: + enabled: true + dcae-ves-mapper: + enabled: false + dcae-ves-openapi-manager: + enabled: false + +dcaemod: + enabled: false +holmes: + enabled: false +dmaap: + enabled: true + +esr: + enabled: true +log: + enabled: false + log-logstash: + replicaCount: 1 +mariadb-galera: + enabled: true + replicaCount: 1 +modeling: + enabled: false +msb: + enabled: true +multicloud: + enabled: true +nbi: + enabled: false +oof: + enabled: true +platform: + enabled: false +policy: + enabled: true + policy-api: + enabled: true + policy-pap: + enabled: true + policy-xacml-pdp: + enabled: true + policy-apex-pdp: + enabled: true + policy-drools-pdp: + enabled: false + policy-distribution: + enabled: false + policy-clamp-be: + enabled: true + policy-clamp-runtime-acm: + enabled: true + policy-clamp-ac-k8s-ppnt: + enabled: true + policy-gui: + enabled: false + image: onap/policy-gui:2.2.1 + policy-nexus: + enabled: false + policy-clamp-ac-pf-ppnt: + enabled: true + policy-clamp-ac-http-ppnt: + enabled: true + +pomba: + enabled: false +portal: + enabled: false +robot: + enabled: false +sdc: + enabled: true + sdc-be: + config: + javaOptions: "-Xmx1g -Xms512m" + liveness: + periodSeconds: 300 + timeoutSeconds: 180 + readiness: + periodSeconds: 300 + timeoutSeconds: 240 + sdc-fe: + resources: + small: + limits: + cpu: 1 + memory: 2Gi + requests: + cpu: 100m + memory: 500Mi + sdc-wfd: + enabled: false + global: + sdc_cassandra: + replicaCount: 1 + +sdnc: + enabled: true + replicaCount: 1 + elasticsearch: + master: + replicaCount: 1 + mysql: + replicaCount: 1 + ueb-listener: + enabled: false + sdnc-ansible-server: + enabled: true + dgbuilder: + enabled: true + cds: + enabled: false + sdnc-web: + config: + topologyserver: + enabled: true + topologyserverUrl: http://topology.nonrtric:3001 + config: + sdnr: + enabled: true + # mode: web - SDNC contains device manager only plus dedicated webserver service for ODLUX (default), + # mode: dm - SDNC contains sdnr device manager + ODLUX components + mode: dm + # sdnronly: true starts sdnc container with odl and sdnrwt features only + sdnronly: false + sdnrdbTrustAllCerts: true + mountpointRegistrarEnabled: true + mountpointStateProviderEnabled: true + netconfCallHome: + enabled: true + vesCollector: + enabled: true + tls: + enabled: true + trustAllCertificates: true + username: sample1 + password: sample1 + address: dcae-ves-collector.onap + port: 8443 + eventLogMsgDetail: LONG +sniro-emulator: + enabled: false + +strimzi: + enabled: true + +so: + enabled: true + so-catalog-db-adapter: + config: + openStackUserName: "the username" + openStackKeyStoneUrl: "http://10.12.25.2:5000/v3" + openStackEncryptedPasswordHere: "1DD1B3B4477FBAFAFEA617C575639C6F09E95446B5AE1F46C72B8FD960219ABB0DBA997790FCBB12" + openStackKeystoneVersion: "KEYSTONE_V3" +uui: + enabled: true +vfc: + enabled: false +vid: + enabled: true +vnfsdk: + enabled: false + diff --git a/smo-install/helm-override/pythonsdk-tests/onap-override.yaml b/smo-install/helm-override/pythonsdk-tests/onap-override.yaml index 0dc5aa31..0d3ae4a1 100644 --- a/smo-install/helm-override/pythonsdk-tests/onap-override.yaml +++ b/smo-install/helm-override/pythonsdk-tests/onap-override.yaml @@ -294,7 +294,8 @@ policy: repoList: helm: repos: - - repoName: chartmuseum + - + repoName: chartmuseum address: http://test-chartmuseum.test:8080 protocols: - http @@ -350,6 +351,11 @@ sdnc: enabled: true cds: enabled: false + sdnc-web: + config: + topologyserver: + enabled: true + topologyserverUrl: http://topology.nonrtric:3001 config: sdnr: enabled: true diff --git a/smo-install/onap_oom b/smo-install/onap_oom index 859b18d1..7e4cced6 160000 --- a/smo-install/onap_oom +++ b/smo-install/onap_oom @@ -1 +1 @@ -Subproject commit 859b18d1e92c4fe88681e91b0d549ea3118c5094 +Subproject commit 7e4cced6c92ffdbc480eb843592b0e500b350721 diff --git a/smo-install/oran_oom/Makefile b/smo-install/oran_oom/Makefile index 617cbe86..4db61f67 100644 --- a/smo-install/oran_oom/Makefile +++ b/smo-install/oran_oom/Makefile @@ -28,7 +28,7 @@ ifneq "$(findstring v3,$(HELM_VER))" "v3" HELM_VER := $(shell $(HELM_BIN) version -c --template "{{.Client.SemVer}}") endif -# use this if you would like to push onap charts to repo with other name +# use this if you would like to cm-push onap charts to repo with other name # WARNING: Helm v3+ only # WARNING: Make sure to edit also requirements files HELM_REPO := local @@ -82,7 +82,7 @@ lint-%: dep-% package-%: lint-% @mkdir -p $(PACKAGE_DIR) ifeq "$(findstring v3,$(HELM_VER))" "v3" - @if [ -f $*/Chart.yaml ]; then PACKAGE_NAME=$$($(HELM_BIN) package -d $(PACKAGE_DIR) $* | cut -d":" -f2) && $(HELM_BIN) push -f $$PACKAGE_NAME $(HELM_REPO); fi + @if [ -f $*/Chart.yaml ]; then PACKAGE_NAME=$$($(HELM_BIN) package -d $(PACKAGE_DIR) $* | cut -d":" -f2) && $(HELM_BIN) cm-push -f $$PACKAGE_NAME $(HELM_REPO); fi else @if [ -f $*/Chart.yaml ]; then $(HELM_BIN) package -d $(PACKAGE_DIR) $*; fi @$(HELM_BIN) repo index $(PACKAGE_DIR) diff --git a/smo-install/scripts/layer-0/0-setup-helm3.sh b/smo-install/scripts/layer-0/0-setup-helm3.sh index b8b8508b..684a3a31 100755 --- a/smo-install/scripts/layer-0/0-setup-helm3.sh +++ b/smo-install/scripts/layer-0/0-setup-helm3.sh @@ -33,13 +33,13 @@ sudo apt-get install git -y echo "Checking HELM ..." helm version -TAR_VERSION=0.9.0 -echo "Downloading and installing helm-push v${TAR_VERSION} ..." -TAR_FILE=helm-push_${TAR_VERSION}_linux_amd64.tar.gz +TAR_VERSION=v0.10.3 +echo "Downloading and installing helm-push ${TAR_VERSION} ..." +TAR_FILE=helm-push-${TAR_VERSION}.tar.gz HELM_PLUGINS=$(helm env HELM_PLUGINS) mkdir -p $HELM_PLUGINS/helm-push cd $HELM_PLUGINS/helm-push -wget https://nexus.o-ran-sc.org/service/local/repositories/images/content/$TAR_FILE +wget https://nexus.o-ran-sc.org/content/repositories/thirdparty/chartmuseum/helm-push/$TAR_VERSION/$TAR_FILE tar zxvf $TAR_FILE >/dev/null rm $TAR_FILE cd /tmp/ diff --git a/smo-install/scripts/sub-scripts/install-onap.sh b/smo-install/scripts/sub-scripts/install-onap.sh index 90febe31..c415c5a8 100755 --- a/smo-install/scripts/sub-scripts/install-onap.sh +++ b/smo-install/scripts/sub-scripts/install-onap.sh @@ -27,7 +27,7 @@ SCRIPT=$(readlink -f "$0") SCRIPT_PATH=$(dirname "$SCRIPT") cd $SCRIPT_PATH -helm push ../packages/strimzi-kafka-operator-helm-3-chart-0.28.0.tgz local +helm cm-push ../packages/strimzi-kafka-operator-helm-3-chart-0.28.0.tgz local helm repo update helm install strimzi-kafka-operator local/strimzi-kafka-operator --namespace strimzi-system --version 0.28.0 --set watchAnyNamespace=true --create-namespace diff --git a/smo-install/test/pythonsdk/src/oransdk/aai/__init__.py b/smo-install/test/pythonsdk/src/oransdk/aai/__init__.py new file mode 100644 index 00000000..4fb5f705 --- /dev/null +++ b/smo-install/test/pythonsdk/src/oransdk/aai/__init__.py @@ -0,0 +1,23 @@ +### +# ============LICENSE_START======================================================= +# ORAN SMO PACKAGE - PYTHONSDK TESTS +# ================================================================================ +# Copyright (C) 2022 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END============================================ +# =================================================================== +# +### +"""ONAP AAI package.""" diff --git a/smo-install/test/pythonsdk/src/oransdk/aai/aai.py b/smo-install/test/pythonsdk/src/oransdk/aai/aai.py new file mode 100644 index 00000000..2b66536e --- /dev/null +++ b/smo-install/test/pythonsdk/src/oransdk/aai/aai.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 +### +# ============LICENSE_START======================================================= +# ORAN SMO PACKAGE - PYTHONSDK TESTS +# ================================================================================ +# Copyright (C) 2022 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END============================================ +# =================================================================== +# +### +"""Onap AAI module.""" +from onapsdk.aai.aai_element import AaiElement +from onapsdk.configuration import settings + +class Aai(AaiElement): + """AAI healthcheck class.""" + + def healthcheck(self) -> str: + """AAI Model healthcheck. + + Returns: + result of the health check + """ + res = self.send_message_json("GET", "A&AI healthcheck", f"{self.url}/echo?action=long") + return res + + @property + def url(self) -> str: + """Define the base url. + + Returns: + the base url of the class + + """ + return f"{settings.AAI_URL}/aai/util" diff --git a/smo-install/test/pythonsdk/src/oransdk/aai/service_design_and_creation.py b/smo-install/test/pythonsdk/src/oransdk/aai/service_design_and_creation.py new file mode 100644 index 00000000..3a7655f9 --- /dev/null +++ b/smo-install/test/pythonsdk/src/oransdk/aai/service_design_and_creation.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +### +# ============LICENSE_START======================================================= +# ORAN SMO PACKAGE - PYTHONSDK TESTS +# ================================================================================ +# Copyright (C) 2022 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END============================================ +# =================================================================== +# +### +"""Onap AAI model module.""" +from onapsdk.aai.service_design_and_creation import Model +from oransdk.utils.jinja import jinja_env + +class AaiModel(Model): + """Model resource class.""" + + def create(self, + model_name: str, + model_version_id: str, + invariant_id: str) -> None: + """Create Model. + + Args: + model_name (str): model name + model_version_id (str): model version id + + """ + self.send_message( + "PUT", + "Create A&AI service", + f"{self.base_url}{self.api_version}/service-design-and-creation/" + f"models/model/{invariant_id}", + data=jinja_env().get_template("aai_model_create.json.j2") + .render( + model_version=self.resource_version, + model_name=model_name, + version_id=model_version_id, + model_invariant_id=invariant_id + ) + ) diff --git a/smo-install/test/pythonsdk/src/oransdk/aai/templates/aai_model_create.json.j2 b/smo-install/test/pythonsdk/src/oransdk/aai/templates/aai_model_create.json.j2 new file mode 100644 index 00000000..b15c1b88 --- /dev/null +++ b/smo-install/test/pythonsdk/src/oransdk/aai/templates/aai_model_create.json.j2 @@ -0,0 +1,12 @@ +{ + "model-vers": { + "model-ver": [ + { + "model-version": "{{ model_version }}", + "model-name": "{{ model_name }}", + "model-version-id": "{{ version_id }}" + }] + }, + "model-type": "resource", + "model-invariant-id": "{{ model_invariant_id }}" +} \ No newline at end of file diff --git a/smo-install/test/pythonsdk/src/oransdk/msb/__init__.py b/smo-install/test/pythonsdk/src/oransdk/msb/__init__.py new file mode 100644 index 00000000..9fb71832 --- /dev/null +++ b/smo-install/test/pythonsdk/src/oransdk/msb/__init__.py @@ -0,0 +1,23 @@ +### +# ============LICENSE_START======================================================= +# ORAN SMO PACKAGE - PYTHONSDK TESTS +# ================================================================================ +# Copyright (C) 2022 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END============================================ +# =================================================================== +# +### +"""ONAP MSB package.""" diff --git a/smo-install/test/pythonsdk/src/oransdk/msb/msb_microservice.py b/smo-install/test/pythonsdk/src/oransdk/msb/msb_microservice.py new file mode 100644 index 00000000..28004fc6 --- /dev/null +++ b/smo-install/test/pythonsdk/src/oransdk/msb/msb_microservice.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +### +# ============LICENSE_START======================================================= +# ORAN SMO PACKAGE - PYTHONSDK TESTS +# ================================================================================ +# Copyright (C) 2022 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END============================================ +# =================================================================== +# +### +"""Onap MSB module.""" +from onapsdk.configuration import settings +from onapsdk.onap_service import OnapService +from onapsdk.utils.headers_creator import headers_msb_creator + +class OranMsb(OnapService): + """MSB class.""" + + base_url = f"{settings.MSB_URL}/api/msdiscover/v1/services" + headers = headers_msb_creator(OnapService.headers) + + def get_services(self) -> dict: + """ + Get MSB instance services. + + Returns: + the list of instance services + + """ + status = self.send_message_json('GET', + 'Get status of MSB', + self.base_url, + headers=self.headers) + return status + + def create_service(self, service_data) -> None: + """ + Create an instance service. + + Args: + service_data: the service to be created + + """ + self.send_message('POST', 'Create Instance Service', self.base_url, data=service_data, headers=self.headers) + + def delete_service(self, service_name, version) -> None: + """ + Delete an instance service. + + Args: + service_name: the service to be deleted + + """ + url = f"{self.base_url}/{service_name}/version/{version}?namespace=" + self.send_message('DELETE', 'Delete Instance Service', url, headers=self.headers) diff --git a/smo-install/test/pythonsdk/src/oransdk/oof/__init__.py b/smo-install/test/pythonsdk/src/oransdk/oof/__init__.py new file mode 100644 index 00000000..0d54734b --- /dev/null +++ b/smo-install/test/pythonsdk/src/oransdk/oof/__init__.py @@ -0,0 +1,23 @@ +### +# ============LICENSE_START======================================================= +# ORAN SMO PACKAGE - PYTHONSDK TESTS +# ================================================================================ +# Copyright (C) 2022 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END============================================ +# =================================================================== +# +### +"""ONAP OOF package.""" diff --git a/smo-install/test/pythonsdk/src/oransdk/oof/oof.py b/smo-install/test/pythonsdk/src/oransdk/oof/oof.py new file mode 100644 index 00000000..f4b01a5f --- /dev/null +++ b/smo-install/test/pythonsdk/src/oransdk/oof/oof.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 +### +# ============LICENSE_START======================================================= +# ORAN SMO PACKAGE - PYTHONSDK TESTS +# ================================================================================ +# Copyright (C) 2022 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END============================================ +# =================================================================== +# +### +"""Onap OOF module.""" +from onapsdk.configuration import settings +from onapsdk.onap_service import OnapService + +class Oof(OnapService): + """OOF class.""" + + def get_versions(self) -> dict: + """ + Get OOF HAS API supported versions. + + Returns: + the list of supported versions + + """ + response = self.send_message_json('GET', 'Get OOF supported version', settings.OOF_URL) + return response diff --git a/smo-install/test/pythonsdk/src/oransdk/policy/templates/commission_k8s.json.j2 b/smo-install/test/pythonsdk/src/oransdk/policy/templates/commission_k8s.json.j2 index 145ec784..80e78b48 100644 --- a/smo-install/test/pythonsdk/src/oransdk/policy/templates/commission_k8s.json.j2 +++ b/smo-install/test/pythonsdk/src/oransdk/policy/templates/commission_k8s.json.j2 @@ -27,12 +27,11 @@ "name": "K8sParticipant0" }, "provider": "ONAP", + "uninitializedToPassiveTimeout": 300, "chart": { "repository": { "address": "{{chartmuseumIp}}", - "repoName": "chartmuseum", - "port": {{chartmuseumPort}}, - "protocol": "http" + "repoName": "chartmuseum" }, "namespace": "nonrtric", "chartId": { @@ -140,7 +139,7 @@ "metadata": { "common": true }, - "default": 60, + "default": 300, "constraints": [ { "greater_or_equal": 0 @@ -153,7 +152,7 @@ "metadata": { "common": true }, - "default": 60, + "default": 300, "constraints": [ { "greater_or_equal": 0 diff --git a/smo-install/test/pythonsdk/src/oransdk/policy/templates/create_instance_k8s.json.j2 b/smo-install/test/pythonsdk/src/oransdk/policy/templates/create_instance_k8s.json.j2 index 33cb42c7..e1d213f8 100644 --- a/smo-install/test/pythonsdk/src/oransdk/policy/templates/create_instance_k8s.json.j2 +++ b/smo-install/test/pythonsdk/src/oransdk/policy/templates/create_instance_k8s.json.j2 @@ -74,7 +74,8 @@ "name": "K8sParticipant0" }, "provider": "ONAP", - "chart": "{\"chartId\":{\"name\":\"{{chartName}}\",\"version\":\"{{chartVersion}}\"},\"namespace\":\"nonrtric\",\"releaseName\":\"{{releaseName}}\",\"repository\":{\"repoName\":\"chartmuseum\",\"address\":\"{{chartmuseumIp}}\",\"protocol\":\"http\",\"port\":{{chartmuseumPort}}}}" + "uninitializedToPassiveTimeout": 300, + "chart": "{\"chartId\":{\"name\":\"{{chartName}}\",\"version\":\"{{chartVersion}}\"},\"namespace\":\"nonrtric\",\"releaseName\":\"{{releaseName}}\",\"repository\":{\"repoName\":\"chartmuseum\",\"address\":\"{{chartmuseumIp}}\"}}}" }, "metadata": {}, "description": "Automation composition element for the K8S microservice for PMSH", @@ -301,7 +302,7 @@ "key_schema": null, "type": "integer", "name": "passiveToUninitializedTimeout", - "default_value": 60 + "default_value": 300 }, "uninitializedToPassiveTimeout": { "required": false, @@ -325,7 +326,7 @@ "key_schema": null, "type": "integer", "name": "uninitializedToPassiveTimeout", - "default_value": 60 + "default_value": 300 }, "participant_id": { "required": false, diff --git a/smo-install/test/pythonsdk/src/oransdk/sdc/__init__.py b/smo-install/test/pythonsdk/src/oransdk/sdc/__init__.py new file mode 100644 index 00000000..7b35d18a --- /dev/null +++ b/smo-install/test/pythonsdk/src/oransdk/sdc/__init__.py @@ -0,0 +1,23 @@ +### +# ============LICENSE_START======================================================= +# ORAN SMO PACKAGE - PYTHONSDK TESTS +# ================================================================================ +# Copyright (C) 2022 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END============================================ +# =================================================================== +# +### +"""ONAP SDC package.""" diff --git a/smo-install/test/pythonsdk/src/oransdk/sdc/category_management.py b/smo-install/test/pythonsdk/src/oransdk/sdc/category_management.py new file mode 100644 index 00000000..aee9f3c5 --- /dev/null +++ b/smo-install/test/pythonsdk/src/oransdk/sdc/category_management.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +### +# ============LICENSE_START======================================================= +# ORAN SMO PACKAGE - PYTHONSDK TESTS +# ================================================================================ +# Copyright (C) 2022 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END============================================ +# =================================================================== +# +### +"""Onap SDC Category Management module.""" +import json +from onapsdk.sdc.category_management import ServiceCategory + +class OranServiceCategory(ServiceCategory): + """Onap SDC Category Management module .""" + + @classmethod + def create(cls, name: str) -> "BaseCategory": + """Create category instance. + + Checks if category with given name exists and if it already + exists just returns category with given name. + + Returns: + BaseCategory: Created category instance + + """ + category_obj: "BaseCategory" = cls(name) + if category_obj.exists(): + return category_obj + cls.send_message_json("POST", + f"Create {name} {cls.category_name()}", + cls._base_create_url(), + data=json.dumps({"name": name, "models": ["SDC AID"], "metadataKeys": []}), + headers=cls.headers()) + category_obj.exists() + return category_obj diff --git a/smo-install/test/pythonsdk/src/oransdk/sdc/sdc.py b/smo-install/test/pythonsdk/src/oransdk/sdc/sdc.py new file mode 100644 index 00000000..a2ae1f5d --- /dev/null +++ b/smo-install/test/pythonsdk/src/oransdk/sdc/sdc.py @@ -0,0 +1,306 @@ +#!/usr/bin/env python3 +### +# ============LICENSE_START=================================================== +# ORAN SMO PACKAGE - PYTHONSDK TESTS +# ================================================================================ +# Copyright (C) 2021 Samsung Electronics +# Copyright (C) 2022 AT&T Intellectual Property. All rights +# reserved. +# ============================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END===================================================== +# +### +"""Onap Sdc module.""" +from time import sleep +import onapsdk.constants as const +from onapsdk.configuration import settings +from onapsdk.exceptions import APIError, ResourceNotFound +from onapsdk.onap_service import OnapService as Onap +from onapsdk.sdc.properties import Input, NestedInput, ParameterError + +from onapsdk.sdc.vf import Vf +from onapsdk.sdc.vsp import Vsp +from onapsdk.sdc.vfc import Vfc +from onapsdk.sdc.vendor import Vendor +from oransdk.sdc.category_management import OranServiceCategory +from oransdk.sdc.service import OranService + +class SdcTemplate(Onap): + """Onap Sdc Template class.""" + + def healthcheck(self) -> dict: + """Healchcheck SDC components. + + Returns: + status of SDC components + """ + status = self.send_message_json("GET", + "SDC Healchcheck", + f"{settings.SDC_FE_URL}/sdc1/feProxy/rest/healthCheck") + + return status + + def create_service_category(self, category_names) -> None: + """Create service category by names. + + Args: + category_names : The list of category names + """ + for cn in category_names: + self._logger.info('creating service category [%s]', cn) + OranServiceCategory.create(name=cn) + + + def create_vendor(self, vendor_name) -> dict: + """Create Vendor by names. + + Args: + vendor_name : The vendor names + Returns: + the vendor + """ + vendor = Vendor(vendor_name) + vendor.create() + try: + vendor.onboard() + except APIError as e: + self._logger.error("Exception during vendor onboarding: %s", e) + raise e + return vendor + + def create_vsp(self, name, vendor, onboard=False) -> dict: + """Create vsp. + + Args: + name : The vsp name + vendor : The vendor name + onboard : The onboard flag + Returns: + the vsp + """ + self._logger.info("creating vsp: [%s:%s]", name, vendor) + retry = 0 + done = False + + vsp = Vsp(name=name, vendor=vendor) + if onboard: + while not done: + try: + vsp.create() + vsp.onboard() + except ResourceNotFound as e: + self._logger.error("Failed to onboard %s : %s", name, e) + retry = retry + 1 + if retry >= 5: + raise e + except APIError as e: + self._logger.error("Exception during vsp onboarding: %s", e) + raise e + else: + done = True + return vsp + + + def create_vf(self, name, category, subcategory, vendor, onboard=False) -> dict: + """Create vf. + + Args: + name : The vf name + category : The category name + subcategory : The subcategory name + vendor : The vendor name + onboard : The onboard flag + Returns: + the vf + """ + self._logger.error("create vf: [%s:%s]", name, category) + + vfc = Vfc('AllottedResource') # seemd incorrect + vf = Vf(name=name, category=category, subcategory=subcategory, vendor=vendor) + self._logger.error("create vf 2: ") + vf.create() + if vf.status == const.DRAFT: + vf.add_resource(vfc) + self._logger.error("create vf 3:") + if onboard: + self.onboard_vf(vf) + return vf + + + def onboard_vf(self, vf) -> None: + """Onboard the vf. + + Args: + vf : The vf to onboard + """ + retry = 0 + done = False + to = 2 + + while not done: + try: + vf.onboard() + except ResourceNotFound as e: + retry += 1 + if retry > 5: + raise e + sleep(to) + to = 2 * to + 1 + else: + done = True + self._logger.info("onboarded vf: [%s]", vf.name) + + + def create_service(self, name, category, vnfs=None, properties=None, inputs=None, role=None, service_type=None) -> dict: + """Create service. + + Args: + name : The service name + category : The category name + vnfs : The list of vnfs + properties : the list of properties + role : the role value + service_type : the service type + Returns: + the created service + """ + self._logger.info("create service: [%s:%s]", name, category) + retry = 0 + done = False + + if vnfs is None: + vnfs = [] + if properties is None: + properties = [] + + srvc = OranService(name=name, category=category, properties=properties, inputs=inputs, role=role, service_type=service_type) + srvc.create() + + while not done: + try: + if srvc.status == const.DRAFT: + for vnf in vnfs: + srvc.add_resource(vnf) + + if srvc.status != const.DISTRIBUTED: + srvc.onboard() + except ResourceNotFound as e: + retry += 1 + if retry > 5: + raise e + else: + done = True + + return srvc + + def create_service_1(self, name, category, vnfs=None, properties=None, inputs=None, complex_input=None, role=None, service_type=None) -> dict: + """Create slicing profile service. + + Args: + name : The service name + category : The category name + vnfs : The list of vnfs + properties : the list of properties + inputs : the list of inputs + complex_input : the predefined property type, that should be declared as input + role : the role value + service_type : the service type + Returns: + the created service + """ + self._logger.info("create service: [%s:%s]", name, category) + retry = 0 + done = False + + if vnfs is None: + vnfs = [] + if properties is None: + properties = [] + + srvc = OranService(name=name, category=category, inputs=inputs, complex_input=complex_input, properties=properties, role=role, service_type=service_type) + srvc.create() + + while not done: + try: + if srvc.status == const.DRAFT: + for vnf in vnfs: + srvc.add_resource(vnf) + for c in srvc.components: + self.set_property_input_slice_ar(vnf, srvc, c) + + if srvc.status != const.DISTRIBUTED: + srvc.onboard() + except ResourceNotFound as e: + retry += 1 + if retry > 5: + raise e + else: + done = True + + return srvc + + def set_property_input_slice_ar(self, vnf, service, component) -> None: + """Get component property. + + Args: + vnf: The vnf of the input + service : The service + component : The component + """ + self._logger.info("set property input slice ar: %s", component.name) + if component.name.startswith("Slice_AR"): + self._logger.info("get component Slice_AR 0") + cp = self.get_component_property(component, 'allottedresource0_providing_service_invariant_uuid') + if cp: + self._logger.info('setting value on property [%s]', cp) + service.declare_input(NestedInput(sdc_resource=vnf, input_obj=Input(unique_id="123", + input_type=cp.property_type, + name=cp.name, + sdc_resource=vnf))) + else: + raise ParameterError('no property providing_service_invariant_uuid found') + + cp = self.get_component_property(component, 'allottedresource0_providing_service_uuid') + if cp: + service.declare_input(NestedInput(sdc_resource=vnf, input_obj=Input(unique_id="123", + input_type=cp.property_type, + name=cp.name, + sdc_resource=vnf))) + else: + raise ParameterError('no property providing_service_uuid found') + + def get_component_property(self, component, name) -> dict: + """Get component property. + + Args: + component : The component + name : The property name + Returns: + the property + """ + prop = None + try: + prop = list(filter(lambda x: x.name == name, component.properties)) + if prop: + prop = prop[0] + else: + raise ParameterError('no property found') + except ParameterError as e: + self._logger.error("component [%s] has no property [%s]", component.name, name) + raise e + + self._logger.error("retrived property [%s] for component [%s]", prop.name if prop else 'null', component.name) + return prop diff --git a/smo-install/test/pythonsdk/src/oransdk/sdc/service.py b/smo-install/test/pythonsdk/src/oransdk/sdc/service.py new file mode 100644 index 00000000..a946e041 --- /dev/null +++ b/smo-install/test/pythonsdk/src/oransdk/sdc/service.py @@ -0,0 +1,207 @@ +#!/usr/bin/env python3 +### +# ============LICENSE_START======================================================= +# ORAN SMO PACKAGE - PYTHONSDK TESTS +# ================================================================================ +# Copyright (C) 2022 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END============================================ +# =================================================================== +# +### +"""SDC Service module.""" + +from typing import Dict, Iterator, List, Optional, Union +from onapsdk.exceptions import ResourceNotFound +from onapsdk.sdc.component import Component +from onapsdk.sdc.properties import Property, NestedInput +from onapsdk.sdc.service import Service, ServiceInstantiationType +from onapsdk.sdc.sdc_resource import SdcResource +from onapsdk.utils.headers_creator import headers_sdc_creator +from oransdk.utils.jinja import jinja_env + + +class OranService(Service): # pylint: disable=too-many-instance-attributes, too-many-public-methods + """ONAP Service Object used for SDC operations.""" + + def __init__(self, name: str = None, version: str = None, sdc_values: Dict[str, str] = None, # pylint: disable=too-many-arguments + resources: List[SdcResource] = None, properties: List[Property] = None, complex_input: Property = None, + inputs: List[Union[Property, NestedInput]] = None, + instantiation_type: Optional[ServiceInstantiationType] = \ + None, + category: str = None, role: str = "", function: str = "", service_type: str = ""): + """ + Initialize service object. + + Args: + name (str, optional): the name of the service + version (str, optional): the version of the service + sdc_values (Dict[str, str], optional): dictionary of values + returned by SDC + resources (List[SdcResource], optional): list of SDC resources + properties (List[Property], optional): list of properties to add to service. + None by default. + inputs (List[Union[Property, NestedInput]], optional): list of inputs + to declare for service. It can be both Property or NestedInput object. + None by default. + instantiation_type (ServiceInstantiationType, optional): service instantiation + type. ServiceInstantiationType.A_LA_CARTE by default + category (str, optional): service category name + role (str, optional): service role + function (str, optional): service function. Empty by default + service_type (str, optional): service type. Empty by default + complex_input (List[Property], optional): internal defined property type, that needs to be declared as input. + None by default. + + """ + super().__init__(name=name, sdc_values=sdc_values, version=version, properties=properties, + inputs=inputs, category=category, resources=resources, + instantiation_type=instantiation_type, role=role, function=function, service_type=service_type) + self.complex_input = complex_input + + @property + def components(self) -> Iterator[Component]: + """Resource components. + + Iterate resource components. + + Yields: + Component: Resource component object + + """ + for component_instance in self.send_message_json(\ + "GET", + f"Get {self.name} resource inputs", + f"{self.resource_inputs_url}/filteredDataByParams?include=componentInstances" + ).get("componentInstances", []): + sdc_resource: "SdcResource" = None + + if component_instance['originType'] == "ServiceProxy": + sdc_resource = SdcResource.import_from_sdc(self.send_message_json(\ + "GET", + f"Get {self.name} component's SDC resource metadata", + (f"{self.base_front_url}/sdc1/feProxy/rest/v1/catalog/services/" + f"{component_instance['actualComponentUid']}/" + "filteredDataByParams?include=metadata"))["metadata"]) + else: + sdc_resource = SdcResource.import_from_sdc(self.send_message_json(\ + "GET", + f"Get {self.name} component's SDC resource metadata", + (f"{self.base_front_url}/sdc1/feProxy/rest/v1/catalog/resources/" + f"{component_instance['actualComponentUid']}/" + "filteredDataByParams?include=metadata"))["metadata"]) + + yield Component.create_from_api_response(api_response=component_instance, + sdc_resource=sdc_resource, + parent_sdc_resource=self) + + def declare_complex_input(self, property_obj: Property) -> None: + """Declare complex input for resource's property. + + For each property input can be declared. + + Args: + property_obj (Property): Property to declare input + + """ + self._logger.debug("Declare input for Complex property") + if property_obj.property_type == "org.openecomp.datatypes.SliceProfile": + self._logger.debug("Declare input for SliceProfile") + self.send_message_json("POST", + f"Declare new input for {property_obj.name} property", + f"{self.resource_inputs_url}/create/inputs", + data=jinja_env().get_template(\ + "sdc_add_slice_profile_input.json.j2").\ + render(\ + sdc_resource=self, + property=property_obj)) + elif property_obj.property_type == "org.openecomp.datatypes.ServiceProfile": + self._logger.debug("Declare input for ServiceProfile") + self.send_message_json("POST", + f"Declare new input for {property_obj.name} property", + f"{self.resource_inputs_url}/create/inputs", + data=jinja_env().get_template(\ + "sdc_add_service_profile_input.json.j2").\ + render(\ + sdc_resource=self, + property=property_obj)) + elif property_obj.property_type == "org.openecomp.datatypes.CSProperties": + self._logger.debug("Declare input for CSProperties") + self.send_message_json("POST", + f"Declare new input for {property_obj.name} property", + f"{self.resource_inputs_url}/create/inputs", + data=jinja_env().get_template(\ + "sdc_add_cs_properties_input.json.j2").\ + render(\ + sdc_resource=self, + property=property_obj)) + else: + self._logger.error("Data type %s not supported", property_obj.property_type) + + def declare_resource_input(self, + input_to_declare: Property) -> None: + """Declare input for given property, nested input or component property object. + + Call SDC FE API to declare input for given property. + + Args: + input_declaration (Union[Property, NestedInput]): Property or ComponentProperty + to declare input or NestedInput object + + Raises: + ParameterError: if the given property is not SDC resource property + + """ + self.send_message("POST", + f"Declare new input for {input_to_declare.name} property", + f"{self.resource_inputs_url}/create/inputs", + data=jinja_env().get_template(\ + "component_declare_input.json.j2").\ + render(\ + component=input_to_declare.component, + property=input_to_declare)) + + def declare_resources_and_properties(self) -> None: + """Delcare resources and properties. + + It declares also inputs. + + """ + for resource in self.resources: + self.add_resource(resource) + for property_to_add in self._properties_to_add: + self.add_property(property_to_add) + for input_to_add in self._inputs_to_add: + self.declare_input(input_to_add) + if self.complex_input is not None: + self.declare_complex_input(self.complex_input) + + + def get_distribution_status(self) -> dict: + """Get service distribution status.""" + url = "{}/services/distribution/{}".format(self._base_create_url(), + self.distribution_id) + headers = headers_sdc_creator(SdcResource.headers) + try: + result = self.send_message_json("GET", + "Check distribution for {}".format( + self.name), + url, + headers=headers) + except ResourceNotFound: + msg = f"No distributions found for {self.name} of {self.__class__.__name__}." + self._logger.debug(msg) + else: + return result diff --git a/smo-install/test/pythonsdk/src/oransdk/sdc/templates/component_declare_input.json.j2 b/smo-install/test/pythonsdk/src/oransdk/sdc/templates/component_declare_input.json.j2 new file mode 100644 index 00000000..fd0ee033 --- /dev/null +++ b/smo-install/test/pythonsdk/src/oransdk/sdc/templates/component_declare_input.json.j2 @@ -0,0 +1,37 @@ +{ + "componentInstanceInputsMap": {}, + "componentInstanceProperties": { + "{{ component.unique_id }}": [ + { + "constraints": null, + "defaultValue": null, + "description": "", + "name": "{{ property.name }}", + "origName": "{{ property.name }}", + "parentUniqueId": null, + "password": false, + "required": true, + "schema": { + "property": {} + }, + "schemaType": null, + "type": "{{ property.property_type }}", + "uniqueId": "{{ property.unique_id }}", + {% if property.value is not none %} + "value":"{{ property.value }}", + {% else %} + "value":null, + {% endif %} + "definition": false, + "getInputValues": null, + "parentPropertyType": null, + "subPropertyInputPath": null, + "getPolicyValues": null, + "inputPath": null, + "metadata": null + } + ] + }, + "groupProperties": {}, + "policyProperties": {} +} \ No newline at end of file diff --git a/smo-install/test/pythonsdk/src/oransdk/sdc/templates/sdc_add_cs_properties_input.json.j2 b/smo-install/test/pythonsdk/src/oransdk/sdc/templates/sdc_add_cs_properties_input.json.j2 new file mode 100644 index 00000000..f8c6dfb2 --- /dev/null +++ b/smo-install/test/pythonsdk/src/oransdk/sdc/templates/sdc_add_cs_properties_input.json.j2 @@ -0,0 +1,435 @@ +{ + "serviceProperties": { + "{{ sdc_resource.unique_identifier }}": [ + { + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#coverageAreaList", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": true, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#coverageAreaList", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "coverageAreaList", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.coverageAreaList", + "password": false, + "definition": false, + "type": "string", + "name": "coverageAreaList" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#expDataRateDL", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#expDataRateDL", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "expDataRateDL", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.expDataRateDL", + "password": false, + "definition": false, + "type": "integer", + "name": "expDataRateDL" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#expDataRateUL", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#expDataRateUL", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "expDataRateUL", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.expDataRateUL", + "password": false, + "definition": false, + "type": "integer", + "name": "expDataRateUL" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#latency", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": true, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#latency", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "latency", + "defaultValue": "30", + "derivedDataType": 0, + "valueObj": 30, + "value": "30", + "uniqueId": "{{ property.property_type }}.datatype.latency", + "password": false, + "definition": false, + "type": "integer", + "name": "latency" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#maxNumberofUEs", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": true, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#maxNumberofUEs", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "maxNumberofUEs", + "defaultValue": "1000", + "derivedDataType": 0, + "valueObj": 1000, + "value": "1000", + "uniqueId": "{{ property.property_type }}.datatype.maxNumberofUEs", + "password": false, + "definition": false, + "type": "integer", + "name": "maxNumberofUEs" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#resourceSharingLevel", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": true, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#resourceSharingLevel", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "constraints": [ + { + "validValues": [ + "Shared","Non-shared"] + }], + "description": "resourceSharingLevel", + "defaultValue": "Shared", + "derivedDataType": 0, + "valueObj": "Shared", + "value": "Shared", + "uniqueId": "{{ property.property_type }}.datatype.resourceSharingLevel", + "password": false, + "definition": false, + "type": "string", + "name": "resourceSharingLevel" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#uEMobilityLevel", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#uEMobilityLevel", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "constraints": [ + { + "validValues": [ + "stationary","nomadic","restricted mobility","fully mobility"] + }], + "description": "uEMobilityLevel", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.uEMobilityLevel", + "password": false, + "definition": false, + "type": "string", + "name": "uEMobilityLevel" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#useInterval", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": true, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#useInterval", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "useInterval", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.useInterval", + "password": false, + "definition": false, + "type": "string", + "name": "useInterval" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + }] + } +} \ No newline at end of file diff --git a/smo-install/test/pythonsdk/src/oransdk/sdc/templates/sdc_add_service_profile_input.json.j2 b/smo-install/test/pythonsdk/src/oransdk/sdc/templates/sdc_add_service_profile_input.json.j2 new file mode 100644 index 00000000..621cd21f --- /dev/null +++ b/smo-install/test/pythonsdk/src/oransdk/sdc/templates/sdc_add_service_profile_input.json.j2 @@ -0,0 +1,493 @@ +{ + "serviceProperties": { + "{{ sdc_resource.unique_identifier }}": [ + { + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#coverageAreaTAList", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#coverageAreaTAList", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "coverageAreaTAList", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.coverageAreaTAList", + "password": false, + "definition": false, + "type": "string", + "name": "coverageAreaTAList" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#dLThptPerUE", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#dLThptPerUE", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "dLThptPerUE", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.dLThptPerUE", + "password": false, + "definition": false, + "type": "integer", + "name": "dLThptPerUE" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#latency", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": true, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#latency", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "latency", + "defaultValue": "30", + "derivedDataType": 0, + "valueObj": 30, + "value": "30", + "uniqueId": "{{ property.property_type }}.datatype.latency", + "password": false, + "definition": false, + "type": "integer", + "name": "latency" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#maxNumberofUEs", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": true, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#maxNumberofUEs", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "maxNumberofUEs", + "defaultValue": "1000", + "derivedDataType": 0, + "valueObj": 1000, + "value": "1000", + "uniqueId": "{{ property.property_type }}.datatype.maxNumberofUEs", + "password": false, + "definition": false, + "type": "integer", + "name": "maxNumberofUEs" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#resourceSharingLevel", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": true, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#resourceSharingLevel", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "constraints": [ + { + "validValues": [ + "Shared","Non-shared"] + }], + "description": "resourceSharingLevel", + "defaultValue": "Shared", + "derivedDataType": 0, + "valueObj": "Shared", + "value": "Shared", + "uniqueId": "{{ property.property_type }}.datatype.resourceSharingLevel", + "password": false, + "definition": false, + "type": "string", + "name": "resourceSharingLevel" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#sNSSAI", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": true, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#sNSSAI", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "sNSSAI", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.sNSSAI", + "password": false, + "definition": false, + "type": "string", + "name": "sNSSAI" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#sST", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": true, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#sST", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "constraints": [ + { + "validValues": [ + "eMBB","uRLLC","mIot"] + }], + "description": "sST", + "defaultValue": "eMBB", + "derivedDataType": 0, + "valueObj": "eMBB", + "value": "eMBB", + "uniqueId": "{{ property.property_type }}.datatype.sST", + "password": false, + "definition": false, + "type": "string", + "name": "sST" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#uEMobilityLevel", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#uEMobilityLevel", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "constraints": [ + { + "validValues": [ + "stationary","nomadic","restricted mobility","fully mobility"] + }], + "description": "uEMobilityLevel", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.uEMobilityLevel", + "password": false, + "definition": false, + "type": "string", + "name": "uEMobilityLevel" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#uLThptPerUE", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#uLThptPerUE", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "uLThptPerUE", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.uLThptPerUE", + "password": false, + "definition": false, + "type": "integer", + "name": "uLThptPerUE" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + }] + } +} \ No newline at end of file diff --git a/smo-install/test/pythonsdk/src/oransdk/sdc/templates/sdc_add_slice_profile_input.json.j2 b/smo-install/test/pythonsdk/src/oransdk/sdc/templates/sdc_add_slice_profile_input.json.j2 new file mode 100644 index 00000000..01035834 --- /dev/null +++ b/smo-install/test/pythonsdk/src/oransdk/sdc/templates/sdc_add_slice_profile_input.json.j2 @@ -0,0 +1,1117 @@ +{ + "serviceProperties": { + "{{ sdc_resource.unique_identifier }}": [ + { + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#activityFactor", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#activityFactor", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "activityFactor", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.activityFactor", + "password": false, + "definition": false, + "type": "integer", + "name": "activityFactor" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#areaTrafficCapDL", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#areaTrafficCapDL", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "areaTrafficCapDL", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.areaTrafficCapDL", + "password": false, + "definition": false, + "type": "integer", + "name": "areaTrafficCapDL" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#areaTrafficCapUL", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#areaTrafficCapUL", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "areaTrafficCapUL", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.areaTrafficCapUL", + "password": false, + "definition": false, + "type": "integer", + "name": "areaTrafficCapUL" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#cSAvailabilityTarget", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#cSAvailabilityTarget", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "cSAvailabilityTarget", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.cSAvailabilityTarget", + "password": false, + "definition": false, + "type": "float", + "name": "cSAvailabilityTarget" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#cSReliabilityMeanTime", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#cSReliabilityMeanTime", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "cSReliabilityMeanTime", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.cSReliabilityMeanTime", + "password": false, + "definition": false, + "type": "string", + "name": "cSReliabilityMeanTime" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#coverageAreaTAList", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#coverageAreaTAList", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "coverageAreaTAList", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.coverageAreaTAList", + "password": false, + "definition": false, + "type": "string", + "name": "coverageAreaTAList" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#expDataRate", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#expDataRate", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "expDataRate", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.expDataRate", + "password": false, + "definition": false, + "type": "integer", + "name": "expDataRate" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#expDataRateDL", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#expDataRateDL", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "expDataRateDL", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.expDataRateDL", + "password": false, + "definition": false, + "type": "integer", + "name": "expDataRateDL" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#expDataRateUL", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#expDataRateUL", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "expDataRateUL", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.expDataRateUL", + "password": false, + "definition": false, + "type": "integer", + "name": "expDataRateUL" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#latency", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": true, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#latency", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "latency", + "defaultValue": "30", + "derivedDataType": 0, + "valueObj": 30, + "value": "30", + "uniqueId": "{{ property.property_type }}.datatype.latency", + "password": false, + "definition": false, + "type": "integer", + "name": "latency" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#maxNumberofPDUSession", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#maxNumberofPDUSession", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "maxNumberofPDUSession", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.maxNumberofPDUSession", + "password": false, + "definition": false, + "type": "integer", + "name": "maxNumberofPDUSession" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#maxNumberofUEs", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": true, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#maxNumberofUEs", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "maxNumberofUEs", + "defaultValue": "1000", + "derivedDataType": 0, + "valueObj": 1000, + "value": "1000", + "uniqueId": "{{ property.property_type }}.datatype.maxNumberofUEs", + "password": false, + "definition": false, + "type": "integer", + "name": "maxNumberofUEs" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#msgSizeByte", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#msgSizeByte", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "msgSizeByte", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.msgSizeByte", + "password": false, + "definition": false, + "type": "string", + "name": "msgSizeByte" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#overallUserDensity", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#overallUserDensity", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "overallUserDensity", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.overallUserDensity", + "password": false, + "definition": false, + "type": "integer", + "name": "overallUserDensity" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#pLMNIdList", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": true, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#pLMNIdList", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "pLMNIdList", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.pLMNIdList", + "password": false, + "definition": false, + "type": "string", + "name": "pLMNIdList" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#resourceSharingLevel", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": true, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#resourceSharingLevel", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "constraints": [ + { + "validValues": [ + "Shared","Non-shared"] + }], + "description": "resourceSharingLevel", + "defaultValue": "Shared", + "derivedDataType": 0, + "valueObj": "Shared", + "value": "Shared", + "uniqueId": "{{ property.property_type }}.datatype.resourceSharingLevel", + "password": false, + "definition": false, + "type": "string", + "name": "resourceSharingLevel" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#sNSSAI", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": true, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#sNSSAI", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "sNSSAI", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.sNSSAI", + "password": false, + "definition": false, + "type": "string", + "name": "sNSSAI" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#sST", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": true, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#sST", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "constraints": [ + { + "validValues": [ + "eMBB","uRLLC","mIot"] + }], + "description": "sST", + "defaultValue": "eMBB", + "derivedDataType": 0, + "valueObj": "eMBB", + "value": "eMBB", + "uniqueId": "{{ property.property_type }}.datatype.sST", + "password": false, + "definition": false, + "type": "string", + "name": "sST" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#survivalTime", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#survivalTime", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "survivalTime", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.survivalTime", + "password": false, + "definition": false, + "type": "string", + "name": "survivalTime" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#transferIntervalTarget", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#transferIntervalTarget", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "description": "transferIntervalTarget", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.transferIntervalTarget", + "password": false, + "definition": false, + "type": "string", + "name": "transferIntervalTarget" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + },{ + "required": false, + "schemaType": "", + "propertiesName": "{{ property.name }}#uEMobilityLevel", + "inputPath": null, + "parentUniqueId": "{{ sdc_resource.unique_identifier }}", + "getPolicyValues": null, + "parentPropertyType": null, + "schema": { + "property": { + "required": false, + "description": null, + "password": false, + "definition": false, + "type": "" + } + }, + "metadata": null, + "constraints": null, + "input": { + "canBeDeclared": true, + "required": false, + "parentName": "{{ property.name }}", + "propertiesName": "{{ property.name }}#uEMobilityLevel", + "toscaPresentation": {}, + "isSelected": true, + "schema": { + "property": {} + }, + "valueObjIsValid": true, + "constraints": [ + { + "validValues": [ + "stationary","nomadic","restricted mobility","fully mobility"] + }], + "description": "uEMobilityLevel", + "derivedDataType": 0, + "valueObj": null, + "value": null, + "uniqueId": "{{ property.property_type }}.datatype.uEMobilityLevel", + "password": false, + "definition": false, + "type": "string", + "name": "uEMobilityLevel" + }, + "description": null, + "defaultValue": null, + "getInputValues": null, + "toscaGetFunctionType": null, + "value": null, + "uniqueId": "{{ sdc_resource.unique_identifier }}.{{ property.name }}", + "password": false, + "definition": false, + "origName": "{{ property.name }}", + "type": "{{ property.property_type }}", + "name": "{{ property.name }}", + "subPropertyInputPath": null + }] + } +} \ No newline at end of file diff --git a/smo-install/test/pythonsdk/src/oransdk/so/__init__.py b/smo-install/test/pythonsdk/src/oransdk/so/__init__.py new file mode 100644 index 00000000..9e553f68 --- /dev/null +++ b/smo-install/test/pythonsdk/src/oransdk/so/__init__.py @@ -0,0 +1,23 @@ +### +# ============LICENSE_START======================================================= +# ORAN SMO PACKAGE - PYTHONSDK TESTS +# ================================================================================ +# Copyright (C) 2022 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END============================================ +# =================================================================== +# +### +"""ONAP SO package.""" diff --git a/smo-install/test/pythonsdk/src/oransdk/so/so.py b/smo-install/test/pythonsdk/src/oransdk/so/so.py new file mode 100644 index 00000000..e2e90181 --- /dev/null +++ b/smo-install/test/pythonsdk/src/oransdk/so/so.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python3 +### +# ============LICENSE_START======================================================= +# ORAN SMO PACKAGE - PYTHONSDK TESTS +# ================================================================================ +# Copyright (C) 2022 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END============================================ +# =================================================================== +# +### +"""Onap SO module.""" +from onapsdk.so.so_element import SoElement + +class OranSo(SoElement): + """So class.""" + + def healthcheck(self) -> dict: + """ + Healthcheck SO main component. + + Returns: + the status of SO components + """ + status = self.send_message_json('GET', + 'Get status of SO components', + f"{self.base_url}/manage/health", + headers=self.headers) + return status diff --git a/smo-install/test/pythonsdk/src/oransdk/utils/healthcheck.py b/smo-install/test/pythonsdk/src/oransdk/utils/healthcheck.py new file mode 100644 index 00000000..010d02ad --- /dev/null +++ b/smo-install/test/pythonsdk/src/oransdk/utils/healthcheck.py @@ -0,0 +1,186 @@ +#!/usr/bin/env python3 +### +# ============LICENSE_START======================================================= +# ORAN SMO PACKAGE - PYTHONSDK TESTS +# ================================================================================ +# Copyright (C) 2022 AT&T Intellectual Property. All rights +# reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END============================================ +# =================================================================== +# +### +"""Module called by pytest.""" +import logging +import logging.config + +from subprocess import check_output, run +from requests import RequestException +from onapsdk.configuration import settings +from onapsdk.exceptions import ConnectionFailed, APIError +from urllib3.exceptions import NewConnectionError +from oransdk.aai.aai import Aai +from oransdk.msb.msb_microservice import OranMsb +from oransdk.oof.oof import Oof +from oransdk.policy.clamp import ClampToscaTemplate +from oransdk.policy.policy import OranPolicy +from oransdk.sdc.sdc import SdcTemplate +from oransdk.sdnc.sdnc import OranSdnc +from oransdk.so.so import OranSo + +logging.config.dictConfig(settings.LOG_CONFIG) +logger = logging.getLogger("Health check") + +clamp = ClampToscaTemplate(settings.CLAMP_BASICAUTH) +sdnc = OranSdnc() +policy = OranPolicy() +aai = Aai() +sdc = SdcTemplate() +so = OranSo() +msb = OranMsb() +oof = Oof() + +class HealthCheck(): + """Healthcheck class for ONAP component.""" + + @classmethod + def is_onap_up(cls, up_no) -> bool: + """Verify if ONAP platform is up or not.""" + cmd = "kubectl get pods --field-selector 'status.phase=Failed' -n onap -o name | xargs kubectl delete -n onap" + run(cmd, shell=True, check=False) + cmd = "kubectl get pods --field-selector status.phase!=Running -n onap | wc -l" + result = check_output(cmd, shell=True).decode('utf-8') + logger.info("Number of Onap pods not in Running state (expected <= %s): %s", up_no, result) + if int(result) <= up_no: + logger.info("ONAP is Up") + return True + logger.info("ONAP is Down") + return False + + @classmethod + def policy_component_ready(cls): + """Check if Policy components are ready.""" + logger.info("Verify Policy components are ready") + try: + policy_ready = {"api_ready": False, "pap_ready": False, "apex_ready": False} + except (RequestException, NewConnectionError, ConnectionFailed, APIError) as e: + logger.error(e) + return False + policy_status = policy.get_components_status(settings.POLICY_BASICAUTH) + if (policy_status["api"]["healthy"] and not policy_ready["api_ready"]): + logger.info("Policy Api is ready") + policy_ready["api_ready"] = True + if (policy_status["pap"]["healthy"] and not policy_ready["pap_ready"]): + logger.info("Policy Pap is ready") + policy_ready["pap_ready"] = True + if (len(policy_status["pdps"]["apex"]) > 0 and policy_status["pdps"]["apex"][0]["healthy"] == "HEALTHY" and not policy_ready["apex_ready"]): + logger.info("Policy Apex is ready") + policy_ready["apex_ready"] = True + return policy_ready["api_ready"] and policy_ready["pap_ready"] and policy_ready["apex_ready"] + + @classmethod + def sdnc_component_ready(cls): + """Check if SDNC component is ready.""" + logger.info("Verify SDNC component is ready") + + try: + response = OranSdnc.get_events(settings.SDNC_BASICAUTH, "test") + except (RequestException, NewConnectionError, ConnectionFailed, APIError) as e: + logger.error(e) + return False + return response.status_code == 200 + + @classmethod + def clamp_component_ready(cls): + """Check if Clamp component is ready.""" + logger.info("Verify Clamp component is ready") + try: + response = clamp.get_template_instance() + except (RequestException, NewConnectionError, ConnectionFailed, APIError) as e: + logger.error(e) + return False + return response["automationCompositionList"] is not None + + @classmethod + def sdc_component_ready(cls): + """Check if SDC component is ready.""" + logger.info("Verify SDC component is ready") + + try: + response = sdc.healthcheck() + except (RequestException, NewConnectionError, ConnectionFailed, APIError) as e: + logger.error(e) + return False + + so_ready = {"BE": False, "CASSANDRA": False, "ON_BOARDING": False, "JANUSGRAPH": False} + so_list = response["componentsInfo"] + for so_status in so_list: + if (so_status["healthCheckComponent"] == "BE" and so_status["healthCheckStatus"] == "UP"): + so_ready["BE"] = True + if (so_status["healthCheckComponent"] == "CASSANDRA" and so_status["healthCheckStatus"] == "UP"): + so_ready["CASSANDRA"] = True + if (so_status["healthCheckComponent"] == "ON_BOARDING" and so_status["healthCheckStatus"] == "UP"): + so_ready["ON_BOARDING"] = True + if (so_status["healthCheckComponent"] == "JANUSGRAPH" and so_status["healthCheckStatus"] == "UP"): + so_ready["JANUSGRAPH"] = True + + return so_ready["BE"] and so_ready["CASSANDRA"] and so_ready["ON_BOARDING"] and so_ready["JANUSGRAPH"] + + @classmethod + def aai_component_ready(cls): + """Check if AAI component is ready.""" + logger.info("Verify AAI component is ready") + + try: + response = aai.healthcheck() + except (RequestException, NewConnectionError, ConnectionFailed, APIError) as e: + logger.error(e) + return False + return "Successful health check:OK" in str(response) + + @classmethod + def so_component_ready(cls): + """Check if SO component is ready.""" + logger.info("Verify SO component is ready") + + try: + response = so.healthcheck() + except (RequestException, NewConnectionError, ConnectionFailed, APIError) as e: + logger.error(e) + return False + return response["status"] == "UP" + + @classmethod + def msb_component_ready(cls): + """Check if MSB component is ready.""" + logger.info("Verify MSB component is ready") + + try: + response = msb.get_services() + except (RequestException, NewConnectionError, ConnectionFailed, APIError) as e: + logger.error(e) + return False + return response is not None and len(response) > 0 + + @classmethod + def oof_component_ready(cls): + """Check if OOF component is ready.""" + logger.info("Verify OOF component is ready") + + try: + response = oof.get_versions() + except (RequestException, NewConnectionError, ConnectionFailed, APIError) as e: + logger.error(e) + return False + return response["versions"] is not None diff --git a/smo-install/test/pythonsdk/src/oransdk/utils/jinja.py b/smo-install/test/pythonsdk/src/oransdk/utils/jinja.py index f0ab6d6b..64004da7 100644 --- a/smo-install/test/pythonsdk/src/oransdk/utils/jinja.py +++ b/smo-install/test/pythonsdk/src/oransdk/utils/jinja.py @@ -46,7 +46,9 @@ def jinja_env() -> Environment: return Environment(autoescape=select_autoescape(['html', 'htm', 'xml']), loader=ChoiceLoader([ PackageLoader("oransdk.a1sim"), + PackageLoader("oransdk.aai"), PackageLoader("oransdk.dmaap"), PackageLoader("oransdk.enrichmentservice"), - PackageLoader("oransdk.policy") + PackageLoader("oransdk.policy"), + PackageLoader("oransdk.sdc") ])) diff --git a/smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/aai_preparation.py b/smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/aai_preparation.py new file mode 100644 index 00000000..6ba270f0 --- /dev/null +++ b/smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/aai_preparation.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +### +# ============LICENSE_START=================================================== +# ORAN SMO PACKAGE - PYTHONSDK TESTS +# ================================================================================ +# Copyright (C) 2022 AT&T Intellectual Property. All rights +# reserved. +# ============================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END===================================================== +# +### +"""Configure AAI for Network Slicing option2 test.""" +import logging +import logging.config + +from onapsdk.aai.business.customer import Customer +from onapsdk.configuration import settings + +logging.config.dictConfig(settings.LOG_CONFIG) +logger = logging.getLogger("####################### Start AAI Preparation") + +class AaiPreparation(): + """Can be used to prepare AAI for Network Slicing usecase option2.""" + + @classmethod + def prepare_aai(cls): + """Prepare AAI for network slicing use case.""" + logger.info("####################### Start to prepare AAI") + aai = Customer("5GCustomer", "5GCustomer", "INFRA") + aai.create("5GCustomer", "5GCustomer", "INFRA") + aai.subscribe_service("5G") + + @classmethod + def cleanup_aai(cls): + """Clean up AAI settings.""" + logger.info("####################### Start to clean up AAI settings") + aai = Customer.get_by_global_customer_id("5GCustomer") + aai.delete() diff --git a/smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/msb_preparation.py b/smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/msb_preparation.py new file mode 100644 index 00000000..73253b19 --- /dev/null +++ b/smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/msb_preparation.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 +### +# ============LICENSE_START=================================================== +# ORAN SMO PACKAGE - PYTHONSDK TESTS +# ================================================================================ +# Copyright (C) 2022 AT&T Intellectual Property. All rights +# reserved. +# ============================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END===================================================== +# +### +"""Create MSB Templates for Network Slicing option2 test.""" +import logging +import logging.config +import subprocess +from subprocess import check_output +from onapsdk.configuration import settings + +logging.config.dictConfig(settings.LOG_CONFIG) +logger = logging.getLogger("####################### Start MSB Preparation") + +class MsbPreparation(): + """Can be used to prepare MSB for Network Slicing usecase option2.""" + + @classmethod + def prepare_msb(cls): + """Register services to msb.""" + logger.info("####################### Start to register SO instance service") + so_pod = subprocess.run("kubectl get svc -n onap so | grep so | awk '{print $3}' ", shell=True, check=True, stdout=subprocess.PIPE).stdout.decode('utf-8').strip() + content = "{ \"url\": \"/onap/so/infra/e2eServiceInstances/v3\",\"nodes\": [{\"nodeId\": \"_v3_so-serviceInstances_" + so_pod + "_8080\", \ + \"checkUrl\": \"\",\"status\": \"passing\",\"ha_role\": \"\",\"checkType\": \"\",\"ip\": \""+ so_pod +"\",\"port\": \"8080\", \ + \"tls_skip_verify\": true}],\"status\": \"1\",\"publish_port\": \"\",\"lb_policy\": \"ip_hash\",\"serviceName\": \ + \"so-serviceInstances\",\"metadata\": [],\"network_plane_type\": \"\", \"version\": \"v3\",\"labels\": [],\"namespace\": \"\", \ + \"enable_ssl\": false,\"path\": \"\",\"protocol\": \"REST\",\"host\": \"\",\"visualRange\": \"1\",\"is_manual\": true}" + cmd = f"curl -sk --noproxy \"*\" -X POST {settings.MSB_URL}/api/msdiscover/v1/services -H \"accept: application/json\" -H \"Content-Type: application/json\" -d '{content}'" + check_output(cmd, shell=True).decode('utf-8') + + logger.info("####################### Start to register SO orchestration tasks") + content = "{ \"url\": \"/onap/so/infra/orchestrationTasks/v4\",\"nodes\": [{\"nodeId\": \"_v4_so-orchestrationTasks_" + so_pod + "_8080\", \ + \"checkUrl\": \"\",\"status\": \"passing\",\"ha_role\": \"\",\"checkType\": \"\",\"ip\": \""+ so_pod +"\",\"port\": \"8080\", \ + \"tls_skip_verify\": true}],\"status\": \"1\",\"publish_port\": \"\",\"lb_policy\": \"ip_hash\",\"serviceName\": \ + \"so-orchestrationTasks\",\"metadata\": [],\"network_plane_type\": \"\", \"version\": \"v4\",\"labels\": [],\"namespace\": \"\", \ + \"enable_ssl\": false,\"path\": \"\",\"protocol\": \"REST\",\"host\": \"\",\"visualRange\": \"1\",\"is_manual\": true}" + cmd = f"curl -sk --noproxy \"*\" -X POST {settings.MSB_URL}/api/msdiscover/v1/services -H \"accept: application/json\" -H \"Content-Type: application/json\" -d '{content}'" + check_output(cmd, shell=True).decode('utf-8') + + logger.info("####################### Start to register AAI business instance service") + aai_pod = subprocess.run("kubectl get svc -n onap aai | grep aai | awk '{print $3}' ", shell=True, check=True, stdout=subprocess.PIPE).stdout.decode('utf-8').strip() + content = '{"url": "/aai/v13/business", "nodes": [{"nodeId": "_v13_aai-business_' + aai_pod + '_8443", \ + "checkUrl": "","status": "passing","ha_role": "","checkType": "","ip": "' + aai_pod + '", "port": "8443", \ + "tls_skip_verify": true}],"status": "1","publish_port": "","lb_policy": "", "serviceName": "aai-business","metadata": \ + [],"network_plane_type": "","version": "v13","labels": [],"namespace": "","enable_ssl": true,"path": "","protocol": \ + "REST","host": "","visualRange": "1","is_manual": true}' + cmd = f"curl -sk --noproxy \"*\" -X POST {settings.MSB_URL}/api/msdiscover/v1/services -H \"accept: application/json\" -H \"Content-Type: application/json\" -d '{content}'" + check_output(cmd, shell=True).decode('utf-8') + + @classmethod + def cleanup_msb(cls): + """Rollback msb settings.""" + logger.info("####################### Start to remove SO instance service") + cmd = f"curl -sk --noproxy \"*\" -X DELETE {settings.MSB_URL}/api/msdiscover/v1/services -H \"accept: application/json\" -H \"Content-Type: application/json\" " + check_output(cmd, shell=True).decode('utf-8') diff --git a/smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/oof_preparation.py b/smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/oof_preparation.py new file mode 100644 index 00000000..dd284e6c --- /dev/null +++ b/smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/oof_preparation.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python3 +### +# ============LICENSE_START=================================================== +# ORAN SMO PACKAGE - PYTHONSDK TESTS +# ================================================================================ +# Copyright (C) 2022 AT&T Intellectual Property. All rights +# reserved. +# ============================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END===================================================== +# +### +"""Prepare OOF for Network Slicing option2 test.""" +import os +import logging +import logging.config +import subprocess +import sys +from subprocess import check_output +from onapsdk.configuration import settings +from oransdk.policy.policy import OranPolicy + +logging.config.dictConfig(settings.LOG_CONFIG) +logger = logging.getLogger("####################### Start OOF Preparation") + +# Set working dir as python script location +abspath = os.path.abspath(__file__) +dname = os.path.dirname(abspath) +os.chdir(dname) + +class OofPreparation(): + """Can be used to prepare OOF for Network Slicing usecase option2.""" + + @classmethod + def prepare_oof(cls, nst_name, an_nsst_name, tn_nsst_name): + """Prepare OOF, create optimization policies.""" + # copy policy creation package to oof pod + logger.info("####################### copy policy generation package to OOF pod:%s", dname) + oof_pod = subprocess.run("kubectl get pods -n onap | awk '{print $1}' | grep onap-oof-[a-z0-9]*-[a-z0-9]*$", shell=True, check=True, stdout=subprocess.PIPE).stdout.decode('utf-8').strip() + cmd = f"kubectl cp ../resources/policies_option2.tar.gz -n onap {oof_pod}:/opt/osdf" + check_output(cmd, shell=True).decode('utf-8') + + cmd = f"kubectl exec -ti -n onap {oof_pod} -- tar -xvf policies_option2.tar.gz" + check_output(cmd, shell=True).decode('utf-8') + + # run python command to create policies + cmd = f"kubectl exec -ti -n onap {oof_pod} -- python3 policies_option2/policy_utils.py create_policy_types policy_types" + check_output(cmd, shell=True).decode('utf-8') + + cmd = f"kubectl exec -ti -n onap {oof_pod} -- python3 policies_option2/policy_utils.py create_and_push_policies nst_policies" + check_output(cmd, shell=True).decode('utf-8') + + cmd = f"kubectl exec -ti -n onap {oof_pod} -- python3 policies_option2/policy_utils.py generate_nsi_policies {nst_name}" + check_output(cmd, shell=True).decode('utf-8') + + cmd = f"kubectl exec -ti -n onap {oof_pod} -- python3 policies_option2/policy_utils.py create_and_push_policies gen_nsi_policies" + check_output(cmd, shell=True).decode('utf-8') + + cmd = f"kubectl exec -ti -n onap {oof_pod} -- python3 policies_option2/policy_utils.py generate_nssi_policies {an_nsst_name} minimize latency" + check_output(cmd, shell=True).decode('utf-8') + + cmd = f"kubectl exec -ti -n onap {oof_pod} -- python3 policies_option2/policy_utils.py create_and_push_policies gen_nssi_policies" + check_output(cmd, shell=True).decode('utf-8') + + cmd = f"kubectl exec -ti -n onap {oof_pod} -- python3 policies_option2/policy_utils.py generate_nssi_policies {tn_nsst_name} minimize latency" + check_output(cmd, shell=True).decode('utf-8') + + cmd = f"kubectl exec -ti -n onap {oof_pod} -- python3 policies_option2/policy_utils.py create_and_push_policies gen_nssi_policies" + check_output(cmd, shell=True).decode('utf-8') + + #Verify policies created + policy = OranPolicy() + policy_status_list = policy.get_policy_status(settings.POLICY_BASICAUTH) + if len(policy_status_list) != 20: + logger.info("####################### Policy created failed. 20 policies expected, but only %s found. Please verify manually.", str(len(policy_status_list))) + sys.exit('OOF preparation failed. Exception while creating policies. Please check the policies manually.') + + @classmethod + def cleanup_oof(cls): + """Delete OOF optimization policies.""" + oof_pod = subprocess.run("kubectl get pods -n onap | awk '{print $1}' | grep onap-oof-[a-z0-9]*-[a-z0-9]*$", shell=True, check=True, stdout=subprocess.PIPE).stdout.decode('utf-8').strip() + + # run python command to create policies + cmd = f"kubectl exec -ti -n onap {oof_pod} -- python3 policies_option2/policy_utils.py delete_policies nst_policies" + check_output(cmd, shell=True).decode('utf-8') + + #python3 policy_utils.py create_and_push_policies gen_nsi_policies + cmd = f"kubectl exec -ti -n onap {oof_pod} -- python3 policies_option2/policy_utils.py delete_policies gen_nsi_policies" + check_output(cmd, shell=True).decode('utf-8') + + #python3 policy_utils.py create_and_push_policies gen_nssi_policies + cmd = f"kubectl exec -ti -n onap {oof_pod} -- python3 policies_option2/policy_utils.py delete_policies gen_nssi_policies" + check_output(cmd, shell=True).decode('utf-8') + + # run python command to create policies + logger.info("####################### copy policy generation package to OOF pod:%s", dname) + cmd = f"kubectl exec -ti -n onap {oof_pod} -- rm -rf policies_option2" + check_output(cmd, shell=True).decode('utf-8') diff --git a/smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/sdc_preparation.py b/smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/sdc_preparation.py new file mode 100644 index 00000000..08493e3d --- /dev/null +++ b/smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/sdc_preparation.py @@ -0,0 +1,392 @@ +#!/usr/bin/env python3 +### +# ============LICENSE_START=================================================== +# ORAN SMO PACKAGE - PYTHONSDK TESTS +# ================================================================================ +# Copyright (C) 2021 Samsung Electronics +# Copyright (C) 2022 AT&T Intellectual Property. All rights +# reserved. +# ============================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END===================================================== +# +### +"""Create SDC Templates for Network Slicing option2 test.""" +import logging +import logging.config +from time import sleep +import os +from onapsdk.sdc.vfc import Vfc +from onapsdk.sdc.vf import Vf +import onapsdk.constants as const +from onapsdk.configuration import settings +from onapsdk.exceptions import ResourceNotFound +from onapsdk.sdc.properties import Property, ParameterError +from waiting import wait +from oransdk.aai.service_design_and_creation import AaiModel +from oransdk.sdc.sdc import SdcTemplate +from oransdk.sdc.service import OranService + +# Set working dir as python script location +abspath = os.path.abspath(__file__) +dname = os.path.dirname(abspath) +os.chdir(dname) + +logging.config.dictConfig(settings.LOG_CONFIG) +logger = logging.getLogger("####################### Start SDC Preparation") +service_dict = {} +service_list = [] + +class SdcPreparation(): + """Can be used to prepare SDC for Network Slicing usecase option2.""" + + def __init__(self, suffix: str = None): + """ + Initialize SDC preparation object. + + Args: + suffix (str, optional): the suffix of the SDC template names + + """ + if suffix is None: + self.suffix = "" + else: + self.suffix = suffix + + def prepare_sdc(self) -> dict: + """Create SDC templates.""" + # Populate AAI needed value + + sdc = SdcTemplate() + vendor = sdc.create_vendor('ONAP') + sdc.create_vsp('test1', vendor) + + # 0.create custom categories + logger.info("####################### create custom categories") + sdc.create_service_category(['CST', 'ServiceProfile', 'AN SliceProfile', 'CN SliceProfile', 'TN SliceProfile', + 'NST', 'TN BH NSST', 'TN Network Requirement', 'AN NF NSST', 'CN NSST', 'Allotted Resource']) + + + vf_tn_bh_ar = self.create_tn_resources(sdc, vendor) + vf_embban_nf_ar = self.create_an_resources(sdc, vendor) + vf_embbcn_external_ar = self.create_cn_resources(sdc, vendor) + self.create_nst(sdc, vf_embbcn_external_ar, vf_embban_nf_ar, vf_tn_bh_ar) + + vf_slice_ar = self.create_slice_ar(sdc, vendor) + + srv_slice_profile_an_o2 = self.create_an_slice_profiles(sdc, vf_slice_ar) + srv_slice_profile_tn = self.create_tn_slice_profiles(sdc, vf_slice_ar) + srv_slice_profile_cn = self.create_cn_slice_profiles(sdc, vf_slice_ar) + srv_profile_o2 = self.create_service_profile(sdc, vf_slice_ar, srv_slice_profile_cn, srv_slice_profile_tn, srv_slice_profile_an_o2) + cst = self.create_cst(sdc, srv_profile_o2) + wait(lambda: self.verify_distribution(), sleep_seconds=60, timeout_seconds=3600, waiting_for="All services distributed successfully") + return [cst.identifier, cst.unique_uuid, srv_profile_o2.identifier] + + def create_tn_resources(self, sdc, vendor) -> dict: + """Create TN related resources.""" + # 1.Create TN_Network_Requirement Service + logger.info("####################### create TN_Network_Requirement Service") + props = [Property('ConnectionLink', 'string'), + Property('jitter', 'string', value='10'), + Property('latency', 'integer', value=10), + Property('maxBandwith', 'integer', value=1000)] + + srv_tn_network = sdc.create_service(self.updated_name('TN_Network_Requirement'), 'TN Network Requirement', properties=props, + inputs=[Property('ConnectionLink', 'string')]) + service_dict[srv_tn_network.identifier] = False + service_list.append(srv_tn_network) + + # 2.Create TN_Network_Req_AR + logger.info("####################### create TN_Network_Req_AR") + vf = sdc.create_vf(self.updated_name('TN_Network_Req_AR'), 'Allotted Resource', 'Allotted Resource', vendor) + for c in vf.components: + if c.name == 'AllottedResource 0': + c.get_property('providing_service_invariant_uuid').value = srv_tn_network.unique_uuid + c.get_property('providing_service_uuid').value = srv_tn_network.identifier + c.get_property('providing_service_name').value = srv_tn_network.name + break + sdc.onboard_vf(vf) + + # 3.Create Tn_ONAP_internal_BH Service + logger.info("####################### create Tn_ONAP_internal_BH Service") + props = [Property('pLMNIdList', 'string', value='39-00'), + Property('jitter', 'string', value='10'), + Property('latency', 'integer', value=10), + Property('maxBandwith', 'integer', value=1000)] + + srv_tn_bh = sdc.create_service(self.updated_name('Tn_ONAP_internal_BH'), 'TN BH NSST', vnfs=[vf], + role='ONAP_internal', properties=props) + service_dict[srv_tn_bh.identifier] = False + service_list.append(srv_tn_bh) + + # 6.Create Tn_BH_AR + logger.info("####################### Create Tn_BH_AR") + vf_tn_bh_ar = sdc.create_vf(self.updated_name('Tn_BH_AR'), 'Allotted Resource', 'Allotted Resource', vendor) + for c in vf_tn_bh_ar.components: + if c.name == 'AllottedResource 0': + c.get_property('providing_service_invariant_uuid').value = srv_tn_bh.unique_uuid + c.get_property('providing_service_uuid').value = srv_tn_bh.identifier + c.get_property('providing_service_name').value = srv_tn_bh.name + break + sdc.onboard_vf(vf_tn_bh_ar) + return vf_tn_bh_ar + + def create_an_resources(self, sdc, vendor) -> dict: + """Create AN related resources.""" + # 4.Create EmbbAn_NF Service Template + logger.info("####################### create EmbbAn_NF Service Template") + props = [Property('anNSSCap', 'org.openecomp.datatypes.NSSCapabilities')] + srv_embban_nf = sdc.create_service(self.updated_name('EmbbAn_NF'), 'AN NF NSST', role='huawei', service_type='embb', properties=props) + service_dict[srv_embban_nf.identifier] = False + service_list.append(srv_embban_nf) + + # 7.Create EmbbAn_NF_AR + logger.info("####################### create EmbbAn_NF_AR") + vf_embban_nf_ar = sdc.create_vf(self.updated_name('EmbbAn_NF_AR'), 'Allotted Resource', 'Allotted Resource', vendor) + for c in vf_embban_nf_ar.components: + if c.name == 'AllottedResource 0': + c.get_property('providing_service_invariant_uuid').value = srv_embban_nf.unique_uuid + c.get_property('providing_service_uuid').value = srv_embban_nf.identifier + c.get_property('providing_service_name').value = srv_embban_nf.name + break + sdc.onboard_vf(vf_embban_nf_ar) + return vf_embban_nf_ar + + def create_cn_resources(self, sdc, vendor) -> dict: + """Create CN related resources.""" + # 5.Create EmbbCn_External Service Template + logger.info("####################### create EmbbCn_External Service Template") + srv_embbcn = OranService(name=self.updated_name('EmbbCn_External'), + category='CN NSST', + role='huawei', + service_type='embb', + properties=[Property('cnCap', 'org.openecomp.datatypes.NSSCapabilities',\ + value="{\\\"latency\\\":20,\\\"maxNumberofUEs\\\":10000,\ + \\\"resourceSharingLevel\\\":\\\"Shared\\\",\\\"sST\\\":\\\"eMBB\\\",\ + \\\"activityFactor\\\":30,\\\"areaTrafficCapDL\\\":800,\ + \\\"areaTrafficCapUL\\\":800,\\\"expDataRateDL\\\":1000,\ + \\\"survivalTime\\\":10,\\\"uEMobilityLevel\\\":\\\"stationary\\\",\ + \\\"expDataRateUL\\\":1000,\\\"pLMNIdList\\\":\\\"39-00\\\"}")]) + + srv_embbcn.create() + + if srv_embbcn.status == const.DRAFT: + srv_embbcn.add_deployment_artifact(artifact_type="WORKFLOW", artifact_name="eMBB.zip", artifact="../resources/eMBB.zip", + artifact_label="abc") + + if srv_embbcn.status != const.DISTRIBUTED: + done = False + retry = 0 + to = 1 + while not done: + try: + srv_embbcn.onboard() + except ResourceNotFound as e: + retry += 1 + if retry > 5: + raise e + to = 2 * to + 1 + sleep(to) + else: + done = True + service_dict[srv_embbcn.identifier] = False + service_list.append(srv_embbcn) + + # 8.EmbbCn_External_AR + logger.info("####################### create EmbbCn_External_AR") + vf_embbcn_external_ar = sdc.create_vf(self.updated_name('EmbbCn_External_AR'), 'Allotted Resource', 'Allotted Resource', vendor) + for c in vf_embbcn_external_ar.components: + if c.name == 'AllottedResource 0': + c.get_property('providing_service_invariant_uuid').value = srv_embbcn.unique_uuid + c.get_property('providing_service_uuid').value = srv_embbcn.identifier + c.get_property('providing_service_name').value = srv_embbcn.name + break + sdc.onboard_vf(vf_embbcn_external_ar) + return vf_embbcn_external_ar + + def create_nst(self, sdc, vf_embbcn_external_ar, vf_embban_nf_ar, vf_tn_bh_ar) -> None: + """Create NST.""" + # 9.Create EmbbNst_O2 Service Template + logger.info("####################### create service EmbbNst_O2") + props = [Property('latency', 'integer', value=20), + Property('maxNumberofUEs', 'integer', value=1000), + Property('maxNumberofConns', 'integer', value=100000), + Property('resourceSharingLevel', 'string', value='Shared'), + Property('sST', 'string', value='eMBB'), + Property('activityFactor', 'integer', value=60), + Property('availability', 'float', value=0.6), + Property('dLThptPerSlice', 'integer', value=1000), + Property('uLThptPerSlice', 'integer', value=1000), + Property('jitter', 'integer', value=10), + Property('survivalTime', 'integer', value=10), + Property('uEMobilityLevel', 'string', value='stationary'), + Property('pLMNIdList', 'string', value='39-00'), + Property('reliability', 'string', value='99%')] + nst = sdc.create_service(self.updated_name('EmbbNst_O2'), + 'NST', + role='option2', + vnfs=[vf_embbcn_external_ar, vf_embban_nf_ar, vf_tn_bh_ar], + properties=props) + service_dict[nst.identifier] = False + service_list.append(nst) + + def create_slice_ar(self, sdc, vendor) -> dict: + """Create Slice AR.""" + # 10. create Slice_AR + logger.info("####################### create Slice_AR") + + vfc = Vfc('AllottedResource') + vf_slice_ar = Vf(name=self.updated_name('Slice_AR'), category='Allotted Resource', subcategory='Allotted Resource', vendor=vendor) + vf_slice_ar.create() + if vf_slice_ar.status == const.DRAFT: + vf_slice_ar.add_resource(vfc) + + for c in vf_slice_ar.components: + if c.name == 'AllottedResource 0': + cp = sdc.get_component_property(c, 'providing_service_invariant_uuid') + if cp: + logger.info('declare input for property [%s]', cp) + vf_slice_ar.declare_input(cp) + else: + raise ParameterError('no property providing_service_invariant_uuid found') + + cp = sdc.get_component_property(c, 'providing_service_uuid') + if cp: + logger.info('declare input for property [%s]', cp) + vf_slice_ar.declare_input(cp) + else: + raise ParameterError('no property providing_service_uuid found') + + break + + sdc.onboard_vf(vf_slice_ar) + # AAI bug workaround: create Slice_ar in AAI DB before SO distribution, otherwise service will not be deployed to AAI succesfully + aai = AaiModel(invariant_id=vf_slice_ar.unique_uuid, model_type="resource", resource_version=vf_slice_ar.version) + aai.create(vf_slice_ar.name, vf_slice_ar.identifier, aai.invariant_id) + return vf_slice_ar + + def create_an_slice_profiles(self, sdc, vf_slice_ar) -> dict: + """Create AN Slice profile.""" + # 11.Create SliceProfile_AN_O2 Service Template + logger.info("####################### create SliceProfile_AN_O2 Service Template") + an_slice_profile = [Property('ipAddress', 'string'), + Property('logicInterfaceId', 'string'), + Property('nextHopInfo', 'string')] + complex_property = Property('anSP', 'org.openecomp.datatypes.SliceProfile') + srv_slice_profile_an_o2 = sdc.create_service_1(self.updated_name('SliceProfile_AN_O2'), + 'AN SliceProfile', + properties=an_slice_profile, + inputs=an_slice_profile, + complex_input=complex_property, + vnfs=[vf_slice_ar]) + service_dict[srv_slice_profile_an_o2.identifier] = False + service_list.append(srv_slice_profile_an_o2) + return srv_slice_profile_an_o2 + + def create_tn_slice_profiles(self, sdc, vf_slice_ar) -> dict: + """Create TN Slice profile.""" + # 12.Create SliceProfile_TN Service Template + logger.info('####################### create service SliceProfile_TN') + tn_slice_profile = [Property('jitter', 'string'), + Property('latency', 'integer'), + Property('pLMNIdList', 'string'), + Property('sNSSAI', 'string'), + Property('sST', 'integer'), + Property('maxBandwidth', 'integer')] + + srv_slice_profile_tn = sdc.create_service_1(self.updated_name('SliceProfile_TN'), + 'TN SliceProfile', + vnfs=[vf_slice_ar], + inputs=tn_slice_profile, + properties=tn_slice_profile) + service_dict[srv_slice_profile_tn.identifier] = False + service_list.append(srv_slice_profile_tn) + return srv_slice_profile_tn + + def create_cn_slice_profiles(self, sdc, vf_slice_ar) -> dict: + """Create CN Slice profile.""" + # 13.Create SliceProfile_CN Service Template + logger.info('####################### create slice SliceProfile_CN') + cn_slice_profile = [Property('ipAddress', 'string'), + Property('logicInterfaceId', 'string'), + Property('nextHopInfo', 'string')] + srv_slice_profile_cn = sdc.create_service_1(self.updated_name('SliceProfile_CN'), + 'CN SliceProfile', + vnfs=[vf_slice_ar], + inputs=cn_slice_profile, + properties=cn_slice_profile) + service_dict[srv_slice_profile_cn.identifier] = False + service_list.append(srv_slice_profile_cn) + return srv_slice_profile_cn + + def create_service_profile(self, sdc, vf_slice_ar, srv_slice_profile_cn, srv_slice_profile_tn, srv_slice_profile_an_o2) -> dict: + """Create Slice profile.""" + # 14.Create ServiceProfile_O2 Service Template + logger.info('####################### create service ServiceProfile O2') + service_props = Property('spProp', 'org.openecomp.datatypes.ServiceProfile') + srv_profile_o2 = sdc.create_service_1(self.updated_name('ServiceProfile_O2'), + 'ServiceProfile', + properties=[service_props], + complex_input=service_props, + vnfs=[vf_slice_ar, srv_slice_profile_cn, srv_slice_profile_tn, srv_slice_profile_an_o2], + role='option2') + service_dict[srv_profile_o2.identifier] = False + service_list.append(srv_profile_o2) + return srv_profile_o2 + + def create_cst(self, sdc, srv_profile_o2) -> dict: + """Create CST.""" + # 15.Create CST_O2 Service Template + logger.info('####################### create service CST O2') + cs_prop = Property('csProp', 'org.openecomp.datatypes.CSProperties') + cst = sdc.create_service_1(self.updated_name('CST_O2'), + 'CST', + role='option2', + service_type='embb', + vnfs=[srv_profile_o2], + properties=[cs_prop], + complex_input=cs_prop) + service_dict[cst.identifier] = False + service_list.append(cst) + return cst + + def updated_name(self, name) -> str: + """Adding suffix for the name.""" + return name + self.suffix + + @classmethod + def verify_distribution(cls) -> bool: + """Verify the distribution of all the services.""" + for service in service_list: + logger.info('####################### verify service:%s', service.name) + if service_dict[service.identifier]: + continue + so_ready = False + aai_ready = False + result = service.get_distribution_status() + for element in result['distributionStatusList']: + if (element['omfComponentID'] == "SO-COpenSource-Env11" and (element['status'] == "DEPLOY_OK" or element['status'] == const.DOWNLOAD_OK)): + so_ready = True + if (element['omfComponentID'] == "aai-ml" and element['status'] == "DEPLOY_OK"): + aai_ready = True + if so_ready and aai_ready: + service_dict[service.identifier] = True + logger.info('####################### service %s distributed successfully to SO and AAI', service.name) + + res = True + for value in service_dict.values(): + res = res and value + logger.info('####################### res is:%s, value is:%s', str(res), str(value)) + return res diff --git a/smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/so_preparation.py b/smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/so_preparation.py new file mode 100644 index 00000000..14cb5509 --- /dev/null +++ b/smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/so_preparation.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python3 +### +# ============LICENSE_START=================================================== +# ORAN SMO PACKAGE - PYTHONSDK TESTS +# ================================================================================ +# Copyright (C) 2022 AT&T Intellectual Property. All rights +# reserved. +# ============================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END===================================================== +# +### +"""Prepare SO for Network Slicing option2 test.""" +import logging +import logging.config +import os +import subprocess +from subprocess import check_output +from onapsdk.configuration import settings + +# Set working dir as python script location +abspath = os.path.abspath(__file__) +dname = os.path.dirname(abspath) +os.chdir(dname) + +logging.config.dictConfig(settings.LOG_CONFIG) +logger = logging.getLogger("####################### Start SO Preparation") + +class SoPreparation(): + """Can be used to prepare SO for Network Slicing usecase option2.""" + + @classmethod + def prepare_so(cls, cst_id, sp_id): + """Update So catalog db. + + Args: + cst_id (str): The CST uuid of from the SDC Template creation step. + sp_id (str): The ServiceProfile uuid from the SDC Template creation step. + """ + logger.info("####################### Start to update SO catalog DB") + cmd = "kubectl get secret/onap-mariadb-galera-db-root-password -n onap -o jsonpath={.data.password} | base64 --decode" + pw = check_output(cmd, shell=True).decode('utf-8') + #logger.info("####################### pass is:%s", pw) + + # populate communication service actions + sql = f"INSERT INTO \ + catalogdb.service_recipe(ACTION, VERSION_STR, DESCRIPTION, ORCHESTRATION_URI, SERVICE_PARAM_XSD, \ + RECIPE_TIMEOUT, SERVICE_TIMEOUT_INTERIM, SERVICE_MODEL_UUID) \ + VALUES ('createInstance', '1', 'Custom recipe to create communication service-instance if no custom BPMN flow is found', \ + '/mso/async/services/CreateCommunicationService', NULL, 180, NULL, '{cst_id}');" + cmd = f"kubectl -n onap exec onap-mariadb-galera-0 -- mysql -uroot -p{pw} -D catalogdb -e \"{sql}\"" + check_output(cmd, shell=True).decode('utf-8') + + sql = f"INSERT INTO \ + catalogdb.service_recipe(ACTION, VERSION_STR, DESCRIPTION, ORCHESTRATION_URI, SERVICE_PARAM_XSD, \ + RECIPE_TIMEOUT, SERVICE_TIMEOUT_INTERIM, SERVICE_MODEL_UUID) \ + VALUES ('deleteInstance', '1', 'Custom recipe to delete communication service if no custom BPMN flow is found', \ + '/mso/async/services/DeleteCommunicationService', NULL, 180, NULL, '{cst_id}');" + cmd = f"kubectl -n onap exec onap-mariadb-galera-0 -- mysql -uroot -p{pw} -D catalogdb -e \"{sql}\"" + check_output(cmd, shell=True).decode('utf-8') + + sql = f"INSERT INTO \ + catalogdb.service_recipe(ACTION, VERSION_STR, DESCRIPTION, ORCHESTRATION_URI, SERVICE_PARAM_XSD, \ + RECIPE_TIMEOUT, SERVICE_TIMEOUT_INTERIM, SERVICE_MODEL_UUID) \ + VALUES ('activateInstance', '1.0', 'activate communication service', '/mso/async/services/ActivateCommunicationService', \ + NULL, 180, NULL, '{cst_id}');" + cmd = f"kubectl -n onap exec onap-mariadb-galera-0 -- mysql -uroot -p{pw} -D catalogdb -e \"{sql}\"" + check_output(cmd, shell=True).decode('utf-8') + + # populate slice service actions + sql = f"INSERT INTO \ + catalogdb.service_recipe(ACTION, VERSION_STR, DESCRIPTION, ORCHESTRATION_URI, SERVICE_PARAM_XSD, \ + RECIPE_TIMEOUT, SERVICE_TIMEOUT_INTERIM, SERVICE_MODEL_UUID) \ + VALUES ('createInstance', '1', 'Custom recipe to create slice service-instance if no custom BPMN flow is found', \ + '/mso/async/services/CreateSliceService', NULL, 180, NULL, '{sp_id}');" + cmd = f"kubectl -n onap exec onap-mariadb-galera-0 -- mysql -uroot -p{pw} -D catalogdb -e \"{sql}\"" + check_output(cmd, shell=True).decode('utf-8') + + sql = f"INSERT INTO \ + catalogdb.service_recipe(ACTION, VERSION_STR, DESCRIPTION, ORCHESTRATION_URI, SERVICE_PARAM_XSD, \ + RECIPE_TIMEOUT, SERVICE_TIMEOUT_INTERIM, SERVICE_MODEL_UUID) \ + VALUES ('deleteInstance', '1', 'Custom recipe to create slice service-instance if no custom BPMN flow is found', \ + '/mso/async/services/DeleteSliceService', NULL, 180, NULL, '{sp_id}');" + cmd = f"kubectl -n onap exec onap-mariadb-galera-0 -- mysql -uroot -p{pw} -D catalogdb -e \"{sql}\"" + check_output(cmd, shell=True).decode('utf-8') + + sql = f"INSERT INTO \ + catalogdb.service_recipe(ACTION, VERSION_STR, DESCRIPTION, ORCHESTRATION_URI, SERVICE_PARAM_XSD, \ + RECIPE_TIMEOUT, SERVICE_TIMEOUT_INTERIM, SERVICE_MODEL_UUID) \ + VALUES ('activateInstance', '1.0', 'Gr api recipe to activate service-instance', \ + '/mso/async/services/ActivateSliceService', NULL, 180, NULL, '{sp_id}');" + cmd = f"kubectl -n onap exec onap-mariadb-galera-0 -- mysql -uroot -p{pw} -D catalogdb -e \"{sql}\"" + check_output(cmd, shell=True).decode('utf-8') + + logger.info("####################### Start to copy subnetCapability.json to SO main pod") + so_pod = subprocess.run("kubectl get pods -n onap | awk '{print $1}' | grep onap-so-[a-z0-9]*-[a-z0-9]*$", shell=True, check=True, stdout=subprocess.PIPE).stdout.decode('utf-8').strip() + cmd = f"kubectl cp ../resources/subnetCapability.json -n onap {so_pod}:/app" + check_output(cmd, shell=True).decode('utf-8') + + @classmethod + def cleanup_so(cls, cst_id, sp_id): + """Clean up So configuration. + + Args: + cst_id (str): The CST uuid of from the SDC Template creation step. + sp_id (str): The ServiceProfile uuid from the SDC Template creation step. + """ + logger.info("####################### Start to clean up SO catalog DB") + cmd = "kubectl get secret/onap-mariadb-galera-db-root-password -n onap -o jsonpath={.data.password} | base64 --decode" + pw = check_output(cmd, shell=True).decode('utf-8') + + # remove communication service actions + sql = f"Delete from service_recipe where SERVICE_MODEL_UUID=\"{cst_id}\";" + cmd = f"kubectl -n onap exec onap-mariadb-galera-0 -- mysql -uroot -p{pw} -D catalogdb -e \"{sql}\"" + check_output(cmd, shell=True).decode('utf-8') + + # remove slice service actions + sql = f"Delete from service_recipe where SERVICE_MODEL_UUID=\"{sp_id}\";" + cmd = f"kubectl -n onap exec onap-mariadb-galera-0 -- mysql -uroot -p{pw} -D catalogdb -e \"{sql}\"" + check_output(cmd, shell=True).decode('utf-8') + + logger.info("####################### Start to remove subnetCapability.json to SO main pod") + so_pod = subprocess.run("kubectl get pods -n onap | awk '{print $1}' | grep onap-so-[a-z0-9]*-[a-z0-9]*$", shell=True, check=True, stdout=subprocess.PIPE).stdout.decode('utf-8').strip() + cmd = f"kubectl -n onap exec {so_pod} -- rm -f /app/subnetCapability.json -n onap" + check_output(cmd, shell=True).decode('utf-8') diff --git a/smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/uui_preparation.py b/smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/uui_preparation.py new file mode 100644 index 00000000..62895e0d --- /dev/null +++ b/smo-install/test/pythonsdk/src/orantests/network_slicing/preparation/uui_preparation.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 +### +# ============LICENSE_START=================================================== +# ORAN SMO PACKAGE - PYTHONSDK TESTS +# ================================================================================ +# Copyright (C) 2022 AT&T Intellectual Property. All rights +# reserved. +# ============================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END===================================================== +# +### +"""Update UUI configuration for Network Slicing option2 test.""" +import logging +import logging.config +import subprocess +from subprocess import check_output +from onapsdk.configuration import settings + +logging.config.dictConfig(settings.LOG_CONFIG) +logger = logging.getLogger("####################### Start UUI Preparation") + +class UuiPreparation(): + """Can be used to prepare UUI for Network Slicing usecase option2.""" + + @classmethod + def prepare_uui(cls, cst_uuid, cst_invariant_id): + """Register services to uui.""" + logger.info("####################### Start to update uui settings") + uui_pod = subprocess.run("kubectl get pod -n onap | grep uui-server | awk '{print $1}' ", shell=True, check=True, stdout=subprocess.PIPE).stdout.decode('utf-8').strip() + + cmd = f"kubectl exec -ti -n onap {uui_pod} -- sed -i 's/8ee5926d-720b-4bb2-86f9-d20e921c143b/{cst_uuid}/g' /home/uui/config/slicing.properties" + check_output(cmd, shell=True).decode('utf-8') + + cmd = f"kubectl exec -ti -n onap {uui_pod} -- sed -i 's/e75698d9-925a-4cdd-a6c0-edacbe6a0b51/{cst_invariant_id}/g' /home/uui/config/slicing.properties" + check_output(cmd, shell=True).decode('utf-8') + + @classmethod + def cleanup_uui(cls, cst_uuid, cst_invariant_id): + """Rollback uui settings.""" + logger.info("####################### Start to rollback uui settings") + uui_pod = subprocess.run("kubectl get pod -n onap | grep uui-server | awk '{print $1}' ", shell=True, check=True, stdout=subprocess.PIPE).stdout.decode('utf-8').strip() + + cmd = f"kubectl exec -ti -n onap {uui_pod} -- sed -i 's/{cst_uuid}/8ee5926d-720b-4bb2-86f9-d20e921c143b/g' /home/uui/config/slicing.properties" + check_output(cmd, shell=True).decode('utf-8') + + cmd = f"kubectl exec -ti -n onap {uui_pod} -- sed -i 's/{cst_invariant_id}/e75698d9-925a-4cdd-a6c0-edacbe6a0b51/g' /home/uui/config/slicing.properties" + check_output(cmd, shell=True).decode('utf-8') + logger.info("####################### UUI settings rollback successfully") diff --git a/smo-install/test/pythonsdk/src/orantests/network_slicing/resources/eMBB.zip b/smo-install/test/pythonsdk/src/orantests/network_slicing/resources/eMBB.zip new file mode 100644 index 0000000000000000000000000000000000000000..c8217c5147caabc0f02cddff59395d55f07611d7 GIT binary patch literal 727 zcmWIWW@Zs#U|`^2*y9uDzkk*2-3dTm5)ktMadJj#a&~cPu3k=Y3F|>yzGed+whMcM z`Y&nKc)ppzyG(CxRRh;?&w3UYrg!@Hq@VfUt~*}-GQR&|o5ywU%D%_9PhEQVfA3mb zn^2FrK`FkS+DtBMJj__8w>DKW`dXLIGTCsw&sV^4omg3aS6>gs$Jh9UwdeWE&_U1F2#W-b59B_{sb?~U!! zO%)DSw~O|M9TW2SH+v0ddd8W!%X0Q!Cw492+Vm;rHK*c?GcV-l+^sKC*tTiXwzyA@ zmsc$K&8YU+E+nS^RlWHK{ldlP7q7Y=k@&4!IAYSP0^ZNd_int9BN$*?q3guKc`4*r zv4&e*1H0n7iEeR?`AcN_ZX5MaDA`qQwz#O`YMYAFV(%`)iuN?A$G%;E4PIIId${fRbt(bM{)!Qh25Ish*mto^|76y?Q_wJEKaSN=r7 zW#`{B|5;m}xiam*?*>1D3TU7S9*>8T`5!a$KkjKT|Gf%m=fX3e|8JK4&FDWi7Y#fX zaO*$3vC)H#Yx)%#gYx=+)E|u-{a**j=RdgfO#jYV&b!}y$KI7jj{ffthokiT_mKoN z`o9i%Xeo*sIR4Dg=jOt)EhGiLes6j{T&U-y(6?6Z($qJ`YN>1RucvlUOIli>GQtLT z9oulbM6$X_vR2l=2EyD0d2-g?%5FOOs$rS3m;<{X-a+mLJ3j!;;8dnnP*et<6*! zxKQ3k_h)zJ%3v^3IQ_u0?AsJpD4oG91fF4m7Y3ECQ-unH3isPsT5}!#Uz?&9xTp4p zp+gFmOO?AnW$tWSS*1zIHbJk(%HvP*z#n*Av1oSZMqqRWtmu?Dh`Z9F|DylH&Z!6? zEAS;~N#s0SX%hz!Sb=b{Lo1v+M9v5tuWG#U;AA0QEFD8G z3PQYVP+U9mx-gc$DVz1y_OX@p0YPs6XM42LOpAXdf?Tw1vofh`fzKZ~_J3-G)O z2bea(d@I@p7c(zA+J8CeO3i;r%AVKiR;>&-!(Xb_eK_vb;ICI13&FB8S4c&Rqf!qg z%l@weYw360O%*mqZvVC6WHe&qKjUGqvHx`dQa%a}0xMwR9WPL>OfdCEV78*)$mt{3 zj!&-8ay9)R{_Su4R_m9`FYontA3rM>P_yeA!CiN5dC2OXu)lSEVSz)TpPnkOl=f>* z4%;mkR&#JdP@cA0AKqWSd;j?hAb)7Tb?gAN!r2w9{r0)ijyCbA?Q6tvd)vDFdi4S7 z5=Ohm8pwaRy881M!?$La@av?FrQMjrvTb*i_P;m(`QN|6Z-ZeQ$hE*BQf|#a#~u)_ zdV>F)o`GXu9Fu z`q2P>w}Lwbtc4xR$2Z5a8APQ0Da?@9K2;1qymcOPJj24^!ziNy@ZpU4Ni+#7xJe}X zgjB?3z#tR`E2wXSF+QQV6HOo|3ef&k)(dU`PzSz?IuLUG-Lrs2!3fWwKQI2-JQ z-|1v7BWXi4qTyUPUQA4}Y_tfG4*(VTx(KXAT)hip;G>S5w8L#)o2n-1V}iE8JP|;C zQhMD`({{>LUzvdsHHn5IngDc@uMV9eEqKxhl0n>@kebm@&&{Pt@IRvwj%ZkOXoI>F zj_kESzf7+aO)|aiO}l@a8y_&jC5Lnki^^R(o3!QxBGMVAXMoHwy$a}pSPA0=T9oOq zRip}_8E$_a_B(RqlU_|J5~0_Rgb+6cQpot=8t9T}aJEXU*;B~Y9| z4QsKv_!WiUFfZnhndt_~`|uAMM-XpHwy{3|zWj+viEw12J~=kty1{}Ytaib*3)a3q zgDsVEaiR2kJr-LV@9dR_Z6sgwc;MnGB*GcX(dNvWx2HT0f)==6&_kAR%wyC@+@VnL zh3X39i`L9T%Dj_0(`~-ExrQqdHz*CoZSMMsVEr6ogYT+u4cm5taEOT>dDyB%1jtB= z=DnPpsfnB+TCmG4LZg`AghG<7Y|jrN1)yqJ4MX($UZR1uf4*=WL<-0l3M3)v=HeiUZK~+SPfpi?% zT9`jzY5Qc0O6^3T!s>6dok=&B?0e|W?zZ#UF@(U)$<9+!W=80`KljL{c3k+#B${EgoQxxc^GrmYsRMham1 z#Clf6B$E|G#dq7j>D^m1XaRBw`>_~#e@eo)ZFEjd7Y&l4IHiX!A7bmZCCVws2(?<~ zGTn`=5TcqASx)6qyi>*}6Wh7^idyq6Y9UEumpr>n7_KCjk{}*WN@zZIoL})Im7F75 z-InZlj>2vU&VRUb7nUM!=YMJe`TTwF9}7yVQJbv^2`jYC`D4eG#%tS+{5(g z3%GK;qV(8irRkCsNgYY9W#8&c^WIz*C7;o{G#6`AUpY6{67{4M1AN2sGtA`GNvNT! zEPnc@oY3Vbz2u6aTI^2tZE3P^s~~&zN&n?TS<2}~yAxl*{&T5Y_B}|YVFx|n-t!aEQ}x0e=!|q>I)7V~Wh}~0j@weiDJ3FGJ&qc!aM6SLFRm$I&BZ*!2omdiz zKgo69^9dGi%f&t_qX?d)jlx^332ER7gWUe#+l$cb!!{L*{Z4V99Q!{RjK}Qrf8+kB zvHx`dj{m?sXYT#cFi6m5w2)Ha!w3=rd}T52jDhh3>7YQdlvOt3Bf-U1EyE@s zI+GCMD~m|s4v6Rpxd2D|#x{d2FIRp0Ni6&+sg^k1=pnxIR7WUDmo&3%wiy*Kk+t*# z(}muQ#5M9)lB6%>0Y~x9BZ92um)VAY41jPN$)ZF^5HtBwGEH!$)`g&TxG<&#)`6fc zw-Bbq6^sB~mWH9Qy2}-c`sm?PyD41i;LTaDr_w!NgR+Kl9Xx!KsjQ`HO4O8qO@W@8 ziY8mU`Yw-Vd0jTk>*+49!z_fuEZRDkR~YF&mKBx`yYIEg$W*fKUl=&aS|U5j3zGO7 z!=8V)=D}UMvIcw6^3pGwJ@y`dgOBW6_C4%iobY7z9(FUZd`NDR@Mtfte}#|a{UznR zi%vV&w)GEk#8mWl1wr}TTo~(RaGAGHNQVTKbEVgPBk!>2G$M8KFV855<5_=^9c9tH z0k(h~fiwZE7>dPz_6YvG$bJ7qZ!qk!@t@wL$^WSZ^5Z|11$~Y^(o;!(&#}dVb_fK8 z$Iu_infAvyWBC=)Nx9fz2`m1Er#KT2b>1Bs-(}S7lV9Sx-+# z@|#%S6O8p03H22Z-<1;5Ce-({hWZ{mzH;nPGXFct+bIzY%+LQGF!8^^q&IHje{}$p z|NT4G@l~gQOVBo1;K!c@p7}&hy3O;*{}v|xiBL4z-whl+l(hfJNk^6Tf5JZh5B9(L z{#z|T?0@wAj!K{Z%E5W;mY;mm{m?Jt) z^((-#Zw~O`lYk3k0UyNmsOoGyT>m-xpS%EeFAI_wHGy&mryIQ;1JLww7w(P>^H)nFO%iT!1|Lul0xQ z`@egmCjYAzi1NR{%%Hp{^lDDHjP+;qyNYbEaukj{H!SJQv(643h5soG^ ztbxY{f&CAT;roC6=KQ}Fkk5Y-T8us;38m#dz})lyk;eLegGm$rsReNSCvg0kq0h~Q z1$$ETF?(9`<3itBxl2>u7^|hO!N15BKq-iZbGy;W_oXQxLQTG>3MMXcHLs|UVz84d zna1#lt|D41F*7V9IUa}2eiy8M7bBMiVMs}UN$fM0d4`aCQB+1XDjXwoe}(U(68n)E zgm7?1;bKo=n~EK=tXPe}3)6~wVH9@~r%bN@Q``TYO+fDcf5@Ky4>YZL|6?sszy3!8 zMxLtHsn^MsHUmOLM;wld7y{`qxeg1dC<$sNaP5iGGs9*onS<1Uu z09k^0O(uZt!f_gbJ(YOjeQ(ZaaH-~p2_TBHpe3Dc zVQyr3R8em|NM&qo0POwydfPaXFpTftx(Y0l-B>*lEj!MkHE-|xx^1W1+lk|~o$j6A z%>3LC2}u}J1REgjXp+45^WDaGW#5CsfdCH@<=9Toj`%#Cwn(5*C;){*p$;rA1~|*M z4`!I>;R4T-f4TE#I2;aN?Crt-hr?m@|HIvv&;Mm-@7eB)-51ZEJ=^=2;m+>!=fi(N z!@EbN{uCm|{9lG&+*Y-7{~!;}=+A@;%F+?K-tFNmvp;vjVL0r?BqM1|(ufi<>J3ne z=VXK;HlMS!hY%+j6EtUhF+xxNPr@RcJn12HZGimWoniQ4Ai;=;(=3OV`{+lK%uyug z9LgDrNtUn$(sL1sIWquysyY3ockSc$wTbsX;PKag!lJ9YZ)4T^f42Lqw*H@O*8hV% zYb@_so@b-&ZCK+oCi2nFtKqAmyV!Szie=C#5%~y-8Qy*VVuZgX(Ti8Z=PxJYo#!v` zGraTdvuDHj`QDhkh$9ledOmr+hhMykqH%2%!U(EjXRdaSyN%5qc)g7O&^XhIW$$cKnzIijiLZdpQc8WD6u^BJ_Gp+J}Zq+zgej%kW8 zideQlY~mI~IPX1@h2hbx@#f|x#DH+f_;fo_MaA};G1rwI{~kiQj_ zlNgN`2xnPBBRozBO7IP09N{S^B$o0KP0 zuK-ICPEoLbj*ia*^!@(%@%d8;vto$a4o93P#dcW3C}-O1tc#qqn7 zbM)>t+CTXd`sw)O@F^lRpAnA8hm6Y}Fpj7srk)Jvgm@@Sm_kWpB%%`@-NBFT|rfq=8- zin6H-If1A^82xGg?VG`b@j1>VJ>{edp?Z{HPS7>xR1TkzBQ_=|!$MAFn&wQ-N{(_e z&k~#y5%zkVz-S+^BF#r=r`Mx%JSC&bj+>GXg?JXS0mtb;L~>G%b|lB#Hm|l*mhzm_ zXuxrn$(KUTIxIxN>vTMK?1h z2#PgLsQRoV_405K_K++*LcvbB8xDhBZ%%~3Q^Hx16E6D!5`tM6`s+Y_4q1vbi5cVh z2tE6DxYz56IE89Bj^)I%HFt*LPPq4NxU)MPz1n%T(?fDu^AW=FoJt8rlKF=5c!Yk+ zUXA~A@BF{T-`@^@`R`Hf{Dy=%;V_+kE^*Y6j*?|VH#=S6~Z292gH zmWPZ%Tnu)0c6aq?oEAxPP9jcnF+zX-D;z}()kY`?dXpkaYA<^ki}%x%>G?ZCA3wvp za}pJt=8FTC=Hx>T@8vj5#1EVm*$C|phr?b^v=obQhQ~CaIml`94MH(znfZHw_TRjL zzd6D2yEIvxF_yok2@wmCllchcydbJTk?xBVmdXOv*YAP0I~o;!O(U3;`644DbdVGx zC;a%-j@_%FoXUa~JR-v4`U^pYC~%T25GPWUBxwu`IcJ&^EbIicwdLBE1rmaZ2m1x=~Xc%Av&JG))F&xgHx|3PPHOcz0Co+2}=@oL(?fhPiQKO z;P`KafbVnJKuRLHH2C5v^q-SCyH+eTDtNL$V~&9~lbmq$q$Kr|Py?OQ+|Gw6D`4#A z`uCj7fsO3!zIsb_7k?{==vt#E*Tp$WNF>(@Oyry;QWRG+`_F&v_3&guQ<^W}^Vb$; zHqY9Rk^k-Hw0$`vNk+H`^X!g}0xRVI=fmMnMgD)j^K2vkKgjd(53{ z1bnmo`E#!aOX28427<_pfGW%kIEWFUD){l^K#DIkB`7cl1z9#ggYqi~H=)w1o=8C9 z&q~AM3XJHJ6u;64y?6$H()oEYna~d?7z9YelCqPqdB^vNg~fhg3%QI}sMnW59j%UH1VkakNxWK*BRcB30Mm>AhSNxs1~^pP=C1#NgjV zP=Tcy?LNJl|MVuEGn#URXr-?lNf=Q*JyfX#k4ds*RH0Nkq}8stR91f*j{ixXj}sgb z6#OAT!DX=i5(3q>!ceqhsJ<%{XC#@2Vzv!fkI=`D@|=+ralJ#KYO?-aXes)Q1{*pv zMR#%Ep04FLS?S8I&XBTgt7ZTAv7yQ*^jpDlQt5IX${eS7O5(wIp#Yg#bFL11jU+Qi zfR#k6_HxjOg1Ta8qLNzZVKe456}jB5eZ1Y})HG|Wj9edT5so5OsDoS~$g(a$`F&OV zq>U5##llE6UfB+|Y8@`QTi9=dmAXB2*1v%o=s$u^0BUReYYU*8=c_*T^PjqmpOf^? z%t2P2|LXU@&tJUQ+noO%;@KSiHb=jI=A&QFHGsldCbqA4dRH`!N9fQp!rq+ZIL0}K z%Ys(%#o5i}&Wg0WBr72V0zuJ5?X4l!+q26b-<@B0bbuRTzboFoXEOuZ(9JKygNL)JYEgT+~$TU11*dT zOA=A|6WV~6`?mMNSwN@ehSUF^ah9`)B_nikaO!+3@8(u5o$|`FdC}C^k$VkS7V|FW zzJv|c+B0{04*xc{e0SQ8bD3C{a&H)K*V@+>ssEv#`uR_55AM(uaK-s=cjx(T?f!3X zXLJ60h-Y*D+noP4=Re~BV~&1W8~*jqeahgqd}V}6S3bh`vJ#?e)gfsi12--O~O>wOcB z@m24eFrUl68K=|UH~+Wy2>pyXWraY;hex6pW}N+vM0qcyF~QraIA?$Bh1VitG1>k{ zV0mW!D?8b3<@j~S-oUHY|IYJaRsMgrvswQS@>KkPJvUvwKJ3vD#5vgbK?J8MVjv8v zxzqDp2dh4TU%Q{1r}=4K|99&RxMKb9?7iHpuK(wo``?Fo9y!PV|M&kvyThHAXn!8F zNIXT~%ia9|r#QyFTDjdJddG1(C2*qs@{{`=9Nh2y+-{GPCZqDp0j_kch zU;6YOp&t@9#tDj8I-%1-DT(a`k@nupXE;X@PSKbkn$8FZBi8Yv_Xy!6L82HdP8Z$* zMqhjF-o?|*{~d1-j3ZutL0Jlg-G&fFU|fv0Fjr!$dr zLUNRoXqK{sO(_xRhxz!&%|5W%2UhL_j;96EM+N76kuyY6pdrQ+&F9srLyx=IHr;;I6>-& zCCoNuu+15o;WSPNiikWLE{nncZ?^Oza<}X!c(jbibm+k$Bzi!@CDk+ zvjlBfL+^5y*?AmVS{}&09C^U{DD1;<9g9OMi|9ip1PNNW#;U<_8tS zC-L&Htf+WXA0Qp~o@HJ+~+n z$~R5{%@^H5vQlkYpwN^oE7OTrwoYVObkI&cMLEDx6OR)d)07CwQ?)r-L%q@-&DP%j z_^}BW3-1`hX22*k8K5;(b*#`nHIk-krY4cYX)H%~fM62I))!&6koy^*3iV|$u(Nj{ z2>>r;-xC%oMzy3&G++K*Uncgfv79x}+JAd=e!72fq}Ge-@saG?uD#IS2N)Q9&1~C{8A?yM2!XDTf&#L8jW%0Gyu8nPCSW0wm$ zI9ZhBwyTP4k7>H?*9wK&az!y#)#{%OMwYcYi%%k>Aq>zU(tmu?bLi2(ZWn?>t0cXa zo4ncITalBa={CBA3`^mx?uE5*HRRksJ-vMWU&k7B7*)k;QwPd$S+Ix*f9+-29TKjt01qF?RvROwk z4z9=|Kmo{mK_7iWzV&|%C(pF^0T467VFPZDlxS|E@nl7=R0S+WCoCr7DI(V-%^?ht z*A@Q|Q6C;FZa?1*pE=n1^=hN$om!Sa-FX)7)}ZQY8t9`RNs=&o@D33=NGOCXidp(3 z*Z-!VU6@gbI|TZOGcu(jCtRM);k3HH{~Enfv$1uSI%m5jQ`ITu>>@#+F@CuHSur=s z+6Imv>p*E0mWZ!f_8q{sk>Pw6_!8$TX><7&cneAX3p*nIapdu(LI6T!p5==}YJ8VS zOpEyly@f$vy*ai@2g?t(XW0JpdUI3sz%<>*L~fJf85@jZeK5H#k!CRJX^m1HduN&r^KRKnxy zckcoes0)AqZ6#FXDENN=ERg^H|AKxW*mJAqtGNYPCF5j5I4AL8A!V)eXhz~9q3QG( z>o?KvZ@kEBVwc+FpWG?*-;SjSF9jErC>Y(d& zCVKtk6;{TnF+mey`fAvPyRH8&cj5x=r2hMiqDSS`8h55IM(# zs^-QzP*n{NYP0xW<7^p=4gI&lM?RLIIar4jl!5x8Vs#(dRb1@u#%6Mu_J8VWkSbv$V^maysKC&`t3 z#AZz7TEo8%v%kA(?6Lm4o5m%-UuPPxzc&n;r|W}E)>rQ2={!@ve4bWjX?>2aJ43t7 z&m}YR&L-o-Y;mfkJJ{hIetmZvoU?jX>~CNDz`A+v^jWF@QMNCqS`mLM9ncE>&x;qs zivQ2<&hEzl|6!hH&CbrZ=p4^QkxtQ(+~PP(X(TqB3PmmTFkM?3AgrM z+Ef!_2SW--POph}C^Kb5h%RPCos zdx4-X$8+-~?3ayge}m5DQo;#}uwGv}9yZ8X=`=)#?@odXu$w}EdiVYeou0ire19NU zGCDhYbF_bcgq)U@_PyE_54Be02PKZxV96cOmDozQHY3UWS!c9On``53OQQ*@c&GtRu+PdCA$tAOQmRoeP4^`CmnZK`3T&K^NJS2C!=G$v^-hk;9Rts)HAM6W;|stK84 zp3|sEux3vodM^lKX|hmcmz~rW`g6vmuz^AGO4DiLkXD0~eFHEGIbkOGNXeY!1IaFEVF^hmU$`w&EP{1H2Ii?AC794%R5-K>82oN+HP1F5TR#2+>JCya* zNZO_%{?VQ?0^66=bOaSYleD3&8L?>NS?)EKsBFf>EC>PZ@nz>sLFU z1|(E=2N$MrfR$D)m4?a@c52SECIqS?(__DJpadY zjI&e85#=F3$}nrI09N>azIgufS@rz?^7+R8<3S#E{=ee~PTk$Y3U+$RWBeUG3g8#2 zGU@=oRI^b7*ip~%6={gp(ye?A4DUdd;{*I+txgrgyHfF3fOnwi@iAPk^I3OL?wZ?p zDkl(+&HiO2N`bJO>`WfV9e2N~C$j5^tfq?Udd}3@KvJoP(BWH*Pf^Y?8VR(;QuI~@ z??z`3y}J)|oDdSLuZK9t=94}EU?EsULE^(k12AR4=v&Mr zfn*s`j77xhm~asS_}4^D@WZoucOXc(?2{Dt75&1V_4y7#st7Yztni#TN41fh%hQQu zs%(M|=M5BzS#(9X$z*MNS4P{Gm_kKoAbJSRX~dcKaC6ROGm>O*4j4y+2+Z$8G1IQw z^3W;q5eA_OD*LC$4hE7;PtgTT6G^yZ#l8(+5=azLM1+_W3A(1(G{=d^m}V{s zn@%Mc!_k%G{LbMBEczuJ*@qrDgmad0IUXisU&PXDIUss4-a3aB_#pE6i1ju z#t%Y%w$78o&;+K(BI5@M7D94%tRlA+X{6s+h_d#f8{O^j^?^oK&%a)^E2n1tH}vPU z7_ZSC*^f7Rda6PRi-yBmi|3ZbG&Fg>UXw&hS}K?Ph01Zh3={P=AM#7v8vH6p`zd;Rrg^pRT3>ok!H(`bzWf?m~_XT`Wn)fgPJ zs+C3O%A#6XNhw`wtCC+9exb?QWYv~mjY`ldxIqKZ%a$kyrJ+uf2CN;Ba)frQ%Gxzz zgGR4pP1i`CjI6Ji6f4ZOK2V=Z^Iyo``V>7@2*}1<2Q1w`G z*&y34P?i$86IojO?6`lSkDu?H1QjPR&y8zucet)+m}5i-c5;>WzKo=m#n6GS>a!zS zw7K_rW&B?jj=$%$L8_Fh{&q5>GG4*0+QM2{oC&zZ;@!mQ1Dn54$vngNQ|Bc5YrS-8vJGJ&%?pDfBnlJ{?dn?D*T&Z>GofC zwx9GZDDnYvY8;+jzIpe<<@>WYm%-zc_iuymg2!7^PBPimCqcrd@6X-@qu|f~|KP9R zJaJl8Wo}R)+fCS1zKe=n65~nm1Pvy8{h*<-*T-*;&M!~jfB)wA{KuoS)`qpxrls+g zhGLesQWIp>HOL9&Z$-~)7mp9ydUzb)S?9!>ofBWwx%2nmpC6nZf8X9aafiKAqWl`& z%bg8+o&LS858lC>DRX2ah44#pPK45*60+lWVar$WcT^ffF%tf zPIiYTX36i>lVaulKTW5ch}#E$=n(&5_jxt{`^%TlHu0Yy~jO?h76L{cZzEg6g)?LY_$0!t8u=Q71Wh4^w??M!^*HE!}9 zYf$=93qAY*>3vJm$Unn0PBGVjO>IdAl0!mkXARZ{jt0~5KOE!eikNVH>d`dtRmf#J z?6j5$TP4=3C-J2dbVbwnSfD`UTpp-VCAnT5dee97t5>gA%;CCWX-(HnxQs_@lzO%c zM(bDm(f~vjxq#Tj$MY;9)}HZP4}7a$YuWsDGQNjGB!R0Ms?O7>raWpcApyCi$ZyLE z2Arr%MAf$MU~0=J5P~|L()2?Q{OS{v`(Q5NP zTn)NOL2STY8vmf<$)UP`_N;TGf^+DVGH7MPZUw%SgwTpSF!8bGuISQVV&G@XW5uYjA`WWUF%;)-Oy%>f;C zqdkP2gOF!)^6s!lr2rpVqPTXqPDf?N~{eljIe===SKUHOQN*%a9Pe_unkQ6 zO9T!HeWeUuqG@Da;j4Mta^3EsJ?c9=qMnx{r$C%%KsyumHHpWm%c>(vr_-_>}56o^ULSEFE{$1hj?1!KbU}? z=q-z_Wud5hb?o|SA~z8tHW4B^MTpP_`#Q(4;xawYCp8BPYeB9F$4M7ARJ7C+ReeBsyyXCl4K4No%}i@$vhOZ?Na`$ zxrNFvE;zfb*HNOW$mP;mE&>`*_4;$1;wgy-W5=$bK{C{y^_tX1+Nv~{X9)-pR%*Fc zzf3hJ7+h6~X!J6FV+R&&#f=SPDCck}bi_6{5SwytxQ_f14=@+KaB-$xu??@2H|xw# zFJ@d<%Q2S(PBC*lbU!KBW~@0Ax_yAxk1u6ci&PN57btML z5v(~=eL!nYS0^Y!kh3hX36Rtcwza=S+vr@|-kuZrD-6S`7ymtS%oc`e3W;Jep&v#_ z{a+S>@O`Zl*4)3o)t&7=Yjq2ifR6gDEtRxR>%^bYk6k5TL-DFMv4dhjPY#7rU@>-1 zV|@)sCtO?}Hqp%K#EC0eEuQ!hCCyJmhM=;c1obV(#ja`xXI7I-3%N)gjYqQ~LhFKY zAypTQ)A$-|$Fk3E%jO{#j>q2D5;tsT?v0t(B9(RtRO-F+nVy|Jjgw~y$I}PRb=lsR zjNe`Gy|$4v{aK%{b>>)=bSx11w0&K!wJh7gE?K0N9qysnR1JqUrHqY637*yZANB>A z-_^51|MTp{ux9@=e73jI|2)Lgn%QNO&}F00Su^BkU2Vdqq1=BX%p31h_0?lU(wyUj z{++~c*mO$MsdI_9(u)G_;pAKz6P&N>IgzOL>~&X@*F+bOiSD^nwGXMr7c5diDJK*9q3^DW>O5-8dRM`$34$KVnm^_`WVWr`ez^|@y-Jd3bxUs@yUTm} zMj5lNS*XOvGw1Ta4oFRuR8{~VKO(s53}4fPi13GmjU_A5Gu@c9Cu~|Shi`&@xNn^! z%Zur%knGX&tM30R<-a-R6vyLxwEuqo^2Kgd{(JFaWB>gi&&vD1jr_Nf|JDil{{Hw- zj*4a*h%=Vk7^+L|FBFr}o=aTEEq#A{=vq6P%`_elWQl>z4&A0_g1yc`MuG2&#bs#< z4~dGw!T^#fO6Nel0#U~_`<|j z(q;N6unh+eS~UxtHadBOwkFlg*qt{LudZfnC;65jxejQ1Vbz2kW=v~0D^n9flsVpZ zU3)0&9hBADC#ftra2jZxrxnD;IJzpb+n}auc0x`S?Sx)+dQ=Iw<_xLO?_noO!{D{f zmxCE&Lh;X3lRzc1Fx*64bgP@@a8>v9y?7-DR4v~Dl>GrGgyS$_5l#-004ra9p$ zPO43>M=lr27tl;iR7ovPa!$#$3P7(4beLtzO7n~9=N?`EO$-{@*^={X*f&l99cO93 zo$eJ>{!O;L#BjO2Wt!5w-tLOh>YQgnsvqJUkD;CZmya^=fAyYwe#Q3%jcW(-$Oht=f9U|e;%_)Jl$A#ZVrRDKMWpy$RO6R zBSB%E#G~1E$xAo_{#NG0C=HZct0dn?4V24{|BkC{ zc6TT6lPS^&y?CZwX3n)S(EyNA29~Bt_zfEXeD_{2v7xyzDQ2(T&$W0$x0YYjSTy`Sp$FBI5iDiv!tNoahEQHmBd9(Fmj+MEF#&iiXfiL z<|PpX8j}c1-YVFfxPi|B=?NuCtOAF_Vpcp1*zlH4d31PkZem7D?f`Mf-wQmoj`T|; zzm+8_26DlCac=%pO8Wkq%;8ShfWdF&)VxDm#mWp`n>`p9+ux{ENQpdy#7|3xJ1<0z z#snqoMxNQ_LJrX{vM7X%2Z~~3^F2Q`K>?t$n6V;>Wp(4tnaZ7xabWr;^;E=?1cK`! z!BEOjs`td0A)1>+a38J5{#LovN-;A~G*FIWp*h5d-(x{ev7fpJF#Aq-Nd2nI;mtaP zI&Z1_$+?O%0A97@Y}FQ=85tfV9>(dErZ@?Vw`Ccqyv(j`95H(k4-W#ELoTx{VGAYq z1T&J%&6~jhFv?lZ0vO{|j;O$C%$+e5J%ny(lAsyB2AkrX4Q#PMGI@iMVIh9HvKtt5 zoC--`2r~~bf_9$Gt2zA!XhONj(H19D^5Hy7sM?YIM1+H#KI-BMuN@oAs`6NM;JLxB zbbwv4o&FOVhjlvtfhF?o4}mMre>*Q;RP#R#cXys`&VLW_Y|ek1^WVedf3}PSM29R( z7VwA3=_utrBma~|)t)Q&M^V$m+ltgCFVS)e2r3hll86W)k11PZ8bWtPF;<+e54l9( zz#?TomL%*({!$T^{e;k|P?k4d4(Jlc3_dPBL26fy`a#g!5f!*vtM|Gwt>ph1yIs0%K0y6Ax=2K@j?z`9W@-sC{Kj? zvVU@jvILugbb`h#pIzpOxWs9EsXkF*LniW~U4>xjp;2^V%czdI?mrTxGE9?48&s)x zqIx&_4*KB+e5|3`8llQG(9k;zPlqjr3$v%HZ3tgnL8^k*cV_UsxA4OTI#d-MEoEzC zOGn+sK|3pN&9HDAbCKw~=Zb**DcNPO|;JSc5@z;@T0 zNMPY>bw`z++H2{{S}$}I%4N{Dx`FN23d(tN*;w3u={JznHCcvwZf+GrBW#AoZ3f)$GInKaEs0g zv(+jd|9tk~%>%bC-PW@RUrP0*mcGm8%_^I4+tbcQ;nmje-YUE{3hUZkuR!sk$73DS z>*}y%oX#;{tj|1j#Zz6cWmt5nTkw!C9g_-v4?QLg|Y!m%AZEXJ|>8hIlCsY zvRunKP6buQeylNKM}T0Oq*Tmgcj}kR_FhC;KjY!e?5Ega<^vx^>SnX^&pR2B#jcltBnM(kpONf0hFe^jaFcljoNS+ z1$SEqk3y3KUo+mmYpd_~vSVw|O}n-JWcFyqHa!@sM92MEgR{G`@|H2Xvb7JWdLlrr z#yz>x`ilLyQo7?_tdVXeTKgW{JRz2jzGI>n69MZ`f6zX%73oNCRdVG1wEy;vqMMQ` z*`(5x2(^=m0(eChm3)llL%}gBgGFkcp~@L-x^8w&SSCwg!FrZZ%H?IJvc?G{h%P|S^K)Pq<36^^w>A#LNlv0w1ssJt1TE%TeUuYKPkhg zei=Y)XZN1WKv&9tT2Xj^`G218?(Xf?^8f5@{J$UMX}$m5zxelyr<+^gjSTqZTAd>f9*NOq5@$P6JtiOga+e1rPoAxx@w_Gi2yn!Sx<|GcH326q79y*1EhtN zX4lYx$^$*}gj0QwqrZDG)!pm`H!~W|98XEPxA(yF9nZ6bpvdma4FPP;^^NLt?TR;4 zp-R9*_BBqU1zhmJ{Y-o203YI@!7@?*X}(zZX=7^F7=BY-Of~1od|YPH?w-}6#G*O( zWlI!yx0;&`Q-7!@#q>YiO>WEz7G8!-(_UjbBo&RPl1IbO9lBP;{;(yHhPn4I+FVSOUA;&1>rp)}2kJb=|YRcl*PJA;VGZ3}ix5_Yrx zl64bR))y|inGxR)C!H_p}? zce$egvreay^Fut}5S=n1sNA(!re+J~6@h$UMvRO~151oja#LD<#Dvpp37F=}27itr zY?Qs0_W_!XbA(=Fn&@Mk&Fob6?oC=|H$GaHlK$(VdyX2|xM|Ac-kSnlS|F0;s+7M*6ikZYBkbP&xfIxF9hM-ev48Rs;BFYrklv%=x`*8IB_)t#E;|bXDQBjtFpe6Pm zfC@W}&EcA)vC{Zb0hN_f0#9IN@D^gYXG<-xO{v1UC26b^>jIV>t?XiRh_jO1EhEZiNBFK9f{D4<-jx+0~& z6(m_83YLcx>T_l|KLdskKn7^$pLJben&Sc$a#p|eXd_^$U6oYQBY-f93X!w94mM@f z3(M^ytJcmPS&SSREiHK|=?fb78^op5F~;`F>*zzZ3MOQbtdtVJj$=n1Kxi2$BJf3f zRMeKZLxv4FHrfvC{?aTVj#Hq2SF=?KlT-HOv7(LZShpcE$kS^uO28=F&3oI#Vq_CEsh3N3zNpOKq_TL_% zKfQZ@hEC7k9lk%fIDU76&W_$3?VleZw`n&97mSIGo+W>@1<(4@iKKUqTwn6x#NRs> z%EX()&!^Q}H6?6nnYkh$s!()<11FA2Bw0?*V7rS<06i(I>E^~ojyREWJNZBbP?DvF zE!k*WlHc|a+QL^Dkq=7PS1PZ5h>lZL6h_8&$B5cxyk^5fL8UvH5UzmcGpzb0+l@(- zU@i-#re=9bspV;c1x*%ZP~fQG5|k+~Ti2?#l5Q5Rvj-z`tpcIY97IbHD-Cl8dP=N7 z=!SdN9;)fy6=TGozSwGGXz+*$Kx=Ymcm zeCG{w%?&xnd`hg3RBK+WwS1uf2dz0*cxoy`y=rem7(MHS9+KDKPB>zY?&0dZX5{{|PYh(=Q$(xvDtw;5LCx@O>9>F6YNr#PR< zze##60!SWjb_ZziQbG|VHyr}NTY$MY(D0#O5m#%=!&&X7v$gxGC5`*&FNLtGS=;q$ zqjZ9MU>meQfnxGcc%Jm3l@@$z1L({+-As)D zu1=~mFdfgR4$PebZSYs4x@ywYX4_#__0)UgtZbr`nr+aG?4vJr8>b^N zy3Qr@(7~t-SyaB$5`f;}iPrg{Kq)ZwE2GUcDc}uKwXQV`Q++@bhjMUOPVvWfd+9FO zsQtII0H`q2!d2h=Y!(yRdS$Q-9E97dxI2^*lN699Nu*ZU+XhkK?Sp|2yDG{w2b5>& zHA$&FgOz6}eWBy4{PdAi=<~WwRO23{t}&;0oXF#x4w-I?VbD0kSxJwUJh~m{`oI>+ zqm3+PvI@*`I!(Y%st|apTGB&;%wA3MXmbEu=K!dixgv`Z`iU$I_Fjje-L@+rn+3p* zv}4FrnCSl`y*30_Jvu)+I6JzyJl#J(|K;7;q03R5S29VjUvoA$sjBK$Pq2yup}z-L zWDz(SjU2PsSF25-Dvdc3sg}Pa!Q={3_gkFJW$#qwpUC2jOe(3ATiKI$z7EY2hvE46 zQ8m|HiuTa1ojL9ib=6i^^nuMBsveky>uAEpi!$5G(KX=M=Gk za|^B;XjER!{-9okcefp|}B1 z6k9wb_0_V?Fy*4`gyfD;hzhliH9wakhw_oogr_-~Yn3U$RyN}^y?UZUXevu0pbRHmg4~INwal1I(BM= z9zxnupaSerV{y}LKj2=Xx(d@OPW#uGCU~h?0rE`?YTpp@Zd$cfi5xG!hOGhe?F|}R zX|O@iv(E>-VfgXoV@t$pb!If;0%nLs{45;mo2Qx{5qI4E*w>qI`MFyVnVwRR+%QTl!}$HGn{=;LhdXzp-% zYmld%M;+#_GuBdmwX>j#)jK=ebq%){8e5^|UT>$<->ihGuRhE+CuLIG)V`HYVGC79 zIwO}E%LjY^<`@C_mKmWdo|TKz+C-R>mU|)R-tMQdv!BW%0iDl_T#Nqd0lPL3*cMuf zR%z5!!>&EEt@1{1Wv(vB5fyG`aywRcVKDRbo+3{GOyPsX40HD*8k78nkkn7BBg!7g z1~N_tI)RRsP3er1ws%hsO#lWJ)oT_YQ9yK`yD%C?e&a_ImWUo5qx>46_PfPCXSOi+( zP_1H$MLDjJqo;V}UlFd@z<_4Ry??O0^1~vn)VS;#jQ(JZ9H&Ow|zjQ$&h1Q&w^rJ!KTr z*so4?DU@$D6Tc7kTMi`UPz~&sNd_5_hE?$t{jCr=n&T^iM8UQE-Z1C@NaL$G>++M{ z>f45{*8{h`0Pt>1@9YZGzaMm)ayhA=V{VDwU8x?W@KUpxq)}NDO1M?-?C#FJ_o?gQ z27|#W&eG~HWoekY`P=*p3FlYe@+a47N71Gv$mh>JDMa~;q@E!%K~(jAdX#V3P|-$*y3wIJ_x>9_>PC(|w~GU2~dl^rKy7)OtG7 zuN@=xfAZ5I{;x{2{RIJlm&gBo_HuVPtj7O+xwFat@F347|I;S&@4e-JZA$!rl?v{O zK!&pzCm*vhngDfvuqU+Tgi4n$Y}Nugk>^^tl-f^YbG;zjD(!nzO9}_8!^25Z$sphs zY)Jl~Kcg*5LWNpisqEZNAAQKMM#Gf1fsnAd%4ZE8;Md6^ixtc8)${QCJw(3Z-7vKFX} zlWWQfb%(5DqV+p;@90DR58FLNCu;#I1Ub=NlHCT!y4-4#VJ>%n40llZU*x*^V~4qI zYL7IT3mpIm^2g+E0-1F?mofypNp!9EZ%|&Aan>hA8mR<*^*HNj%f{%GM-9qS%olxq z9vrB|*v)>K;F#%?b%bI@%-s?7)^E$=Gn2*hNJo(!HC^PFnh0=UrdFAi}W+p=>pzNG0yE)`v2 zF2=}tBc)umQ|HWtT9ZXem==}_=#NG^vcK2Vd+_+ycPdM-z+f2O>X8Z1mWtC7C^|t_ z1U*!Nj^Y=3K~1_t^wijT3I2%m5n%3TstE%iX%M*ysHE=F`RPk_YU5LgHxkA zy47m6?@nDanof)cNw>Zo=Ruj=Kyot|g?huXuy?s_IpO2VWr<-UU9%xPZpnraGdGpe zuFo1=R$NCGh%gu9kfk_-BcmSQfh;ycPyVcHBcpzYcq~tApgS0(`Z{8<*8SpEaQ zAwUrv0ln7_^lph>R0BPo|Hwiq9@Ob>X%c!QpVxRHeOX( z>j7ROq21!(w9dC18kYZ5nzk#q485yk?>5wE>sg7D1=m`%0Xc~2=+1}0oIXq(F(Yp` zGl0rz%8Ruur&8dbXH4Jxw|&KOG~Py+unc$8YiDNIvqCvT^q<}YU4P1y^)I{3p7!F) zCz88YTpXMR4U=*8aIQ1g9&oBve#&`=(^&trV*OXRP`^gzKI$;550XOUgdd*P1D!~H~<0C0nYH4CN!r+gg+Hyq6<3NI&)6vTCp2kI}?>=ukoBF zi_>}S?`8DAOY@T6GQ1Bn$?S#9-a2PaAIjH9kwvsz46QF8_RuZn2aVSc)?p!%9YIIeO z56Vc^J8>hsSu|7KS+ADp-aBu>H&2T_(@fF&#ze%J)>xd>zKvzmDXrREnNxyP(=;r&^%@U~ALcYRsVOO{RVlUcF}PIVyGh2gvLQJ`lRc z6UJ-nw^cfATw|W0-wcbN$f9OnWLvNlcLuw4aa8xP>i(r~?@M~EXIb8yh?$c1FW#K%>Jd&6PK1+e z7!H7AGQ-!DaaFwh#-`JRKv;sBHFBPaBhZY-2sPO31C9o&Z%6Dw%M)RZ5gjnvq*=;= zE<|H+>)PA)Ot1-1yichzju#MBV@%UBmd7XLHueeCJ7V8im6DigOO%$6c_PZgusj}q zT6qL+JQlC~_{lvn`={KdGjHQLxICLS9Iy4ERh?wJHqvlpzWYWRPSYZ6jV!T-=-L+(}Pd-0!jx+mm*ib90bfvQMDEVHQE<$kfEVBrH%m zwp^B0cZ&MXWW0k*h7{Cp(%YHvisqY+S~?_0?V!!l^OD7Z;cZjr8cuEoVC6c+$GO5j z8-d@^&2tZxVW#AulNgC;Moeg_0k|g$WdRCP!g;Mbqb5^DhDwMOB-{ti-o9?mh&4!KbiHiUqYEv?G<8vJv!@Om~CR9B#Q8ckZ{t zJ599aWIEHf2KEkJRwnr==m61}v4nsin6Mj-ax`O1kTNP+BG48rUwf(DM~v5feNk{3KhWS-?p7u|eu4i-Rbr_r|NFs6{VYp4rUdpw&bG!3#6Wif;^K^~>pmxdI z#ei5I|6#cIY`E*kf7l&9-+jJ`|L_n`bNq+hVN?8vr|2E*x0^T+n>Y~N;y|=1mT+A` z)PC<`KkG)c}CunG}6oSQy>?wuXHJ3RU>c>KSEKlVs8V<`CMn{SYaIL&f2p(zzJ zgBAHea}=?dpvO=vKyDR@h>GCqsP}}y?2o;u;0YRt2^#!2I(>J3VbOaOspJ}jx6}Uy z)BH8#|H;M&rto^^2NJ;Lgz?M2vGJvCux0_LCu2+Lw)gI>L#HV)Xio)O^#-#?$N+7b zTU2H0-HeP*PqYPc^NK>BKM#x-rJOqhS$HsEeDF6m9@xS?gy@}Q&Hz$ZMd^*ejES0P7R!4y4^8e1u;c%}a|L^R+ z*u;N(kf%ld-`T`{+sOO(8~4p{lr_S?dEs8x3jt@$DJqSxj0m@+UVDHzU8)`@u1pD_ z!=J(Q$8k(0UFG(u+cU`mTySRh)aMgxT8^{@?g)*Of`G6l1{r4&5rXl7Tmib&qepto z7utCE_?M6U01v zggBXu)P2!tdwWXrSuqYHHs6jICroT-7PkS*lz_ZFPS|)`WjxwGWDzLyVI^#nL+XxmD~y

wXx#u3FPIJ;&Ga2C9acYludN?l0tA$Ix6Jqj>B@UXs{1*oZf*b0x9X0(Grh`=iPK zahs4|6@6VdON`9 z@Ic6kAGBV*k4~zc4pqy8wgFI$OmrIFk z6I7lEB|_Won-_P_G0L{unZ}DY5|()B4V$KdLDqg#bntnkDFJdep9x(nI_E(YDmL&d!TYZJhy%?25#$S>YY#rU)G=IrmI8kq4R~U z)!K0*zt%GZ-@%wUim=VN-N(4yo^2XMp{`jf<+|Zpt$%AoJhfWM#XVhHH9qsgI*gThA`qY$L*qI`f^|?sIji}n z1=f^Q&T^5HG$P@g6={C1Kn6X>IwZo0xg~4T5-XN`kYFJK<73&Oq#J}iM1k%L+%F99 z4H0Zk2Il3`95+rM6omC6vW-o0_(oIP7W!D)n+#J;cD&WPP`<^ax3TQ!&)dsRq*@f+ zhFFOjofhq_b8qN6Lh2DgksK1^b*VfzO>2`PN#J6C09S1~SDh1R<7p3>SQ~obT0^8c ziDo#ZVs5Hc%$XVp<<61D2pV32Nt5s8@~0)>MjH;@qHwH>gh%&E_>Og9sc0Wv`eLiJ zlhtChE*1^ZN4}i@b-i~TnHV`agXtX_|87BYmk**qDe!@3r)9Jk+u4Q*Yg%%MdYn#} zzLSNw@Y2}Ob>P0`^J~M9{TeQ*aH98WZIK8p^olIhy|#h&tK7=fHS`itDmdS=#u5Ss zl6V2q&J16hV5sen(~r^0DU`6OSY4{w#BkXo=-fHhT$@bXHkZINTdHU7i8YYyJy^wJP>ei!EP8w1YHJXDE&x4McdZd~V*A2EGzc_InVl zTiJNnuic_evFSk3l`hprGWre$L8XWdgZW!fEk3BIhDwrnO?@o0`z=L!l~m@H^>8d{ zxm9NDxvQr74nZo0Q+L-LpXQa3>NHlJN2@wst&^jYr={j5Xk|?k%ht;^**GnhSS&Qg zkHhHn=MWuFz);H}7ZoVu?3%_TeyaHP4M8zWpX5-l-I`8*J^eXwO?n{M593~r_?7bI zs)GHlQnQ&|7sgk38I5eXK}nb8Lfc&?rMs2bwvoj)ve=U6tIA?sMKQ@KmI+|;`xl8w z%@Pt?CZIL8X_PUYWH3pyr9zm?Aa9Y*r$y{C)?1fl6~|HB08&}jv{^Ag>feXtrg=Yx z7`WA4+*rMALC~@K=MPlmG@TwKn9lo4J?YJMqc%ucQW>_L8kqUdEGg!snmEQy6;r>+ z<3t(6*OJ9Jp>%5zcDu&ti4RUg8!6&`qzLe>x_Ec^ZiECeC*}yJFmGKkPPy2QIZmS)O{eI! zam*}JNSLewk_<(f(?lZRQ$mmEf!v_%&h!{6I^*E#3*w+YRF5griC7+72=Y+fh(cdO z6#6n*2=Jg?g`$QIeR-b4KK6fw1;z$Y(e=f%b(xUxhsgku_>M3bwl5TG<8X zvoL32J|pUt>u9@Fq$)vI%o_7WMvesv)Nv$0p+df5mzQUW`4Z|D+x&RlDqFhFCzP{4 z;d#<;uHBZj;Ed#)lIt>JtUN?%?;~K^PhnNr*K@f#lv{%(@&G-iDb3HAFFkr$lZ!D( zI4bCzEvsYR&t9?8b=< zxyZk0k6FI|Ki_$|yIbA=hr><&rw4h$5M4mdV#crJ_LTU0JytQu=rutHFf|0)&(;1V zxBIm8@1 zQUequQt(K%k`u)wOV~o`{n$jgr%E}7rSjENB*-=4IC0wV+4dm`QpQ=vB)Msd(63j; znDCU8>#!=0|Eir~!`_9Jpb{z|$mJY#xw5~)#GVv(zn?RaYxgQiOqG|qi7KX(F;VGu z=T~l%s_Ilq)DygXEIB{s+L+B67(oVNM zZI%828GK(Gt!($_6M8L)SATy$82;*+0sPtx!(ZLt3%@=PhF;>J<%j}?etN)P9{@u? zV{K;?T_WBChP`jf>jRzZSI)@I)HlPXLQtC^V@rokjv8zk#1vP9ci$7sYx4Jqp~`p= zPDv`I%#|4G;tM=~F!o_F%*&8yEqH!i3`u(ZnzOmW^7n{g_f6sfF{J5~6CpwsEFR*Q zuE0}bXlgygHdevV(eH;sBu&WvelTn!)0%S8N27%E%8&MQR~_Yl1QUC%~z zTZQIV!mxV1wgk?O2rEUW{nkvsNsm)r@7k>FyM) zMp`b5N9c?QmguPP>Z479rCrS+NOsOpOgOzJJ%kw8#hOwgbih|`dPlA!U`lRE&|@r= zovx2i*z2iTV+nINWO1+ZJbF|vem#WMHx*^v;%h=H>fqxXy+1w-n*h4^v=XdJn9B)H ze839{0qL~IPgO&b$Y2|UyoBauyPkJWGC&av^rGfLj0?UfpzpifD1_KY~ciPq%+)Wp(P=P#ihSa(# z3-=W!b4iPzuWvAPhxTNdfwGAkC@WRoy5 zHdt!1LY`Gf)uCK2G-lTSEo^{OwH&B`6e98RgG<(80XwdBD?nGlwu1BlR&MAWAPqIp z76ex&F^T)PV_K%2J_>uc=UW=eEf|-s`IR|Wl;C;Roo{KRl{2Mv51-&fD6eg;Lo?2n z1K3k>9P<$hpsB$6lBndA)we1+@7~@scoTU^W`#&bDBvWfoJ4uh>nR(AUbm%)IxR)# z8e31RDZ`2O$?~96l^{R4!3$9v3X?(~f-WfIYOeIg*k|>$= z@~g;5WWk1Wd$FPLE^+O9QkSuxs5Gx8i2V#ebg$610}O5Vkl*((43`XA+mQ9pvO(+h zek7bc5t7N8{;~-$(56YBdi^cQW_U|a@fMb%bWE3V5;uSf&N8umz0*TTgn}IO6;<+P*RIFzI) zzb(*j1y1OMlGu2*!cu^KG{CWDE+Yti12|%VoKpH|Sme&R6AN`PEQ8-5nu?s@7-+*6 zG@VL%z#d8vD{`I1NF7vDM00`IO&WSEQkk`kkoATH&d4~O(iA6wjfiO7AgvdU`Q#n{ z!3d>7+7gRJ zrKBt+M|nYRBC~x~0|B+>FfW5JLK1V+?w|r(cfrAG=-{t<5_HVcVGt00LET1ZE0$Pj{^v^bM-k;jP?d4i?OE2CFQ+8n~>g>#|yO z4yT^J>V=eFCK(YEGflV5>J;ooAqT%HrOg$;laOxZtsSo3blw($|4wv&6342SW&G zq7Q&Qqy{%<=qhD5XvS{T{ZEugG(9-s@BZjk72%8^&`s)EE-ZAG79_ny^TEp>F#p)~ z3Zc)E1L$$N<14Y!(rir*plXWMtJkp-^%k%Gu=LbbHQ=;2N1pbCP0XzACPv8iIV+~K zx(T79SE?HAHQ;5ImxB}x@^XwUK0S1I7*)(PN9e*0x2i%!q*H{`#e>iay~PVOmRv;X zhd@bkc zfxuGI?ebHhyv2A=|2;6R^lx=13NXI%)j~R^l{@r5DEoyTkYMTUsB?>;ZV^vd4C}sE z9#PY=iZbh5FIj!tVuVDI5k4qC_R7tm=WiuAqm}!ISLOl&UL}~Om-@r-)zB+@nQ@l0 zh$SP43*+emPNB-ny-IU=lnpq(sWtih+lJb&zU}pTH!!u#CeU$bb~fcwxUh=IwJGP* z+@2;!Uh;CKbT+VXmWAbZ7*e+F13_p;l6fd*DpC`C7`zOJ;jk3|O+}7V*{oK9wU(UY z6i-P!7%xWXf+h*!o+#o>gh74KbIhkCS0hl)4u!oOW-)Ny+Oc{z+|`3Us1K?O(w_lM zv%&-V>f5%3ARKMe|Ht0d^tKTK(L28a<-!DZd0T7v^@RsZ{n zZ!oYym8GhZ_mGR&Nad>}syIRXyPGx>!kJzu=^DiaBT zC|+(tCZWYP$J~9uxTN{@{-vXxUVh`=Q5H6hr(L1xIHI!!mTc1d_I9RxK=^b!P<&*B zs;u-z@_BH~$9XpqF+MW+S>fJc%m*O`5zXIr)@@_=4Gu)8w2$G!%G<8%QrINU0e!~v z^YA+b^_xuw`u;p6piTGYE(6Jtlf6uF{kqF==!Yp80&Lx{@A{B|E0>BIN|(*V{ivU& zYZ7~)vvcWzErNO0gmQN|g0I)o@snaof15N9j^0Puh~K_A{Ep#)(20=xuQrWiXxlYQCnCIC zddk|qX*jhI+_Az|*f|YH4RRY7_D=i3fP%FxyQe|dpBrpJE$doW;TH_H;IhpCe3N9- z<@lvv0VGQMmtENQW8tjrIr$G?!&%H|a^*Ckwzw-zU`$-v9}KvMt)rFy^+eI@b-k|F T|8o5a0096095Ce%0C)lbqMmRW literal 0 HcmV?d00001 diff --git a/smo-install/test/pythonsdk/src/orantests/oran_tests/resources/cl-test-helm-chart/odu-app-ics-version-1.0.0.tgz b/smo-install/test/pythonsdk/src/orantests/oran_tests/resources/cl-test-helm-chart/odu-app-ics-version-1.0.0.tgz new file mode 100755 index 0000000000000000000000000000000000000000..b78e502a9a76c77b8335587ae183605041e9605e GIT binary patch literal 25346 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�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 bool: return False def test_cl_oru_app_deploy(): + """The Closed Loop O-RU Fronthaul Recovery usecase Apex version.""" chart_version = "1.0.0" chart_name = "oru-app" - release_name = "oru-app" - global app_name - app_name = chart_name - """The Closed Loop O-RU Fronthaul Recovery usecase Apex version.""" + release_name = "nonrtric" + pytest.app_name = chart_name logger.info("Upload tosca to commissioning") - commissioning_payload = jinja_env().get_template("commission_k8s.json.j2").render(chartmuseumIp=chartmuseum_ip, chartmuseumPort=chartmuseum_port, chartVersion=chart_version, chartName=chart_name, releaseName=release_name) - instance_payload = jinja_env().get_template("create_instance_k8s.json.j2").render(chartmuseumIp=chartmuseum_ip, chartmuseumPort=chartmuseum_port, chartVersion=chart_version, chartName=chart_name, releaseName=release_name, instanceName=usecase_name) + commissioning_payload = jinja_env().get_template("commission_k8s.json.j2").render(chartmuseumIp=chartmuseum_ip, chartVersion=chart_version, chartName=chart_name, releaseName=release_name) + instance_payload = jinja_env().get_template("create_instance_k8s.json.j2").render(chartmuseumIp=chartmuseum_ip, chartVersion=chart_version, chartName=chart_name, releaseName=release_name, instanceName=usecase_name) assert clcommissioning_utils.create_instance(usecase_name, commissioning_payload, instance_payload) is True logger.info("Check if oru-app is up") wait(lambda: is_rapp_up(chart_name), sleep_seconds=5, timeout_seconds=300, waiting_for="Oru app to be up") def test_cl_odu_app_smo_deploy(): + """The O-DU Slice Assurance SMO Version use case.""" chart_version = "1.0.0" chart_name = "odu-app" release_name = "odu-app" - global app_name - app_name = chart_name - """The O-DU Slice Assurance SMO Version use case.""" + pytest.app_name = chart_name logger.info("Upload tosca to commissioning") - commissioning_payload = jinja_env().get_template("commission_k8s.json.j2").render(chartmuseumIp=chartmuseum_ip, chartmuseumPort=chartmuseum_port, chartVersion=chart_version, chartName=chart_name, releaseName=release_name) - instance_payload = jinja_env().get_template("create_instance_k8s.json.j2").render(chartmuseumIp=chartmuseum_ip, chartmuseumPort=chartmuseum_port, chartVersion=chart_version, chartName=chart_name, releaseName=release_name, instanceName=usecase_name) + commissioning_payload = jinja_env().get_template("commission_k8s.json.j2").render(chartmuseumIp=chartmuseum_ip, chartVersion=chart_version, chartName=chart_name, releaseName=release_name) + instance_payload = jinja_env().get_template("create_instance_k8s.json.j2").render(chartmuseumIp=chartmuseum_ip, chartVersion=chart_version, chartName=chart_name, releaseName=release_name, instanceName=usecase_name) assert clcommissioning_utils.create_instance(usecase_name, commissioning_payload, instance_payload) is True logger.info("Check if odu-app smo version is up") wait(lambda: is_rapp_up(chart_name), sleep_seconds=5, timeout_seconds=300, waiting_for="Odu app smo version to be up") def test_cl_odu_app_ics_deploy(): + """The O-DU Slice Assurance ICS Version use case.""" chart_version = "1.0.0" chart_name = "odu-app-ics-version" release_name = "odu-app-ics-version" - global app_name - app_name = chart_name - """The O-DU Slice Assurance ICS Version use case.""" + pytest.app_name = chart_name logger.info("Upload tosca to commissioning") - commissioning_payload = jinja_env().get_template("commission_k8s.json.j2").render(chartmuseumIp=chartmuseum_ip, chartmuseumPort=chartmuseum_port, chartVersion=chart_version, chartName=chart_name, releaseName=release_name) - instance_payload = jinja_env().get_template("create_instance_k8s.json.j2").render(chartmuseumIp=chartmuseum_ip, chartmuseumPort=chartmuseum_port, chartVersion=chart_version, chartName=chart_name, releaseName=release_name, instanceName=usecase_name) + commissioning_payload = jinja_env().get_template("commission_k8s.json.j2").render(chartmuseumIp=chartmuseum_ip, chartVersion=chart_version, chartName=chart_name, releaseName=release_name) + instance_payload = jinja_env().get_template("create_instance_k8s.json.j2").render(chartmuseumIp=chartmuseum_ip, chartVersion=chart_version, chartName=chart_name, releaseName=release_name, instanceName=usecase_name) assert clcommissioning_utils.create_instance(usecase_name, commissioning_payload, instance_payload) is True logger.info("Check if odu-app ics version is up") diff --git a/smo-install/test/pythonsdk/src/orantests/test_o1.py b/smo-install/test/pythonsdk/src/orantests/oran_tests/test_o1.py similarity index 100% rename from smo-install/test/pythonsdk/src/orantests/test_o1.py rename to smo-install/test/pythonsdk/src/orantests/oran_tests/test_o1.py diff --git a/smo-install/test/pythonsdk/tox.ini b/smo-install/test/pythonsdk/tox.ini index 3931d706..53b7696f 100644 --- a/smo-install/test/pythonsdk/tox.ini +++ b/smo-install/test/pythonsdk/tox.ini @@ -8,7 +8,7 @@ deps = pytest==6.2.5 pytest-cov==2.10.1 pydocstyle==5.1.1 - onapsdk==9.0.0 + onapsdk==9.4.0 waiting==1.4.1 markupsafe==2.0.1 passenv = * @@ -22,7 +22,7 @@ setenv = [testenv:pylint] basepython=python3.8 -commands = pylint --disable=invalid-name,line-too-long,too-few-public-methods,import-error,unnecessary-lambda src/ +commands = pylint --ignore-imports=yes --min-similarity-lines=5 --disable=invalid-name,line-too-long,too-few-public-methods,import-error,unnecessary-lambda,too-many-arguments src/ setenv = PYTHONPATH = $PYTHONPATH:{toxinidir}/src ONAP_PYTHON_SDK_SETTINGS=orantests.configuration.settings @@ -36,7 +36,14 @@ setenv = [testenv:oran-tests] basepython=python3.8 -commands = pytest -v --junit-xml=reports/junit/oran-tests.xml src/orantests/ +commands = pytest -v --junit-xml=reports/junit/oran-tests.xml src/orantests/oran_tests setenv = PYTHONPATH = $PYTHONPATH:{toxinidir}/src ONAP_PYTHON_SDK_SETTINGS=orantests.configuration.settings + +[testenv:ns-tests] +basepython=python3.8 +commands = pytest -v --junit-xml=reports/junit/nt-tests.xml src/orantests/network_slicing +setenv = + PYTHONPATH = $PYTHONPATH:{toxinidir}/src + ONAP_PYTHON_SDK_SETTINGS=orantests.configuration.settings \ No newline at end of file diff --git a/smo-install/tests_oom/Makefile b/smo-install/tests_oom/Makefile index c2bb6f7f..3db2e129 100644 --- a/smo-install/tests_oom/Makefile +++ b/smo-install/tests_oom/Makefile @@ -28,7 +28,7 @@ ifneq "$(findstring v3,$(HELM_VER))" "v3" HELM_VER := $(shell $(HELM_BIN) version -c --template "{{.Client.SemVer}}") endif -# use this if you would like to push onap charts to repo with other name +# use this if you would like to cm-push onap charts to repo with other name # WARNING: Helm v3+ only # WARNING: Make sure to edit also requirements files HELM_REPO := local @@ -82,7 +82,7 @@ lint-%: dep-% package-%: lint-% @mkdir -p $(PACKAGE_DIR) ifeq "$(findstring v3,$(HELM_VER))" "v3" - @if [ -f $*/Chart.yaml ]; then PACKAGE_NAME=$$($(HELM_BIN) package -d $(PACKAGE_DIR) $* | cut -d":" -f2) && $(HELM_BIN) push -f $$PACKAGE_NAME $(HELM_REPO); fi + @if [ -f $*/Chart.yaml ]; then PACKAGE_NAME=$$($(HELM_BIN) package -d $(PACKAGE_DIR) $* | cut -d":" -f2) && $(HELM_BIN) cm-push -f $$PACKAGE_NAME $(HELM_REPO); fi else @if [ -f $*/Chart.yaml ]; then $(HELM_BIN) package -d $(PACKAGE_DIR) $*; fi @$(HELM_BIN) repo index $(PACKAGE_DIR) -- 2.16.6