summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xdeployments/_functions.sh11
-rwxr-xr-xdeployments/build.sh2
-rw-r--r--deployments/helm/onap4k8s/Makefile11
-rw-r--r--deployments/helm/onap4k8s/README.txt3
-rw-r--r--deployments/helm/onap4k8s/charts/etcd/requirements.yaml2
-rw-r--r--deployments/helm/onap4k8s/charts/etcd/values.yaml3
-rw-r--r--deployments/helm/onap4k8s/charts/mongo/requirements.yaml2
-rw-r--r--deployments/helm/onap4k8s/charts/mongo/values.yaml6
-rw-r--r--deployments/helm/onap4k8s/charts/multicloud-k8s/requirements.yaml6
-rw-r--r--deployments/helm/onap4k8s/charts/multicloud-k8s/values.yaml6
-rw-r--r--deployments/helm/v2/emco/Chart.yaml2
-rw-r--r--deployments/helm/v2/emco/Makefile11
-rw-r--r--deployments/helm/v2/emco/README.md39
-rw-r--r--deployments/helm/v2/emco/clm/requirements.yaml2
-rw-r--r--deployments/helm/v2/emco/dcm/Chart.yaml18
-rw-r--r--deployments/helm/v2/emco/dcm/requirements.yaml18
-rw-r--r--deployments/helm/v2/emco/dcm/resources/config/config.json8
-rw-r--r--deployments/helm/v2/emco/dcm/templates/configmap.yaml28
-rw-r--r--deployments/helm/v2/emco/dcm/templates/deployment.yaml16
-rw-r--r--deployments/helm/v2/emco/dcm/templates/service.yaml16
-rw-r--r--deployments/helm/v2/emco/dcm/values.yaml84
-rw-r--r--deployments/helm/v2/emco/emco-db/requirements.yaml6
-rw-r--r--deployments/helm/v2/emco/emco-services/requirements.yaml15
-rw-r--r--deployments/helm/v2/emco/emco-tools/requirements.yaml4
-rw-r--r--deployments/helm/v2/emco/emco/requirements.yaml6
-rw-r--r--deployments/helm/v2/emco/etcd/requirements.yaml2
-rw-r--r--deployments/helm/v2/emco/etcd/values.yaml3
-rw-r--r--deployments/helm/v2/emco/fluentd/values-production.yaml2
-rw-r--r--deployments/helm/v2/emco/fluentd/values.yaml2
-rw-r--r--deployments/helm/v2/emco/mongo/requirements.yaml2
-rw-r--r--deployments/helm/v2/emco/mongo/values.yaml6
-rw-r--r--deployments/helm/v2/emco/ncm/requirements.yaml2
-rw-r--r--deployments/helm/v2/emco/orchestrator/requirements.yaml2
-rw-r--r--deployments/helm/v2/emco/ovnaction/requirements.yaml2
-rw-r--r--deployments/helm/v2/emco/rsync/requirements.yaml2
-rwxr-xr-xdeployments/kubernetes/cleanup-emco.sh3
-rwxr-xr-xdeployments/start.sh1
-rw-r--r--docs/emco_apis.yaml1296
-rw-r--r--kud/deployment_infra/galaxy-requirements.yml2
-rw-r--r--kud/deployment_infra/images/multus-daemonset.yml62
-rw-r--r--kud/deployment_infra/playbooks/configure-emco-reset.yml11
-rw-r--r--kud/deployment_infra/playbooks/configure-emco.yml11
-rw-r--r--kud/deployment_infra/playbooks/configure-kud.yml5
-rw-r--r--kud/deployment_infra/playbooks/configure-onap4k8s-reset.yml11
-rw-r--r--kud/deployment_infra/playbooks/configure-onap4k8s.yml11
-rw-r--r--kud/deployment_infra/playbooks/configure-optane.yml2
-rw-r--r--kud/deployment_infra/playbooks/kud-vars.yml5
-rw-r--r--kud/deployment_infra/playbooks/preconfigure-kubespray.yml19
-rw-r--r--kud/deployment_infra/playbooks/preconfigure-optane.yml16
-rwxr-xr-xkud/hosting_providers/containerized/installer.sh12
-rw-r--r--kud/hosting_providers/containerized/inventory/group_vars/k8s-cluster.yml3
-rwxr-xr-xkud/hosting_providers/vagrant/installer.sh4
-rw-r--r--kud/hosting_providers/vagrant/inventory/group_vars/k8s-cluster.yml3
-rwxr-xr-xkud/tests/emco.sh31
-rwxr-xr-xkud/tests/plugin_fw.sh4
-rwxr-xr-xkud/tests/plugin_fw_v2.sh116
-rwxr-xr-xkud/tests/topology-manager.sh5
-rwxr-xr-xkud/tests/vfw-test.sh123
-rw-r--r--releases/0.7.0-container.yaml8
-rw-r--r--src/dcm/api/logicalCloudHandler.go13
-rw-r--r--src/dcm/pkg/module/apply.go172
-rw-r--r--src/dcm/pkg/module/cluster.go13
-rw-r--r--src/dcm/pkg/module/logicalcloud.go18
-rw-r--r--src/dcm/pkg/module/logicalcloud_test.go33
-rw-r--r--src/k8splugin/internal/helm/helm.go34
-rw-r--r--src/k8splugin/internal/helm/helm_test.go29
-rw-r--r--src/k8splugin/mock_files/mock_charts/testchart3/Chart.yaml4
-rw-r--r--src/k8splugin/mock_files/mock_charts/testchart3/templates/always-empty.yaml9
-rw-r--r--src/k8splugin/mock_files/mock_charts/testchart3/templates/multi.yaml34
-rw-r--r--src/k8splugin/mock_files/mock_charts/testchart3/templates/only-comment.yaml6
-rw-r--r--src/k8splugin/mock_files/mock_charts/testchart3/values.yaml1
-rw-r--r--src/orchestrator/api/api.go18
-rw-r--r--src/orchestrator/api/app_intent_handler.go26
-rw-r--r--src/orchestrator/api/composite_app_handler.go7
-rw-r--r--src/orchestrator/api/generic_placement_intent_handler.go17
-rw-r--r--src/orchestrator/json-schemas/deployment-group-intent.json13
-rw-r--r--src/orchestrator/json-schemas/generic-placement-intent.json15
-rw-r--r--src/orchestrator/pkg/appcontext/appcontext.go12
-rw-r--r--src/orchestrator/pkg/infra/db/mock.go27
-rw-r--r--src/orchestrator/pkg/infra/db/mongo.go203
-rw-r--r--src/orchestrator/pkg/infra/db/mongo_test.go390
-rw-r--r--src/orchestrator/pkg/infra/db/store.go14
-rw-r--r--src/orchestrator/pkg/module/app_intent.go117
-rw-r--r--src/orchestrator/pkg/module/app_intent_test.go43
-rw-r--r--src/orchestrator/pkg/module/deployment_intent_groups.go1
-rw-r--r--src/orchestrator/pkg/module/deployment_intent_groups_test.go8
-rw-r--r--src/orchestrator/pkg/module/generic_placement_intent.go42
-rw-r--r--src/orchestrator/pkg/module/generic_placement_intent_test.go56
-rw-r--r--src/orchestrator/pkg/module/instantiation.go18
-rw-r--r--src/orchestrator/pkg/module/instantiation_appcontext_helper.go6
-rw-r--r--src/ovnaction/api/api.go41
-rw-r--r--src/ovnaction/api/chainhandler.go16
-rw-r--r--src/ovnaction/api/netcontrolintenthandler.go62
-rw-r--r--src/ovnaction/api/workloadifintenthandler.go24
-rw-r--r--src/ovnaction/api/workloadintenthandler.go24
-rw-r--r--src/ovnaction/internal/action/action.go38
-rw-r--r--src/ovnaction/pkg/module/chaining.go25
-rw-r--r--src/ovnaction/pkg/module/netcontrolintent.go155
-rw-r--r--src/ovnaction/pkg/module/workloadifintent.go25
-rw-r--r--src/ovnaction/pkg/module/workloadintent.go25
-rw-r--r--src/tools/emcoctl/cmd/utils.go2
-rw-r--r--src/tools/emcoctl/examples/test.yaml73
-rw-r--r--src/tools/emcoctl/examples/vfw.yaml137
103 files changed, 2322 insertions, 1838 deletions
diff --git a/deployments/_functions.sh b/deployments/_functions.sh
index 47074433..c0feed0d 100755
--- a/deployments/_functions.sh
+++ b/deployments/_functions.sh
@@ -34,3 +34,14 @@ EOF
function start_all {
docker-compose up -d
}
+
+function wait_for_service {
+ for try in {0..59}; do
+ echo "$(date +%H:%M:%S) - Waiting for service up"
+ sleep 1
+ if $(curl http://localhost:9015/v1 &>/dev/null); then
+ return 0
+ fi
+ done
+ exit 1
+}
diff --git a/deployments/build.sh b/deployments/build.sh
index 2304b12b..a6d24586 100755
--- a/deployments/build.sh
+++ b/deployments/build.sh
@@ -13,7 +13,7 @@ set -o pipefail
k8s_path="$(git rev-parse --show-toplevel)"
-VERSION="0.6.0-SNAPSHOT"
+VERSION="0.7.0-SNAPSHOT"
export IMAGE_NAME="nexus3.onap.org:10003/onap/multicloud/k8s"
function _compile_src {
diff --git a/deployments/helm/onap4k8s/Makefile b/deployments/helm/onap4k8s/Makefile
index 20470878..f078765d 100644
--- a/deployments/helm/onap4k8s/Makefile
+++ b/deployments/helm/onap4k8s/Makefile
@@ -54,16 +54,5 @@ clean:
@rm -rf $(PACKAGE_DIR)/*
@rm -rf $(OUTPUT_DIR)
-# start up a local helm repo to serve up helm chart packages
-repo:
- @mkdir -p $(PACKAGE_DIR)
- @helm serve --repo-path $(PACKAGE_DIR) &
- @helm repo index $(PACKAGE_DIR)
- @helm repo add onap4k8s http://127.0.0.1:8879
-
-# stop local helm repo
-repo-stop:
- @pkill helm
- @helm repo remove onap4k8s
%:
@:
diff --git a/deployments/helm/onap4k8s/README.txt b/deployments/helm/onap4k8s/README.txt
index 857b0a0b..1528c740 100644
--- a/deployments/helm/onap4k8s/README.txt
+++ b/deployments/helm/onap4k8s/README.txt
@@ -16,9 +16,6 @@
# Installation of ONAP4K8S helm chart
#################################################################
-1. Create a helm repo (onap4k8s) from Makefile
-$ make repo
-
1. Run "Makefile" in ONAP4K8S repo
$ make all
diff --git a/deployments/helm/onap4k8s/charts/etcd/requirements.yaml b/deployments/helm/onap4k8s/charts/etcd/requirements.yaml
index ff2221f6..8c46d632 100644
--- a/deployments/helm/onap4k8s/charts/etcd/requirements.yaml
+++ b/deployments/helm/onap4k8s/charts/etcd/requirements.yaml
@@ -15,4 +15,4 @@
dependencies:
- name: common
version: ~5.x-0
- repository: '@onap4k8s'
+ repository: 'file://../common'
diff --git a/deployments/helm/onap4k8s/charts/etcd/values.yaml b/deployments/helm/onap4k8s/charts/etcd/values.yaml
index 7f53d222..fd459f0a 100644
--- a/deployments/helm/onap4k8s/charts/etcd/values.yaml
+++ b/deployments/helm/onap4k8s/charts/etcd/values.yaml
@@ -25,7 +25,7 @@ global:
#repository: etcd
repository: "k8s.gcr.io"
-image: "etcd-amd64:3.2.24"
+image: "etcd-amd64:3.3.17"
pullPolicy: Always
# default number of instances in the StatefulSet
@@ -55,6 +55,7 @@ persistence:
##
#storageClass: "-"
accessMode: "ReadWriteOnce"
+ storageType: hostPath
storage: "1Gi"
mountPath: /dockerdata-nfs
mountSubPath: k8s-etcd
diff --git a/deployments/helm/onap4k8s/charts/mongo/requirements.yaml b/deployments/helm/onap4k8s/charts/mongo/requirements.yaml
index 0693dd3f..ed887924 100644
--- a/deployments/helm/onap4k8s/charts/mongo/requirements.yaml
+++ b/deployments/helm/onap4k8s/charts/mongo/requirements.yaml
@@ -15,4 +15,4 @@
dependencies:
- name: common
version: ~5.x-0
- repository: '@onap4k8s'
+ repository: 'file://../common'
diff --git a/deployments/helm/onap4k8s/charts/mongo/values.yaml b/deployments/helm/onap4k8s/charts/mongo/values.yaml
index d6938c1e..14376143 100644
--- a/deployments/helm/onap4k8s/charts/mongo/values.yaml
+++ b/deployments/helm/onap4k8s/charts/mongo/values.yaml
@@ -19,7 +19,7 @@ global:
nodePortPrefix: 302
persistence: {}
readinessRepository: oomk8s
- readinessImage: readiness-check:2.0.0
+ readinessImage: readiness-check:2.2.2
#################################################################
@@ -27,7 +27,7 @@ global:
#################################################################
dockerHubRepository: registry.hub.docker.com
-image: library/mongo:4.0.8
+image: library/mongo:4.4.1
pullPolicy: Always
# application configuration
@@ -110,7 +110,7 @@ resources: {}
nfsprovisionerRepository: quay.io
-nfsprovisionerImage: kubernetes_incubator/nfs-provisioner:v1.0.8
+nfsprovisionerImage: kubernetes_incubator/nfs-provisioner:v2.3.0
nfsprovisionerPrefix: mongo
sdnctlPrefix: mongo
diff --git a/deployments/helm/onap4k8s/charts/multicloud-k8s/requirements.yaml b/deployments/helm/onap4k8s/charts/multicloud-k8s/requirements.yaml
index c5102e49..b114c96e 100644
--- a/deployments/helm/onap4k8s/charts/multicloud-k8s/requirements.yaml
+++ b/deployments/helm/onap4k8s/charts/multicloud-k8s/requirements.yaml
@@ -18,10 +18,10 @@ dependencies:
# local reference to common chart, as it is
# a part of this chart's package and will not
# be published independently to a repo (at this point)
- repository: '@onap4k8s'
+ repository: 'file://../common'
- name: mongo
version: ~5.x-0
- repository: '@onap4k8s'
+ repository: 'file://../mongo'
- name: etcd
version: ~5.x-0
- repository: '@onap4k8s'
+ repository: 'file://../etcd'
diff --git a/deployments/helm/onap4k8s/charts/multicloud-k8s/values.yaml b/deployments/helm/onap4k8s/charts/multicloud-k8s/values.yaml
index 30d70092..5fa51284 100644
--- a/deployments/helm/onap4k8s/charts/multicloud-k8s/values.yaml
+++ b/deployments/helm/onap4k8s/charts/multicloud-k8s/values.yaml
@@ -18,16 +18,16 @@
global:
nodePortPrefixExt: 304
readinessRepository: oomk8s
- readinessImage: readiness-check:2.0.0
+ readinessImage: readiness-check:2.2.2
loggingRepository: docker.elastic.co
- loggingImage: beats/filebeat:5.5.0
+ loggingImage: beats/filebeat:7.9.3
persistence: {}
#################################################################
# Application configuration defaults.
#################################################################
# application image
repository: registry.hub.docker.com
-image: onap/multicloud-k8s:0.5.0
+image: onap/multicloud-k8s:0.7.0
pullPolicy: Always
# flag to enable debugging - application support required
diff --git a/deployments/helm/v2/emco/Chart.yaml b/deployments/helm/v2/emco/Chart.yaml
index 6998dcaa..9c015819 100644
--- a/deployments/helm/v2/emco/Chart.yaml
+++ b/deployments/helm/v2/emco/Chart.yaml
@@ -1,5 +1,5 @@
apiVersion: v1
appVersion: "1.0"
description: A Helm chart for Kubernetes
-name: onap4k8s
+name: emco
version: 0.1.0
diff --git a/deployments/helm/v2/emco/Makefile b/deployments/helm/v2/emco/Makefile
index dc88ff86..355fc3f6 100644
--- a/deployments/helm/v2/emco/Makefile
+++ b/deployments/helm/v2/emco/Makefile
@@ -64,16 +64,5 @@ clean:
@rm -rf $(PACKAGE_DIR)/*
@rm -rf $(OUTPUT_DIR)
-# start up a local helm repo to serve up helm chart packages
-repo:
- @mkdir -p $(PACKAGE_DIR)
- @helm serve --repo-path $(PACKAGE_DIR) &
- @helm repo index $(PACKAGE_DIR)
- @helm repo add local http://127.0.0.1:8879
-
-# stop local helm repo
-repo-stop:
- @pkill helm
- @helm repo remove local
%:
@:
diff --git a/deployments/helm/v2/emco/README.md b/deployments/helm/v2/emco/README.md
index 3534f5a5..70cbfcde 100644
--- a/deployments/helm/v2/emco/README.md
+++ b/deployments/helm/v2/emco/README.md
@@ -6,11 +6,7 @@ EMCO Helm charts include charts for EMCO microservices along with MongoDb, etcd,
### Steps to generate and install packages
-**1. Create a local helm repo from Makefile**
-
-`$ make repo`
-
-**2. Run make file to package all the required chart**
+**1. Run make file to package all the required chart**
`$ make clean`
@@ -26,42 +22,42 @@ Pacakges helm charts in tar.gz format. All packages are in **dist/packages** dir
| **emco-0.1.0.tgz** | Includes all charts including database, all services and tools |
-**3. Deploy EMCO Packages for Databases and Services**
+**2. Deploy EMCO Packages for Databases and Services**
`$ helm install dist/packages/emco-db-0.1.0.tgz --name emco-db --namespace emco`
`$ helm install dist/packages/emco-services-0.1.0.tgz --name emco-services --namespace emco`
-**4. Deploy tools (Optional)**
+**3. Deploy tools (Optional)**
-`$ helm install dist/packages/emco-tools-0.1.0.tgz --name rel-tools --namespace emco`
+`$ helm install dist/packages/emco-tools-0.1.0.tgz --name emco-tools --namespace emco`
NOTE: Deploy the Chart emco-0.1.0.tgz to deploy all packages including database, services and tools.
-`$ helm install dist/packages/emco-0.1.0.tgz --name rel --namespace emco`
+`$ helm install dist/packages/emco-0.1.0.tgz --name emco --namespace emco`
-**5. To check logs of the different Microservices check fluentd logs**
+**4. To check logs of the different Microservices check fluentd logs**
-`kubectl logs rel-fluentd-0 -n emco | grep orchestrator`
+`kubectl logs emco-tools-fluentd-0 -n emco | grep orchestrator`
-**6. Delete all packages**
+**5. Delete all packages**
-`$ helm delete rel-services --purge`
+`$ helm delete emco-services --purge`
-`$ helm delete rel-db --purge`
+`$ helm delete emco-db --purge`
Optional if tools were installed
-`$ helm delete rel-tools --purge`
+`$ helm delete emco-tools --purge`
NOTE: If the Chart emco-0.1.0.tgz was deployed
-`$ helm delete rel --purge`
+`$ helm delete emco --purge`
-**7. Delete local helm repo**
+**6. Delete local helm repo**
`make repo-stop`
@@ -69,10 +65,9 @@ NOTE: If the Chart emco-0.1.0.tgz was deployed
After deleting the db package and before installing the package again following error happens:
-`Error: release rel-db failed: object is being deleted: persistentvolumes "rel-db-emco-etcd-data-0" already exists`
-
-Workaround :
+`Error: release emco-db failed: object is being deleted: persistentvolumes "emco-db-emco-etcd-data-0" already exists`
-`kubectl edit persistentvolumes rel-db-emco-etcd-data-0`
+Workarounds:
-and remover finalizers section
+* remove the finalizers section using `kubectl edit persistentvolumes emco-db-emco-etcd-data-0`
+* or, if appropriate, delete the entire namespace using `kubectl delete namespace emco`
diff --git a/deployments/helm/v2/emco/clm/requirements.yaml b/deployments/helm/v2/emco/clm/requirements.yaml
index c2253cf4..bba5c27d 100644
--- a/deployments/helm/v2/emco/clm/requirements.yaml
+++ b/deployments/helm/v2/emco/clm/requirements.yaml
@@ -15,4 +15,4 @@
dependencies:
- name: common
version: ~0.x-0
- repository: '@local'
+ repository: 'file://../common'
diff --git a/deployments/helm/v2/emco/dcm/Chart.yaml b/deployments/helm/v2/emco/dcm/Chart.yaml
new file mode 100644
index 00000000..9cd356e0
--- /dev/null
+++ b/deployments/helm/v2/emco/dcm/Chart.yaml
@@ -0,0 +1,18 @@
+# Copyright 2020 Intel Corporation, Inc
+#
+# 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.
+
+apiVersion: v1
+description: Distributed Cloud Manager
+name: dcm
+version: 0.1.0
diff --git a/deployments/helm/v2/emco/dcm/requirements.yaml b/deployments/helm/v2/emco/dcm/requirements.yaml
new file mode 100644
index 00000000..c5c20127
--- /dev/null
+++ b/deployments/helm/v2/emco/dcm/requirements.yaml
@@ -0,0 +1,18 @@
+# Copyright 2020 Intel Corporation, Inc
+#
+# 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.
+
+dependencies:
+ - name: common
+ version: ~0.x-0
+ repository: 'file://../common'
diff --git a/deployments/helm/v2/emco/dcm/resources/config/config.json b/deployments/helm/v2/emco/dcm/resources/config/config.json
new file mode 100644
index 00000000..7478656e
--- /dev/null
+++ b/deployments/helm/v2/emco/dcm/resources/config/config.json
@@ -0,0 +1,8 @@
+{
+
+ "database-type": "mongo",
+ "database-ip": "emco-mongo",
+ "etcd-ip": "emco-etcd",
+ "service-port": "9077"
+}
+
diff --git a/deployments/helm/v2/emco/dcm/templates/configmap.yaml b/deployments/helm/v2/emco/dcm/templates/configmap.yaml
new file mode 100644
index 00000000..998e0389
--- /dev/null
+++ b/deployments/helm/v2/emco/dcm/templates/configmap.yaml
@@ -0,0 +1,28 @@
+{{/*
+# Copyright 2020 Intel Corporation, Inc
+#
+# 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.
+*/}}
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "common.fullname" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.name" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+data:
+{{ tpl (.Files.Glob "resources/config/*").AsConfig . | indent 2 }}
diff --git a/deployments/helm/v2/emco/dcm/templates/deployment.yaml b/deployments/helm/v2/emco/dcm/templates/deployment.yaml
new file mode 100644
index 00000000..cf73fe21
--- /dev/null
+++ b/deployments/helm/v2/emco/dcm/templates/deployment.yaml
@@ -0,0 +1,16 @@
+{{/*
+# Copyright 2020 Intel Corporation, Inc
+#
+# 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.
+*/}}
+{{- template "common.deployment" . -}} \ No newline at end of file
diff --git a/deployments/helm/v2/emco/dcm/templates/service.yaml b/deployments/helm/v2/emco/dcm/templates/service.yaml
new file mode 100644
index 00000000..c9ab68d3
--- /dev/null
+++ b/deployments/helm/v2/emco/dcm/templates/service.yaml
@@ -0,0 +1,16 @@
+{{/*
+# Copyright 2020 Intel Corporation, Inc
+#
+# 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.
+*/}}
+{{- template "common.servicemco" . -}} \ No newline at end of file
diff --git a/deployments/helm/v2/emco/dcm/values.yaml b/deployments/helm/v2/emco/dcm/values.yaml
new file mode 100644
index 00000000..dffa85e9
--- /dev/null
+++ b/deployments/helm/v2/emco/dcm/values.yaml
@@ -0,0 +1,84 @@
+# Copyright 2020 Intel Corporation, Inc
+#
+# 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 defaults.
+#################################################################
+global:
+ nodePortPrefixExt: 304
+ persistence: {}
+#################################################################
+# Application configuration defaults.
+#################################################################
+# application image
+repository: registry.hub.docker.com
+image: emcov2/emco:stable
+pullPolicy: Always
+command: "/opt/emco/entrypoint"
+args: "dcm"
+workingDir: /opt/emco
+
+# flag to enable debugging - application support required
+debugEnabled: false
+
+# application configuration is via config files
+
+# default number of instances
+replicaCount: 1
+
+nodeSelector: {}
+
+affinity: {}
+
+# probe configuration parameters
+liveness:
+ initialDelaySeconds: 10
+ periodSeconds: 30
+ # necessary to disable liveness probe when setting breakpoints
+ # in debugger so K8s doesn't restart unresponsive container
+ enabled: true
+
+readiness:
+ initialDelaySeconds: 10
+ periodSeconds: 30
+
+service:
+ type: NodePort
+ name: dcm
+ portName: dcm
+ internalPort: 9077
+ externalPort: 9077
+ nodePort: 77
+
+ingress:
+ enabled: false
+
+# Configure resource requests and limits
+flavor: large
+resources:
+ small:
+ limits:
+ cpu: 200m
+ memory: 500Mi
+ requests:
+ cpu: 10m
+ memory: 10Mi
+ large:
+ limits:
+ cpu: 400m
+ memory: 1Gi
+ requests:
+ cpu: 10m
+ memory: 100Mi
+ unlimited: {}
diff --git a/deployments/helm/v2/emco/emco-db/requirements.yaml b/deployments/helm/v2/emco/emco-db/requirements.yaml
index 52a40b64..62e807b6 100644
--- a/deployments/helm/v2/emco/emco-db/requirements.yaml
+++ b/deployments/helm/v2/emco/emco-db/requirements.yaml
@@ -15,10 +15,10 @@
dependencies:
- name: common
version: ~0.x-0
- repository: '@local'
+ repository: 'file://../common'
- name: mongo
version: ~4.x-0
- repository: '@local'
+ repository: 'file://../mongo'
- name: etcd
version: ~3.x-0
- repository: '@local'
+ repository: 'file://../etcd'
diff --git a/deployments/helm/v2/emco/emco-services/requirements.yaml b/deployments/helm/v2/emco/emco-services/requirements.yaml
index 9cd7b475..ddb9fb7f 100644
--- a/deployments/helm/v2/emco/emco-services/requirements.yaml
+++ b/deployments/helm/v2/emco/emco-services/requirements.yaml
@@ -15,19 +15,22 @@
dependencies:
- name: common
version: ~0.x-0
- repository: '@local'
+ repository: 'file://../common'
- name: orchestrator
version: ~0.x-0
- repository: '@local'
+ repository: 'file://../orchestrator'
- name: ncm
version: ~0.x-0
- repository: '@local'
+ repository: 'file://../ncm'
- name: rsync
version: ~0.x-0
- repository: '@local'
+ repository: 'file://../rsync'
- name: clm
version: ~0.x-0
- repository: '@local'
+ repository: 'file://../clm'
- name: ovnaction
version: ~0.x-0
- repository: '@local'
+ repository: 'file://../ovnaction'
+ - name: dcm
+ version: ~0.x-0
+ repository: 'file://../dcm'
diff --git a/deployments/helm/v2/emco/emco-tools/requirements.yaml b/deployments/helm/v2/emco/emco-tools/requirements.yaml
index ddb91c51..14ad537d 100644
--- a/deployments/helm/v2/emco/emco-tools/requirements.yaml
+++ b/deployments/helm/v2/emco/emco-tools/requirements.yaml
@@ -15,7 +15,7 @@
dependencies:
- name: common
version: ~0.x-0
- repository: '@local'
+ repository: 'file://../common'
- name: fluentd
version: ~1.x-0
- repository: '@local'
+ repository: 'file://../fluentd'
diff --git a/deployments/helm/v2/emco/emco/requirements.yaml b/deployments/helm/v2/emco/emco/requirements.yaml
index 21649c38..c704d2f2 100644
--- a/deployments/helm/v2/emco/emco/requirements.yaml
+++ b/deployments/helm/v2/emco/emco/requirements.yaml
@@ -15,11 +15,11 @@
dependencies:
- name: emco-db
version: ~0.x-0
- repository: '@local'
+ repository: 'file://../emco-db'
- name: emco-tools
version: ~0.x-0
- repository: '@local'
+ repository: 'file://../emco-tools'
- name: emco-services
version: ~0.x-0
- repository: '@local'
+ repository: 'file://../emco-services'
diff --git a/deployments/helm/v2/emco/etcd/requirements.yaml b/deployments/helm/v2/emco/etcd/requirements.yaml
index d71b975c..9802dac4 100644
--- a/deployments/helm/v2/emco/etcd/requirements.yaml
+++ b/deployments/helm/v2/emco/etcd/requirements.yaml
@@ -15,4 +15,4 @@
dependencies:
- name: common
version: ~0.x-0
- repository: '@local'
+ repository: 'file://../common'
diff --git a/deployments/helm/v2/emco/etcd/values.yaml b/deployments/helm/v2/emco/etcd/values.yaml
index 226b4594..682af0d5 100644
--- a/deployments/helm/v2/emco/etcd/values.yaml
+++ b/deployments/helm/v2/emco/etcd/values.yaml
@@ -25,7 +25,7 @@ global:
#repository: etcd
repository: "k8s.gcr.io"
-image: "etcd-amd64:3.2.26"
+image: "etcd-amd64:3.3.17"
pullPolicy: Always
# default number of instances in the StatefulSet
@@ -48,6 +48,7 @@ persistence:
enabled: false
volumeReclaimPolicy: Retain
accessMode: ReadWriteMany
+ storageType: hostPath
storage: 1Gi
mountPath: /dockerdata-nfs
mountSubPath: "etcd/data"
diff --git a/deployments/helm/v2/emco/fluentd/values-production.yaml b/deployments/helm/v2/emco/fluentd/values-production.yaml
index d1bc5e26..0df1dab1 100644
--- a/deployments/helm/v2/emco/fluentd/values-production.yaml
+++ b/deployments/helm/v2/emco/fluentd/values-production.yaml
@@ -13,7 +13,7 @@ global: {}
image:
registry: docker.io
repository: bitnami/fluentd
- tag: 1.10.2-debian-10-r11
+ tag: 1.11.4-debian-10-r7
## Specify a imagePullPolicy
## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
diff --git a/deployments/helm/v2/emco/fluentd/values.yaml b/deployments/helm/v2/emco/fluentd/values.yaml
index 1feb2a19..6f9770d4 100644
--- a/deployments/helm/v2/emco/fluentd/values.yaml
+++ b/deployments/helm/v2/emco/fluentd/values.yaml
@@ -13,7 +13,7 @@ global: {}
image:
registry: docker.io
repository: bitnami/fluentd
- tag: 1.10.2-debian-10-r11
+ tag: 1.11.4-debian-10-r7
## Specify a imagePullPolicy
## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
diff --git a/deployments/helm/v2/emco/mongo/requirements.yaml b/deployments/helm/v2/emco/mongo/requirements.yaml
index 38a832b8..b8b139fa 100644
--- a/deployments/helm/v2/emco/mongo/requirements.yaml
+++ b/deployments/helm/v2/emco/mongo/requirements.yaml
@@ -15,4 +15,4 @@
dependencies:
- name: common
version: ~0.x-0
- repository: '@local'
+ repository: 'file://../common'
diff --git a/deployments/helm/v2/emco/mongo/values.yaml b/deployments/helm/v2/emco/mongo/values.yaml
index 0a6f8570..71cbadda 100644
--- a/deployments/helm/v2/emco/mongo/values.yaml
+++ b/deployments/helm/v2/emco/mongo/values.yaml
@@ -19,7 +19,7 @@ global:
nodePortPrefix: 302
persistence: {}
readinessRepository: oomk8s
- readinessImage: readiness-check:2.0.0
+ readinessImage: readiness-check:2.2.2
#################################################################
@@ -27,7 +27,7 @@ global:
#################################################################
dockerHubRepository: registry.hub.docker.com
-image: library/mongo:4.0.8
+image: library/mongo:4.4.1
pullPolicy: Always
# application configuration
@@ -98,7 +98,7 @@ resources: {}
nfsprovisionerRepository: quay.io
-nfsprovisionerImage: kubernetes_incubator/nfs-provisioner:v1.0.8
+nfsprovisionerImage: kubernetes_incubator/nfs-provisioner:v2.3.0
nfsprovisionerPrefix: mongo
sdnctlPrefix: mongo
diff --git a/deployments/helm/v2/emco/ncm/requirements.yaml b/deployments/helm/v2/emco/ncm/requirements.yaml
index c2253cf4..bba5c27d 100644
--- a/deployments/helm/v2/emco/ncm/requirements.yaml
+++ b/deployments/helm/v2/emco/ncm/requirements.yaml
@@ -15,4 +15,4 @@
dependencies:
- name: common
version: ~0.x-0
- repository: '@local'
+ repository: 'file://../common'
diff --git a/deployments/helm/v2/emco/orchestrator/requirements.yaml b/deployments/helm/v2/emco/orchestrator/requirements.yaml
index c2253cf4..bba5c27d 100644
--- a/deployments/helm/v2/emco/orchestrator/requirements.yaml
+++ b/deployments/helm/v2/emco/orchestrator/requirements.yaml
@@ -15,4 +15,4 @@
dependencies:
- name: common
version: ~0.x-0
- repository: '@local'
+ repository: 'file://../common'
diff --git a/deployments/helm/v2/emco/ovnaction/requirements.yaml b/deployments/helm/v2/emco/ovnaction/requirements.yaml
index c2253cf4..bba5c27d 100644
--- a/deployments/helm/v2/emco/ovnaction/requirements.yaml
+++ b/deployments/helm/v2/emco/ovnaction/requirements.yaml
@@ -15,4 +15,4 @@
dependencies:
- name: common
version: ~0.x-0
- repository: '@local'
+ repository: 'file://../common'
diff --git a/deployments/helm/v2/emco/rsync/requirements.yaml b/deployments/helm/v2/emco/rsync/requirements.yaml
index c2253cf4..bba5c27d 100644
--- a/deployments/helm/v2/emco/rsync/requirements.yaml
+++ b/deployments/helm/v2/emco/rsync/requirements.yaml
@@ -15,4 +15,4 @@
dependencies:
- name: common
version: ~0.x-0
- repository: '@local'
+ repository: 'file://../common'
diff --git a/deployments/kubernetes/cleanup-emco.sh b/deployments/kubernetes/cleanup-emco.sh
index a8aef470..4572350d 100755
--- a/deployments/kubernetes/cleanup-emco.sh
+++ b/deployments/kubernetes/cleanup-emco.sh
@@ -3,14 +3,17 @@ kubectl -n onap4k8s delete deployment clm
kubectl -n onap4k8s delete deployment orchestrator
kubectl -n onap4k8s delete deployment ncm
kubectl -n onap4k8s delete deployment ovnaction
+kubectl -n onap4k8s delete deployment dcm
kubectl -n onap4k8s delete deployment rsync
kubectl -n onap4k8s delete service clm
kubectl -n onap4k8s delete service orchestrator
kubectl -n onap4k8s delete service ncm
kubectl -n onap4k8s delete service ovnaction
+kubectl -n onap4k8s delete service dcm
kubectl -n onap4k8s delete service rsync
kubectl -n onap4k8s delete configmap clm
kubectl -n onap4k8s delete configmap orchestrator
kubectl -n onap4k8s delete configmap ncm
kubectl -n onap4k8s delete configmap ovnaction
+kubectl -n onap4k8s delete configmap dcm
kubectl -n onap4k8s delete configmap rsync
diff --git a/deployments/start.sh b/deployments/start.sh
index e7ff1334..61af504c 100755
--- a/deployments/start.sh
+++ b/deployments/start.sh
@@ -21,3 +21,4 @@ stop_all
start_mongo
generate_k8sconfig
start_all
+wait_for_service
diff --git a/docs/emco_apis.yaml b/docs/emco_apis.yaml
index 5f9c5510..cba2c9ba 100644
--- a/docs/emco_apis.yaml
+++ b/docs/emco_apis.yaml
@@ -682,25 +682,26 @@ paths:
content: {}
-############################ GENERIC PLACEMENT INTENT API'S #################################################
- /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/generic-placement-intents:
+
+############################ Deployment Intent Group API'S #################################################
+ /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups:
parameters:
- $ref: '#/components/parameters/projectName'
- $ref: '#/components/parameters/compositeAppName'
- $ref: '#/components/parameters/compositeAppVersion'
post:
tags:
- - Generic Placement Intent
- summary: Add Generic Placement Intent
- description: Add a new `generic placement intent`
- operationId: addGenericPlacementIntent
+ - Deployment Intent Group
+ summary: Add Deployment Intent Group
+ description: Add a new `deployment intent group`
+ operationId: addDeploymentIntentGroup
responses:
'201':
description: Success
content:
application/json:
schema:
- $ref: '#/components/schemas/GenericPlacementIntent'
+ $ref: '#/components/schemas/DeploymentGroupIntent'
'405':
description: Invalid Input
content: {}
@@ -708,92 +709,92 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/GenericPlacementIntent'
- description: Generic Placement Intent definition
+ $ref: '#/components/schemas/DeploymentGroupIntent'
+ description: Deployment Intent Group definition
required: true
-
get: # documentation for GET operation for this path
tags:
- - Generic Placement Intent
- summary: Get all Generic Placement Intents
+ - Deployment Intent Group
+ summary: Get all Deployment Intent Group
description: |
- Get all `Generic Placement Intents`
+ Get all `Deployment Intent Group`
- operationId: getAllGenericPlacementIntents
+ operationId: getAllDeploymentIntentGroup
responses: # list of responses
'200':
description: Success
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/GenericPlacementIntentArray'
+ $ref: '#/components/schemas/DeploymentGroupIntentArray'
'404':
- description: No Generic Placement Intent found
+ description: No Deployment Intent Group found
content: {}
- /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/generic-placement-intents/{generic-placement-intent-name}:
+ /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}:
# parameters list that are used with each operation for this path
parameters:
- $ref: '#/components/parameters/projectName'
- $ref: '#/components/parameters/compositeAppName'
- $ref: '#/components/parameters/compositeAppVersion'
- - $ref: '#/components/parameters/genericPlacementIntentName'
+ - $ref: '#/components/parameters/deploymentIntentGroupName'
get: # documentation for GET operation for this path
tags:
- - Generic Placement Intent
- summary: Get Generic Placement Intent
+ - Deployment Intent Group
+ summary: Get Deployment Intent Group
description: |
- Get `generic placement intent`
+ Get `Deployment Intent Group`
- operationId: getGenericPlacementIntentByName
+ operationId: getDeploymentIntentGroupByName
responses: # list of responses
'200':
description: Success
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/GenericPlacementIntent'
+ $ref: '#/components/schemas/DeploymentGroupIntent'
'404':
- description: Generic Placement Intent not found
+ description: Deployment Intent Group not found
content: {}
put:
tags:
- - Generic Placement Intent
- summary: Update Generic Placement Intent
- description: Update `Generic Placement Intent`
- operationId: updateGenericPlacementIntent
+ - Deployment Intent Group
+ summary: Update Deployment Intent Group
+ description: Update `Deployment Intent Group`
+ operationId: updateDeploymentIntentGroup
responses:
'200':
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/GenericPlacementIntent'
+ $ref: '#/components/schemas/DeploymentGroupIntent'
description: Success
'400':
description: Invalid data
content: {}
'404':
- description: Generic Placement Intent not found
+ description: Deployment Intent Group not found
content: {}
# request body documentation
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/GenericPlacementIntent'
- description: Generic Placement Intent definition
+ $ref: '#/components/schemas/DeploymentGroupIntent'
+ description: Deployment Intent Group definition
required: true
+
delete: # documentation for DELETE operation for this path
tags:
- - Generic Placement Intent
- summary: Delete Generic Placement Intent
+ - Deployment Intent Group
+ summary: Delete Deployment Intent Group
description: |
- Delete `Generic Placement Intent`
+ Delete `Deployment Intent Group`
- operationId: deleteGenericPlacementIntentByName
+ operationId: deleteDeploymentIntentGroupByName
responses: # list of responses
'204':
description: Deleted
@@ -802,28 +803,28 @@ paths:
description: Invalid data
content: {}
'404':
- description: Generic Placement Intent not found
+ description: Deployment Intent Group not found
content: {}
- /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/generic-placement-intents/{generic-placement-intent-name}/app-intents:
+ /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/intents/:
parameters:
- $ref: '#/components/parameters/projectName'
- $ref: '#/components/parameters/compositeAppName'
- $ref: '#/components/parameters/compositeAppVersion'
- - $ref: '#/components/parameters/genericPlacementIntentName'
+ - $ref: '#/components/parameters/deploymentIntentGroupName'
post:
tags:
- - Generic Placement Intent
- summary: Add intent for an application
- description: Add a `intent for application`
- operationId: addIntentToGenericPlacementIntent
+ - Deployment Intent Group
+ summary: Add Intent
+ description: Add `deployment Intent`
+ operationId: addIntentToDeploymentIntentGroup
responses:
'201':
description: Success
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/GenericPlacementAppIntent'
+ $ref: '#/components/schemas/DeploymentIntent'
'405':
description: Invalid Input
content: {}
@@ -831,91 +832,91 @@ paths:
content:
application/json: # Media type
schema: # Request payload
- $ref: '#/components/schemas/GenericPlacementAppIntent'
+ $ref: '#/components/schemas/DeploymentIntent'
get: # documentation for GET operation for this path
tags:
- - Generic Placement Intent
- summary: Get all Intents in Generic Placement
+ - Deployment Intent Group
+ summary: Get all intents in Deployment Intent Group
description: |
- Get all ` Intents in Generic Placement Intent`
+ Get all `intents in deployment intent group`
- operationId: getAllIntentsInGenericPlacementIntents
+ operationId: getAllIntentsInDeploymentIntentGroup
responses: # list of responses
'200':
description: Success
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/GenericPlacementAppIntentArray'
+ $ref: '#/components/schemas/DeploymentIntentArray'
'404':
- description: No Generic Placement Intent found
+ description: No Deployment Intent Group found
content: {}
- /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/generic-placement-intents/{generic-placement-intent-name}/app-intents/{intent-name}:
+
+ /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/intents/{intent-name}:
parameters:
- $ref: '#/components/parameters/projectName'
- $ref: '#/components/parameters/compositeAppName'
- $ref: '#/components/parameters/compositeAppVersion'
- - $ref: '#/components/parameters/genericPlacementIntentName'
+ - $ref: '#/components/parameters/deploymentIntentGroupName'
- $ref: '#/components/parameters/intentName'
get: # documentation for GET operation for this path
tags:
- - Generic Placement Intent
- summary: Get intent
+ - Deployment Intent Group
+ summary: Get intent for an application
description: |
- Get `generic placement intent`
+ Get `Deployment Intent`
- operationId: getIntentfromGenericPlacementIntent
+ operationId: getIntentForDeploymentIntentGroup
responses: # list of responses
'200':
description: Success
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/GenericPlacementAppIntent'
+ $ref: '#/components/schemas/DeploymentIntent'
'404':
- description: Intent not found
+ description: Deployment Intent not found
content: {}
put:
tags:
- - Generic Placement Intent
- summary: Update intent for an application
- description: Update `generic placement intent for application`
- operationId: updateIntentToGenericPlacementIntent
+ - Deployment Intent Group
+ summary: Update intent
+ description: Update `deployment intent`
+ operationId: updateIntentToDeploymentIntentGroup
responses:
'200':
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/GenericPlacementAppIntent'
+ $ref: '#/components/schemas/DeploymentIntent'
description: Success
'400':
description: Invalid data
content: {}
'404':
- description: Generic placement intent not found
+ description: Intent not found
content: {}
# request body documentation
requestBody:
content:
application/json: # Media type
schema: # Request payload
- $ref: '#/components/schemas/GenericPlacementAppIntent'
+ $ref: '#/components/schemas/DeploymentIntent'
required: true
-
delete: # documentation for DELETE operation for this path
tags:
- - Generic Placement Intent
+ - Deployment Intent Group
summary: Delete intent
description: |
- Delete `generic placement intent`
+ Delete `intent`
- operationId: deleteIntentFromGenericPlacementIntent
+ operationId: deleteIntentFromDeploymentIntentGroup
responses: # list of responses
'204':
description: Deleted
@@ -924,18 +925,17 @@ paths:
description: Invalid data
content: {}
'404':
- description: Intent not found
+ description: Deployment intent not found
content: {}
-
- # Qurey for Intent - Get intent for app-name
- /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/generic-placement-intents/{generic-placement-intent-name}/app-intents/:
+ #Query
+ /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/intents:
parameters:
- $ref: '#/components/parameters/projectName'
- $ref: '#/components/parameters/compositeAppName'
- $ref: '#/components/parameters/compositeAppVersion'
- - $ref: '#/components/parameters/genericPlacementIntentName'
+ - $ref: '#/components/parameters/deploymentIntentGroupName'
- in: query
- name: app-name
+ name: intent
schema:
type: string
maxLength: 128
@@ -943,43 +943,44 @@ paths:
get: # documentation for GET operation for this path
tags:
- - Generic Placement Intent
- summary: Query intent for an application
+ - Deployment Intent Group
+ summary: Query intent
description: |
- Query `generic placement intent for application`
+ Query `Deployment Intent`
- operationId: queryIntentfromGenericPlacementIntent
+ operationId: queryIntentForDeploymentIntentGroup
responses: # list of responses
'200':
description: Success
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/GenericPlacementAppIntent'
+ $ref: '#/components/schemas/DeploymentIntent'
'404':
- description: Generic Placement Intent for application not found
+ description: Deployment Intent not found
content: {}
-############################ Deployment Intent Group API'S #################################################
- /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups:
+############################ GENERIC PLACEMENT INTENT API'S #################################################
+ /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/generic-placement-intents:
parameters:
- $ref: '#/components/parameters/projectName'
- $ref: '#/components/parameters/compositeAppName'
- $ref: '#/components/parameters/compositeAppVersion'
+ - $ref: '#/components/parameters/deploymentIntentGroupName'
post:
tags:
- - Deployment Intent Group
- summary: Add Deployment Intent Group
- description: Add a new `deployment intent group`
- operationId: addDeploymentIntentGroup
+ - Generic Placement Intent
+ summary: Add Generic Placement Intent
+ description: Add a new `generic placement intent`
+ operationId: addGenericPlacementIntent
responses:
'201':
description: Success
content:
application/json:
schema:
- $ref: '#/components/schemas/DeploymentGroupIntent'
+ $ref: '#/components/schemas/Metadata'
'405':
description: Invalid Input
content: {}
@@ -987,92 +988,93 @@ paths:
content:
application/json:
schema:
- $ref: '#/components/schemas/DeploymentGroupIntent'
- description: Deployment Intent Group definition
+ $ref: '#/components/schemas/Metadata'
+ description: Generic Placement Intent definition
required: true
+
get: # documentation for GET operation for this path
tags:
- - Deployment Intent Group
- summary: Get all Deployment Intent Group
+ - Generic Placement Intent
+ summary: Get all Generic Placement Intents
description: |
- Get all `Deployment Intent Group`
+ Get all `Generic Placement Intents`
- operationId: getAllDeploymentIntentGroup
+ operationId: getAllGenericPlacementIntents
responses: # list of responses
'200':
description: Success
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/DeploymentGroupIntentArray'
+ $ref: '#/components/schemas/GenericPlacementIntentArray'
'404':
- description: No Deployment Intent Group found
+ description: No Generic Placement Intent found
content: {}
- /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}:
+ /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/generic-placement-intents/{generic-placement-intent-name}:
# parameters list that are used with each operation for this path
parameters:
- $ref: '#/components/parameters/projectName'
- $ref: '#/components/parameters/compositeAppName'
- $ref: '#/components/parameters/compositeAppVersion'
- $ref: '#/components/parameters/deploymentIntentGroupName'
+ - $ref: '#/components/parameters/genericPlacementIntentName'
get: # documentation for GET operation for this path
tags:
- - Deployment Intent Group
- summary: Get Deployment Intent Group
+ - Generic Placement Intent
+ summary: Get Generic Placement Intent
description: |
- Get `Deployment Intent Group`
+ Get `generic placement intent`
- operationId: getDeploymentIntentGroupByName
+ operationId: getGenericPlacementIntentByName
responses: # list of responses
'200':
description: Success
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/DeploymentGroupIntent'
+ $ref: '#/components/schemas/Metadata'
'404':
- description: Deployment Intent Group not found
+ description: Generic Placement Intent not found
content: {}
put:
tags:
- - Deployment Intent Group
- summary: Update Deployment Intent Group
- description: Update `Deployment Intent Group`
- operationId: updateDeploymentIntentGroup
+ - Generic Placement Intent
+ summary: Update Generic Placement Intent
+ description: Update `Generic Placement Intent`
+ operationId: updateGenericPlacementIntent
responses:
'200':
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/DeploymentGroupIntent'
+ $ref: '#/components/schemas/Metadata'
description: Success
'400':
description: Invalid data
content: {}
'404':
- description: Deployment Intent Group not found
+ description: Generic Placement Intent not found
content: {}
# request body documentation
requestBody:
content:
application/json:
schema:
- $ref: '#/components/schemas/DeploymentGroupIntent'
- description: Deployment Intent Group definition
+ $ref: '#/components/schemas/Metadata'
+ description: Generic Placement Intent definition
required: true
-
delete: # documentation for DELETE operation for this path
tags:
- - Deployment Intent Group
- summary: Delete Deployment Intent Group
+ - Generic Placement Intent
+ summary: Delete Generic Placement Intent
description: |
- Delete `Deployment Intent Group`
+ Delete `Generic Placement Intent`
- operationId: deleteDeploymentIntentGroupByName
+ operationId: deleteGenericPlacementIntentByName
responses: # list of responses
'204':
description: Deleted
@@ -1081,28 +1083,29 @@ paths:
description: Invalid data
content: {}
'404':
- description: Deployment Intent Group not found
+ description: Generic Placement Intent not found
content: {}
- /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/intents/:
+ /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/generic-placement-intents/{generic-placement-intent-name}/app-intents:
parameters:
- $ref: '#/components/parameters/projectName'
- $ref: '#/components/parameters/compositeAppName'
- $ref: '#/components/parameters/compositeAppVersion'
- $ref: '#/components/parameters/deploymentIntentGroupName'
+ - $ref: '#/components/parameters/genericPlacementIntentName'
post:
tags:
- - Deployment Intent Group
- summary: Add Intent
- description: Add `deployment Intent`
- operationId: addIntentToDeploymentIntentGroup
+ - Generic Placement Intent
+ summary: Add intent for an application
+ description: Add a `intent for application`
+ operationId: addIntentToGenericPlacementIntent
responses:
'201':
description: Success
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/DeploymentIntent'
+ $ref: '#/components/schemas/GenericPlacementAppIntent'
'405':
description: Invalid Input
content: {}
@@ -1110,91 +1113,92 @@ paths:
content:
application/json: # Media type
schema: # Request payload
- $ref: '#/components/schemas/DeploymentIntent'
+ $ref: '#/components/schemas/GenericPlacementAppIntent'
get: # documentation for GET operation for this path
tags:
- - Deployment Intent Group
- summary: Get all intents in Deployment Intent Group
+ - Generic Placement Intent
+ summary: Get all Intents in Generic Placement
description: |
- Get all `intents in deployment intent group`
+ Get all ` Intents in Generic Placement Intent`
- operationId: getAllIntentsInDeploymentIntentGroup
+ operationId: getAllIntentsInGenericPlacementIntents
responses: # list of responses
'200':
description: Success
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/DeploymentIntentArray'
+ $ref: '#/components/schemas/GenericPlacementAppIntentArray'
'404':
- description: No Deployment Intent Group found
+ description: No Generic Placement Intent found
content: {}
-
- /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/intents/{intent-name}:
+ /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/generic-placement-intents/{generic-placement-intent-name}/app-intents/{intent-name}:
parameters:
- $ref: '#/components/parameters/projectName'
- $ref: '#/components/parameters/compositeAppName'
- $ref: '#/components/parameters/compositeAppVersion'
- $ref: '#/components/parameters/deploymentIntentGroupName'
+ - $ref: '#/components/parameters/genericPlacementIntentName'
- $ref: '#/components/parameters/intentName'
get: # documentation for GET operation for this path
tags:
- - Deployment Intent Group
- summary: Get intent for an application
+ - Generic Placement Intent
+ summary: Get intent
description: |
- Get `Deployment Intent`
+ Get `generic placement intent`
- operationId: getIntentForDeploymentIntentGroup
+ operationId: getIntentfromGenericPlacementIntent
responses: # list of responses
'200':
description: Success
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/DeploymentIntent'
+ $ref: '#/components/schemas/GenericPlacementAppIntent'
'404':
- description: Deployment Intent not found
+ description: Intent not found
content: {}
put:
tags:
- - Deployment Intent Group
- summary: Update intent
- description: Update `deployment intent`
- operationId: updateIntentToDeploymentIntentGroup
+ - Generic Placement Intent
+ summary: Update intent for an application
+ description: Update `generic placement intent for application`
+ operationId: updateIntentToGenericPlacementIntent
responses:
'200':
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/DeploymentIntent'
+ $ref: '#/components/schemas/GenericPlacementAppIntent'
description: Success
'400':
description: Invalid data
content: {}
'404':
- description: Intent not found
+ description: Generic placement intent not found
content: {}
# request body documentation
requestBody:
content:
application/json: # Media type
schema: # Request payload
- $ref: '#/components/schemas/DeploymentIntent'
+ $ref: '#/components/schemas/GenericPlacementAppIntent'
required: true
+
delete: # documentation for DELETE operation for this path
tags:
- - Deployment Intent Group
+ - Generic Placement Intent
summary: Delete intent
description: |
- Delete `intent`
+ Delete `generic placement intent`
- operationId: deleteIntentFromDeploymentIntentGroup
+ operationId: deleteIntentFromGenericPlacementIntent
responses: # list of responses
'204':
description: Deleted
@@ -1203,17 +1207,19 @@ paths:
description: Invalid data
content: {}
'404':
- description: Deployment intent not found
+ description: Intent not found
content: {}
- #Query
- /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/intents:
+
+ # Qurey for Intent - Get intent for app-name
+ /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/generic-placement-intents/{generic-placement-intent-name}/app-intents/:
parameters:
- $ref: '#/components/parameters/projectName'
- $ref: '#/components/parameters/compositeAppName'
- $ref: '#/components/parameters/compositeAppVersion'
- $ref: '#/components/parameters/deploymentIntentGroupName'
+ - $ref: '#/components/parameters/genericPlacementIntentName'
- in: query
- name: intent
+ name: app-name
schema:
type: string
maxLength: 128
@@ -1221,24 +1227,25 @@ paths:
get: # documentation for GET operation for this path
tags:
- - Deployment Intent Group
- summary: Query intent
+ - Generic Placement Intent
+ summary: Query intent for an application
description: |
- Query `Deployment Intent`
+ Query `generic placement intent for application`
- operationId: queryIntentForDeploymentIntentGroup
+ operationId: queryIntentfromGenericPlacementIntent
responses: # list of responses
'200':
description: Success
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/DeploymentIntent'
+ $ref: '#/components/schemas/GenericPlacementAppIntent'
'404':
- description: Deployment Intent not found
+ description: Generic Placement Intent for application not found
content: {}
+
####################Lifecycle Management#######################################
/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/approve:
parameters:
@@ -2308,11 +2315,12 @@ paths:
######################## Network Controller Intent API's##########################################
- /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/network-controller-intent:
+ /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent:
parameters:
- $ref: '#/components/parameters/projectName'
- $ref: '#/components/parameters/compositeAppName'
- $ref: '#/components/parameters/compositeAppVersion'
+ - $ref: '#/components/parameters/deploymentIntentGroupName'
post:
tags:
- Network Controller Intent
@@ -2353,12 +2361,13 @@ paths:
'404':
description: No Network Controller Intent found
content: {}
- /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/network-controller-intent/{net-control-intent}:
+ /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{net-control-intent}:
# parameters list that are used with each operation for this path
parameters:
- $ref: '#/components/parameters/projectName'
- $ref: '#/components/parameters/compositeAppName'
- $ref: '#/components/parameters/compositeAppVersion'
+ - $ref: '#/components/parameters/deploymentIntentGroupName'
- $ref: '#/components/parameters/netControlIntent'
get: # documentation for GET operation for this path
tags:
@@ -2425,11 +2434,12 @@ paths:
description: Network Controller Intent not found
content: {}
################## Workload Intents##################################
- /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/network-controller-intent/{net-control-intent}/workload-intents:
+ /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{net-control-intent}/workload-intents:
parameters:
- $ref: '#/components/parameters/projectName'
- $ref: '#/components/parameters/compositeAppName'
- $ref: '#/components/parameters/compositeAppVersion'
+ - $ref: '#/components/parameters/deploymentIntentGroupName'
- $ref: '#/components/parameters/netControlIntent'
post:
tags:
@@ -2443,7 +2453,7 @@ paths:
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/NetworkWorloadSpec'
+ $ref: '#/components/schemas/NetworkWorkloadSpec'
'405':
description: Invalid Input
content: {}
@@ -2451,7 +2461,7 @@ paths:
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/NetworkWorloadSpec'
+ $ref: '#/components/schemas/NetworkWorkloadSpec'
get: # documentation for GET operation for this path
tags:
- Network Controller Intent
@@ -2467,17 +2477,18 @@ paths:
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/NetworkWorloadSpecArray'
+ $ref: '#/components/schemas/NetworkWorkloadSpecArray'
'404':
description: No Network Controller Workload Intent found
content: {}
- /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/network-controller-intent/{net-control-intent}/workload-intents/{workload-intent-name}:
+ /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{net-control-intent}/workload-intents/{workload-intent-name}:
# parameters list that are used with each operation for this path
parameters:
- $ref: '#/components/parameters/projectName'
- $ref: '#/components/parameters/compositeAppName'
- $ref: '#/components/parameters/compositeAppVersion'
+ - $ref: '#/components/parameters/deploymentIntentGroupName'
- $ref: '#/components/parameters/netControlIntent'
- $ref: '#/components/parameters/netControlWorkloadIntent'
get: # documentation for GET operation for this path
@@ -2495,7 +2506,7 @@ paths:
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/NetworkWorloadSpec'
+ $ref: '#/components/schemas/NetworkWorkloadSpec'
'404':
description: Network Controller Workload Intent not found
content: {}
@@ -2510,7 +2521,7 @@ paths:
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/NetworkWorloadSpec'
+ $ref: '#/components/schemas/NetworkWorkloadSpec'
description: Success
'400':
description: Invalid data
@@ -2523,7 +2534,7 @@ paths:
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/NetworkWorloadSpec'
+ $ref: '#/components/schemas/NetworkWorkloadSpec'
required: true
delete: # documentation for DELETE operation for this path
tags:
@@ -2546,11 +2557,12 @@ paths:
content: {}
################## Workload Intents Interfaces ##################################
- /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/network-controller-intent/{net-control-intent}/workload-intents/{workload-intent-name}/interfaces:
+ /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{net-control-intent}/workload-intents/{workload-intent-name}/interfaces:
parameters:
- $ref: '#/components/parameters/projectName'
- $ref: '#/components/parameters/compositeAppName'
- $ref: '#/components/parameters/compositeAppVersion'
+ - $ref: '#/components/parameters/deploymentIntentGroupName'
- $ref: '#/components/parameters/netControlIntent'
- $ref: '#/components/parameters/netControlWorkloadIntent'
post:
@@ -2565,7 +2577,7 @@ paths:
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/NetworkWorloadInterface'
+ $ref: '#/components/schemas/NetworkWorkloadInterface'
'405':
description: Invalid Input
content: {}
@@ -2573,7 +2585,7 @@ paths:
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/NetworkWorloadInterface'
+ $ref: '#/components/schemas/NetworkWorkloadInterface'
get: # documentation for GET operation for this path
tags:
- Network Controller Intent
@@ -2589,16 +2601,17 @@ paths:
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/NetworkWorloadInterfaceArray'
+ $ref: '#/components/schemas/NetworkWorkloadInterfaceArray'
'404':
description: No Network Controller Workload Interface found
content: {}
- /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/network-controller-intent/{net-control-intent}/workload-intents/{workload-intent-name}/interfaces/{interface-name}:
+ /projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{net-control-intent}/workload-intents/{workload-intent-name}/interfaces/{interface-name}:
# parameters list that are used with each operation for this path
parameters:
- $ref: '#/components/parameters/projectName'
- $ref: '#/components/parameters/compositeAppName'
- $ref: '#/components/parameters/compositeAppVersion'
+ - $ref: '#/components/parameters/deploymentIntentGroupName'
- $ref: '#/components/parameters/netControlIntent'
- $ref: '#/components/parameters/netControlWorkloadIntent'
- $ref: '#/components/parameters/netControlWorkloadInterface'
@@ -2617,7 +2630,7 @@ paths:
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/NetworkWorloadInterface'
+ $ref: '#/components/schemas/NetworkWorkloadInterface'
'404':
description: Network Controller Workload Interface not found
content: {}
@@ -2632,7 +2645,7 @@ paths:
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/NetworkWorloadInterface'
+ $ref: '#/components/schemas/NetworkWorkloadInterface'
description: Success
'400':
description: Invalid data
@@ -2645,7 +2658,7 @@ paths:
content:
application/json: # operation response mime type
schema:
- $ref: '#/components/schemas/NetworkWorloadInterface'
+ $ref: '#/components/schemas/NetworkWorkloadInterface'
required: true
delete: # documentation for DELETE operation for this path
@@ -2668,6 +2681,685 @@ paths:
description: Network Controller Workload Interface not found
content: {}
+############################ Logical Cloud API's #################################################
+ /projects/{project-name}/logical-clouds:
+ parameters:
+ - $ref: '#/components/parameters/projectName'
+ post:
+ tags:
+ - Logical Clouds
+ summary: Add a new Logical Cloud
+ description: Add a new Logical Cloud
+ operationId: addLogicalCloud
+ responses:
+ '201':
+ description: Logical Clouds successfully created
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/LogicalCloud'
+ '400':
+ description: Empty body or missing name
+ content: {}
+ '404':
+ description: The specified project doesn't exist
+ content: {}
+ '422':
+ description: Invalid input
+ content: {}
+ '500':
+ description: Internal error creating or returning Logical Cloud
+ content: {}
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/LogicalCloud'
+ description: Logical Cloud info
+ required: true
+ get:
+ tags:
+ - Logical Clouds
+ summary: Get all Logical Clouds
+ description: Get all Logical Clouds
+ operationId: getAllLogicalCloud
+ responses:
+ '200':
+ description: List of Logical Clouds successfully returned
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/LogicalCloudArray'
+ '500':
+ description: Internal error while looking up Logical Clouds or encoding response
+ content: {}
+
+ /projects/{project-name}/logical-clouds/{logical-cloud-name}:
+ parameters:
+ - $ref: '#/components/parameters/projectName'
+ - $ref: '#/components/parameters/logicalCloudName'
+ get:
+ tags:
+ - Logical Clouds
+ summary: Get Logical Cloud
+ description: Get Logical Cloud
+ operationId: getLogicalCloudByName
+ responses:
+ '200':
+ description: Logical Cloud successfully returned
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/LogicalCloud'
+ '404':
+ description: Logical Cloud not found
+ content: {}
+ '500':
+ description: Internal error while looking up Logical Cloud or encoding response
+ content: {}
+ put:
+ tags:
+ - Logical Clouds
+ summary: Update Logical Cloud
+ description: Update Logical Cloud
+ operationId: updateLogicalClouds
+ responses:
+ '200':
+ description: Logical Cloud successfully updated
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/LogicalCloud'
+ '400':
+ description: Empty body or missing name
+ content: {}
+ '404':
+ description: Logical Cloud not found
+ content: {}
+ '422':
+ description: Invalid input
+ content: {}
+ '500':
+ description: Internal error while updating up Logical Cloud or encoding response
+ content: {}
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/LogicalCloud'
+ description: Update Logical Cloud object
+ required: true
+ delete:
+ tags:
+ - Logical Clouds
+ summary: Delete Logical Cloud
+ description: Delete `Logical Cloud`
+ operationId: deleteLogicalCloudByName
+ responses:
+ '204':
+ description: Logical Cloud deleted
+ content: {}
+ '404':
+ description: Logical Cloud not found
+ content: {}
+ '409':
+ description: Logical Cloud is applied or being terminated
+ content: {}
+ '500':
+ description: Internal error
+ content: {}
+ /projects/{project-name}/logical-clouds/{logical-cloud-name}/apply:
+ parameters:
+ - $ref: '#/components/parameters/projectName'
+ - $ref: '#/components/parameters/logicalCloudName'
+ post:
+ tags:
+ - Logical Clouds
+ summary: Apply Logical Cloud configuration
+ description: Apply Logical Cloud configuration
+ operationId: applyLogicalCloud
+ responses:
+ '200':
+ description: Logical Cloud applied over clusters
+ content: {}
+ '400':
+ description: Logical Cloud lacks the necessary resources
+ content: {}
+ '404':
+ description: Logical Cloud does not exist
+ content: {}
+ '409':
+ description: Logical Cloud has already been applied or is being terminated
+ content: {}
+ '500':
+ description: Internal error
+ content: {}
+ requestBody:
+ content: {}
+ /projects/{project-name}/logical-clouds/{logical-cloud-name}/terminate:
+ parameters:
+ - $ref: '#/components/parameters/projectName'
+ - $ref: '#/components/parameters/logicalCloudName'
+ post:
+ tags:
+ - Logical Clouds
+ summary: Terminate Logical Cloud deployment
+ description: Terminate Logical Cloud deployment
+ operationId: terminateLogicalCloud
+ responses:
+ '200':
+ description: Logical Cloud removed from clusters
+ content: {}
+ '404':
+ description: Logical Cloud does not exist
+ content: {}
+ '409':
+ description: Logical Cloud has not been applied or is already terminating
+ content: {}
+ '500':
+ description: Internal error
+ content: {}
+ requestBody:
+ content: {}
+
+############################ Logical Cloud Cluster Reference API's ###############################
+ /projects/{project-name}/logical-clouds/{logical-cloud-name}/cluster-references:
+ parameters:
+ - $ref: '#/components/parameters/projectName'
+ - $ref: '#/components/parameters/logicalCloudName'
+ post:
+ tags:
+ - Logical Cloud Cluster References
+ summary: Add Cluster Reference to Logical Cloud
+ description: Add Cluster Reference to Logical Cloud
+ operationId: addClusterReference
+ responses:
+ '201':
+ description: Cluster Reference successfully created
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ClusterReference'
+ '400':
+ description: Empty body or missing name
+ content: {}
+ '422':
+ description: Invalid input
+ content: {}
+ '500':
+ description: Internal error
+ content: {}
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ClusterReference'
+ get:
+ tags:
+ - Logical Cloud Cluster References
+ summary: Get all Cluster References for Logical Cloud
+ description: Get all Cluster References for Logical Cloud
+ operationId: getAllClusters
+ responses:
+ '200':
+ description: Cluster References successfully returned
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ClusterReferenceArray'
+ '500':
+ description: Internal error
+ content: {}
+ /projects/{project-name}/logical-clouds/{logical-cloud-name}/cluster-references/{cluster-reference}:
+ parameters:
+ - $ref: '#/components/parameters/projectName'
+ - $ref: '#/components/parameters/logicalCloudName'
+ - $ref: '#/components/parameters/clusterReference'
+ get:
+ tags:
+ - Logical Cloud Cluster References
+ summary: Get Cluster Reference
+ description: Get Cluster Reference
+ operationId: getClusterReference
+ responses:
+ '200':
+ description: Cluster Reference successfully returned
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ClusterReference'
+
+ '404':
+ description: Cluster Reference not found
+ content: {}
+ '500':
+ description: Internal error
+ content: {}
+ put:
+ tags:
+ - Logical Cloud Cluster References
+ summary: Update Cluster Reference
+ description: Update Cluster Reference
+ operationId: updateClusterReference
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ClusterReference'
+ description: Cluster Reference successfully updated
+ '400':
+ description: Invalid data or missing name
+ content: {}
+ '404':
+ description: Cluster Reference not found
+ content: {}
+ '422':
+ description: Invalid input
+ content: {}
+ '500':
+ description: Internal error
+ content: {}
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ClusterReference'
+ required: true
+ delete:
+ tags:
+ - Logical Cloud Cluster References
+ summary: Delete Cluster Reference
+ description: Delete Cluster Reference
+ operationId: deleteClusterReference
+ responses:
+ '204':
+ description: Deleted
+ content: {}
+ '500':
+ description: Internal error
+ content: {}
+ /projects/{project-name}/logical-clouds/{logical-cloud-name}/cluster-references/{cluster-reference}/kubeconfig:
+ parameters:
+ - $ref: '#/components/parameters/projectName'
+ - $ref: '#/components/parameters/logicalCloudName'
+ - $ref: '#/components/parameters/clusterReference'
+ get:
+ tags:
+ - Logical Cloud Cluster References
+ summary: Get kubeconfig of Cluster Reference
+ description: Get kubeconfig of Cluster Reference
+ operationId: getClusterReferenceKubeconfig
+ responses:
+ '200':
+ description: Cluster Reference successfully returned
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ClusterReference'
+ '202':
+ description: User certificate hasn't been issued yet
+ content: {}
+ '400':
+ description: Logical Cloud hasn't been applied
+ content: {}
+ '404':
+ description: Cluster Reference not found
+ content: {}
+ '500':
+ description: Internal error
+ content: {}
+############################ Logical Cloud User Permission API's #################################
+ /projects/{project-name}/logical-clouds/{logical-cloud-name}/user-permissions:
+ parameters:
+ - $ref: '#/components/parameters/projectName'
+ - $ref: '#/components/parameters/logicalCloudName'
+ post:
+ tags:
+ - Logical Cloud User Permissions
+ summary: Add User Permission to Logical Cloud
+ description: Add User Permission to Logical Cloud
+ operationId: addUserPermission
+ responses:
+ '201':
+ description: User Permission successfully created
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserPermission'
+ '400':
+ description: Empty body or missing name
+ content: {}
+ '422':
+ description: Invalid input
+ content: {}
+ '500':
+ description: Internal error
+ content: {}
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserPermission'
+ get:
+ tags:
+ - Logical Cloud User Permissions
+ summary: Get all User Permissions for Logical Cloud
+ description: Get all User Permissions for Logical Cloud
+ operationId: getAllUserPermissions
+ responses:
+ '200':
+ description: User Permissions successfully returned
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserPermissionArray'
+ '500':
+ description: Internal error
+ content: {}
+ /projects/{project-name}/logical-clouds/{logical-cloud-name}/user-permissions/{user-permission}:
+ parameters:
+ - $ref: '#/components/parameters/projectName'
+ - $ref: '#/components/parameters/logicalCloudName'
+ - $ref: '#/components/parameters/userPermission'
+ get:
+ tags:
+ - Logical Cloud User Permissions
+ summary: Get User Permission
+ description: Get User Permission
+ operationId: getUserPermission
+ responses:
+ '200':
+ description: User Permission successfully returned
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserPermission'
+
+ '404':
+ description: User Permission not found
+ content: {}
+ '500':
+ description: Internal error
+ content: {}
+ put:
+ tags:
+ - Logical Cloud User Permissions
+ summary: Update User Permission
+ description: Update User Permission
+ operationId: updateUserPermission
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserPermission'
+ description: User Permission successfully updated
+ '400':
+ description: Invalid data or missing name
+ content: {}
+ '404':
+ description: User Permission not found
+ content: {}
+ '422':
+ description: Invalid input
+ content: {}
+ '500':
+ description: Internal error
+ content: {}
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/UserPermission'
+ required: true
+ delete:
+ tags:
+ - Logical Cloud User Permissions
+ summary: Delete User Permission
+ description: Delete User Permission
+ operationId: deleteUserPermission
+ responses:
+ '204':
+ description: Deleted
+ content: {}
+ '500':
+ description: Internal error
+ content: {}
+############################ Logical Cloud Cluster Quota API's ###################################
+ /projects/{project-name}/logical-clouds/{logical-cloud-name}/cluster-quotas:
+ parameters:
+ - $ref: '#/components/parameters/projectName'
+ - $ref: '#/components/parameters/logicalCloudName'
+ post:
+ tags:
+ - Logical Cloud Cluster Quotas
+ summary: Add Cluster Quota to Logical Cloud
+ description: Add Cluster Quota to Logical Cloud
+ operationId: addClusterQuota
+ responses:
+ '201':
+ description: Cluster Quota successfully created
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ClusterQuota'
+ '400':
+ description: Empty body or missing name
+ content: {}
+ '422':
+ description: Invalid input
+ content: {}
+ '500':
+ description: Internal error
+ content: {}
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ClusterQuota'
+ get:
+ tags:
+ - Logical Cloud Cluster Quotas
+ summary: Get allCluster Quotas for Logical Cloud
+ description: Get all Cluster Quotas for Logical Cloud
+ operationId: getAllClusterQuotas
+ responses:
+ '200':
+ description: Cluster Quotas successfully returned
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ClusterQuotaArray'
+ '500':
+ description: Internal error
+ content: {}
+ /projects/{project-name}/logical-clouds/{logical-cloud-name}/cluster-quotas/{cluster-quota}:
+ parameters:
+ - $ref: '#/components/parameters/projectName'
+ - $ref: '#/components/parameters/logicalCloudName'
+ - $ref: '#/components/parameters/clusterQuota'
+ get:
+ tags:
+ - Logical Cloud Cluster Quotas
+ summary: Get Cluster Quota
+ description: Get Cluster Quota
+ operationId: getClusterQuota
+ responses:
+ '200':
+ description: Cluster Quota successfully returned
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ClusterQuota'
+
+ '404':
+ description: Cluster Quota not found
+ content: {}
+ '500':
+ description: Internal error
+ content: {}
+ put:
+ tags:
+ - Logical Cloud Cluster Quotas
+ summary: Update Cluster Quota
+ description: Update Cluster Quota
+ operationId: updateClusterQuota
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ClusterQuota'
+ description: Cluster Quota successfully updated
+ '400':
+ description: Invalid data or missing name
+ content: {}
+ '404':
+ description: Cluster Quota not found
+ content: {}
+ '422':
+ description: Invalid input
+ content: {}
+ '500':
+ description: Internal error
+ content: {}
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/ClusterQuota'
+ required: true
+ delete:
+ tags:
+ - Logical Cloud Cluster Quotas
+ summary: Delete Cluster Quota
+ description: Delete Cluster Quota
+ operationId: deleteClusterQuota
+ responses:
+ '204':
+ description: Deleted
+ content: {}
+ '500':
+ description: Internal error
+ content: {}
+############################ Logical Cloud KV Pair API's #########################################
+ /projects/{project-name}/logical-clouds/{logical-cloud-name}/kv-pairs:
+ parameters:
+ - $ref: '#/components/parameters/projectName'
+ - $ref: '#/components/parameters/logicalCloudName'
+ post:
+ tags:
+ - Logical Cloud KV Pairs
+ summary: Add KV Pair to Logical Cloud
+ description: Add KV Pair to Logical Cloud
+ operationId: addKVPair
+ responses:
+ '201':
+ description: KV Pair successfully created
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Metadata'
+ '400':
+ description: Empty body or missing name
+ content: {}
+ '422':
+ description: Invalid input
+ content: {}
+ '500':
+ description: Internal error
+ content: {}
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/KVPair'
+ get:
+ tags:
+ - Logical Cloud KV Pairs
+ summary: Get all KV Pairs for Logical Cloud
+ description: Get all KV Pairs for Logical Cloud
+ operationId: getAllKVPairs
+ responses:
+ '200':
+ description: KV Pairs successfully returned
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/KVPairArray'
+ '500':
+ description: Internal error
+ content: {}
+ /projects/{project-name}/logical-clouds/{logical-cloud-name}/kv-pairs/{kv-pair}:
+ parameters:
+ - $ref: '#/components/parameters/projectName'
+ - $ref: '#/components/parameters/logicalCloudName'
+ - $ref: '#/components/parameters/kvPair'
+ get:
+ tags:
+ - Logical Cloud KV Pairs
+ summary: Get KV Pair
+ description: Get KV Pair
+ operationId: getKVPair
+ responses:
+ '200':
+ description: KV Pair successfully returned
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Metadata'
+
+ '404':
+ description: KV Pair not found
+ content: {}
+ '500':
+ description: Internal error
+ content: {}
+ put:
+ tags:
+ - Logical Cloud KV Pairs
+ summary: Update KV Pair
+ description: Update KV Pair
+ operationId: updateKVPair
+ responses:
+ '200':
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Metadata'
+ description: KV Pair successfully updated
+ '400':
+ description: Invalid data or missing name
+ content: {}
+ '404':
+ description: KV Pair not found
+ content: {}
+ '422':
+ description: Invalid input
+ content: {}
+ '500':
+ description: Internal error
+ content: {}
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/KVPair'
+ required: true
+ delete:
+ tags:
+ - Logical Cloud KV Pairs
+ summary: Delete KV Pair
+ description: Delete KV Pair
+ operationId: deleteKVPair
+ responses:
+ '204':
+ description: Deleted
+ content: {}
+ '500':
+ description: Internal error
+ content: {}
#########################SCHEMAS####################################################
# An object to hold reusable parts that can be used across the definition
@@ -2881,9 +3573,15 @@ components:
version:
type: string
maxLength: 128
+ logical-cloud:
+ type: string
+ description: Logical Cloud to use for this intent
+ maxLength: 128
+ example: "cloud1"
required:
- profile
- version
+ - logical-cloud
DeploymentGroupIntent:
type: object
properties:
@@ -3160,7 +3858,7 @@ components:
- chainType
- routingSpec
type: object
- NetworkWorloadSpec:
+ NetworkWorkloadSpec:
type: object
properties:
spec:
@@ -3187,11 +3885,11 @@ components:
description: Type of the workload
maxLength: 128
example: "deployment"
- NetworkWorloadSpecArray:
+ NetworkWorkloadSpecArray:
type: array
items:
- $ref: '#/components/schemas/NetworkWorloadSpec'
- NetworkWorloadInterface:
+ $ref: '#/components/schemas/NetworkWorkloadSpec'
+ NetworkWorkloadInterface:
type: object
properties:
metadata:
@@ -3227,10 +3925,200 @@ components:
required:
- interface
- name
- NetworkWorloadInterfaceArray:
+ NetworkWorkloadInterfaceArray:
+ type: array
+ items:
+ $ref: '#/components/schemas/NetworkWorkloadInterface'
+ LogicalCloud:
+ type: object
+ properties:
+ metadata:
+ $ref: '#/components/schemas/MetadataBase'
+ spec:
+ type: object
+ properties:
+ namespace:
+ type: string
+ description: namespace name
+ maxLength: 128
+ example: "ns1"
+ user:
+ properties:
+ user-name:
+ type: string
+ description: user name for auth
+ maxLength: 20
+ type:
+ type: string
+ description: authentication type
+ maxLength: 128
+ example: "certificate"
+ user-permissions:
+ type: array
+ items:
+ type: object
+ properties:
+ permission-name:
+ type: string
+ description: name of permission
+ maxLength: 128
+ apiGroups:
+ type: array
+ items:
+ type: string
+ description: API group expression
+ resources:
+ type: array
+ description: K8s resource list
+ items:
+ type: string
+ description: K8s resource
+ verbs:
+ type: array
+ description: K8s verb list
+ items:
+ type: string
+ description: K8s verb
+ ClusterReference:
+ type: object
+ properties:
+ metadata:
+ $ref: '#/components/schemas/MetadataBase'
+ spec:
+ type: object
+ properties:
+ cluster-provider:
+ type: string
+ description: cluster provider name
+ maxLength: 128
+ example: "cp-1"
+ cluster-name:
+ type: string
+ description: cluster name
+ maxLength: 128
+ example: "c1"
+ loadbalancer-ip:
+ type: string
+ description: IP address of load balancer
+ maxLength: 16
+ example: "0.0.0.0"
+ UserPermission:
+ type: object
+ properties:
+ permission-name:
+ type: string
+ description: name of permission
+ maxLength: 128
+ apiGroups:
+ type: array
+ items:
+ type: string
+ description: API group expression
+ resources:
+ type: array
+ description: K8s resource list
+ items:
+ type: string
+ description: K8s resource
+ verbs:
+ type: array
+ description: K8s verb list
+ items:
+ type: string
+ description: K8s verb
+ ClusterQuota:
+ type: object
+ properties:
+ metadata:
+ $ref: '#/components/schemas/MetadataBase'
+ spec:
+ type: object
+ properties:
+ limits.cpu:
+ type: string
+ limits.memory:
+ type: string
+ requests.cpu:
+ type: string
+ requests.memory:
+ type: string
+ requests.storage:
+ type: string
+ requests.ephemeral-storage:
+ type: string
+ limits.ephemeral-storage:
+ type: string
+ persistentvolumeclaims:
+ type: string
+ pods:
+ type: string
+ configmaps:
+ type: string
+ replicationcontrollers:
+ type: string
+ resourcequotas:
+ type: string
+ services:
+ type: string
+ services.loadbalancers:
+ type: string
+ services.nodeports:
+ type: string
+ secrets:
+ type: string
+ count/replicationcontrollers:
+ type: string
+ count/deployments.apps:
+ type: string
+ count/replicasets.apps:
+ type: string
+ count/statefulsets.apps:
+ type: string
+ count/jobs.batch:
+ type: string
+ count/cronjobs.batch:
+ type: string
+ count/deployments.extensions:
+ type: string
+ KVPair:
+ type: object
+ properties:
+ metadata:
+ $ref: '#/components/schemas/MetadataBase'
+ spec:
+ type: object
+ properties:
+ kv:
+ type: array
+ description: list of key-value pairs
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ value:
+ type: string
+ LogicalCloudArray:
+ type: array
+ items:
+ $ref: '#/components/schemas/LogicalCloud'
+ ClusterReferenceArray:
+ type: array
+ items:
+ $ref: '#/components/schemas/ClusterReference'
+ UserPermissionArray:
type: array
items:
- $ref: '#/components/schemas/NetworkWorloadInterface'
+ $ref: '#/components/schemas/UserPermission'
+ ClusterQuotaArray:
+ type: array
+ items:
+ $ref: '#/components/schemas/ClusterQuota'
+ KVPairArray:
+ type: array
+ items:
+ $ref: '#/components/schemas/KVPair'
+
parameters:
projectName:
name: project-name
@@ -3298,7 +4186,7 @@ components:
deploymentIntentGroupName:
name: deployment-intent-group-name
in: path
- description: Name of Generic Placement Intent for application
+ description: Name of Deployment Intent Group
required: true
schema:
type: string
@@ -3375,3 +4263,43 @@ components:
schema:
type: string
maxLength: 128
+ logicalCloudName:
+ name: logical-cloud-name
+ in: path
+ description: Logical Cloud name
+ required: true
+ schema:
+ type: string
+ maxLength: 128
+ clusterReference:
+ name: cluster-reference
+ in: path
+ description: Cluster Reference name
+ required: true
+ schema:
+ type: string
+ maxLength: 128
+ userPermission:
+ name: user-permission
+ in: path
+ description: User Permission name
+ required: true
+ schema:
+ type: string
+ maxLength: 128
+ clusterQuota:
+ name: cluster-quota
+ in: path
+ description: Cluster Quota name
+ required: true
+ schema:
+ type: string
+ maxLength: 128
+ kvPair:
+ name: kv-pair
+ in: path
+ description: KV Pair name
+ required: true
+ schema:
+ type: string
+ maxLength: 128
diff --git a/kud/deployment_infra/galaxy-requirements.yml b/kud/deployment_infra/galaxy-requirements.yml
index 3191dc19..9747dc99 100644
--- a/kud/deployment_infra/galaxy-requirements.yml
+++ b/kud/deployment_infra/galaxy-requirements.yml
@@ -10,6 +10,6 @@
- src: andrewrothstein.go
version: v2.1.15
- src: andrewrothstein.kubernetes-helm
- version: v1.2.17
+ version: v1.3.16
- src: geerlingguy.docker
version: 2.5.2
diff --git a/kud/deployment_infra/images/multus-daemonset.yml b/kud/deployment_infra/images/multus-daemonset.yml
index d6d8d533..09759360 100644
--- a/kud/deployment_infra/images/multus-daemonset.yml
+++ b/kud/deployment_infra/images/multus-daemonset.yml
@@ -1,11 +1,10 @@
---
-apiVersion: apiextensions.k8s.io/v1beta1
+apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: network-attachment-definitions.k8s.cni.cncf.io
spec:
group: k8s.cni.cncf.io
- version: v1
scope: Namespaced
names:
plural: network-attachment-definitions
@@ -13,16 +12,27 @@ spec:
kind: NetworkAttachmentDefinition
shortNames:
- net-attach-def
- validation:
- openAPIV3Schema:
- properties:
- spec:
+ versions:
+ - name: v1
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ description: 'NetworkAttachmentDefinition is a CRD schema specified by the Network Plumbing
+ Working Group to express the intent for attaching pods to one or more logical or physical
+ networks. More information available at: https://github.com/k8snetworkplumbingwg/multi-net-spec'
+ type: object
properties:
- config:
- type: string
+ spec:
+ description: 'NetworkAttachmentDefinition spec defines the desired state of a network attachment'
+ type: object
+ properties:
+ config:
+ description: 'NetworkAttachmentDefinition config is a JSON-formatted CNI configuration'
+ type: string
---
kind: ClusterRole
-apiVersion: rbac.authorization.k8s.io/v1beta1
+apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: multus
rules:
@@ -39,9 +49,18 @@ rules:
verbs:
- get
- update
+ - apiGroups:
+ - ""
+ - events.k8s.io
+ resources:
+ - events
+ verbs:
+ - create
+ - patch
+ - update
---
kind: ClusterRoleBinding
-apiVersion: rbac.authorization.k8s.io/v1beta1
+apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: multus
roleRef:
@@ -68,11 +87,18 @@ metadata:
tier: node
app: multus
data:
+ # NOTE: If you'd prefer to manually apply a configuration file, you may create one here.
+ # In the case you'd like to customize the Multus installation, you should change the arguments to the Multus pod
+ # change the "args" line below from
+ # - "--multus-conf-file=auto"
+ # to:
+ # "--multus-conf-file=/tmp/multus-conf/70-multus.conf"
+ # Additionally -- you should ensure that the name "70-multus.conf" is the alphabetically first name in the
+ # /etc/cni/net.d/ directory on each node, otherwise, it will not be used by the Kubelet.
cni-conf.json: |
{
"name": "multus-cni-network",
"type": "multus",
- "cniVersion": "0.3.1",
"capabilities": {
"portMappings": true
},
@@ -109,11 +135,11 @@ metadata:
labels:
tier: node
app: multus
+ name: multus
spec:
selector:
matchLabels:
- tier: node
- app: multus
+ name: multus
updateStrategy:
type: RollingUpdate
template:
@@ -121,20 +147,22 @@ spec:
labels:
tier: node
app: multus
+ name: multus
spec:
hostNetwork: true
nodeSelector:
- beta.kubernetes.io/arch: amd64
+ kubernetes.io/arch: amd64
tolerations:
- operator: Exists
effect: NoSchedule
serviceAccountName: multus
containers:
- name: kube-multus
- image: nfvpe/multus:v3.3-tp
+ image: integratedcloudnative/multus:v3.4.1-tp
command: ["/entrypoint.sh"]
args:
- - "--multus-conf-file=/tmp/multus-conf/00-multus.conf"
+ - "--multus-conf-file=auto"
+ - "--cni-version=0.3.1"
resources:
requests:
cpu: "100m"
@@ -163,4 +191,4 @@ spec:
name: multus-cni-config
items:
- key: cni-conf.json
- path: 00-multus.conf
+ path: 70-multus.conf
diff --git a/kud/deployment_infra/playbooks/configure-emco-reset.yml b/kud/deployment_infra/playbooks/configure-emco-reset.yml
index a4560cc2..7cad36e4 100644
--- a/kud/deployment_infra/playbooks/configure-emco-reset.yml
+++ b/kud/deployment_infra/playbooks/configure-emco-reset.yml
@@ -15,7 +15,7 @@
file: kud-vars.yml
- name: Change the emco directory and run helm delete
- command: /usr/local/bin/helm delete --purge emco
+ command: /usr/local/bin/helm uninstall --namespace emco emco
register: helm_delete
args:
chdir: /opt/multicloud/deployments/helm/v2/emco
@@ -41,15 +41,6 @@
- debug:
var: make_clean.stdout_lines
- - name: Change the emco directory and make repo-stop
- command: /usr/bin/make repo-stop
- register: make_repo_stop
- args:
- chdir: /opt/multicloud/deployments/helm/v2/emco
-
- - debug:
- var: make_repo_stop.stdout_lines
-
- name: clean multicloud-k8s path
file:
state: absent
diff --git a/kud/deployment_infra/playbooks/configure-emco.yml b/kud/deployment_infra/playbooks/configure-emco.yml
index 255ce6a4..eb6adcf2 100644
--- a/kud/deployment_infra/playbooks/configure-emco.yml
+++ b/kud/deployment_infra/playbooks/configure-emco.yml
@@ -27,15 +27,6 @@
yum: name=make state=present update_cache=yes
when: ansible_distribution == "CentOS"
- - name: Change the emco directory and run the command make repo
- command: /usr/bin/make repo
- register: make_repo
- args:
- chdir: /opt/multicloud/deployments/helm/v2/emco
-
- - debug:
- var: make_repo.stdout_lines
-
- name: Change the emco directory and run the command make all
command: /usr/bin/make all
register: make_all
@@ -46,7 +37,7 @@
var: make_all.stdout_lines
- name: Change the emco directory and run the command helm install
- command: /usr/local/bin/helm install dist/packages/emco-0.1.0.tgz --name emco --namespace emco
+ command: /usr/local/bin/helm install --namespace emco --create-namespace --set emco-tools.fluentd.clusterDomain={{ cluster_name.stdout }} emco dist/packages/emco-0.1.0.tgz
register: helm_install
args:
chdir: /opt/multicloud/deployments/helm/v2/emco
diff --git a/kud/deployment_infra/playbooks/configure-kud.yml b/kud/deployment_infra/playbooks/configure-kud.yml
index 6ac0477d..0e32e69d 100644
--- a/kud/deployment_infra/playbooks/configure-kud.yml
+++ b/kud/deployment_infra/playbooks/configure-kud.yml
@@ -23,11 +23,6 @@
when: helm_client.rc != 0
vars:
kubernetes_helm_ver: "v{{ helm_client_version }}"
- tasks:
- - name: Initialize helm client
- command: helm init -c
- args:
- creates: ~/.helm
- hosts: kube-node
become: yes
diff --git a/kud/deployment_infra/playbooks/configure-onap4k8s-reset.yml b/kud/deployment_infra/playbooks/configure-onap4k8s-reset.yml
index d6f2f6bc..ddfedbb4 100644
--- a/kud/deployment_infra/playbooks/configure-onap4k8s-reset.yml
+++ b/kud/deployment_infra/playbooks/configure-onap4k8s-reset.yml
@@ -15,7 +15,7 @@
file: kud-vars.yml
- name: Change the onap4k8s directory and run helm delete
- command: /usr/local/bin/helm delete --purge multicloud-onap8ks
+ command: /usr/local/bin/helm uninstall --namespace onap4k8s-ns multicloud-onap8ks
register: helm_delete
args:
chdir: /opt/multicloud/deployments/helm/onap4k8s
@@ -41,15 +41,6 @@
- debug:
var: make_clean.stdout_lines
- - name: Change the onap4k8s directory and make repo-stop
- command: /usr/bin/make repo-stop
- register: make_repo_stop
- args:
- chdir: /opt/multicloud/deployments/helm/onap4k8s
-
- - debug:
- var: make_repo_stop.stdout_lines
-
- name: clean multicloud-k8s path
file:
state: absent
diff --git a/kud/deployment_infra/playbooks/configure-onap4k8s.yml b/kud/deployment_infra/playbooks/configure-onap4k8s.yml
index 11729171..c016cf1c 100644
--- a/kud/deployment_infra/playbooks/configure-onap4k8s.yml
+++ b/kud/deployment_infra/playbooks/configure-onap4k8s.yml
@@ -27,15 +27,6 @@
yum: name=make state=present update_cache=yes
when: ansible_distribution == "CentOS"
- - name: Change the onap4k8s directory and run the command make repo
- command: /usr/bin/make repo
- register: make_repo
- args:
- chdir: /opt/multicloud/deployments/helm/onap4k8s
-
- - debug:
- var: make_repo.stdout_lines
-
- name: Change the onap4k8s directory and run the command make all
command: /usr/bin/make all
register: make_all
@@ -46,7 +37,7 @@
var: make_all.stdout_lines
- name: Change the onap4k8s directory and run the command helm install
- command: /usr/local/bin/helm install dist/packages/multicloud-k8s-5.0.0.tgz --name multicloud-onap8ks --namespace onap4k8s-ns --set service.type=NodePort
+ command: /usr/local/bin/helm install --namespace onap4k8s-ns --create-namespace --set service.type=NodePort multicloud-onap8ks dist/packages/multicloud-k8s-5.0.0.tgz
register: helm_install
args:
chdir: /opt/multicloud/deployments/helm/onap4k8s
diff --git a/kud/deployment_infra/playbooks/configure-optane.yml b/kud/deployment_infra/playbooks/configure-optane.yml
index 8e000aa4..01189808 100644
--- a/kud/deployment_infra/playbooks/configure-optane.yml
+++ b/kud/deployment_infra/playbooks/configure-optane.yml
@@ -12,4 +12,4 @@
- hosts: localhost
tasks:
- name: Apply Optane PMEM CSI Daemonset
- command: "{{ base_dest }}/optane/deploy_optane.sh"
+ command: "{{ optane_dest }}/deploy_optane.sh"
diff --git a/kud/deployment_infra/playbooks/kud-vars.yml b/kud/deployment_infra/playbooks/kud-vars.yml
index 8f8ff5c3..51607020 100644
--- a/kud/deployment_infra/playbooks/kud-vars.yml
+++ b/kud/deployment_infra/playbooks/kud-vars.yml
@@ -57,8 +57,9 @@ cmk_untaint_required: true
#cmk_exclusive_mode: packed # choose between: packed, spread, default: packed
go_version: '1.12.5'
-kubespray_version: 2.12.6
-helm_client_version: 2.13.1
+kubespray_version: 2.14.1
+# This matches the helm_version from kubespray defaults
+helm_client_version: 3.2.4
# kud playbooks not compatible with 2.8.0 - see MULTICLOUD-634
ansible_version: 2.9.7
diff --git a/kud/deployment_infra/playbooks/preconfigure-kubespray.yml b/kud/deployment_infra/playbooks/preconfigure-kubespray.yml
new file mode 100644
index 00000000..78e7eda6
--- /dev/null
+++ b/kud/deployment_infra/playbooks/preconfigure-kubespray.yml
@@ -0,0 +1,19 @@
+---
+# The mitogen module used in kubespray requires python2 on the nodes.
+# On some distributions (i.e. Ubuntu 18.04), the default version of
+# python is python3.
+#
+# When python2 is not present a failure message similar to "bash:
+# /usr/bin/python: No such file or directory" will be reported.
+#
+# Note the use of "strategy: linear" below to temporarily bypass
+# mitogen.
+#
+- name: Install python2
+ hosts: k8s-cluster
+ strategy: linear
+ tasks:
+ - name: Install python2
+ package:
+ name: python
+ state: present
diff --git a/kud/deployment_infra/playbooks/preconfigure-optane.yml b/kud/deployment_infra/playbooks/preconfigure-optane.yml
index 64622895..135371ea 100644
--- a/kud/deployment_infra/playbooks/preconfigure-optane.yml
+++ b/kud/deployment_infra/playbooks/preconfigure-optane.yml
@@ -22,6 +22,14 @@
state: directory
path: "{{ optane_dest }}"
ignore_errors: yes
+ - copy:
+ src: "{{ playbook_dir }}/deploy_optane.sh"
+ dest: "{{ optane_dest }}"
+ - name: Changing perm of "sh", adding "+x"
+ shell: "chmod +x deploy_optane.sh"
+ args:
+ chdir: "{{ optane_dest }}"
+ warn: False
- hosts: kube-node
become: yes
@@ -61,14 +69,6 @@
chdir: "optane"
warn: False
- copy:
- src: "{{ playbook_dir }}/deploy_optane.sh"
- dest: optane
- - name: Changing perm of "sh", adding "+x"
- shell: "chmod +x deploy_optane.sh"
- args:
- chdir: "optane"
- warn: False
- - copy:
src: "{{ playbook_dir }}/../images/pmem-csi-lvm.yaml"
dest: optane
- copy:
diff --git a/kud/hosting_providers/containerized/installer.sh b/kud/hosting_providers/containerized/installer.sh
index c18829a5..226f4568 100755
--- a/kud/hosting_providers/containerized/installer.sh
+++ b/kud/hosting_providers/containerized/installer.sh
@@ -36,7 +36,6 @@ function _install_ansible {
pip install --no-cache-dir ansible==$version
}
-# install_k8s() - Install Kubernetes using kubespray tool
function install_kubespray {
echo "Deploying kubernetes"
version=$(grep "kubespray_version" ${kud_playbooks}/kud-vars.yml | \
@@ -50,7 +49,6 @@ function install_kubespray {
_install_ansible
wget https://github.com/kubernetes-incubator/kubespray/archive/$tarball
tar -C $dest_folder -xzf $tarball
- mv $dest_folder/kubespray-$version/ansible.cfg /etc/ansible/ansible.cfg
chown -R root:root $dest_folder/kubespray-$version
mkdir -p ${local_release_dir}/containers
rm $tarball
@@ -79,11 +77,14 @@ function install_kubespray {
fi
}
+# install_k8s() - Install Kubernetes using kubespray tool
function install_k8s {
- version=$(grep "kubespray_version" ${kud_playbooks}/kud-vars.yml | \
- awk -F ': ' '{print $2}')
local cluster_name=$1
ansible-playbook $verbose -i \
+ $kud_inventory $kud_playbooks/preconfigure-kubespray.yml \
+ --become --become-user=root | \
+ tee $cluster_log/setup-kubernetes.log
+ ansible-playbook $verbose -i \
$kud_inventory $dest_folder/kubespray-$version/cluster.yml \
-e cluster_name=$cluster_name --become --become-user=root | \
tee $cluster_log/setup-kubernetes.log
@@ -201,6 +202,9 @@ function install_pkg {
}
function install_cluster {
+ version=$(grep "kubespray_version" ${kud_playbooks}/kud-vars.yml | \
+ awk -F ': ' '{print $2}')
+ export ANSIBLE_CONFIG=$dest_folder/kubespray-$version/ansible.cfg
install_k8s $1
if [ ${2:+1} ]; then
echo "install default addons and $2"
diff --git a/kud/hosting_providers/containerized/inventory/group_vars/k8s-cluster.yml b/kud/hosting_providers/containerized/inventory/group_vars/k8s-cluster.yml
index 5560dd97..0a2953ce 100644
--- a/kud/hosting_providers/containerized/inventory/group_vars/k8s-cluster.yml
+++ b/kud/hosting_providers/containerized/inventory/group_vars/k8s-cluster.yml
@@ -49,9 +49,6 @@ kubectl_localhost: true
local_volumes_enabled: true
local_volume_provisioner_enabled: true
-## Change this to use another Kubernetes version, e.g. a current beta release
-kube_version: v1.16.9
-
# Helm deployment
helm_enabled: true
diff --git a/kud/hosting_providers/vagrant/installer.sh b/kud/hosting_providers/vagrant/installer.sh
index 0ebc3313..53164989 100755
--- a/kud/hosting_providers/vagrant/installer.sh
+++ b/kud/hosting_providers/vagrant/installer.sh
@@ -102,6 +102,7 @@ function _set_environment_file {
echo "export OVN_CENTRAL_ADDRESS=$(get_ovn_central_address)" | sudo tee --append /etc/environment
echo "export KUBE_CONFIG_DIR=/opt/kubeconfig" | sudo tee --append /etc/environment
echo "export CSAR_DIR=/opt/csar" | sudo tee --append /etc/environment
+ echo "export ANSIBLE_CONFIG=${ANSIBLE_CONFIG}" | sudo tee --append /etc/environment
}
# install_k8s() - Install Kubernetes using kubespray tool
@@ -117,7 +118,6 @@ function install_k8s {
_install_ansible
wget https://github.com/kubernetes-incubator/kubespray/archive/$tarball
sudo tar -C $dest_folder -xzf $tarball
- sudo mv $dest_folder/kubespray-$version/ansible.cfg /etc/ansible/ansible.cfg
sudo chown -R $USER $dest_folder/kubespray-$version
sudo mkdir -p ${local_release_dir}/containers
rm $tarball
@@ -139,6 +139,8 @@ function install_k8s {
if [[ -n "${https_proxy:-}" ]]; then
echo "https_proxy: \"$https_proxy\"" | tee --append $kud_inventory_folder/group_vars/all.yml
fi
+ export ANSIBLE_CONFIG=$dest_folder/kubespray-$version/ansible.cfg
+ ansible-playbook $verbose -i $kud_inventory $kud_playbooks/preconfigure-kubespray.yml --become --become-user=root | sudo tee $log_folder/setup-kubernetes.log
ansible-playbook $verbose -i $kud_inventory $dest_folder/kubespray-$version/cluster.yml --become --become-user=root | sudo tee $log_folder/setup-kubernetes.log
# Configure environment
diff --git a/kud/hosting_providers/vagrant/inventory/group_vars/k8s-cluster.yml b/kud/hosting_providers/vagrant/inventory/group_vars/k8s-cluster.yml
index 30fd5c0b..ba79b4b9 100644
--- a/kud/hosting_providers/vagrant/inventory/group_vars/k8s-cluster.yml
+++ b/kud/hosting_providers/vagrant/inventory/group_vars/k8s-cluster.yml
@@ -50,9 +50,6 @@ enable_nodelocaldns: false
local_volumes_enabled: true
local_volume_provisioner_enabled: true
-## Change this to use another Kubernetes version, e.g. a current beta release
-kube_version: v1.16.9
-
# Helm deployment
helm_enabled: true
diff --git a/kud/tests/emco.sh b/kud/tests/emco.sh
index 80dc2d5c..2b8eab1e 100755
--- a/kud/tests/emco.sh
+++ b/kud/tests/emco.sh
@@ -247,9 +247,6 @@ generic_placement_intent_data="$(cat <<EOF
"description":"${generic_placement_intent_name}",
"userData1":"${generic_placement_intent_name}",
"userData2":"${generic_placement_intent_name}"
- },
- "spec":{
- "logical-cloud":"unused_logical_cloud"
}
}
EOF
@@ -318,7 +315,8 @@ deployment_intent_group_data="$(cat <<EOF
"spec":{
"profile":"${collection_composite_profile_name}",
"version":"${release}",
- "override-values":[]
+ "override-values":[],
+ "logical-cloud":"unused_logical_cloud"
}
}
EOF
@@ -380,22 +378,22 @@ function createOrchestratorData {
-F "file=@${collectd_profile_file}" \
"${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}/profiles"
+ print_msg "create the deployment intent group"
+ call_api -d "${deployment_intent_group_data}" \
+ "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups"
+
print_msg "create the generic placement intent"
call_api -d "${generic_placement_intent_data}" \
- "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/generic-placement-intents"
+ "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents"
print_msg "add the prometheus app placement intent to the generic placement intent"
call_api -d "${prometheus_placement_intent_data}" \
- "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
+ "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
print_msg "add the collectd app placement intent to the generic placement intent"
call_api -d "${collectd_placement_intent_data}" \
- "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
+ "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
-
- print_msg "create the deployment intent group"
- call_api -d "${deployment_intent_group_data}" \
- "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups"
call_api -d "${deployment_intents_in_group_data}" \
"${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/intents"
@@ -409,15 +407,14 @@ function deleteOrchestratorData {
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/intents/${deployment_intents_in_group_name}"
- delete_resource_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}"
-
- delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${prometheus_placement_intent_name}"
- delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${collectd_placement_intent_name}"
- delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}"
+ delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${prometheus_placement_intent_name}"
+ delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${collectd_placement_intent_name}"
+ delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}"
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}/profiles/${prometheus_profile_name}"
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}/profiles/${collectd_profile_name}"
+ delete_resource_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}"
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}/composite-profiles/${collection_composite_profile_name}"
@@ -427,7 +424,7 @@ function deleteOrchestratorData {
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${collection_compositeapp_name}/${compositeapp_version}"
- delete_resource "${base_url_orchestrator}/projects/${projectname}"
+ delete_resource_nox "${base_url_orchestrator}/projects/${projectname}"
print_msg "deleteOrchestratorData done"
}
diff --git a/kud/tests/plugin_fw.sh b/kud/tests/plugin_fw.sh
index a503d661..de9c12e2 100755
--- a/kud/tests/plugin_fw.sh
+++ b/kud/tests/plugin_fw.sh
@@ -124,9 +124,9 @@ print_msg "Retrieving VNF details"
response="$(call_api "${base_url}/instance/${vnf_id}")"
echo "$response"
print_msg "Assert additional label has been assigned to rb instance"
-test "$(jq -r .request.labels.testCaseName <<< "${response}")" == plugin_fw.sh
+test "$(jq -r '.request.labels.testCaseName' <<< "${response}")" == plugin_fw.sh
print_msg "Assert ReleaseName has been correctly overriden"
-test "$(jq -r .request.release-name <<< "${response}")" == "${release_name}"
+test "$(jq -r '.request."release-name"' <<< "${response}")" == "${release_name}"
#Teardown
print_msg "Deleting VNF Instance"
diff --git a/kud/tests/plugin_fw_v2.sh b/kud/tests/plugin_fw_v2.sh
index a54dd768..ed4a5ad7 100755
--- a/kud/tests/plugin_fw_v2.sh
+++ b/kud/tests/plugin_fw_v2.sh
@@ -416,9 +416,6 @@ generic_placement_intent_data="$(cat <<EOF
"description":"${generic_placement_intent_name}",
"userData1":"${generic_placement_intent_name}",
"userData2":"${generic_placement_intent_name}"
- },
- "spec":{
- "logical-cloud":"unused_logical_cloud"
}
}
EOF
@@ -510,6 +507,7 @@ deployment_intent_group_data="$(cat <<EOF
"spec":{
"profile":"${vfw_composite_profile_name}",
"version":"${release}",
+ "logical-cloud":"unused_logical_cloud",
"override-values":[
{
"app-name":"${packetgen_app_name}",
@@ -765,31 +763,31 @@ EOF
function createOvnactionData {
call_api -d "${vfw_ovnaction_intent_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent"
call_api -d "${packetgen_workload_intent_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents"
call_api -d "${firewall_workload_intent_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents"
call_api -d "${sink_workload_intent_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents"
call_api -d "${packetgen_emco_interface_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces"
call_api -d "${packetgen_unprotected_interface_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces"
call_api -d "${firewall_emco_interface_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces"
call_api -d "${firewall_unprotected_interface_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces"
call_api -d "${firewall_protected_interface_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces"
call_api -d "${sink_emco_interface_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces"
call_api -d "${sink_protected_interface_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces"
}
function createOrchData {
@@ -828,25 +826,25 @@ function createOrchData {
-F "file=@${sink_profile_file}" \
"${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles"
+ print_msg "Create the deployment intent group"
+ call_api -d "${deployment_intent_group_data}" \
+ "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups"
+ call_api -d "${deployment_intents_in_group_data}" \
+ "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/intents"
+
+ createOvnactionData
+
print_msg "Create the generic placement intent"
call_api -d "${generic_placement_intent_data}" \
- "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents"
+ "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents"
print_msg "Add the vfw app placement intents to the generic placement intent"
call_api -d "${packetgen_placement_intent_data}" \
- "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
+ "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
call_api -d "${firewall_placement_intent_data}" \
- "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
+ "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
call_api -d "${sink_placement_intent_data}" \
- "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
-
- createOvnactionData
-
- print_msg "Create the deployment intent group"
- call_api -d "${deployment_intent_group_data}" \
- "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups"
- call_api -d "${deployment_intents_in_group_data}" \
- "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/intents"
+ "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
}
function createNcmData {
@@ -874,21 +872,21 @@ function createData {
}
function getOvnactionData {
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}"
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}"
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}"
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}"
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_emco_interface_name}"
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_unprotected_interface_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_emco_interface_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_unprotected_interface_name}"
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_emco_interface_name}"
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_unprotected_interface_name}"
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_protected_interface_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_emco_interface_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_unprotected_interface_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_protected_interface_name}"
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_emco_interface_name}"
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_protected_interface_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_emco_interface_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_protected_interface_name}"
}
function getOrchData {
@@ -908,11 +906,11 @@ function getOrchData {
call_api_nox -H "Accept: application/json" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles/${firewall_profile_name}"
call_api_nox -H "Accept: application/json" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles/${sink_profile_name}"
- call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}"
+ call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}"
- call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${packetgen_placement_intent_name}"
- call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${firewall_placement_intent_name}"
- call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${sink_placement_intent_name}"
+ call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${packetgen_placement_intent_name}"
+ call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${firewall_placement_intent_name}"
+ call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${sink_placement_intent_name}"
call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}"
call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/intents/${deployment_intents_in_group_name}"
@@ -938,31 +936,33 @@ function getData {
}
function deleteOvnactionData {
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_protected_interface_name}"
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_emco_interface_name}"
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_protected_interface_name}"
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_unprotected_interface_name}"
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_emco_interface_name}"
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_unprotected_interface_name}"
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_emco_interface_name}"
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}"
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}"
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}"
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_protected_interface_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_emco_interface_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_protected_interface_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_unprotected_interface_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_emco_interface_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_unprotected_interface_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_emco_interface_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}"
}
function deleteOrchData {
delete_resource "${base_url_orchestrator}/controllers/${rsynccontrollername}"
delete_resource "${base_url_orchestrator}/controllers/${ovnactioncontrollername}"
+ deleteOvnactionData
+
+ delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${sink_placement_intent_name}"
+ delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${firewall_placement_intent_name}"
+ delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${packetgen_placement_intent_name}"
+ delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}"
+
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/intents/${deployment_intents_in_group_name}"
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}"
- delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${sink_placement_intent_name}"
- delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${firewall_placement_intent_name}"
- delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${packetgen_placement_intent_name}"
- delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}"
-
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles/${sink_profile_name}"
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles/${firewall_profile_name}"
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles/${packetgen_profile_name}"
@@ -972,8 +972,6 @@ function deleteOrchData {
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps/${firewall_app_name}"
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps/${packetgen_app_name}"
- deleteOvnactionData
-
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}"
delete_resource "${base_url_orchestrator}/projects/${projectname}"
}
diff --git a/kud/tests/topology-manager.sh b/kud/tests/topology-manager.sh
index bbffd4d7..7d434386 100755
--- a/kud/tests/topology-manager.sh
+++ b/kud/tests/topology-manager.sh
@@ -15,9 +15,8 @@ set -o pipefail
source _common.sh
source _functions.sh
-ethernet_adpator_version=$( lspci | grep "Ethernet Controller XL710" | head -n 1 | cut -d " " -f 8 )
-if [ -z "$ethernet_adpator_version" ]; then
- echo " Ethernet adapator version is not set. Topology manager test case cannot run on this machine"
+if [ -z "$( lspci | grep "Ethernet Controller XL710" | head -n 1 | cut -d " " -f 8 )" ]; then
+ echo "Ethernet adaptor version is not set. Topology manager test case cannot run on this machine"
exit 0
else
echo "NIC card specs match. Topology manager option avaiable for this version."
diff --git a/kud/tests/vfw-test.sh b/kud/tests/vfw-test.sh
index f4f96b2e..ec3f928c 100755
--- a/kud/tests/vfw-test.sh
+++ b/kud/tests/vfw-test.sh
@@ -364,9 +364,6 @@ generic_placement_intent_data="$(cat <<EOF
"description":"${generic_placement_intent_name}",
"userData1":"${generic_placement_intent_name}",
"userData2":"${generic_placement_intent_name}"
- },
- "spec":{
- "logical-cloud":"unused_logical_cloud"
}
}
EOF
@@ -459,6 +456,7 @@ deployment_intent_group_data="$(cat <<EOF
"spec":{
"profile":"${vfw_composite_profile_name}",
"version":"${release}",
+ "logical-cloud":"unused_logical_cloud",
"override-values":[
{
"app-name":"${packetgen_app_name}",
@@ -715,31 +713,31 @@ EOF
function createOvnactionData {
call_api -d "${vfw_ovnaction_intent_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent"
call_api -d "${packetgen_workload_intent_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents"
call_api -d "${firewall_workload_intent_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents"
call_api -d "${sink_workload_intent_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents"
call_api -d "${packetgen_emco_interface_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces"
call_api -d "${packetgen_unprotected_interface_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces"
call_api -d "${firewall_emco_interface_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces"
call_api -d "${firewall_unprotected_interface_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces"
call_api -d "${firewall_protected_interface_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces"
call_api -d "${sink_emco_interface_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces"
call_api -d "${sink_protected_interface_data}" \
- "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces"
+ "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces"
}
function createOrchData {
@@ -778,25 +776,26 @@ function createOrchData {
-F "file=@${sink_profile_file}" \
"${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles"
+ print_msg "create the deployment intent group"
+ call_api -d "${deployment_intent_group_data}" \
+ "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups"
+ call_api -d "${deployment_intents_in_group_data}" \
+ "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/intents"
+
print_msg "create the generic placement intent"
call_api -d "${generic_placement_intent_data}" \
- "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents"
+ "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents"
print_msg "add the vfw app placement intents to the generic placement intent"
call_api -d "${packetgen_placement_intent_data}" \
- "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
+ "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
call_api -d "${firewall_placement_intent_data}" \
- "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
+ "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
call_api -d "${sink_placement_intent_data}" \
- "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
+ "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
createOvnactionData
- print_msg "create the deployment intent group"
- call_api -d "${deployment_intent_group_data}" \
- "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups"
- call_api -d "${deployment_intents_in_group_data}" \
- "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/intents"
}
function createNcmData {
@@ -824,21 +823,21 @@ function createData {
}
function getOvnactionData {
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}"
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}"
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}"
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}"
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_emco_interface_name}"
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_unprotected_interface_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_emco_interface_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_unprotected_interface_name}"
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_emco_interface_name}"
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_unprotected_interface_name}"
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_protected_interface_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_emco_interface_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_unprotected_interface_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_protected_interface_name}"
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_emco_interface_name}"
- call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_protected_interface_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_emco_interface_name}"
+ call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_protected_interface_name}"
}
function getOrchData {
@@ -860,11 +859,11 @@ function getOrchData {
call_api_nox -H "Accept: application/json" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles/${firewall_profile_name}"
call_api_nox -H "Accept: application/json" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles/${sink_profile_name}"
- call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}"
+ call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}"
- call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${packetgen_placement_intent_name}"
- call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${firewall_placement_intent_name}"
- call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${sink_placement_intent_name}"
+ call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${packetgen_placement_intent_name}"
+ call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${firewall_placement_intent_name}"
+ call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${sink_placement_intent_name}"
call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}"
call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/intents/${deployment_intents_in_group_name}"
@@ -893,31 +892,34 @@ function getData {
}
function deleteOvnactionData {
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_protected_interface_name}"
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_emco_interface_name}"
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_protected_interface_name}"
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_unprotected_interface_name}"
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_emco_interface_name}"
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_unprotected_interface_name}"
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_emco_interface_name}"
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}"
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}"
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}"
- delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_protected_interface_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_emco_interface_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_protected_interface_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_unprotected_interface_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_emco_interface_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_unprotected_interface_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_emco_interface_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}"
+ delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}"
}
function deleteOrchData {
delete_resource "${base_url_orchestrator}/controllers/${rsynccontrollername}"
delete_resource "${base_url_orchestrator}/controllers/${ovnactioncontrollername}"
+
+ delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${sink_placement_intent_name}"
+ delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${firewall_placement_intent_name}"
+ delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${packetgen_placement_intent_name}"
+ delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}"
+
+ deleteOvnactionData
+
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/intents/${deployment_intents_in_group_name}"
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}"
- delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${sink_placement_intent_name}"
- delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${firewall_placement_intent_name}"
- delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${packetgen_placement_intent_name}"
- delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}"
-
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles/${sink_profile_name}"
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles/${firewall_profile_name}"
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles/${packetgen_profile_name}"
@@ -927,8 +929,6 @@ function deleteOrchData {
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps/${firewall_app_name}"
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps/${packetgen_app_name}"
- deleteOvnactionData
-
delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}"
delete_resource "${base_url_orchestrator}/projects/${projectname}"
}
@@ -981,7 +981,7 @@ function instantiateVfw {
}
function statusVfw {
- call_api "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/status"
+ call_api "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/status${query}"
}
function usage {
@@ -1053,7 +1053,7 @@ function check_for_env_settings {
fi
}
-if [ "$#" -ne 1 ] ; then
+if [ "$#" -lt 1 ] ; then
usage
fi
@@ -1067,6 +1067,11 @@ case "$1" in
"apply" ) applyNcmData ;;
"instantiate" ) instantiateVfw ;;
"terminate" ) terminateVfw ;;
- "status" ) statusVfw ;;
+ "status" )
+ query=""
+ if [ "$#" -eq 2 ] ; then
+ query="?$2"
+ fi
+ statusVfw ${query} ;;
*) usage ;;
esac
diff --git a/releases/0.7.0-container.yaml b/releases/0.7.0-container.yaml
new file mode 100644
index 00000000..ffc35f4d
--- /dev/null
+++ b/releases/0.7.0-container.yaml
@@ -0,0 +1,8 @@
+distribution_type: 'container'
+container_release_tag: '0.7.0'
+project: 'multicloud-k8s'
+log_dir: 'multicloud-k8s-master-docker-golang-shell-daily/732/'
+ref: 212eb00a16d484639dad3788e68ecac6afaeeac1
+containers:
+ - name: 'multicloud/k8s'
+ version: '0.7.0-SNAPSHOT'
diff --git a/src/dcm/api/logicalCloudHandler.go b/src/dcm/api/logicalCloudHandler.go
index b305b202..ad9a3807 100644
--- a/src/dcm/api/logicalCloudHandler.go
+++ b/src/dcm/api/logicalCloudHandler.go
@@ -26,7 +26,6 @@ import (
"github.com/gorilla/mux"
"github.com/onap/multicloud-k8s/src/dcm/pkg/module"
orch "github.com/onap/multicloud-k8s/src/orchestrator/pkg/module"
- pkgerrors "github.com/pkg/errors"
)
// logicalCloudHandler is used to store backend implementations objects
@@ -266,13 +265,6 @@ func (h logicalCloudHandler) terminateHandler(w http.ResponseWriter, r *http.Req
return
}
- _, ctxVal, err := h.client.GetLogicalCloudContext(project, name)
- if ctxVal == "" {
- err = pkgerrors.New("Logical Cloud hasn't been applied yet")
- http.Error(w, err.Error(), http.StatusConflict)
- return
- }
-
// Get Clusters
clusters, err := h.clusterClient.GetAllClusters(project, name)
@@ -291,8 +283,11 @@ func (h logicalCloudHandler) terminateHandler(w http.ResponseWriter, r *http.Req
// Terminate the Logical Cloud
err = module.Terminate(project, lc, clusters, quotas)
if err != nil {
+ if err.Error() == "Logical Cloud doesn't seem applied: "+name {
+ http.Error(w, err.Error(), http.StatusConflict)
+ return
+ }
http.Error(w, err.Error(), http.StatusInternalServerError)
- return
}
return
diff --git a/src/dcm/pkg/module/apply.go b/src/dcm/pkg/module/apply.go
index 3770457a..0eaa75ab 100644
--- a/src/dcm/pkg/module/apply.go
+++ b/src/dcm/pkg/module/apply.go
@@ -84,6 +84,19 @@ type RoleRef struct {
ApiGroup string `yaml:"apiGroup"`
}
+func cleanupCompositeApp(context appcontext.AppContext, err error, reason string, details []string) error {
+ cleanuperr := context.DeleteCompositeApp()
+ newerr := pkgerrors.Wrap(err, reason)
+ if cleanuperr != nil {
+ log.Warn("Error cleaning AppContext, ", log.Fields{
+ "Related details": details,
+ })
+ // this would be useful: https://godoc.org/go.uber.org/multierr
+ return pkgerrors.Wrap(err, "After previous error, cleaning the AppContext also failed.")
+ }
+ return newerr
+}
+
func createNamespace(logicalcloud LogicalCloud) (string, string, error) {
name := logicalcloud.Specification.NameSpace
@@ -329,11 +342,11 @@ func Apply(project string, logicalcloud LogicalCloud, clusterList []Cluster,
}
// Check if there was a previous context for this logical cloud
- ac, cid, err := lcclient.GetLogicalCloudContext(project, logicalCloudName)
+ ac, cid, err := lcclient.util.GetLogicalCloudContext(lcclient.storeName, lckey, lcclient.tagMeta, project, logicalCloudName)
if cid != "" {
// Make sure rsync status for this logical cloud is Terminated,
// otherwise we can't re-apply logical cloud yet
- acStatus, _ := getAppContextStatus(ac)
+ acStatus, _ := lcclient.util.GetAppContextStatus(ac)
switch acStatus.Status {
case appcontext.AppContextStatusEnum.Terminated:
// We now know Logical Cloud has terminated, so let's update the entry before we process the apply
@@ -397,126 +410,60 @@ func Apply(project string, logicalcloud LogicalCloud, clusterList []Cluster,
appHandle, err := context.AddApp(handle, APP)
if err != nil {
- cleanuperr := context.DeleteCompositeApp()
- if cleanuperr != nil {
- log.Warn("Error cleaning AppContext CompositeApp create failure", log.Fields{
- "logical-cloud": logicalCloudName,
- })
- }
- return pkgerrors.Wrap(err, "Error adding App to AppContext")
+ return cleanupCompositeApp(context, err, "Error adding App to AppContext", []string{logicalCloudName, ctxVal.(string)})
}
// Iterate through cluster list and add all the clusters
for _, cluster := range clusterList {
clusterName := strings.Join([]string{cluster.Specification.ClusterProvider, "+", cluster.Specification.ClusterName}, "")
clusterHandle, err := context.AddCluster(appHandle, clusterName)
+ // pre-build array to pass to cleanupCompositeApp() [for performance]
+ details := []string{logicalCloudName, clusterName, ctxVal.(string)}
if err != nil {
- cleanuperr := context.DeleteCompositeApp()
- if cleanuperr != nil {
- log.Warn("Error cleaning AppContext after add cluster failure", log.Fields{
- "cluster-provider": cluster.Specification.ClusterProvider,
- "cluster": cluster.Specification.ClusterName,
- "logical-cloud": logicalCloudName,
- })
- }
- return pkgerrors.Wrap(err, "Error adding Cluster to AppContext")
+ return cleanupCompositeApp(context, err, "Error adding Cluster to AppContext", details)
}
// Add namespace resource to each cluster
_, err = context.AddResource(clusterHandle, namespaceName, namespace)
if err != nil {
- cleanuperr := context.DeleteCompositeApp()
- if cleanuperr != nil {
- log.Warn("Error cleaning AppContext after add namespace resource failure", log.Fields{
- "cluster-provider": cluster.Specification.ClusterProvider,
- "cluster": cluster.Specification.ClusterName,
- "logical-cloud": logicalCloudName,
- })
- }
- return pkgerrors.Wrap(err, "Error adding Namespace Resource to AppContext")
+ return cleanupCompositeApp(context, err, "Error adding Namespace Resource to AppContext", details)
}
// Add csr resource to each cluster
csrHandle, err := context.AddResource(clusterHandle, csrName, csr)
if err != nil {
- cleanuperr := context.DeleteCompositeApp()
- if cleanuperr != nil {
- log.Warn("Error cleaning AppContext after add CSR resource failure", log.Fields{
- "cluster-provider": cluster.Specification.ClusterProvider,
- "cluster": cluster.Specification.ClusterName,
- "logical-cloud": logicalCloudName,
- })
- }
- return pkgerrors.Wrap(err, "Error adding CSR Resource to AppContext")
+ return cleanupCompositeApp(context, err, "Error adding CSR Resource to AppContext", details)
}
// Add csr approval as a subresource of csr:
_, err = context.AddLevelValue(csrHandle, "subresource/approval", approval)
if err != nil {
- cleanuperr := context.DeleteCompositeApp()
- if cleanuperr != nil {
- log.Warn("Error cleaning AppContext after add CSR approval failure", log.Fields{
- "cluster-provider": cluster.Specification.ClusterProvider,
- "cluster": cluster.Specification.ClusterName,
- "logical-cloud": logicalCloudName,
- })
- }
- return pkgerrors.Wrap(err, "Error approving CSR via AppContext")
+ return cleanupCompositeApp(context, err, "Error approving CSR via AppContext", details)
}
// Add private key to MongoDB
err = db.DBconn.Insert("orchestrator", lckey, nil, "privatekey", key)
if err != nil {
- cleanuperr := context.DeleteCompositeApp()
- if cleanuperr != nil {
- log.Warn("Error cleaning AppContext after DB insert failure", log.Fields{
- "logical-cloud": logicalcloud.MetaData.LogicalCloudName,
- })
- }
- return pkgerrors.Wrap(err, "Error adding private key to DB")
+ return cleanupCompositeApp(context, err, "Error adding private key to DB", details)
}
// Add Role resource to each cluster
_, err = context.AddResource(clusterHandle, roleName, role)
if err != nil {
- cleanuperr := context.DeleteCompositeApp()
- if cleanuperr != nil {
- log.Warn("Error cleaning AppContext after add role resource failure", log.Fields{
- "cluster-provider": cluster.Specification.ClusterProvider,
- "cluster": cluster.Specification.ClusterName,
- "logical-cloud": logicalCloudName,
- })
- }
- return pkgerrors.Wrap(err, "Error adding role Resource to AppContext")
+ return cleanupCompositeApp(context, err, "Error adding role Resource to AppContext", details)
}
// Add RoleBinding resource to each cluster
_, err = context.AddResource(clusterHandle, roleBindingName, roleBinding)
if err != nil {
- cleanuperr := context.DeleteCompositeApp()
- if cleanuperr != nil {
- log.Warn("Error cleaning AppContext after add roleBinding resource failure", log.Fields{
- "cluster-provider": cluster.Specification.ClusterProvider,
- "cluster": cluster.Specification.ClusterName,
- "logical-cloud": logicalCloudName,
- })
- }
- return pkgerrors.Wrap(err, "Error adding roleBinding Resource to AppContext")
+ return cleanupCompositeApp(context, err, "Error adding roleBinding Resource to AppContext", details)
}
// Add quota resource to each cluster
_, err = context.AddResource(clusterHandle, quotaName, quota)
if err != nil {
- cleanuperr := context.DeleteCompositeApp()
- if cleanuperr != nil {
- log.Warn("Error cleaning AppContext after add quota resource failure", log.Fields{
- "cluster-provider": cluster.Specification.ClusterProvider,
- "cluster": cluster.Specification.ClusterName,
- "logical-cloud": logicalCloudName,
- })
- }
- return pkgerrors.Wrap(err, "Error adding quota Resource to AppContext")
+ return cleanupCompositeApp(context, err, "Error adding quota Resource to AppContext", details)
}
// Add Subresource Order and Subresource Dependency
@@ -541,77 +488,42 @@ func Apply(project string, logicalcloud LogicalCloud, clusterList []Cluster,
return pkgerrors.Wrap(err, "Error creating resource order JSON")
}
appDependency, err := json.Marshal(map[string]map[string]string{"appdependency": map[string]string{APP: "go"}})
-
if err != nil {
return pkgerrors.Wrap(err, "Error creating resource dependency JSON")
}
+ // Add Resource-level Order and Dependency
_, err = context.AddInstruction(clusterHandle, "resource", "order", string(resOrder))
if err != nil {
- cleanuperr := context.DeleteCompositeApp()
- if cleanuperr != nil {
- log.Warn("Error cleaning AppContext after add instruction failure", log.Fields{
- "cluster-provider": cluster.Specification.ClusterProvider,
- "cluster": cluster.Specification.ClusterName,
- "logical-cloud": logicalCloudName,
- })
- }
- return pkgerrors.Wrap(err, "Error adding instruction order to AppContext")
+ return cleanupCompositeApp(context, err, "Error adding instruction order to AppContext", details)
}
-
_, err = context.AddInstruction(clusterHandle, "resource", "dependency", string(resDependency))
if err != nil {
- cleanuperr := context.DeleteCompositeApp()
- if cleanuperr != nil {
- log.Warn("Error cleaning AppContext after add instruction failure", log.Fields{
- "cluster-provider": cluster.Specification.ClusterProvider,
- "cluster": cluster.Specification.ClusterName,
- "logical-cloud": logicalCloudName,
- })
- }
- return pkgerrors.Wrap(err, "Error adding instruction dependency to AppContext")
+ return cleanupCompositeApp(context, err, "Error adding instruction dependency to AppContext", details)
}
-
_, err = context.AddInstruction(csrHandle, "subresource", "order", string(subresOrder))
if err != nil {
- cleanuperr := context.DeleteCompositeApp()
- if cleanuperr != nil {
- log.Warn("Error cleaning AppContext after add instruction failure", log.Fields{
- "cluster-provider": cluster.Specification.ClusterProvider,
- "cluster": cluster.Specification.ClusterName,
- "logical-cloud": logicalCloudName,
- })
- }
- return pkgerrors.Wrap(err, "Error adding instruction order to AppContext")
+ return cleanupCompositeApp(context, err, "Error adding instruction order to AppContext", details)
}
-
_, err = context.AddInstruction(csrHandle, "subresource", "dependency", string(subresDependency))
if err != nil {
- cleanuperr := context.DeleteCompositeApp()
- if cleanuperr != nil {
- log.Warn("Error cleaning AppContext after add instruction failure", log.Fields{
- "cluster-provider": cluster.Specification.ClusterProvider,
- "cluster": cluster.Specification.ClusterName,
- "logical-cloud": logicalCloudName,
- })
- }
- return pkgerrors.Wrap(err, "Error adding instruction dependency to AppContext")
+ return cleanupCompositeApp(context, err, "Error adding instruction dependency to AppContext", details)
}
// Add App-level Order and Dependency
_, err = context.AddInstruction(handle, "app", "order", string(appOrder))
+ if err != nil {
+ return cleanupCompositeApp(context, err, "Error adding app-level order to AppContext", details)
+ }
_, err = context.AddInstruction(handle, "app", "dependency", string(appDependency))
+ if err != nil {
+ return cleanupCompositeApp(context, err, "Error adding app-level dependency to AppContext", details)
+ }
}
// save the context in the logicalcloud db record
err = db.DBconn.Insert("orchestrator", lckey, nil, "lccontext", ctxVal)
if err != nil {
- cleanuperr := context.DeleteCompositeApp()
- if cleanuperr != nil {
- log.Warn("Error cleaning AppContext after DB insert failure", log.Fields{
- "logical-cloud": logicalcloud.MetaData.LogicalCloudName,
- })
- }
- return pkgerrors.Wrap(err, "Error adding AppContext to DB")
+ return cleanupCompositeApp(context, err, "Error adding AppContext to DB", []string{logicalCloudName, ctxVal.(string)})
}
// call resource synchronizer to instantiate the CRs in the cluster
@@ -632,8 +544,12 @@ func Terminate(project string, logicalcloud LogicalCloud, clusterList []Cluster,
logicalCloudName := logicalcloud.MetaData.LogicalCloudName
lcclient := NewLogicalCloudClient()
+ lckey := LogicalCloudKey{
+ LogicalCloudName: logicalcloud.MetaData.LogicalCloudName,
+ Project: project,
+ }
- ac, cid, err := lcclient.GetLogicalCloudContext(project, logicalCloudName)
+ ac, cid, err := lcclient.util.GetLogicalCloudContext(lcclient.storeName, lckey, lcclient.tagMeta, project, logicalCloudName)
if err != nil {
return pkgerrors.Wrapf(err, "Logical Cloud doesn't seem applied: %v", logicalCloudName)
}
@@ -642,7 +558,7 @@ func Terminate(project string, logicalcloud LogicalCloud, clusterList []Cluster,
if cid != "" {
// Make sure rsync status for this logical cloud is Terminated,
// otherwise we can't re-apply logical cloud yet
- acStatus, _ := getAppContextStatus(ac)
+ acStatus, _ := lcclient.util.GetAppContextStatus(ac)
switch acStatus.Status {
case appcontext.AppContextStatusEnum.Terminated:
return pkgerrors.New("The Logical Cloud has already been terminated: " + logicalCloudName)
diff --git a/src/dcm/pkg/module/cluster.go b/src/dcm/pkg/module/cluster.go
index 33de7acf..6ad46404 100644
--- a/src/dcm/pkg/module/cluster.go
+++ b/src/dcm/pkg/module/cluster.go
@@ -59,7 +59,7 @@ type KubeConfig struct {
Kind string `yaml:"kind"`
Clusters []KubeCluster `yaml:"clusters"`
Contexts []KubeContext `yaml:"contexts"`
- CurrentContext string `yaml:"current-context`
+ CurrentContext string `yaml:"current-context"`
Preferences map[string]string `yaml:"preferences"`
Users []KubeUser `yaml:"users"`
}
@@ -260,7 +260,11 @@ func (v *ClusterClient) UpdateCluster(project, logicalCloud, clusterReference st
// Get returns Cluster's kubeconfig for corresponding cluster reference
func (v *ClusterClient) GetClusterConfig(project, logicalCloud, clusterReference string) (string, error) {
lcClient := NewLogicalCloudClient()
- context, ctxVal, err := lcClient.GetLogicalCloudContext(project, logicalCloud)
+ lckey := LogicalCloudKey{
+ Project: project,
+ LogicalCloudName: logicalCloud,
+ }
+ context, ctxVal, err := lcClient.util.GetLogicalCloudContext(lcClient.storeName, lckey, lcClient.tagMeta, project, logicalCloud)
if err != nil {
return "", pkgerrors.Wrap(err, "Error getting logical cloud context.")
}
@@ -268,11 +272,6 @@ func (v *ClusterClient) GetClusterConfig(project, logicalCloud, clusterReference
return "", pkgerrors.New("Logical Cloud hasn't been applied yet")
}
- // private key comes from logical cloud
- lckey := LogicalCloudKey{
- Project: project,
- LogicalCloudName: logicalCloud,
- }
// get logical cloud resource
lc, err := lcClient.Get(project, logicalCloud)
if err != nil {
diff --git a/src/dcm/pkg/module/logicalcloud.go b/src/dcm/pkg/module/logicalcloud.go
index 580e9022..3fe981b8 100644
--- a/src/dcm/pkg/module/logicalcloud.go
+++ b/src/dcm/pkg/module/logicalcloud.go
@@ -75,7 +75,6 @@ type LogicalCloudManager interface {
GetAll(project string) ([]LogicalCloud, error)
Delete(project, name string) error
Update(project, name string, c LogicalCloud) (LogicalCloud, error)
- GetLogicalCloudContext(project string, name string) (appcontext.AppContext, string, error)
}
// Interface facilitates unit testing by mocking functions
@@ -86,6 +85,8 @@ type Utility interface {
DBRemove(storeName string, key db.Key) error
CheckProject(project string) error
CheckLogicalCloud(project, logicalCloud string) error
+ GetLogicalCloudContext(storeName string, key db.Key, meta string, project string, name string) (appcontext.AppContext, string, error)
+ GetAppContextStatus(ac appcontext.AppContext) (*appcontext.AppContextStatus, error)
}
// LogicalCloudClient implements the LogicalCloudManager
@@ -208,7 +209,7 @@ func (v *LogicalCloudClient) Delete(project, logicalCloudName string) error {
return pkgerrors.New("Logical Cloud does not exist")
}
- context, _, err := v.GetLogicalCloudContext(project, logicalCloudName)
+ context, _, err := v.util.GetLogicalCloudContext(v.storeName, key, v.tagMeta, project, logicalCloudName)
// If there's no context for Logical Cloud, just go ahead and delete it now
if err != nil {
err = v.util.DBRemove(v.storeName, key)
@@ -220,7 +221,7 @@ func (v *LogicalCloudClient) Delete(project, logicalCloudName string) error {
// Make sure rsync status for this logical cloud is Terminated,
// otherwise we can't remove appcontext yet
- acStatus, _ := getAppContextStatus(context)
+ acStatus, _ := v.util.GetAppContextStatus(context)
switch acStatus.Status {
case appcontext.AppContextStatusEnum.Terminated:
// remove the appcontext
@@ -267,14 +268,9 @@ func (v *LogicalCloudClient) Update(project, logicalCloudName string, c LogicalC
}
// GetLogicalCloudContext returns the AppContext for corresponding provider and name
-func (v *LogicalCloudClient) GetLogicalCloudContext(project string, name string) (appcontext.AppContext, string, error) {
- //Construct key and tag to select the entry
- key := LogicalCloudKey{
- LogicalCloudName: name,
- Project: project,
- }
+func (d DBService) GetLogicalCloudContext(storeName string, key db.Key, meta string, project string, name string) (appcontext.AppContext, string, error) {
- value, err := v.util.DBFind(v.storeName, key, v.tagContext)
+ value, err := d.DBFind(storeName, key, meta)
if err != nil {
return appcontext.AppContext{}, "", pkgerrors.Wrap(err, "Get Logical Cloud Context")
}
@@ -353,7 +349,7 @@ func (d DBService) CheckLogicalCloud(project, logicalCloud string) error {
return nil
}
-func getAppContextStatus(ac appcontext.AppContext) (*appcontext.AppContextStatus, error) {
+func (d DBService) GetAppContextStatus(ac appcontext.AppContext) (*appcontext.AppContextStatus, error) {
h, err := ac.GetCompositeAppHandle()
if err != nil {
diff --git a/src/dcm/pkg/module/logicalcloud_test.go b/src/dcm/pkg/module/logicalcloud_test.go
index efce568f..cbdc1304 100644
--- a/src/dcm/pkg/module/logicalcloud_test.go
+++ b/src/dcm/pkg/module/logicalcloud_test.go
@@ -4,6 +4,7 @@ import (
"fmt"
"testing"
+ "github.com/onap/multicloud-k8s/src/orchestrator/pkg/appcontext"
"github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/db"
"github.com/pkg/errors"
"github.com/stretchr/testify/mock"
@@ -55,6 +56,20 @@ func (m *mockValues) CheckLogicalCloud(project, logicalCloud string) error {
return args.Error(0)
}
+func (m *mockValues) GetLogicalCloudContext(name string, key db.Key, meta string, project, logicalCloud string) (appcontext.AppContext, string, error) {
+ fmt.Println("Mocked Get Logical Cloud Context")
+ args := m.Called(name, key, meta, project, logicalCloud)
+
+ return appcontext.AppContext{}, "", args.Error(2)
+}
+
+func (m *mockValues) GetAppContextStatus(ac appcontext.AppContext) (*appcontext.AppContextStatus, error) {
+ fmt.Println("Mocked GetAppContextStatus")
+ args := m.Called(ac)
+
+ return &appcontext.AppContextStatus{}, args.Error(1)
+}
+
func TestCreateLogicalCloud(t *testing.T) {
mData := MetaDataList{
@@ -110,7 +125,7 @@ func TestGetLogicalCloud(t *testing.T) {
}
}
-func TestDeleteLogicalCloud(t *testing.T) {
+func TestDeleteLogicalCloudWithSuccess(t *testing.T) {
key := LogicalCloudKey{
Project: "test_project",
@@ -128,14 +143,14 @@ func TestDeleteLogicalCloud(t *testing.T) {
myMocks.On("DBFind", "test_dcm", key, "test_meta").Return(data1, nil)
myMocks.On("DBUnmarshal", data2).Return(nil)
myMocks.On("DBFind", "test_dcm", key, "test_context").Return(data1, nil)
- // TODO also test for when the logical cloud doesn't exist
-
- // TODO: fix Etcd-related test crash
- // lcClient := LogicalCloudClient{"test_dcm", "test_meta", "test_context", myMocks}
- // err := lcClient.Delete("test_project", "test_asdf")
- // if err != nil {
- // t.Errorf("Some error occured!")
- // }
+ myMocks.On("GetLogicalCloudContext", "test_dcm", key, "test_meta", "test_project", "test_asdf").Return(appcontext.AppContext{}, "", nil)
+ myMocks.On("GetAppContextStatus", appcontext.AppContext{}).Return(&appcontext.AppContextStatus{}, nil)
+
+ lcClient := LogicalCloudClient{"test_dcm", "test_meta", "test_context", myMocks}
+ err := lcClient.Delete("test_project", "test_asdf")
+ if err.Error() != "The Logical Cloud can't be deleted yet at this point." {
+ t.Errorf("Some unexpected error occurred!")
+ }
}
func TestUpdateLogicalCloud(t *testing.T) {
diff --git a/src/k8splugin/internal/helm/helm.go b/src/k8splugin/internal/helm/helm.go
index 2150758b..d3715fce 100644
--- a/src/k8splugin/internal/helm/helm.go
+++ b/src/k8splugin/internal/helm/helm.go
@@ -23,6 +23,7 @@ import (
"os"
"path/filepath"
"regexp"
+ "sort"
"strings"
utils "github.com/onap/multicloud-k8s/src/k8splugin/internal"
@@ -55,16 +56,17 @@ type Template interface {
// TemplateClient implements the Template interface
// It will also be used to maintain any localized state
type TemplateClient struct {
- whitespaceRegex *regexp.Regexp
- kubeVersion string
- kubeNameSpace string
- releaseName string
+ emptyRegex *regexp.Regexp
+ kubeVersion string
+ kubeNameSpace string
+ releaseName string
}
// NewTemplateClient returns a new instance of TemplateClient
func NewTemplateClient(k8sversion, namespace, releasename string) *TemplateClient {
return &TemplateClient{
- whitespaceRegex: regexp.MustCompile(`^\s*$`),
+ // emptyRegex defines template content that could be considered empty yaml-wise
+ emptyRegex: regexp.MustCompile(`(?m)\A(^(\s*#.*|\s*)$\n?)*\z`),
// defaultKubeVersion is the default value of --kube-version flag
kubeVersion: k8sversion,
kubeNameSpace: namespace,
@@ -209,11 +211,19 @@ func (h *TemplateClient) GenerateKubernetesArtifacts(inputPath string, valueFile
continue
}
rmap := releaseutil.SplitManifests(v)
- count := 0
- for _, v1 := range rmap {
- key := fmt.Sprintf("%s-%d", k, count)
- newRenderedTemplates[key] = v1
- count = count + 1
+
+ // Iterating over map can yield different order at times
+ // so first we'll sort keys
+ sortedKeys := make([]string, len(rmap))
+ for k1, _ := range rmap {
+ sortedKeys = append(sortedKeys, k1)
+ }
+ // This makes empty files have the lowest indices
+ sort.Strings(sortedKeys)
+
+ for k1, v1 := range sortedKeys {
+ key := fmt.Sprintf("%s-%d", k, k1)
+ newRenderedTemplates[key] = rmap[v1]
}
}
@@ -232,7 +242,7 @@ func (h *TemplateClient) GenerateKubernetesArtifacts(inputPath string, valueFile
}
// blank template after execution
- if h.whitespaceRegex.MatchString(data) {
+ if h.emptyRegex.MatchString(data) {
continue
}
@@ -260,7 +270,7 @@ func (h *TemplateClient) GenerateKubernetesArtifacts(inputPath string, valueFile
func getGroupVersionKind(data string) (schema.GroupVersionKind, error) {
out, err := k8syaml.ToJSON([]byte(data))
if err != nil {
- return schema.GroupVersionKind{}, pkgerrors.Wrap(err, "Converting yaml to json")
+ return schema.GroupVersionKind{}, pkgerrors.Wrap(err, "Converting yaml to json:\n"+data)
}
simpleMeta := json.SimpleMetaFactory{}
diff --git a/src/k8splugin/internal/helm/helm_test.go b/src/k8splugin/internal/helm/helm_test.go
index 1e676c52..817bbaa3 100644
--- a/src/k8splugin/internal/helm/helm_test.go
+++ b/src/k8splugin/internal/helm/helm_test.go
@@ -155,6 +155,33 @@ func TestGenerateKubernetesArtifacts(t *testing.T) {
},
expectedError: "",
},
+ {
+ label: "Generate artifacts from multi-template and empty files v1",
+ chartPath: "../../mock_files/mock_charts/testchart3",
+ valueFiles: []string{},
+ values: []string{
+ "goingEmpty=false",
+ },
+ expectedHashMap: map[string]string{
+ "testchart3/templates/multi.yaml-2": "e24cbbefac2c2f700880b8fd041838f2dd48bbc1e099e7c1d2485ae7feb3da0d",
+ "testchart3/templates/multi.yaml-3": "592a8e5b2c35b8469aa45703a835bc00657bfe36b51eb08427a46e7d22fb1525",
+ },
+ expectedError: "",
+ },
+ {
+ label: "Generate artifacts from multi-template and empty files v2",
+ chartPath: "../../mock_files/mock_charts/testchart3",
+ valueFiles: []string{},
+ values: []string{
+ "goingEmpty=true",
+ },
+ expectedHashMap: map[string]string{
+ "testchart3/templates/multi.yaml-3": "e24cbbefac2c2f700880b8fd041838f2dd48bbc1e099e7c1d2485ae7feb3da0d",
+ "testchart3/templates/multi.yaml-4": "0bea01e65148584609ede5000c024241ba1c35b440b32ec0a4f7013015715bfe",
+ "testchart3/templates/multi.yaml-5": "6a5af22538c273b9d4a3156e3b6bb538c655041eae31e93db21a9e178f73ecf0",
+ },
+ expectedError: "",
+ },
}
h := sha256.New()
@@ -192,7 +219,7 @@ func TestGenerateKubernetesArtifacts(t *testing.T) {
}
}
if gotHash != expectedHash {
- t.Fatalf("Got unexpected hash for %s", f)
+ t.Fatalf("Got unexpected hash for %s: '%s'; expected: '%s'", f, gotHash, expectedHash)
}
}
}
diff --git a/src/k8splugin/mock_files/mock_charts/testchart3/Chart.yaml b/src/k8splugin/mock_files/mock_charts/testchart3/Chart.yaml
new file mode 100644
index 00000000..adf4e2fe
--- /dev/null
+++ b/src/k8splugin/mock_files/mock_charts/testchart3/Chart.yaml
@@ -0,0 +1,4 @@
+apiVersion: v1
+description: A Helm chart for Kubernetes
+name: testchart3
+version: 0.1.0
diff --git a/src/k8splugin/mock_files/mock_charts/testchart3/templates/always-empty.yaml b/src/k8splugin/mock_files/mock_charts/testchart3/templates/always-empty.yaml
new file mode 100644
index 00000000..121130fc
--- /dev/null
+++ b/src/k8splugin/mock_files/mock_charts/testchart3/templates/always-empty.yaml
@@ -0,0 +1,9 @@
+---
+{{ if eq 0 1 }}
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: dummy
+data:
+ key1: value1
+{{ end }}
diff --git a/src/k8splugin/mock_files/mock_charts/testchart3/templates/multi.yaml b/src/k8splugin/mock_files/mock_charts/testchart3/templates/multi.yaml
new file mode 100644
index 00000000..0539cfb4
--- /dev/null
+++ b/src/k8splugin/mock_files/mock_charts/testchart3/templates/multi.yaml
@@ -0,0 +1,34 @@
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: dummy
+data:
+ key1: value1
+---
+{{ if .Values.goingEmpty }}
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: dummy
+spec:
+ template:
+ metadata:
+ labels:
+ app: dummy
+ spec:
+ container:
+ - name: dummy
+ image: dummy
+{{ end }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: dummy
+spec:
+ ports:
+ - port: 80
+ protocol: TCP
+ selector:
+ app: dummy
diff --git a/src/k8splugin/mock_files/mock_charts/testchart3/templates/only-comment.yaml b/src/k8splugin/mock_files/mock_charts/testchart3/templates/only-comment.yaml
new file mode 100644
index 00000000..aaacc787
--- /dev/null
+++ b/src/k8splugin/mock_files/mock_charts/testchart3/templates/only-comment.yaml
@@ -0,0 +1,6 @@
+#not so empty?
+#Copyright or something similiar
+#Some license info
+{{/*
+ empty
+*/}}
diff --git a/src/k8splugin/mock_files/mock_charts/testchart3/values.yaml b/src/k8splugin/mock_files/mock_charts/testchart3/values.yaml
new file mode 100644
index 00000000..912d0dbc
--- /dev/null
+++ b/src/k8splugin/mock_files/mock_charts/testchart3/values.yaml
@@ -0,0 +1 @@
+goingEmpty: true
diff --git a/src/orchestrator/api/api.go b/src/orchestrator/api/api.go
index de69d163..07f8fe34 100644
--- a/src/orchestrator/api/api.go
+++ b/src/orchestrator/api/api.go
@@ -128,13 +128,13 @@ func NewRouter(projectClient moduleLib.ProjectManager,
genericPlacementIntentHandler := genericPlacementIntentHandler{
client: genericPlacementIntentClient,
}
- router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/generic-placement-intents", genericPlacementIntentHandler.createGenericPlacementIntentHandler).Methods("POST")
+ router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/generic-placement-intents", genericPlacementIntentHandler.createGenericPlacementIntentHandler).Methods("POST")
- router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/generic-placement-intents/{intent-name}", genericPlacementIntentHandler.getGenericPlacementHandler).Methods("GET")
+ router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/generic-placement-intents/{intent-name}", genericPlacementIntentHandler.getGenericPlacementHandler).Methods("GET")
- router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/generic-placement-intents", genericPlacementIntentHandler.getAllGenericPlacementIntentsHandler).Methods("GET")
+ router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/generic-placement-intents", genericPlacementIntentHandler.getAllGenericPlacementIntentsHandler).Methods("GET")
- router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/generic-placement-intents/{intent-name}", genericPlacementIntentHandler.deleteGenericPlacementHandler).Methods("DELETE")
+ router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/generic-placement-intents/{intent-name}", genericPlacementIntentHandler.deleteGenericPlacementHandler).Methods("DELETE")
//setting routes for AppIntent
if appIntentClient == nil {
@@ -145,11 +145,11 @@ func NewRouter(projectClient moduleLib.ProjectManager,
client: appIntentClient,
}
- router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/generic-placement-intents/{intent-name}/app-intents", appIntentHandler.createAppIntentHandler).Methods("POST")
- router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/generic-placement-intents/{intent-name}/app-intents/{app-intent-name}", appIntentHandler.getAppIntentHandler).Methods("GET")
- router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/generic-placement-intents/{intent-name}/app-intents", appIntentHandler.getAllAppIntentsHandler).Methods("GET")
- router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/generic-placement-intents/{intent-name}/app-intents/", appIntentHandler.getAllIntentsByAppHandler).Queries("app-name", "{app-name}")
- router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/generic-placement-intents/{intent-name}/app-intents/{app-intent-name}", appIntentHandler.deleteAppIntentHandler).Methods("DELETE")
+ router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/generic-placement-intents/{intent-name}/app-intents", appIntentHandler.createAppIntentHandler).Methods("POST")
+ router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/generic-placement-intents/{intent-name}/app-intents/{app-intent-name}", appIntentHandler.getAppIntentHandler).Methods("GET")
+ router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/generic-placement-intents/{intent-name}/app-intents", appIntentHandler.getAllAppIntentsHandler).Methods("GET")
+ router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/generic-placement-intents/{intent-name}/app-intents/", appIntentHandler.getAllIntentsByAppHandler).Queries("app-name", "{app-name}")
+ router.HandleFunc("/projects/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/generic-placement-intents/{intent-name}/app-intents/{app-intent-name}", appIntentHandler.deleteAppIntentHandler).Methods("DELETE")
//setting routes for deploymentIntentGroup
if deploymentIntentGrpClient == nil {
deploymentIntentGrpClient = moduleClient.DeploymentIntentGroup
diff --git a/src/orchestrator/api/app_intent_handler.go b/src/orchestrator/api/app_intent_handler.go
index 1d48f8a6..3d0d5bad 100644
--- a/src/orchestrator/api/app_intent_handler.go
+++ b/src/orchestrator/api/app_intent_handler.go
@@ -62,8 +62,9 @@ func (h appIntentHandler) createAppIntentHandler(w http.ResponseWriter, r *http.
compositeAppName := vars["composite-app-name"]
version := vars["composite-app-version"]
intent := vars["intent-name"]
+ digName := vars["deployment-intent-group-name"]
- appIntent, createErr := h.client.CreateAppIntent(a, projectName, compositeAppName, version, intent)
+ appIntent, createErr := h.client.CreateAppIntent(a, projectName, compositeAppName, version, intent, digName)
if createErr != nil {
http.Error(w, createErr.Error(), http.StatusInternalServerError)
return
@@ -104,13 +105,19 @@ func (h appIntentHandler) getAppIntentHandler(w http.ResponseWriter, r *http.Req
return
}
+ dig := vars["deployment-intent-group-name"]
+ if dig == "" {
+ http.Error(w, "Missing deploymentIntentGroupName in GET request", http.StatusBadRequest)
+ return
+ }
+
ai := vars["app-intent-name"]
if ai == "" {
http.Error(w, "Missing appIntentName in GET request", http.StatusBadRequest)
return
}
- appIntent, err := h.client.GetAppIntent(ai, p, ca, v, i)
+ appIntent, err := h.client.GetAppIntent(ai, p, ca, v, i,dig)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -128,7 +135,7 @@ func (h appIntentHandler) getAppIntentHandler(w http.ResponseWriter, r *http.Req
/*
getAllIntentsByAppHandler handles the URL:
-/v2/project/{project-name}/composite-apps/{composite-app-name}/{version}/generic-placement-intent/{intent-name}/app-intents?app-name=<app-name>
+/v2/project/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/generic-placement-intent/{intent-name}/app-intents?app-name=<app-name>
*/
func (h appIntentHandler) getAllIntentsByAppHandler(w http.ResponseWriter, r *http.Request) {
@@ -142,13 +149,15 @@ func (h appIntentHandler) getAllIntentsByAppHandler(w http.ResponseWriter, r *ht
ca := vars["composite-app-name"]
v := vars["composite-app-version"]
i := vars["intent-name"]
+ digName := vars["deployment-intent-group-name"]
+
aN := r.URL.Query().Get("app-name")
if aN == "" {
http.Error(w, "Missing appName in GET request", http.StatusBadRequest)
return
}
- specData, err := h.client.GetAllIntentsByApp(aN, p, ca, v, i)
+ specData, err := h.client.GetAllIntentsByApp(aN, p, ca, v, i, digName)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -166,7 +175,7 @@ func (h appIntentHandler) getAllIntentsByAppHandler(w http.ResponseWriter, r *ht
/*
getAllAppIntentsHandler handles the URL:
-/v2/project/{project-name}/composite-apps/{composite-app-name}/{version}/generic-placement-intent/{intent-name}/app-intents
+/v2/project/{project-name}/composite-apps/{composite-app-name}/{composite-app-version}/deployment-intent-groups/{deployment-intent-group-name}/generic-placement-intent/{intent-name}/app-intents
*/
func (h appIntentHandler) getAllAppIntentsHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
@@ -179,8 +188,9 @@ func (h appIntentHandler) getAllAppIntentsHandler(w http.ResponseWriter, r *http
ca := vars["composite-app-name"]
v := vars["composite-app-version"]
i := vars["intent-name"]
+ digName := vars["deployment-intent-group-name"]
- applicationsAndClusterInfo, err := h.client.GetAllAppIntents(p, ca, v, i)
+ applicationsAndClusterInfo, err := h.client.GetAllAppIntents(p, ca, v, i, digName)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -205,8 +215,10 @@ func (h appIntentHandler) deleteAppIntentHandler(w http.ResponseWriter, r *http.
v := vars["composite-app-version"]
i := vars["intent-name"]
ai := vars["app-intent-name"]
+ digName := vars["deployment-intent-group-name"]
+
- err := h.client.DeleteAppIntent(ai, p, ca, v, i)
+ err := h.client.DeleteAppIntent(ai, p, ca, v, i, digName)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
diff --git a/src/orchestrator/api/composite_app_handler.go b/src/orchestrator/api/composite_app_handler.go
index d531b28d..761d60b9 100644
--- a/src/orchestrator/api/composite_app_handler.go
+++ b/src/orchestrator/api/composite_app_handler.go
@@ -130,7 +130,12 @@ func (h compositeAppHandler) deleteHandler(w http.ResponseWriter, r *http.Reques
version := vars["version"]
projectName := vars["project-name"]
- err := h.client.DeleteCompositeApp(name, version, projectName)
+ _, err := h.client.GetCompositeApp(name, version, projectName)
+ if err != nil {
+ http.Error(w, err.Error(), http.StatusNotFound)
+ return
+ }
+ err = h.client.DeleteCompositeApp(name, version, projectName)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
diff --git a/src/orchestrator/api/generic_placement_intent_handler.go b/src/orchestrator/api/generic_placement_intent_handler.go
index 2415ae2c..cb23776a 100644
--- a/src/orchestrator/api/generic_placement_intent_handler.go
+++ b/src/orchestrator/api/generic_placement_intent_handler.go
@@ -62,8 +62,9 @@ func (h genericPlacementIntentHandler) createGenericPlacementIntentHandler(w htt
projectName := vars["project-name"]
compositeAppName := vars["composite-app-name"]
version := vars["composite-app-version"]
+ digName := vars["deployment-intent-group-name"]
- gPIntent, createErr := h.client.CreateGenericPlacementIntent(g, projectName, compositeAppName, version)
+ gPIntent, createErr := h.client.CreateGenericPlacementIntent(g, projectName, compositeAppName, version, digName)
if createErr != nil {
http.Error(w, createErr.Error(), http.StatusInternalServerError)
return
@@ -103,7 +104,13 @@ func (h genericPlacementIntentHandler) getGenericPlacementHandler(w http.Respons
return
}
- gPIntent, err := h.client.GetGenericPlacementIntent(intentName, projectName, compositeAppName, version)
+ dig := vars["deployment-intent-group-name"]
+ if dig == "" {
+ http.Error(w, "Missing deploymentIntentGroupName in GET request", http.StatusBadRequest)
+ return
+ }
+
+ gPIntent, err := h.client.GetGenericPlacementIntent(intentName, projectName, compositeAppName, version, dig)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -128,8 +135,9 @@ func (h genericPlacementIntentHandler) getAllGenericPlacementIntentsHandler(w ht
p := vars["project-name"]
ca := vars["composite-app-name"]
v := vars["composite-app-version"]
+ digName := vars["deployment-intent-group-name"]
- gpList, err := h.client.GetAllGenericPlacementIntents(p, ca, v)
+ gpList, err := h.client.GetAllGenericPlacementIntents(p, ca, v, digName)
if err != nil {
http.Error(w, err.Error(), http.StatusNotFound)
return
@@ -150,8 +158,9 @@ func (h genericPlacementIntentHandler) deleteGenericPlacementHandler(w http.Resp
p := vars["project-name"]
ca := vars["composite-app-name"]
v := vars["composite-app-version"]
+ digName := vars["deployment-intent-group-name"]
- err := h.client.DeleteGenericPlacementIntent(i, p, ca, v)
+ err := h.client.DeleteGenericPlacementIntent(i, p, ca, v, digName)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
diff --git a/src/orchestrator/json-schemas/deployment-group-intent.json b/src/orchestrator/json-schemas/deployment-group-intent.json
index 2740747b..00b1f32f 100644
--- a/src/orchestrator/json-schemas/deployment-group-intent.json
+++ b/src/orchestrator/json-schemas/deployment-group-intent.json
@@ -5,7 +5,8 @@
"spec": {
"required": [
"profile",
- "version"
+ "version",
+ "logical-cloud"
],
"type": "object",
"description": "DepSpecData has profile, version, OverrideValuesObj",
@@ -42,6 +43,16 @@
"type": "string",
"maxLength": 128,
"pattern": "[-_0-9a-zA-Z]+$"
+ },
+ "logical-cloud": {
+ "description": "Logical Cloud to use for this intent",
+ "required": [
+ "logical-cloud"
+ ],
+ "type": "string",
+ "example": "cloud1",
+ "maxLength": 128,
+ "pattern": "[-_0-9a-zA-Z]+$"
}
}
},
diff --git a/src/orchestrator/json-schemas/generic-placement-intent.json b/src/orchestrator/json-schemas/generic-placement-intent.json
index 44df9087..b1d8e229 100644
--- a/src/orchestrator/json-schemas/generic-placement-intent.json
+++ b/src/orchestrator/json-schemas/generic-placement-intent.json
@@ -2,21 +2,6 @@
"$schema": "http://json-schema.org/schema#",
"type": "object",
"properties": {
- "spec": {
- "type": "object",
- "description": "Spec",
- "properties": {
- "logical-cloud": {
- "description": "Logical Cloud to use for this intent",
- "required": [
- "logical-cloud"
- ],
- "type": "string",
- "example": "cloud1",
- "maxLength": 128
- }
- }
- },
"metadata": {
"required": ["name"],
"properties": {
diff --git a/src/orchestrator/pkg/appcontext/appcontext.go b/src/orchestrator/pkg/appcontext/appcontext.go
index d77672db..d0935d82 100644
--- a/src/orchestrator/pkg/appcontext/appcontext.go
+++ b/src/orchestrator/pkg/appcontext/appcontext.go
@@ -67,10 +67,11 @@ var AppContextStatusEnum = &statuses{
// CompositeAppVersion, ReleaseName. This shall be used for
// instantiation of a compositeApp
type CompositeAppMeta struct {
- Project string `json:"Project"`
- CompositeApp string `json:"CompositeApp"`
- Version string `json:"Version"`
- Release string `json:"Release"`
+ Project string `json:"Project"`
+ CompositeApp string `json:"CompositeApp"`
+ Version string `json:"Version"`
+ Release string `json:"Release"`
+ DeploymentIntentGroup string `json:"DeploymentIntentGroup"`
}
// Init app context
@@ -565,6 +566,7 @@ func (ac *AppContext) GetCompositeAppMeta() (CompositeAppMeta, error) {
ca := fmt.Sprintf("%v", datamap["CompositeApp"])
v := fmt.Sprintf("%v", datamap["Version"])
rn := fmt.Sprintf("%v", datamap["Release"])
+ dig := fmt.Sprintf("%v", datamap["DeploymentIntentGroup"])
- return CompositeAppMeta{Project: p, CompositeApp: ca, Version: v, Release: rn}, nil
+ return CompositeAppMeta{Project: p, CompositeApp: ca, Version: v, Release: rn, DeploymentIntentGroup: dig}, nil
}
diff --git a/src/orchestrator/pkg/infra/db/mock.go b/src/orchestrator/pkg/infra/db/mock.go
index e43be8fb..cc3af718 100644
--- a/src/orchestrator/pkg/infra/db/mock.go
+++ b/src/orchestrator/pkg/infra/db/mock.go
@@ -41,18 +41,10 @@ func (m *MockDB) HealthCheck() error {
return m.Err
}
-func (m *MockDB) Create(table string, key Key, tag string, data interface{}) error {
- return m.Err
-}
-
func (m *MockDB) Insert(table string, key Key, query interface{}, tag string, data interface{}) error {
return m.Err
}
-func (m *MockDB) Update(table string, key Key, tag string, data interface{}) error {
- return m.Err
-}
-
// MockDB uses simple JSON and not BSON
func (m *MockDB) Unmarshal(inp []byte, out interface{}) error {
err := json.Unmarshal(inp, out)
@@ -62,21 +54,6 @@ func (m *MockDB) Unmarshal(inp []byte, out interface{}) error {
return nil
}
-func (m *MockDB) Read(table string, key Key, tag string) ([]byte, error) {
- if m.Err != nil {
- return nil, m.Err
- }
-
- str := fmt.Sprintf("%v", key)
- for k, v := range m.Items {
- if k == str {
- return v[tag], nil
- }
- }
-
- return nil, m.Err
-}
-
func (m *MockDB) Find(table string, key Key, tag string) ([][]byte, error) {
if m.Err != nil {
return nil, m.Err
@@ -93,10 +70,6 @@ func (m *MockDB) Find(table string, key Key, tag string) ([][]byte, error) {
return nil, m.Err
}
-func (m *MockDB) Delete(table string, key Key, tag string) error {
- return m.Err
-}
-
func (m *MockDB) Remove(table string, key Key) error {
return m.Err
}
diff --git a/src/orchestrator/pkg/infra/db/mongo.go b/src/orchestrator/pkg/infra/db/mongo.go
index a3fdc570..cae57e1d 100644
--- a/src/orchestrator/pkg/infra/db/mongo.go
+++ b/src/orchestrator/pkg/infra/db/mongo.go
@@ -18,7 +18,6 @@ package db
import (
"encoding/json"
- "log"
"sort"
"golang.org/x/net/context"
@@ -135,88 +134,6 @@ func (m *MongoStore) validateParams(args ...interface{}) bool {
return true
}
-// Create is used to create a DB entry
-func (m *MongoStore) Create(coll string, key Key, tag string, data interface{}) error {
- if data == nil || !m.validateParams(coll, key, tag) {
- return pkgerrors.New("No Data to store")
- }
-
- c := getCollection(coll, m)
- ctx := context.Background()
-
- //Insert the data and then add the objectID to the masterTable
- res, err := c.InsertOne(ctx, bson.D{
- {tag, data},
- })
- if err != nil {
- return pkgerrors.Errorf("Error inserting into database: %s", err.Error())
- }
-
- //Add objectID of created data to masterKey document
- //Create masterkey document if it does not exist
- filter := bson.D{{"key", key}}
-
- _, err = decodeBytes(
- c.FindOneAndUpdate(
- ctx,
- filter,
- bson.D{
- {"$set", bson.D{
- {tag, res.InsertedID},
- }},
- },
- options.FindOneAndUpdate().SetUpsert(true).SetReturnDocument(options.After)))
-
- if err != nil {
- return pkgerrors.Errorf("Error updating master table: %s", err.Error())
- }
-
- return nil
-}
-
-// Update is used to update a DB entry
-func (m *MongoStore) Update(coll string, key Key, tag string, data interface{}) error {
- if data == nil || !m.validateParams(coll, key, tag) {
- return pkgerrors.New("No Data to update")
- }
-
- c := getCollection(coll, m)
- ctx := context.Background()
-
- //Get the masterkey document based on given key
- filter := bson.D{{"key", key}}
- keydata, err := decodeBytes(c.FindOne(context.Background(), filter))
- if err != nil {
- return pkgerrors.Errorf("Error finding master table: %s", err.Error())
- }
-
- //Read the tag objectID from document
- tagoid, ok := keydata.Lookup(tag).ObjectIDOK()
- if !ok {
- return pkgerrors.Errorf("Error finding objectID for tag %s", tag)
- }
-
- //Update the document with new data
- filter = bson.D{{"_id", tagoid}}
-
- _, err = decodeBytes(
- c.FindOneAndUpdate(
- ctx,
- filter,
- bson.D{
- {"$set", bson.D{
- {tag, data},
- }},
- },
- options.FindOneAndUpdate().SetReturnDocument(options.After)))
-
- if err != nil {
- return pkgerrors.Errorf("Error updating record: %s", err.Error())
- }
-
- return nil
-}
-
// Unmarshal implements an unmarshaler for bson data that
// is produced from the mongo database
func (m *MongoStore) Unmarshal(inp []byte, out interface{}) error {
@@ -227,126 +144,6 @@ func (m *MongoStore) Unmarshal(inp []byte, out interface{}) error {
return nil
}
-// Read method returns the data stored for this key and for this particular tag
-func (m *MongoStore) Read(coll string, key Key, tag string) ([]byte, error) {
- if !m.validateParams(coll, key, tag) {
- return nil, pkgerrors.New("Mandatory fields are missing")
- }
-
- c := getCollection(coll, m)
- ctx := context.Background()
-
- //Get the masterkey document based on given key
- filter := bson.D{{"key", key}}
- keydata, err := decodeBytes(c.FindOne(context.Background(), filter))
- if err != nil {
- return nil, pkgerrors.Errorf("Error finding master table: %s", err.Error())
- }
-
- //Read the tag objectID from document
- tagoid, ok := keydata.Lookup(tag).ObjectIDOK()
- if !ok {
- return nil, pkgerrors.Errorf("Error finding objectID for tag %s", tag)
- }
-
- //Use tag objectID to read the data from store
- filter = bson.D{{"_id", tagoid}}
- tagdata, err := decodeBytes(c.FindOne(ctx, filter))
- if err != nil {
- return nil, pkgerrors.Errorf("Error reading found object: %s", err.Error())
- }
-
- //Return the data as a byte array
- //Convert string data to byte array using the built-in functions
- switch tagdata.Lookup(tag).Type {
- case bson.TypeString:
- return []byte(tagdata.Lookup(tag).StringValue()), nil
- default:
- return tagdata.Lookup(tag).Value, nil
- }
-}
-
-// Helper function that deletes an object by its ID
-func (m *MongoStore) deleteObjectByID(coll string, objID primitive.ObjectID) error {
-
- c := getCollection(coll, m)
- ctx := context.Background()
-
- _, err := c.DeleteOne(ctx, bson.D{{"_id", objID}})
- if err != nil {
- return pkgerrors.Errorf("Error Deleting from database: %s", err.Error())
- }
-
- log.Printf("Deleted Obj with ID %s", objID.String())
- return nil
-}
-
-// Delete method removes a document from the Database that matches key
-// TODO: delete all referenced docs if tag is empty string
-func (m *MongoStore) Delete(coll string, key Key, tag string) error {
- if !m.validateParams(coll, key, tag) {
- return pkgerrors.New("Mandatory fields are missing")
- }
-
- c := getCollection(coll, m)
- ctx := context.Background()
-
- //Get the masterkey document based on given key
- filter := bson.D{{"key", key}}
- //Remove the tag ID entry from masterkey table
- update := bson.D{
- {
- "$unset", bson.D{
- {tag, ""},
- },
- },
- }
- keydata, err := decodeBytes(c.FindOneAndUpdate(ctx, filter, update,
- options.FindOneAndUpdate().SetReturnDocument(options.Before)))
- if err != nil {
- //No document was found. Return nil.
- if err == mongo.ErrNoDocuments {
- return nil
- }
- //Return any other error that was found.
- return pkgerrors.Errorf("Error decoding master table after update: %s",
- err.Error())
- }
-
- //Read the tag objectID from document
- elems, err := keydata.Elements()
- if err != nil {
- return pkgerrors.Errorf("Error reading elements from database: %s", err.Error())
- }
-
- tagoid, ok := keydata.Lookup(tag).ObjectIDOK()
- if !ok {
- return pkgerrors.Errorf("Error finding objectID for tag %s", tag)
- }
-
- //Use tag objectID to read the data from store
- err = m.deleteObjectByID(coll, tagoid)
- if err != nil {
- return pkgerrors.Errorf("Error deleting from database: %s", err.Error())
- }
-
- //Delete master table if no more tags left
- //_id, key and tag should be elements in before doc
- //if master table needs to be removed too
- if len(elems) == 3 {
- keyid, ok := keydata.Lookup("_id").ObjectIDOK()
- if !ok {
- return pkgerrors.Errorf("Error finding objectID for key %s", key)
- }
- err = m.deleteObjectByID(coll, keyid)
- if err != nil {
- return pkgerrors.Errorf("Error deleting master table from database: %s", err.Error())
- }
- }
-
- return nil
-}
-
func (m *MongoStore) findFilter(key Key) (primitive.M, error) {
var bsonMap bson.M
diff --git a/src/orchestrator/pkg/infra/db/mongo_test.go b/src/orchestrator/pkg/infra/db/mongo_test.go
index d57c19dd..3e14e755 100644
--- a/src/orchestrator/pkg/infra/db/mongo_test.go
+++ b/src/orchestrator/pkg/infra/db/mongo_test.go
@@ -17,13 +17,8 @@
package db
import (
- "bytes"
"context"
- "strings"
- "testing"
- pkgerrors "github.com/pkg/errors"
- "go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
@@ -83,388 +78,3 @@ func (c *mockCollection) CountDocuments(ctx context.Context, filter interface{},
opts ...*options.CountOptions) (int64, error) {
return 1, c.Err
}
-
-func TestCreate(t *testing.T) {
- testCases := []struct {
- label string
- input map[string]interface{}
- mockColl *mockCollection
- bson bson.Raw
- expectedError string
- }{
- {
- label: "Successfull creation of entry",
- input: map[string]interface{}{
- "coll": "collname",
- "key": MockKey{Key: "keyvalue"},
- "tag": "tagName",
- "data": "Data In String Format",
- },
- bson: bson.Raw{'\x08', '\x00', '\x00', '\x00', '\x0A', 'x', '\x00', '\x00'},
- mockColl: &mockCollection{},
- },
- {
- label: "UnSuccessfull creation of entry",
- input: map[string]interface{}{
- "coll": "collname",
- "key": MockKey{Key: "keyvalue"},
- "tag": "tagName",
- "data": "Data In String Format",
- },
- mockColl: &mockCollection{
- Err: pkgerrors.New("DB Error"),
- },
- expectedError: "DB Error",
- },
- {
- label: "Missing input fields",
- input: map[string]interface{}{
- "coll": "",
- "key": MockKey{Key: ""},
- "tag": "",
- "data": "",
- },
- expectedError: "No Data to store",
- mockColl: &mockCollection{},
- },
- }
-
- for _, testCase := range testCases {
- t.Run(testCase.label, func(t *testing.T) {
- m, _ := NewMongoStore("name", &mongo.Database{})
- // Override the getCollection function with our mocked version
- getCollection = func(coll string, m *MongoStore) MongoCollection {
- return testCase.mockColl
- }
-
- decodeBytes = func(sr *mongo.SingleResult) (bson.Raw, error) {
- return testCase.bson, testCase.mockColl.Err
- }
-
- err := m.Create(testCase.input["coll"].(string), testCase.input["key"].(Key),
- testCase.input["tag"].(string), testCase.input["data"])
- if err != nil {
- if testCase.expectedError == "" {
- t.Fatalf("Create method returned an un-expected (%s)", err)
- }
- if !strings.Contains(string(err.Error()), testCase.expectedError) {
- t.Fatalf("Create method returned an error (%s)", err)
- }
- }
- })
- }
-}
-
-func TestUpdate(t *testing.T) {
- testCases := []struct {
- label string
- input map[string]interface{}
- mockColl *mockCollection
- bson bson.Raw
- expectedError string
- }{
- {
- label: "Successfull update of entry",
- input: map[string]interface{}{
- "coll": "collname",
- "key": MockKey{Key: "keyvalue"},
- "tag": "metadata",
- "data": "Data In String Format",
- },
- // Binary form of
- // {
- // "_id" : ObjectId("5c115156777ff85654248ae1"),
- // "key" : bson.D{{"name","testdef"},{"version","v1"}},
- // "metadata" : ObjectId("5c115156c9755047e318bbfd")
- // }
- bson: bson.Raw{
- '\x58', '\x00', '\x00', '\x00', '\x03', '\x6b', '\x65', '\x79',
- '\x00', '\x27', '\x00', '\x00', '\x00', '\x02', '\x6e', '\x61',
- '\x6d', '\x65', '\x00', '\x08', '\x00', '\x00', '\x00', '\x74',
- '\x65', '\x73', '\x74', '\x64', '\x65', '\x66', '\x00', '\x02',
- '\x76', '\x65', '\x72', '\x73', '\x69', '\x6f', '\x6e', '\x00',
- '\x03', '\x00', '\x00', '\x00', '\x76', '\x31', '\x00', '\x00',
- '\x07', '\x6d', '\x65', '\x74', '\x61', '\x64', '\x61', '\x74',
- '\x61', '\x00', '\x5c', '\x11', '\x51', '\x56', '\x77', '\x7f',
- '\xf8', '\x56', '\x54', '\x24', '\x8a', '\xe1', '\x07', '\x5f',
- '\x69', '\x64', '\x00', '\x5c', '\x11', '\x51', '\x56', '\x77',
- '\x7f', '\xf8', '\x56', '\x54', '\x24', '\x8a', '\xe1', '\x00',
- },
- mockColl: &mockCollection{},
- },
- {
- label: "Entry does not exist",
- input: map[string]interface{}{
- "coll": "collname",
- "key": MockKey{Key: "keyvalue"},
- "tag": "tagName",
- "data": "Data In String Format",
- },
- mockColl: &mockCollection{
- Err: pkgerrors.New("DB Error"),
- },
- expectedError: "DB Error",
- },
- }
-
- for _, testCase := range testCases {
- t.Run(testCase.label, func(t *testing.T) {
- m, _ := NewMongoStore("name", &mongo.Database{})
- // Override the getCollection function with our mocked version
- getCollection = func(coll string, m *MongoStore) MongoCollection {
- return testCase.mockColl
- }
-
- decodeBytes = func(sr *mongo.SingleResult) (bson.Raw, error) {
- return testCase.bson, testCase.mockColl.Err
- }
-
- err := m.Update(testCase.input["coll"].(string), testCase.input["key"].(Key),
- testCase.input["tag"].(string), testCase.input["data"])
- if err != nil {
- if testCase.expectedError == "" {
- t.Fatalf("Create method returned an un-expected (%s)", err)
- }
- if !strings.Contains(string(err.Error()), testCase.expectedError) {
- t.Fatalf("Create method returned an error (%s)", err)
- }
- }
- })
- }
-}
-
-func TestRead(t *testing.T) {
- testCases := []struct {
- label string
- input map[string]interface{}
- mockColl *mockCollection
- bson bson.Raw
- expectedError string
- expected []byte
- }{
- {
- label: "Successfull Read of entry",
- input: map[string]interface{}{
- "coll": "collname",
- "key": MockKey{Key: "keyvalue"},
- "tag": "metadata",
- },
- // Binary form of
- // {
- // "_id" : ObjectId("5c115156777ff85654248ae1"),
- // "key" : bson.D{{"name","testdef"},{"version","v1"}},
- // "metadata" : ObjectId("5c115156c9755047e318bbfd")
- // }
- bson: bson.Raw{
- '\x58', '\x00', '\x00', '\x00', '\x03', '\x6b', '\x65', '\x79',
- '\x00', '\x27', '\x00', '\x00', '\x00', '\x02', '\x6e', '\x61',
- '\x6d', '\x65', '\x00', '\x08', '\x00', '\x00', '\x00', '\x74',
- '\x65', '\x73', '\x74', '\x64', '\x65', '\x66', '\x00', '\x02',
- '\x76', '\x65', '\x72', '\x73', '\x69', '\x6f', '\x6e', '\x00',
- '\x03', '\x00', '\x00', '\x00', '\x76', '\x31', '\x00', '\x00',
- '\x07', '\x6d', '\x65', '\x74', '\x61', '\x64', '\x61', '\x74',
- '\x61', '\x00', '\x5c', '\x11', '\x51', '\x56', '\x77', '\x7f',
- '\xf8', '\x56', '\x54', '\x24', '\x8a', '\xe1', '\x07', '\x5f',
- '\x69', '\x64', '\x00', '\x5c', '\x11', '\x51', '\x56', '\x77',
- '\x7f', '\xf8', '\x56', '\x54', '\x24', '\x8a', '\xe1', '\x00',
- },
- mockColl: &mockCollection{},
- // This is not the document because we are mocking decodeBytes
- expected: []byte{92, 17, 81, 86, 119, 127, 248, 86, 84, 36, 138, 225},
- },
- {
- label: "UnSuccessfull Read of entry: object not found",
- input: map[string]interface{}{
- "coll": "collname",
- "key": MockKey{Key: "keyvalue"},
- "tag": "badtag",
- },
- // Binary form of
- // {
- // "_id" : ObjectId("5c115156777ff85654248ae1"),
- // "key" : bson.D{{"name","testdef"},{"version","v1"}},
- // "metadata" : ObjectId("5c115156c9755047e318bbfd")
- // }
- bson: bson.Raw{
- '\x58', '\x00', '\x00', '\x00', '\x03', '\x6b', '\x65', '\x79',
- '\x00', '\x27', '\x00', '\x00', '\x00', '\x02', '\x6e', '\x61',
- '\x6d', '\x65', '\x00', '\x08', '\x00', '\x00', '\x00', '\x74',
- '\x65', '\x73', '\x74', '\x64', '\x65', '\x66', '\x00', '\x02',
- '\x76', '\x65', '\x72', '\x73', '\x69', '\x6f', '\x6e', '\x00',
- '\x03', '\x00', '\x00', '\x00', '\x76', '\x31', '\x00', '\x00',
- '\x07', '\x6d', '\x65', '\x74', '\x61', '\x64', '\x61', '\x74',
- '\x61', '\x00', '\x5c', '\x11', '\x51', '\x56', '\x77', '\x7f',
- '\xf8', '\x56', '\x54', '\x24', '\x8a', '\xe1', '\x07', '\x5f',
- '\x69', '\x64', '\x00', '\x5c', '\x11', '\x51', '\x56', '\x77',
- '\x7f', '\xf8', '\x56', '\x54', '\x24', '\x8a', '\xe1', '\x00',
- },
- mockColl: &mockCollection{},
- expectedError: "Error finding objectID",
- },
- {
- label: "UnSuccessfull Read of entry",
- input: map[string]interface{}{
- "coll": "collname",
- "key": MockKey{Key: "keyvalue"},
- "tag": "tagName",
- },
- mockColl: &mockCollection{
- Err: pkgerrors.New("DB Error"),
- },
- expectedError: "DB Error",
- },
- {
- label: "Missing input fields",
- input: map[string]interface{}{
- "coll": "",
- "key": MockKey{Key: ""},
- "tag": "",
- },
- expectedError: "Mandatory fields are missing",
- mockColl: &mockCollection{},
- },
- }
-
- for _, testCase := range testCases {
- t.Run(testCase.label, func(t *testing.T) {
- m, _ := NewMongoStore("name", &mongo.Database{})
- // Override the getCollection function with our mocked version
- getCollection = func(coll string, m *MongoStore) MongoCollection {
- return testCase.mockColl
- }
-
- decodeBytes = func(sr *mongo.SingleResult) (bson.Raw, error) {
- return testCase.bson, testCase.mockColl.Err
- }
- got, err := m.Read(testCase.input["coll"].(string), testCase.input["key"].(Key),
- testCase.input["tag"].(string))
- if err != nil {
- if testCase.expectedError == "" {
- t.Fatalf("Read method returned an un-expected (%s)", err)
- }
- if !strings.Contains(string(err.Error()), testCase.expectedError) {
- t.Fatalf("Read method returned an error (%s)", err)
- }
- } else {
- if bytes.Compare(got, testCase.expected) != 0 {
- t.Fatalf("Read returned unexpected data: %v, expected: %v",
- string(got), testCase.expected)
- }
- }
- })
- }
-}
-
-func TestDelete(t *testing.T) {
- testCases := []struct {
- label string
- input map[string]interface{}
- mockColl *mockCollection
- bson bson.Raw
- expectedError string
- }{
- {
- label: "Successfull Delete of entry",
- input: map[string]interface{}{
- "coll": "collname",
- "key": MockKey{Key: "keyvalue"},
- "tag": "metadata",
- },
- // Binary form of
- // {
- // "_id" : ObjectId("5c115156777ff85654248ae1"),
- // "key" : bson.D{{"name","testdef"},{"version","v1"}},
- // "metadata" : ObjectId("5c115156c9755047e318bbfd")
- // }
- bson: bson.Raw{
- '\x58', '\x00', '\x00', '\x00', '\x03', '\x6b', '\x65', '\x79',
- '\x00', '\x27', '\x00', '\x00', '\x00', '\x02', '\x6e', '\x61',
- '\x6d', '\x65', '\x00', '\x08', '\x00', '\x00', '\x00', '\x74',
- '\x65', '\x73', '\x74', '\x64', '\x65', '\x66', '\x00', '\x02',
- '\x76', '\x65', '\x72', '\x73', '\x69', '\x6f', '\x6e', '\x00',
- '\x03', '\x00', '\x00', '\x00', '\x76', '\x31', '\x00', '\x00',
- '\x07', '\x6d', '\x65', '\x74', '\x61', '\x64', '\x61', '\x74',
- '\x61', '\x00', '\x5c', '\x11', '\x51', '\x56', '\x77', '\x7f',
- '\xf8', '\x56', '\x54', '\x24', '\x8a', '\xe1', '\x07', '\x5f',
- '\x69', '\x64', '\x00', '\x5c', '\x11', '\x51', '\x56', '\x77',
- '\x7f', '\xf8', '\x56', '\x54', '\x24', '\x8a', '\xe1', '\x00',
- },
- mockColl: &mockCollection{},
- },
- {
- label: "UnSuccessfull Delete of entry",
- input: map[string]interface{}{
- "coll": "collname",
- "key": MockKey{Key: "keyvalue"},
- "tag": "tagName",
- },
- mockColl: &mockCollection{
- Err: pkgerrors.New("DB Error"),
- },
- expectedError: "DB Error",
- },
- {
- label: "UnSuccessfull Delete, key not found",
- input: map[string]interface{}{
- "coll": "collname",
- "key": MockKey{Key: "keyvalue"},
- "tag": "tagName",
- },
- // Binary form of
- // {
- // "_id" : ObjectId("5c115156777ff85654248ae1"),
- // "key" : bson.D{{"name","testdef"},{"version","v1"}},
- // "metadata" : ObjectId("5c115156c9755047e318bbfd")
- // }
- bson: bson.Raw{
- '\x58', '\x00', '\x00', '\x00', '\x03', '\x6b', '\x65', '\x79',
- '\x00', '\x27', '\x00', '\x00', '\x00', '\x02', '\x6e', '\x61',
- '\x6d', '\x65', '\x00', '\x08', '\x00', '\x00', '\x00', '\x74',
- '\x65', '\x73', '\x74', '\x64', '\x65', '\x66', '\x00', '\x02',
- '\x76', '\x65', '\x72', '\x73', '\x69', '\x6f', '\x6e', '\x00',
- '\x03', '\x00', '\x00', '\x00', '\x76', '\x31', '\x00', '\x00',
- '\x07', '\x6d', '\x65', '\x74', '\x61', '\x64', '\x61', '\x74',
- '\x61', '\x00', '\x5c', '\x11', '\x51', '\x56', '\x77', '\x7f',
- '\xf8', '\x56', '\x54', '\x24', '\x8a', '\xe1', '\x07', '\x5f',
- '\x69', '\x64', '\x00', '\x5c', '\x11', '\x51', '\x56', '\x77',
- '\x7f', '\xf8', '\x56', '\x54', '\x24', '\x8a', '\xe1', '\x00',
- },
- mockColl: &mockCollection{},
- expectedError: "Error finding objectID",
- },
- {
- label: "Missing input fields",
- input: map[string]interface{}{
- "coll": "",
- "key": MockKey{Key: ""},
- "tag": "",
- },
- expectedError: "Mandatory fields are missing",
- mockColl: &mockCollection{},
- },
- }
-
- for _, testCase := range testCases {
- t.Run(testCase.label, func(t *testing.T) {
- m, _ := NewMongoStore("name", &mongo.Database{})
- // Override the getCollection function with our mocked version
- getCollection = func(coll string, m *MongoStore) MongoCollection {
- return testCase.mockColl
- }
-
- decodeBytes = func(sr *mongo.SingleResult) (bson.Raw, error) {
- return testCase.bson, testCase.mockColl.Err
- }
- err := m.Delete(testCase.input["coll"].(string), testCase.input["key"].(Key),
- testCase.input["tag"].(string))
- if err != nil {
- if testCase.expectedError == "" {
- t.Fatalf("Delete method returned an un-expected (%s)", err)
- }
- if !strings.Contains(string(err.Error()), testCase.expectedError) {
- t.Fatalf("Delete method returned an error (%s)", err)
- }
- }
- })
- }
-}
diff --git a/src/orchestrator/pkg/infra/db/store.go b/src/orchestrator/pkg/infra/db/store.go
index a332fcda..d6ed6022 100644
--- a/src/orchestrator/pkg/infra/db/store.go
+++ b/src/orchestrator/pkg/infra/db/store.go
@@ -39,20 +39,6 @@ type Store interface {
// Unmarshal implements any unmarshaling needed for the database
Unmarshal(inp []byte, out interface{}) error
- // Creates a new master document with key and links data with tag and
- // creates a pointer(row) to the newly added data in the master table
- Create(table string, key Key, tag string, data interface{}) error
-
- // Reads data for a particular key with specific tag.
- Read(table string, key Key, tag string) ([]byte, error)
-
- // Update data for particular key with specific tag
- Update(table string, key Key, tag string, data interface{}) error
-
- // Deletes a specific tag data for key.
- // TODO: If tag is empty, it will delete all tags under key.
- Delete(table string, key Key, tag string) error
-
// Inserts and Updates a tag with key and also adds query fields if provided
Insert(coll string, key Key, query interface{}, tag string, data interface{}) error
diff --git a/src/orchestrator/pkg/module/app_intent.go b/src/orchestrator/pkg/module/app_intent.go
index 9da252e5..6b394513 100644
--- a/src/orchestrator/pkg/module/app_intent.go
+++ b/src/orchestrator/pkg/module/app_intent.go
@@ -53,11 +53,11 @@ type SpecData struct {
// AppIntentManager is an interface which exposes the
// AppIntentManager functionalities
type AppIntentManager interface {
- CreateAppIntent(a AppIntent, p string, ca string, v string, i string) (AppIntent, error)
- GetAppIntent(ai string, p string, ca string, v string, i string) (AppIntent, error)
- GetAllIntentsByApp(aN, p, ca, v, i string) (SpecData, error)
- GetAllAppIntents(p, ca, v, i string) (ApplicationsAndClusterInfo, error)
- DeleteAppIntent(ai string, p string, ca string, v string, i string) error
+ CreateAppIntent(a AppIntent, p string, ca string, v string, i string, digName string) (AppIntent, error)
+ GetAppIntent(ai string, p string, ca string, v string, i string, digName string) (AppIntent, error)
+ GetAllIntentsByApp(aN, p, ca, v, i, digName string) (SpecData, error)
+ GetAllAppIntents(p, ca, v, i, digName string) (ApplicationsAndClusterInfo, error)
+ DeleteAppIntent(ai string, p string, ca string, v string, i string, digName string) error
}
//AppIntentQueryKey required for query
@@ -67,20 +67,22 @@ type AppIntentQueryKey struct {
// AppIntentKey is used as primary key
type AppIntentKey struct {
- Name string `json:"appintent"`
- Project string `json:"project"`
- CompositeApp string `json:"compositeapp"`
- Version string `json:"compositeappversion"`
- Intent string `json:"genericplacement"`
+ Name string `json:"appintent"`
+ Project string `json:"project"`
+ CompositeApp string `json:"compositeapp"`
+ Version string `json:"compositeappversion"`
+ Intent string `json:"genericplacement"`
+ DeploymentIntentGroupName string `json:"deploymentintentgroup"`
}
// AppIntentFindByAppKey required for query
type AppIntentFindByAppKey struct {
- Project string `json:"project"`
- CompositeApp string `json:"compositeapp"`
- CompositeAppVersion string `json:"compositeappversion"`
- Intent string `json:"genericplacement"`
- AppName string `json:"app-name"`
+ Project string `json:"project"`
+ CompositeApp string `json:"compositeapp"`
+ CompositeAppVersion string `json:"compositeappversion"`
+ Intent string `json:"genericplacement"`
+ DeploymentIntentGroupName string `json:"deploymentintentgroup"`
+ AppName string `json:"app-name"`
}
// ApplicationsAndClusterInfo type represents the list of
@@ -121,11 +123,11 @@ func NewAppIntentClient() *AppIntentClient {
}
// CreateAppIntent creates an entry for AppIntent in the db.
-// Other input parameters for it - projectName, compositeAppName, version, intentName.
-func (c *AppIntentClient) CreateAppIntent(a AppIntent, p string, ca string, v string, i string) (AppIntent, error) {
+// Other input parameters for it - projectName, compositeAppName, version, intentName and deploymentIntentGroupName.
+func (c *AppIntentClient) CreateAppIntent(a AppIntent, p string, ca string, v string, i string, digName string) (AppIntent, error) {
//Check for the AppIntent already exists here.
- res, err := c.GetAppIntent(a.MetaData.Name, p, ca, v, i)
+ res, err := c.GetAppIntent(a.MetaData.Name, p, ca, v, i, digName)
if !reflect.DeepEqual(res, AppIntent{}) {
return AppIntent{}, pkgerrors.New("AppIntent already exists")
}
@@ -143,17 +145,24 @@ func (c *AppIntentClient) CreateAppIntent(a AppIntent, p string, ca string, v st
}
// check if Intent exists
- _, err = NewGenericPlacementIntentClient().GetGenericPlacementIntent(i, p, ca, v)
+ _, err = NewGenericPlacementIntentClient().GetGenericPlacementIntent(i, p, ca, v, digName)
if err != nil {
return AppIntent{}, pkgerrors.New("Unable to find the intent")
}
+ // check if the deploymentIntentGrpName exists
+ _, err = NewDeploymentIntentGroupClient().GetDeploymentIntentGroup(digName, p, ca, v)
+ if err != nil {
+ return AppIntent{}, pkgerrors.New("Unable to find the deployment-intent-group-name")
+ }
+
akey := AppIntentKey{
- Name: a.MetaData.Name,
- Project: p,
- CompositeApp: ca,
- Version: v,
- Intent: i,
+ Name: a.MetaData.Name,
+ Project: p,
+ CompositeApp: ca,
+ Version: v,
+ Intent: i,
+ DeploymentIntentGroupName: digName,
}
qkey := AppIntentQueryKey{
@@ -168,15 +177,16 @@ func (c *AppIntentClient) CreateAppIntent(a AppIntent, p string, ca string, v st
return a, nil
}
-// GetAppIntent shall take arguments - name of the app intent, name of the project, name of the composite app, version of the composite app and intent name. It shall return the AppIntent
-func (c *AppIntentClient) GetAppIntent(ai string, p string, ca string, v string, i string) (AppIntent, error) {
+// GetAppIntent shall take arguments - name of the app intent, name of the project, name of the composite app, version of the composite app,intent name and deploymentIntentGroupName. It shall return the AppIntent
+func (c *AppIntentClient) GetAppIntent(ai string, p string, ca string, v string, i string, digName string) (AppIntent, error) {
k := AppIntentKey{
- Name: ai,
- Project: p,
- CompositeApp: ca,
- Version: v,
- Intent: i,
+ Name: ai,
+ Project: p,
+ CompositeApp: ca,
+ Version: v,
+ Intent: i,
+ DeploymentIntentGroupName: digName,
}
result, err := db.DBconn.Find(c.storeName, k, c.tagMetaData)
@@ -197,17 +207,18 @@ func (c *AppIntentClient) GetAppIntent(ai string, p string, ca string, v string,
}
/*
-GetAllIntentsByApp takes in parameters AppName, CompositeAppName, CompositeNameVersion
-and GenericPlacementIntentName. Returns SpecData which contains
+GetAllIntentsByApp queries intent by AppName, it takes in parameters AppName, CompositeAppName, CompositeNameVersion,
+GenericPlacementIntentName & DeploymentIntentGroupName. Returns SpecData which contains
all the intents for the app.
*/
-func (c *AppIntentClient) GetAllIntentsByApp(aN, p, ca, v, i string) (SpecData, error) {
+func (c *AppIntentClient) GetAllIntentsByApp(aN, p, ca, v, i, digName string) (SpecData, error) {
k := AppIntentFindByAppKey{
- Project: p,
- CompositeApp: ca,
- CompositeAppVersion: v,
- Intent: i,
- AppName: aN,
+ Project: p,
+ CompositeApp: ca,
+ CompositeAppVersion: v,
+ Intent: i,
+ DeploymentIntentGroupName: digName,
+ AppName: aN,
}
result, err := db.DBconn.Find(c.storeName, k, c.tagMetaData)
if err != nil {
@@ -224,15 +235,16 @@ func (c *AppIntentClient) GetAllIntentsByApp(aN, p, ca, v, i string) (SpecData,
/*
GetAllAppIntents takes in paramaters ProjectName, CompositeAppName, CompositeNameVersion
-and GenericPlacementIntentName. Returns the ApplicationsAndClusterInfo Object - an array of AppClusterInfo
+and GenericPlacementIntentName,DeploymentIntentGroupName. Returns the ApplicationsAndClusterInfo Object - an array of AppClusterInfo
*/
-func (c *AppIntentClient) GetAllAppIntents(p, ca, v, i string) (ApplicationsAndClusterInfo, error) {
+func (c *AppIntentClient) GetAllAppIntents(p, ca, v, i, digName string) (ApplicationsAndClusterInfo, error) {
k := AppIntentKey{
- Name: "",
- Project: p,
- CompositeApp: ca,
- Version: v,
- Intent: i,
+ Name: "",
+ Project: p,
+ CompositeApp: ca,
+ Version: v,
+ Intent: i,
+ DeploymentIntentGroupName: digName,
}
result, err := db.DBconn.Find(c.storeName, k, c.tagMetaData)
if err != nil {
@@ -262,13 +274,14 @@ func (c *AppIntentClient) GetAllAppIntents(p, ca, v, i string) (ApplicationsAndC
}
// DeleteAppIntent delete an AppIntent
-func (c *AppIntentClient) DeleteAppIntent(ai string, p string, ca string, v string, i string) error {
+func (c *AppIntentClient) DeleteAppIntent(ai string, p string, ca string, v string, i string, digName string) error {
k := AppIntentKey{
- Name: ai,
- Project: p,
- CompositeApp: ca,
- Version: v,
- Intent: i,
+ Name: ai,
+ Project: p,
+ CompositeApp: ca,
+ Version: v,
+ Intent: i,
+ DeploymentIntentGroupName: digName,
}
err := db.DBconn.Remove(c.storeName, k)
diff --git a/src/orchestrator/pkg/module/app_intent_test.go b/src/orchestrator/pkg/module/app_intent_test.go
index 089f09ff..a2e295ea 100644
--- a/src/orchestrator/pkg/module/app_intent_test.go
+++ b/src/orchestrator/pkg/module/app_intent_test.go
@@ -33,6 +33,7 @@ func TestCreateAppIntent(t *testing.T) {
inputCompositeApp string
inputCompositeAppVersion string
inputGenericPlacementIntent string
+ inputDeploymentIntentGrpName string
expectedError string
mockdb *db.MockDB
expected AppIntent
@@ -81,6 +82,7 @@ func TestCreateAppIntent(t *testing.T) {
inputCompositeApp: "testCompositeApp",
inputCompositeAppVersion: "testCompositeAppVersion",
inputGenericPlacementIntent: "testIntent",
+ inputDeploymentIntentGrpName: "testDeploymentIntentGroup",
expected: AppIntent{
MetaData: MetaData{
Name: "testAppIntent",
@@ -142,6 +144,7 @@ func TestCreateAppIntent(t *testing.T) {
Project: "testProject",
CompositeApp: "testCompositeApp",
Version: "testCompositeAppVersion",
+ DigName: "testDeploymentIntentGroup",
}.String(): {
"genericplacementintentmetadata": []byte(
"{\"metadata\":{\"Name\":\"testIntent\"," +
@@ -150,6 +153,39 @@ func TestCreateAppIntent(t *testing.T) {
"\"UserData2\": \"userData2\"}," +
"\"spec\":{\"Logical-Cloud\": \"logicalCloud1\"}}"),
},
+ DeploymentIntentGroupKey{
+ Name: "testDeploymentIntentGroup",
+ Project: "testProject",
+ CompositeApp: "testCompositeApp",
+ Version: "testCompositeAppVersion",
+ }.String(): {
+ "deploymentintentgroupmetadata": []byte(
+ "{\"metadata\":{\"name\":\"testDeploymentIntentGroup\"," +
+ "\"description\":\"DescriptionTestDeploymentIntentGroup\"," +
+ "\"userData1\": \"userData1\"," +
+ "\"userData2\": \"userData2\"}," +
+ "\"spec\":{\"profile\": \"Testprofile\"," +
+ "\"version\": \"version of deployment\"," +
+ "\"override-values\":[" +
+ "{" +
+ "\"app-name\": \"TestAppName\"," +
+ "\"values\": " +
+ "{" +
+ "\"imageRepository\":\"registry.hub.docker.com\"" +
+ "}" +
+ "}," +
+ "{" +
+ "\"app-name\": \"TestAppName\"," +
+ "\"values\": " +
+ "{" +
+ "\"imageRepository\":\"registry.hub.docker.com\"" +
+ "}" +
+ "}" +
+ "]," +
+ "\"logical-cloud\": \"cloud1\"" +
+ "}"+
+ "}"),
+ },
},
},
},
@@ -158,7 +194,7 @@ func TestCreateAppIntent(t *testing.T) {
t.Run(testCase.label, func(t *testing.T) {
db.DBconn = testCase.mockdb
appIntentCli := NewAppIntentClient()
- got, err := appIntentCli.CreateAppIntent(testCase.inputAppIntent, testCase.inputProject, testCase.inputCompositeApp, testCase.inputCompositeAppVersion, testCase.inputGenericPlacementIntent)
+ got, err := appIntentCli.CreateAppIntent(testCase.inputAppIntent, testCase.inputProject, testCase.inputCompositeApp, testCase.inputCompositeAppVersion, testCase.inputGenericPlacementIntent, testCase.inputDeploymentIntentGrpName)
if err != nil {
if testCase.expectedError == "" {
t.Fatalf("CreateAppIntent returned an unexpected error %s, ", err)
@@ -186,6 +222,7 @@ func TestGetAppIntent(t *testing.T) {
compositeAppName string
compositeAppVersion string
genericPlacementIntent string
+ deploymentIntentgrpName string
}{
{
label: "Get Intent",
@@ -194,6 +231,7 @@ func TestGetAppIntent(t *testing.T) {
compositeAppName: "testCompositeApp",
compositeAppVersion: "testCompositeAppVersion",
genericPlacementIntent: "testIntent",
+ deploymentIntentgrpName: "testDeploymentIntentGroup",
expected: AppIntent{
MetaData: MetaData{
Name: "testAppIntent",
@@ -234,6 +272,7 @@ func TestGetAppIntent(t *testing.T) {
CompositeApp: "testCompositeApp",
Version: "testCompositeAppVersion",
Intent: "testIntent",
+ DeploymentIntentGroupName: "testDeploymentIntentGroup",
}.String(): {
"appintentmetadata": []byte(
"{\"metadata\":{\"Name\":\"testAppIntent\"," +
@@ -270,7 +309,7 @@ func TestGetAppIntent(t *testing.T) {
db.DBconn = testCase.mockdb
appIntentCli := NewAppIntentClient()
got, err := appIntentCli.GetAppIntent(testCase.appIntentName, testCase.projectName, testCase.compositeAppName, testCase.compositeAppVersion,
- testCase.genericPlacementIntent)
+ testCase.genericPlacementIntent, testCase.deploymentIntentgrpName)
if err != nil {
if testCase.expectedError == "" {
t.Fatalf("GetAppIntent returned an unexpected error: %s", err)
diff --git a/src/orchestrator/pkg/module/deployment_intent_groups.go b/src/orchestrator/pkg/module/deployment_intent_groups.go
index dec6391f..f8e434f4 100644
--- a/src/orchestrator/pkg/module/deployment_intent_groups.go
+++ b/src/orchestrator/pkg/module/deployment_intent_groups.go
@@ -47,6 +47,7 @@ type DepSpecData struct {
Profile string `json:"profile"`
Version string `json:"version"`
OverrideValuesObj []OverrideValues `json:"override-values"`
+ LogicalCloud string `json:"logical-cloud"`
}
// OverrideValues has appName and ValuesObj
diff --git a/src/orchestrator/pkg/module/deployment_intent_groups_test.go b/src/orchestrator/pkg/module/deployment_intent_groups_test.go
index 0fdeb4a1..86ae49df 100644
--- a/src/orchestrator/pkg/module/deployment_intent_groups_test.go
+++ b/src/orchestrator/pkg/module/deployment_intent_groups_test.go
@@ -57,6 +57,7 @@ func TestCreateDeploymentIntentGroup(t *testing.T) {
"imageRepository": "registry.hub.docker.com",
}},
},
+ LogicalCloud: "cloud1",
},
},
inputProject: "testProject",
@@ -82,6 +83,7 @@ func TestCreateDeploymentIntentGroup(t *testing.T) {
"imageRepository": "registry.hub.docker.com",
}},
},
+ LogicalCloud: "cloud1",
},
},
expectedError: "",
@@ -167,6 +169,7 @@ func TestGetDeploymentIntentGroup(t *testing.T) {
"imageRepository": "registry.hub.docker.com",
}},
},
+ LogicalCloud: "cloud1",
},
},
expectedError: "",
@@ -200,7 +203,10 @@ func TestGetDeploymentIntentGroup(t *testing.T) {
"\"imageRepository\":\"registry.hub.docker.com\"" +
"}" +
"}" +
- "]}}"),
+ "]," +
+ "\"logical-cloud\": \"cloud1\"" +
+ "}"+
+ "}"),
},
},
},
diff --git a/src/orchestrator/pkg/module/generic_placement_intent.go b/src/orchestrator/pkg/module/generic_placement_intent.go
index fb00a6ab..3ff1c7dc 100644
--- a/src/orchestrator/pkg/module/generic_placement_intent.go
+++ b/src/orchestrator/pkg/module/generic_placement_intent.go
@@ -18,6 +18,7 @@ package module
import (
"encoding/json"
+
"github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/db"
pkgerrors "github.com/pkg/errors"
@@ -26,7 +27,6 @@ import (
// GenericPlacementIntent shall have 2 fields - metadata and spec
type GenericPlacementIntent struct {
MetaData GenIntentMetaData `json:"metadata"`
- Spec GenIntentSpecData `json:"spec"`
}
// GenIntentMetaData has name, description, userdata1, userdata2
@@ -37,21 +37,16 @@ type GenIntentMetaData struct {
UserData2 string `json:"userData2"`
}
-// GenIntentSpecData has logical-cloud-name
-type GenIntentSpecData struct {
- LogicalCloud string `json:"logical-cloud"`
-}
-
// GenericPlacementIntentManager is an interface which exposes the GenericPlacementIntentManager functionality
type GenericPlacementIntentManager interface {
CreateGenericPlacementIntent(g GenericPlacementIntent, p string, ca string,
- v string) (GenericPlacementIntent, error)
+ v string, digName string) (GenericPlacementIntent, error)
GetGenericPlacementIntent(intentName string, projectName string,
- compositeAppName string, version string) (GenericPlacementIntent, error)
+ compositeAppName string, version string, digName string) (GenericPlacementIntent, error)
DeleteGenericPlacementIntent(intentName string, projectName string,
- compositeAppName string, version string) error
+ compositeAppName string, version string, digName string) error
- GetAllGenericPlacementIntents(p string, ca string, v string) ([]GenericPlacementIntent, error)
+ GetAllGenericPlacementIntents(p string, ca string, v string, digName string) ([]GenericPlacementIntent, error)
}
// GenericPlacementIntentKey is used as the primary key
@@ -60,6 +55,7 @@ type GenericPlacementIntentKey struct {
Project string `json:"project"`
CompositeApp string `json:"compositeapp"`
Version string `json:"compositeappversion"`
+ DigName string `json:"deploymentintentgroup"`
}
// We will use json marshalling to convert to string to
@@ -86,12 +82,12 @@ func NewGenericPlacementIntentClient() *GenericPlacementIntentClient {
}
}
-// CreateGenericPlacementIntent creates an entry for GenericPlacementIntent in the database. Other Input parameters for it - projectName, compositeAppName, version
+// CreateGenericPlacementIntent creates an entry for GenericPlacementIntent in the database. Other Input parameters for it - projectName, compositeAppName, version and deploymentIntentGroupName
func (c *GenericPlacementIntentClient) CreateGenericPlacementIntent(g GenericPlacementIntent, p string, ca string,
- v string) (GenericPlacementIntent, error) {
+ v string, digName string) (GenericPlacementIntent, error) {
// check if the genericPlacement already exists.
- res, err := c.GetGenericPlacementIntent(g.MetaData.Name, p, ca, v)
+ res, err := c.GetGenericPlacementIntent(g.MetaData.Name, p, ca, v, digName)
if res != (GenericPlacementIntent{}) {
return GenericPlacementIntent{}, pkgerrors.New("Intent already exists")
}
@@ -108,11 +104,18 @@ func (c *GenericPlacementIntentClient) CreateGenericPlacementIntent(g GenericPla
return GenericPlacementIntent{}, pkgerrors.New("Unable to find the composite-app")
}
+ // check if the deploymentIntentGrpName exists
+ _, err = NewDeploymentIntentGroupClient().GetDeploymentIntentGroup(digName, p, ca, v)
+ if err != nil {
+ return GenericPlacementIntent{}, pkgerrors.New("Unable to find the deployment-intent-group-name")
+ }
+
gkey := GenericPlacementIntentKey{
Name: g.MetaData.Name,
Project: p,
CompositeApp: ca,
Version: v,
+ DigName: digName,
}
err = db.DBconn.Insert(c.storeName, gkey, nil, c.tagMetaData, g)
@@ -123,13 +126,14 @@ func (c *GenericPlacementIntentClient) CreateGenericPlacementIntent(g GenericPla
return g, nil
}
-// GetGenericPlacementIntent shall take arguments - name of the intent, name of the project, name of the composite app and version of the composite app. It shall return the genericPlacementIntent if its present.
-func (c *GenericPlacementIntentClient) GetGenericPlacementIntent(i string, p string, ca string, v string) (GenericPlacementIntent, error) {
+// GetGenericPlacementIntent shall take arguments - name of the intent, name of the project, name of the composite app, version of the composite app and deploymentIntentGroupName. It shall return the genericPlacementIntent if its present.
+func (c *GenericPlacementIntentClient) GetGenericPlacementIntent(i string, p string, ca string, v string, digName string) (GenericPlacementIntent, error) {
key := GenericPlacementIntentKey{
Name: i,
Project: p,
CompositeApp: ca,
Version: v,
+ DigName: digName,
}
result, err := db.DBconn.Find(c.storeName, key, c.tagMetaData)
@@ -150,8 +154,8 @@ func (c *GenericPlacementIntentClient) GetGenericPlacementIntent(i string, p str
}
-// GetAllGenericPlacementIntents returns all the generic placement intents for a given compsoite app name, composite app version and project.
-func (c *GenericPlacementIntentClient) GetAllGenericPlacementIntents(p string, ca string, v string) ([]GenericPlacementIntent, error) {
+// GetAllGenericPlacementIntents returns all the generic placement intents for a given compsoite app name, composite app version, project and deploymentIntentGroupName
+func (c *GenericPlacementIntentClient) GetAllGenericPlacementIntents(p string, ca string, v string, digName string) ([]GenericPlacementIntent, error) {
//Check if project exists
_, err := NewProjectClient().GetProject(p)
@@ -170,6 +174,7 @@ func (c *GenericPlacementIntentClient) GetAllGenericPlacementIntents(p string, c
Project: p,
CompositeApp: ca,
Version: v,
+ DigName: digName,
}
var gpList []GenericPlacementIntent
@@ -192,12 +197,13 @@ func (c *GenericPlacementIntentClient) GetAllGenericPlacementIntents(p string, c
}
// DeleteGenericPlacementIntent the intent from the database
-func (c *GenericPlacementIntentClient) DeleteGenericPlacementIntent(i string, p string, ca string, v string) error {
+func (c *GenericPlacementIntentClient) DeleteGenericPlacementIntent(i string, p string, ca string, v string, digName string) error {
key := GenericPlacementIntentKey{
Name: i,
Project: p,
CompositeApp: ca,
Version: v,
+ DigName: digName,
}
err := db.DBconn.Remove(c.storeName, key)
diff --git a/src/orchestrator/pkg/module/generic_placement_intent_test.go b/src/orchestrator/pkg/module/generic_placement_intent_test.go
index d779e81f..59c1cac5 100644
--- a/src/orchestrator/pkg/module/generic_placement_intent_test.go
+++ b/src/orchestrator/pkg/module/generic_placement_intent_test.go
@@ -31,6 +31,7 @@ func TestCreateGenericPlacementIntent(t *testing.T) {
inputProject string
inputCompositeApp string
inputCompositeAppVersion string
+ inputDepIntGrpName string
expectedError string
mockdb *db.MockDB
expected GenericPlacementIntent
@@ -44,13 +45,11 @@ func TestCreateGenericPlacementIntent(t *testing.T) {
UserData1: "userData1",
UserData2: "userData2",
},
- Spec: GenIntentSpecData{
- LogicalCloud: "logicalCloud1",
- },
},
inputProject: "testProject",
inputCompositeApp: "testCompositeApp",
inputCompositeAppVersion: "testCompositeAppVersion",
+ inputDepIntGrpName: "testDeploymentIntentGroup",
expected: GenericPlacementIntent{
MetaData: GenIntentMetaData{
Name: "testGenericPlacement",
@@ -58,9 +57,6 @@ func TestCreateGenericPlacementIntent(t *testing.T) {
UserData1: "userData1",
UserData2: "userData2",
},
- Spec: GenIntentSpecData{
- LogicalCloud: "logicalCloud1",
- },
},
expectedError: "",
mockdb: &db.MockDB{
@@ -82,6 +78,40 @@ func TestCreateGenericPlacementIntent(t *testing.T) {
"\"spec\":{" +
"\"version\":\"version of the composite app\"}}"),
},
+ DeploymentIntentGroupKey{
+ Name: "testDeploymentIntentGroup",
+ Project: "testProject",
+ CompositeApp: "testCompositeApp",
+ Version: "testCompositeAppVersion",
+ }.String(): {
+ "deploymentintentgroupmetadata": []byte(
+ "{\"metadata\":{\"name\":\"testDeploymentIntentGroup\"," +
+ "\"description\":\"DescriptionTestDeploymentIntentGroup\"," +
+ "\"userData1\": \"userData1\"," +
+ "\"userData2\": \"userData2\"}," +
+ "\"spec\":{\"profile\": \"Testprofile\"," +
+ "\"version\": \"version of deployment\"," +
+ "\"override-values\":[" +
+ "{" +
+ "\"app-name\": \"TestAppName\"," +
+ "\"values\": " +
+ "{" +
+ "\"imageRepository\":\"registry.hub.docker.com\"" +
+ "}" +
+ "}," +
+ "{" +
+ "\"app-name\": \"TestAppName\"," +
+ "\"values\": " +
+ "{" +
+ "\"imageRepository\":\"registry.hub.docker.com\"" +
+ "}" +
+ "}" +
+ "]," +
+ "\"logical-cloud\": \"cloud1\"" +
+ "}"+
+ "}"),
+ },
+
},
},
},
@@ -91,7 +121,7 @@ func TestCreateGenericPlacementIntent(t *testing.T) {
t.Run(testCase.label, func(t *testing.T) {
db.DBconn = testCase.mockdb
intentCli := NewGenericPlacementIntentClient()
- got, err := intentCli.CreateGenericPlacementIntent(testCase.inputIntent, testCase.inputProject, testCase.inputCompositeApp, testCase.inputCompositeAppVersion)
+ got, err := intentCli.CreateGenericPlacementIntent(testCase.inputIntent, testCase.inputProject, testCase.inputCompositeApp, testCase.inputCompositeAppVersion, testCase.inputDepIntGrpName)
if err != nil {
if testCase.expectedError == "" {
t.Fatalf("CreateGenericPlacementIntent returned an unexpected error %s", err)
@@ -120,6 +150,7 @@ func TestGetGenericPlacementIntent(t *testing.T) {
projectName string
compositeAppName string
compositeAppVersion string
+ deploymentIntentGroupName string
}{
{
label: "Get Intent",
@@ -127,6 +158,7 @@ func TestGetGenericPlacementIntent(t *testing.T) {
projectName: "testProject",
compositeAppName: "testCompositeApp",
compositeAppVersion: "testVersion",
+ deploymentIntentGroupName: "testDeploymentIntentGroup",
expected: GenericPlacementIntent{
MetaData: GenIntentMetaData{
Name: "testIntent",
@@ -134,9 +166,6 @@ func TestGetGenericPlacementIntent(t *testing.T) {
UserData1: "userData1",
UserData2: "userData2",
},
- Spec: GenIntentSpecData{
- LogicalCloud: "logicalCloud1",
- },
},
expectedError: "",
mockdb: &db.MockDB{
@@ -146,13 +175,14 @@ func TestGetGenericPlacementIntent(t *testing.T) {
Project: "testProject",
CompositeApp: "testCompositeApp",
Version: "testVersion",
+ DigName: "testDeploymentIntentGroup",
}.String(): {
"genericplacementintentmetadata": []byte(
"{\"metadata\":{\"Name\":\"testIntent\"," +
"\"Description\":\"A sample intent for testing\"," +
"\"UserData1\": \"userData1\"," +
- "\"UserData2\": \"userData2\"}," +
- "\"spec\":{\"Logical-Cloud\": \"logicalCloud1\"}}"),
+ "\"UserData2\": \"userData2\"}" +
+ "}"),
},
},
},
@@ -163,7 +193,7 @@ func TestGetGenericPlacementIntent(t *testing.T) {
t.Run(testCase.label, func(t *testing.T) {
db.DBconn = testCase.mockdb
intentCli := NewGenericPlacementIntentClient()
- got, err := intentCli.GetGenericPlacementIntent(testCase.intentName, testCase.projectName, testCase.compositeAppName, testCase.compositeAppVersion)
+ got, err := intentCli.GetGenericPlacementIntent(testCase.intentName, testCase.projectName, testCase.compositeAppName, testCase.compositeAppVersion, testCase.deploymentIntentGroupName)
if err != nil {
if testCase.expectedError == "" {
t.Fatalf("GetGenericPlacementIntent returned an unexpected error: %s", err)
diff --git a/src/orchestrator/pkg/module/instantiation.go b/src/orchestrator/pkg/module/instantiation.go
index 0ae76006..d703af7f 100644
--- a/src/orchestrator/pkg/module/instantiation.go
+++ b/src/orchestrator/pkg/module/instantiation.go
@@ -99,12 +99,12 @@ func NewInstantiationClient() *InstantiationClient {
func (c InstantiationClient) Approve(p string, ca string, v string, di string) error {
s, err := NewDeploymentIntentGroupClient().GetDeploymentIntentGroupState(di, p, ca, v)
if err != nil {
- log.Info("DeploymentIntentGroup has no state info ", log.Fields{"DeploymentIntentGroup: ":di})
+ log.Info("DeploymentIntentGroup has no state info ", log.Fields{"DeploymentIntentGroup: ": di})
return pkgerrors.Wrap(err, "DeploymentIntentGroup has no state info: "+di)
}
stateVal, err := state.GetCurrentStateFromStateInfo(s)
if err != nil {
- log.Info("Error getting current state from DeploymentIntentGroup stateInfo", log.Fields{"DeploymentIntentGroup ":di})
+ log.Info("Error getting current state from DeploymentIntentGroup stateInfo", log.Fields{"DeploymentIntentGroup ": di})
return pkgerrors.Errorf("Error getting current state from DeploymentIntentGroup stateInfo: " + di)
}
switch stateVal {
@@ -222,24 +222,24 @@ func GetSortedTemplateForApp(appName, p, ca, v, rName, cp string, overrideValues
return sortedTemplates, err
}
-func calculateDirPath(fp string) string {
+func calculateDirPath(fp string) string {
sa := strings.Split(fp, "/")
return "/" + sa[1] + "/" + sa[2] + "/"
}
func cleanTmpfiles(sortedTemplates []helm.KubernetesResourceTemplate) error {
dp := calculateDirPath(sortedTemplates[0].FilePath)
- for _, st := range sortedTemplates{
+ for _, st := range sortedTemplates {
log.Info("Clean up ::", log.Fields{"file: ": st.FilePath})
err := os.Remove(st.FilePath)
if err != nil {
- log.Error("Error while deleting file", log.Fields{"file: ":st.FilePath})
+ log.Error("Error while deleting file", log.Fields{"file: ": st.FilePath})
return err
}
}
err := os.RemoveAll(dp)
if err != nil {
- log.Error("Error while deleting dir", log.Fields{"Dir: ":dp})
+ log.Error("Error while deleting dir", log.Fields{"Dir: ": dp})
return err
}
log.Info("Clean up temp-dir::", log.Fields{"Dir: ": dp})
@@ -298,7 +298,7 @@ func (c InstantiationClient) Instantiate(p string, ca string, v string, di strin
return pkgerrors.Wrap(err, "Not finding the apps")
}
- cca, err := makeAppContextForCompositeApp(p, ca, v, rName)
+ cca, err := makeAppContextForCompositeApp(p, ca, v, rName, di)
if err != nil {
return err
}
@@ -338,7 +338,7 @@ func (c InstantiationClient) Instantiate(p string, ca string, v string, di strin
defer cleanTmpfiles(sortedTemplates)
- specData, err := NewAppIntentClient().GetAllIntentsByApp(eachApp.Metadata.Name, p, ca, v, gIntent)
+ specData, err := NewAppIntentClient().GetAllIntentsByApp(eachApp.Metadata.Name, p, ca, v, gIntent, di)
if err != nil {
deleteAppContext(context)
return pkgerrors.Wrap(err, "Unable to get the intents for app")
@@ -369,7 +369,7 @@ func (c InstantiationClient) Instantiate(p string, ca string, v string, di strin
deleteAppContext(context)
return pkgerrors.Wrap(err, "Error while verifying resources in app: ")
}
-
+
}
jappOrderInstr, err := json.Marshal(appOrderInstr)
if err != nil {
diff --git a/src/orchestrator/pkg/module/instantiation_appcontext_helper.go b/src/orchestrator/pkg/module/instantiation_appcontext_helper.go
index 692cdf1e..06e025c7 100644
--- a/src/orchestrator/pkg/module/instantiation_appcontext_helper.go
+++ b/src/orchestrator/pkg/module/instantiation_appcontext_helper.go
@@ -46,7 +46,7 @@ type contextForCompositeApp struct {
}
// makeAppContext creates an appContext for a compositeApp and returns the output as contextForCompositeApp
-func makeAppContextForCompositeApp(p, ca, v, rName string) (contextForCompositeApp, error) {
+func makeAppContextForCompositeApp(p, ca, v, rName, dig string) (contextForCompositeApp, error) {
context := appcontext.AppContext{}
ctxval, err := context.InitAppContext()
if err != nil {
@@ -56,14 +56,14 @@ func makeAppContextForCompositeApp(p, ca, v, rName string) (contextForCompositeA
if err != nil {
return contextForCompositeApp{}, pkgerrors.Wrap(err, "Error creating CompositeApp handle")
}
- err = context.AddCompositeAppMeta(appcontext.CompositeAppMeta{Project: p, CompositeApp: ca, Version: v, Release: rName})
+ err = context.AddCompositeAppMeta(appcontext.CompositeAppMeta{Project: p, CompositeApp: ca, Version: v, Release: rName, DeploymentIntentGroup: dig})
if err != nil {
return contextForCompositeApp{}, pkgerrors.Wrap(err, "Error Adding CompositeAppMeta")
}
m, err := context.GetCompositeAppMeta()
- log.Info(":: The meta data stored in the runtime context :: ", log.Fields{"Project": m.Project, "CompositeApp": m.CompositeApp, "Version": m.Version, "Release": m.Release})
+ log.Info(":: The meta data stored in the runtime context :: ", log.Fields{"Project": m.Project, "CompositeApp": m.CompositeApp, "Version": m.Version, "Release": m.Release, "DeploymentIntentGroup": m.DeploymentIntentGroup})
cca := contextForCompositeApp{context: context, ctxval: ctxval, compositeAppHandle: compositeHandle}
diff --git a/src/ovnaction/api/api.go b/src/ovnaction/api/api.go
index bffab0a4..36744cb0 100644
--- a/src/ovnaction/api/api.go
+++ b/src/ovnaction/api/api.go
@@ -75,39 +75,38 @@ func NewRouter(testClient interface{}) *mux.Router {
netcontrolintentHandler := netcontrolintentHandler{
client: setClient(moduleClient.NetControlIntent, testClient).(moduleLib.NetControlIntentManager),
}
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent", netcontrolintentHandler.createHandler).Methods("POST")
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent", netcontrolintentHandler.getHandler).Methods("GET")
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent/{name}", netcontrolintentHandler.putHandler).Methods("PUT")
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent/{name}", netcontrolintentHandler.getHandler).Methods("GET")
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent/{name}", netcontrolintentHandler.deleteHandler).Methods("DELETE")
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent/{name}/apply", netcontrolintentHandler.applyHandler).Methods("POST")
+ router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent", netcontrolintentHandler.createHandler).Methods("POST")
+ router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent", netcontrolintentHandler.getHandler).Methods("GET")
+ router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{name}", netcontrolintentHandler.putHandler).Methods("PUT")
+ router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{name}", netcontrolintentHandler.getHandler).Methods("GET")
+ router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{name}", netcontrolintentHandler.deleteHandler).Methods("DELETE")
workloadintentHandler := workloadintentHandler{
client: setClient(moduleClient.WorkloadIntent, testClient).(moduleLib.WorkloadIntentManager),
}
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent/{net-control-intent}/workload-intents", workloadintentHandler.createHandler).Methods("POST")
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent/{net-control-intent}/workload-intents", workloadintentHandler.getHandler).Methods("GET")
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent/{net-control-intent}/workload-intents/{name}", workloadintentHandler.putHandler).Methods("PUT")
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent/{net-control-intent}/workload-intents/{name}", workloadintentHandler.getHandler).Methods("GET")
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent/{net-control-intent}/workload-intents/{name}", workloadintentHandler.deleteHandler).Methods("DELETE")
+ router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{net-control-intent}/workload-intents", workloadintentHandler.createHandler).Methods("POST")
+ router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{net-control-intent}/workload-intents", workloadintentHandler.getHandler).Methods("GET")
+ router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{net-control-intent}/workload-intents/{name}", workloadintentHandler.putHandler).Methods("PUT")
+ router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{net-control-intent}/workload-intents/{name}", workloadintentHandler.getHandler).Methods("GET")
+ router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{net-control-intent}/workload-intents/{name}", workloadintentHandler.deleteHandler).Methods("DELETE")
workloadifintentHandler := workloadifintentHandler{
client: setClient(moduleClient.WorkloadIfIntent, testClient).(moduleLib.WorkloadIfIntentManager),
}
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent/{net-control-intent}/workload-intents/{workload-intent}/interfaces", workloadifintentHandler.createHandler).Methods("POST")
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent/{net-control-intent}/workload-intents/{workload-intent}/interfaces", workloadifintentHandler.getHandler).Methods("GET")
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent/{net-control-intent}/workload-intents/{workload-intent}/interfaces/{name}", workloadifintentHandler.putHandler).Methods("PUT")
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent/{net-control-intent}/workload-intents/{workload-intent}/interfaces/{name}", workloadifintentHandler.getHandler).Methods("GET")
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent/{net-control-intent}/workload-intents/{workload-intent}/interfaces/{name}", workloadifintentHandler.deleteHandler).Methods("DELETE")
+ router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{net-control-intent}/workload-intents/{workload-intent}/interfaces", workloadifintentHandler.createHandler).Methods("POST")
+ router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{net-control-intent}/workload-intents/{workload-intent}/interfaces", workloadifintentHandler.getHandler).Methods("GET")
+ router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{net-control-intent}/workload-intents/{workload-intent}/interfaces/{name}", workloadifintentHandler.putHandler).Methods("PUT")
+ router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{net-control-intent}/workload-intents/{workload-intent}/interfaces/{name}", workloadifintentHandler.getHandler).Methods("GET")
+ router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{net-control-intent}/workload-intents/{workload-intent}/interfaces/{name}", workloadifintentHandler.deleteHandler).Methods("DELETE")
chainHandler := chainHandler{
client: setClient(moduleClient.Chain, testClient).(moduleLib.ChainManager),
}
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent/{net-control-intent}/network-chains", chainHandler.createHandler).Methods("POST")
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent/{net-control-intent}/network-chains", chainHandler.getHandler).Methods("GET")
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent/{net-control-intent}/network-chains/{name}", chainHandler.putHandler).Methods("PUT")
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent/{net-control-intent}/network-chains/{name}", chainHandler.getHandler).Methods("GET")
- router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/network-controller-intent/{net-control-intent}/network-chains/{name}", chainHandler.deleteHandler).Methods("DELETE")
+ router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{net-control-intent}/network-chains", chainHandler.createHandler).Methods("POST")
+ router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{net-control-intent}/network-chains", chainHandler.getHandler).Methods("GET")
+ router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{net-control-intent}/network-chains/{name}", chainHandler.putHandler).Methods("PUT")
+ router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{net-control-intent}/network-chains/{name}", chainHandler.getHandler).Methods("GET")
+ router.HandleFunc("/projects/{project}/composite-apps/{composite-app-name}/{version}/deployment-intent-groups/{deployment-intent-group-name}/network-controller-intent/{net-control-intent}/network-chains/{name}", chainHandler.deleteHandler).Methods("DELETE")
return router
}
diff --git a/src/ovnaction/api/chainhandler.go b/src/ovnaction/api/chainhandler.go
index 52ed18e5..daf5b2eb 100644
--- a/src/ovnaction/api/chainhandler.go
+++ b/src/ovnaction/api/chainhandler.go
@@ -23,8 +23,8 @@ import (
"net/http"
"strings"
- moduleLib "github.com/onap/multicloud-k8s/src/ovnaction/pkg/module"
"github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/validation"
+ moduleLib "github.com/onap/multicloud-k8s/src/ovnaction/pkg/module"
pkgerrors "github.com/pkg/errors"
"github.com/gorilla/mux"
@@ -141,6 +141,7 @@ func (h chainHandler) createHandler(w http.ResponseWriter, r *http.Request) {
project := vars["project"]
compositeApp := vars["composite-app-name"]
compositeAppVersion := vars["version"]
+ deployIntentGroup := vars["deployment-intent-group-name"]
netControlIntent := vars["net-control-intent"]
err := json.NewDecoder(r.Body).Decode(&ch)
@@ -166,7 +167,7 @@ func (h chainHandler) createHandler(w http.ResponseWriter, r *http.Request) {
return
}
- ret, err := h.client.CreateChain(ch, project, compositeApp, compositeAppVersion, netControlIntent, false)
+ ret, err := h.client.CreateChain(ch, project, compositeApp, compositeAppVersion, deployIntentGroup, netControlIntent, false)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -189,6 +190,7 @@ func (h chainHandler) putHandler(w http.ResponseWriter, r *http.Request) {
project := vars["project"]
compositeApp := vars["composite-app-name"]
compositeAppVersion := vars["version"]
+ deployIntentGroup := vars["deployment-intent-group-name"]
netControlIntent := vars["net-control-intent"]
err := json.NewDecoder(r.Body).Decode(&ch)
@@ -221,7 +223,7 @@ func (h chainHandler) putHandler(w http.ResponseWriter, r *http.Request) {
return
}
- ret, err := h.client.CreateChain(ch, project, compositeApp, compositeAppVersion, netControlIntent, true)
+ ret, err := h.client.CreateChain(ch, project, compositeApp, compositeAppVersion, deployIntentGroup, netControlIntent, true)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -244,18 +246,19 @@ func (h chainHandler) getHandler(w http.ResponseWriter, r *http.Request) {
project := vars["project"]
compositeApp := vars["composite-app-name"]
compositeAppVersion := vars["version"]
+ deployIntentGroup := vars["deployment-intent-group-name"]
netControlIntent := vars["net-control-intent"]
var ret interface{}
var err error
if len(name) == 0 {
- ret, err = h.client.GetChains(project, compositeApp, compositeAppVersion, netControlIntent)
+ ret, err = h.client.GetChains(project, compositeApp, compositeAppVersion, deployIntentGroup, netControlIntent)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
} else {
- ret, err = h.client.GetChain(name, project, compositeApp, compositeAppVersion, netControlIntent)
+ ret, err = h.client.GetChain(name, project, compositeApp, compositeAppVersion, deployIntentGroup, netControlIntent)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -278,9 +281,10 @@ func (h chainHandler) deleteHandler(w http.ResponseWriter, r *http.Request) {
project := vars["project"]
compositeApp := vars["composite-app-name"]
compositeAppVersion := vars["version"]
+ deployIntentGroup := vars["deployment-intent-group-name"]
netControlIntent := vars["net-control-intent"]
- err := h.client.DeleteChain(name, project, compositeApp, compositeAppVersion, netControlIntent)
+ err := h.client.DeleteChain(name, project, compositeApp, compositeAppVersion, deployIntentGroup, netControlIntent)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
diff --git a/src/ovnaction/api/netcontrolintenthandler.go b/src/ovnaction/api/netcontrolintenthandler.go
index 631f13c4..85318ccf 100644
--- a/src/ovnaction/api/netcontrolintenthandler.go
+++ b/src/ovnaction/api/netcontrolintenthandler.go
@@ -22,18 +22,15 @@ import (
"io"
"net/http"
+ "github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/validation"
moduleLib "github.com/onap/multicloud-k8s/src/ovnaction/pkg/module"
pkgerrors "github.com/pkg/errors"
- "github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/validation"
-
"github.com/gorilla/mux"
)
var netCntIntJSONFile string = "json-schemas/metadata.json"
-
-
// Used to store backend implementations objects
// Also simplifies mocking for unit testing purposes
type netcontrolintentHandler struct {
@@ -59,6 +56,7 @@ func (h netcontrolintentHandler) createHandler(w http.ResponseWriter, r *http.Re
project := vars["project"]
compositeApp := vars["composite-app-name"]
compositeAppVersion := vars["version"]
+ deployIntentGroup := vars["deployment-intent-group-name"]
err := json.NewDecoder(r.Body).Decode(&nci)
@@ -72,11 +70,10 @@ func (h netcontrolintentHandler) createHandler(w http.ResponseWriter, r *http.Re
}
err, httpError := validation.ValidateJsonSchemaData(netCntIntJSONFile, nci)
-if err != nil {
- http.Error(w, err.Error(), httpError)
- return
-}
-
+ if err != nil {
+ http.Error(w, err.Error(), httpError)
+ return
+ }
// Name is required.
if nci.Metadata.Name == "" {
@@ -90,7 +87,7 @@ if err != nil {
return
}
- ret, err := h.client.CreateNetControlIntent(nci, project, compositeApp, compositeAppVersion, false)
+ ret, err := h.client.CreateNetControlIntent(nci, project, compositeApp, compositeAppVersion, deployIntentGroup, false)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -113,6 +110,7 @@ func (h netcontrolintentHandler) putHandler(w http.ResponseWriter, r *http.Reque
project := vars["project"]
compositeApp := vars["composite-app-name"]
compositeAppVersion := vars["version"]
+ deployIntentGroup := vars["deployment-intent-group-name"]
err := json.NewDecoder(r.Body).Decode(&nci)
@@ -144,7 +142,7 @@ func (h netcontrolintentHandler) putHandler(w http.ResponseWriter, r *http.Reque
return
}
- ret, err := h.client.CreateNetControlIntent(nci, project, compositeApp, compositeAppVersion, true)
+ ret, err := h.client.CreateNetControlIntent(nci, project, compositeApp, compositeAppVersion, deployIntentGroup, true)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -167,17 +165,18 @@ func (h netcontrolintentHandler) getHandler(w http.ResponseWriter, r *http.Reque
project := vars["project"]
compositeApp := vars["composite-app-name"]
compositeAppVersion := vars["version"]
+ deployIntentGroup := vars["deployment-intent-group-name"]
var ret interface{}
var err error
if len(name) == 0 {
- ret, err = h.client.GetNetControlIntents(project, compositeApp, compositeAppVersion)
+ ret, err = h.client.GetNetControlIntents(project, compositeApp, compositeAppVersion, deployIntentGroup)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
} else {
- ret, err = h.client.GetNetControlIntent(name, project, compositeApp, compositeAppVersion)
+ ret, err = h.client.GetNetControlIntent(name, project, compositeApp, compositeAppVersion, deployIntentGroup)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -200,42 +199,9 @@ func (h netcontrolintentHandler) deleteHandler(w http.ResponseWriter, r *http.Re
project := vars["project"]
compositeApp := vars["composite-app-name"]
compositeAppVersion := vars["version"]
+ deployIntentGroup := vars["deployment-intent-group-name"]
- err := h.client.DeleteNetControlIntent(name, project, compositeApp, compositeAppVersion)
- if err != nil {
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
- }
-
- w.WriteHeader(http.StatusNoContent)
-}
-
-// Apply handles POST operations to Apply a particular NetControlIntent to the App Context
-// TODO: This is a test API - it can be removed once the orchestrator has been implemented to
-// invoke the appcontext update via grpc.
-func (h netcontrolintentHandler) applyHandler(w http.ResponseWriter, r *http.Request) {
- vars := mux.Vars(r)
- name := vars["name"]
- project := vars["project"]
- compositeApp := vars["composite-app-name"]
- compositeAppVersion := vars["version"]
-
- var aci struct {
- AppContextId string `json:"appContextId"`
- }
-
- err := json.NewDecoder(r.Body).Decode(&aci)
-
- switch {
- case err == io.EOF:
- http.Error(w, "Empty body", http.StatusBadRequest)
- return
- case err != nil:
- http.Error(w, err.Error(), http.StatusUnprocessableEntity)
- return
- }
-
- err = h.client.ApplyNetControlIntent(name, project, compositeApp, compositeAppVersion, aci.AppContextId)
+ err := h.client.DeleteNetControlIntent(name, project, compositeApp, compositeAppVersion, deployIntentGroup)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
diff --git a/src/ovnaction/api/workloadifintenthandler.go b/src/ovnaction/api/workloadifintenthandler.go
index e7be6317..5c396378 100644
--- a/src/ovnaction/api/workloadifintenthandler.go
+++ b/src/ovnaction/api/workloadifintenthandler.go
@@ -22,8 +22,8 @@ import (
"io"
"net/http"
- moduleLib "github.com/onap/multicloud-k8s/src/ovnaction/pkg/module"
"github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/validation"
+ moduleLib "github.com/onap/multicloud-k8s/src/ovnaction/pkg/module"
pkgerrors "github.com/pkg/errors"
"github.com/gorilla/mux"
@@ -90,6 +90,7 @@ func (h workloadifintentHandler) createHandler(w http.ResponseWriter, r *http.Re
project := vars["project"]
compositeApp := vars["composite-app-name"]
compositeAppVersion := vars["version"]
+ deployIntentGroup := vars["deployment-intent-group-name"]
netControlIntent := vars["net-control-intent"]
workloadIntent := vars["workload-intent"]
@@ -105,10 +106,10 @@ func (h workloadifintentHandler) createHandler(w http.ResponseWriter, r *http.Re
}
err, httpError := validation.ValidateJsonSchemaData(netIfJSONFile, wif)
-if err != nil {
- http.Error(w, err.Error(), httpError)
- return
-}
+ if err != nil {
+ http.Error(w, err.Error(), httpError)
+ return
+ }
// Name is required.
if wif.Metadata.Name == "" {
@@ -127,7 +128,7 @@ if err != nil {
return
}
- ret, err := h.client.CreateWorkloadIfIntent(wif, project, compositeApp, compositeAppVersion, netControlIntent, workloadIntent, false)
+ ret, err := h.client.CreateWorkloadIfIntent(wif, project, compositeApp, compositeAppVersion, deployIntentGroup, netControlIntent, workloadIntent, false)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -150,6 +151,7 @@ func (h workloadifintentHandler) putHandler(w http.ResponseWriter, r *http.Reque
project := vars["project"]
compositeApp := vars["composite-app-name"]
compositeAppVersion := vars["version"]
+ deployIntentGroup := vars["deployment-intent-group-name"]
netControlIntent := vars["net-control-intent"]
workloadIntent := vars["workload-intent"]
@@ -188,7 +190,7 @@ func (h workloadifintentHandler) putHandler(w http.ResponseWriter, r *http.Reque
return
}
- ret, err := h.client.CreateWorkloadIfIntent(wif, project, compositeApp, compositeAppVersion, netControlIntent, workloadIntent, true)
+ ret, err := h.client.CreateWorkloadIfIntent(wif, project, compositeApp, compositeAppVersion, deployIntentGroup, netControlIntent, workloadIntent, true)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -211,19 +213,20 @@ func (h workloadifintentHandler) getHandler(w http.ResponseWriter, r *http.Reque
project := vars["project"]
compositeApp := vars["composite-app-name"]
compositeAppVersion := vars["version"]
+ deployIntentGroup := vars["deployment-intent-group-name"]
netControlIntent := vars["net-control-intent"]
workloadIntent := vars["workload-intent"]
var ret interface{}
var err error
if len(name) == 0 {
- ret, err = h.client.GetWorkloadIfIntents(project, compositeApp, compositeAppVersion, netControlIntent, workloadIntent)
+ ret, err = h.client.GetWorkloadIfIntents(project, compositeApp, compositeAppVersion, deployIntentGroup, netControlIntent, workloadIntent)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
} else {
- ret, err = h.client.GetWorkloadIfIntent(name, project, compositeApp, compositeAppVersion, netControlIntent, workloadIntent)
+ ret, err = h.client.GetWorkloadIfIntent(name, project, compositeApp, compositeAppVersion, deployIntentGroup, netControlIntent, workloadIntent)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -246,10 +249,11 @@ func (h workloadifintentHandler) deleteHandler(w http.ResponseWriter, r *http.Re
project := vars["project"]
compositeApp := vars["composite-app-name"]
compositeAppVersion := vars["version"]
+ deployIntentGroup := vars["deployment-intent-group-name"]
netControlIntent := vars["net-control-intent"]
workloadIntent := vars["workload-intent"]
- err := h.client.DeleteWorkloadIfIntent(name, project, compositeApp, compositeAppVersion, netControlIntent, workloadIntent)
+ err := h.client.DeleteWorkloadIfIntent(name, project, compositeApp, compositeAppVersion, deployIntentGroup, netControlIntent, workloadIntent)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
diff --git a/src/ovnaction/api/workloadintenthandler.go b/src/ovnaction/api/workloadintenthandler.go
index acf4edbb..485f6f40 100644
--- a/src/ovnaction/api/workloadintenthandler.go
+++ b/src/ovnaction/api/workloadintenthandler.go
@@ -22,8 +22,8 @@ import (
"io"
"net/http"
- moduleLib "github.com/onap/multicloud-k8s/src/ovnaction/pkg/module"
"github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/validation"
+ moduleLib "github.com/onap/multicloud-k8s/src/ovnaction/pkg/module"
pkgerrors "github.com/pkg/errors"
"github.com/gorilla/mux"
@@ -71,6 +71,7 @@ func (h workloadintentHandler) createHandler(w http.ResponseWriter, r *http.Requ
project := vars["project"]
compositeApp := vars["composite-app-name"]
compositeAppVersion := vars["version"]
+ deployIntentGroup := vars["deployment-intent-group-name"]
netControlIntent := vars["net-control-intent"]
err := json.NewDecoder(r.Body).Decode(&wi)
@@ -85,10 +86,10 @@ func (h workloadintentHandler) createHandler(w http.ResponseWriter, r *http.Requ
}
err, httpError := validation.ValidateJsonSchemaData(workloadIntJSONFile, wi)
-if err != nil {
- http.Error(w, err.Error(), httpError)
- return
-}
+ if err != nil {
+ http.Error(w, err.Error(), httpError)
+ return
+ }
// Name is required.
if wi.Metadata.Name == "" {
@@ -102,7 +103,7 @@ if err != nil {
return
}
- ret, err := h.client.CreateWorkloadIntent(wi, project, compositeApp, compositeAppVersion, netControlIntent, false)
+ ret, err := h.client.CreateWorkloadIntent(wi, project, compositeApp, compositeAppVersion, deployIntentGroup, netControlIntent, false)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -125,6 +126,7 @@ func (h workloadintentHandler) putHandler(w http.ResponseWriter, r *http.Request
project := vars["project"]
compositeApp := vars["composite-app-name"]
compositeAppVersion := vars["version"]
+ deployIntentGroup := vars["deployment-intent-group-name"]
netControlIntent := vars["net-control-intent"]
err := json.NewDecoder(r.Body).Decode(&wi)
@@ -157,7 +159,7 @@ func (h workloadintentHandler) putHandler(w http.ResponseWriter, r *http.Request
return
}
- ret, err := h.client.CreateWorkloadIntent(wi, project, compositeApp, compositeAppVersion, netControlIntent, true)
+ ret, err := h.client.CreateWorkloadIntent(wi, project, compositeApp, compositeAppVersion, deployIntentGroup, netControlIntent, true)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -180,18 +182,19 @@ func (h workloadintentHandler) getHandler(w http.ResponseWriter, r *http.Request
project := vars["project"]
compositeApp := vars["composite-app-name"]
compositeAppVersion := vars["version"]
+ deployIntentGroup := vars["deployment-intent-group-name"]
netControlIntent := vars["net-control-intent"]
var ret interface{}
var err error
if len(name) == 0 {
- ret, err = h.client.GetWorkloadIntents(project, compositeApp, compositeAppVersion, netControlIntent)
+ ret, err = h.client.GetWorkloadIntents(project, compositeApp, compositeAppVersion, deployIntentGroup, netControlIntent)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
} else {
- ret, err = h.client.GetWorkloadIntent(name, project, compositeApp, compositeAppVersion, netControlIntent)
+ ret, err = h.client.GetWorkloadIntent(name, project, compositeApp, compositeAppVersion, deployIntentGroup, netControlIntent)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
@@ -214,9 +217,10 @@ func (h workloadintentHandler) deleteHandler(w http.ResponseWriter, r *http.Requ
project := vars["project"]
compositeApp := vars["composite-app-name"]
compositeAppVersion := vars["version"]
+ deployIntentGroup := vars["deployment-intent-group-name"]
netControlIntent := vars["net-control-intent"]
- err := h.client.DeleteWorkloadIntent(name, project, compositeApp, compositeAppVersion, netControlIntent)
+ err := h.client.DeleteWorkloadIntent(name, project, compositeApp, compositeAppVersion, deployIntentGroup, netControlIntent)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
diff --git a/src/ovnaction/internal/action/action.go b/src/ovnaction/internal/action/action.go
index c9b912fa..ae04cb0f 100644
--- a/src/ovnaction/internal/action/action.go
+++ b/src/ovnaction/internal/action/action.go
@@ -47,11 +47,12 @@ func UpdateAppContext(intentName, appContextId string) error {
project := caMeta.Project
compositeapp := caMeta.CompositeApp
compositeappversion := caMeta.Version
+ deployIntentGroup := caMeta.DeploymentIntentGroup
// Handle all Workload Intents for the Network Control Intent
- wis, err := module.NewWorkloadIntentClient().GetWorkloadIntents(project, compositeapp, compositeappversion, intentName)
+ wis, err := module.NewWorkloadIntentClient().GetWorkloadIntents(project, compositeapp, compositeappversion, deployIntentGroup, intentName)
if err != nil {
- return pkgerrors.Wrapf(err, "Error getting Workload Intents for Network Control Intent %v for %v/%v%v not found", intentName, project, compositeapp, compositeappversion)
+ return pkgerrors.Wrapf(err, "Error getting Workload Intents for Network Control Intent %v for %v/%v%v/%v not found", intentName, project, compositeapp, deployIntentGroup, compositeappversion)
}
// Handle all intents (currently just Workload Interface intents) for each Workload Intent
@@ -66,20 +67,22 @@ func UpdateAppContext(intentName, appContextId string) error {
wifs, err := module.NewWorkloadIfIntentClient().GetWorkloadIfIntents(project,
compositeapp,
compositeappversion,
+ deployIntentGroup,
intentName,
wi.Metadata.Name)
if err != nil {
return pkgerrors.Wrapf(err,
- "Error getting Workload Interface Intents for Workload Intent %v under Network Control Intent %v for %v/%v%v not found",
- wi.Metadata.Name, intentName, project, compositeapp, compositeappversion)
+ "Error getting Workload Interface Intents for Workload Intent %v under Network Control Intent %v for %v/%v%v/%v not found",
+ wi.Metadata.Name, intentName, project, compositeapp, compositeappversion, deployIntentGroup)
}
if len(wifs) == 0 {
log.Warn("No interface intents provided for workload intent", log.Fields{
- "project": project,
- "composite app": compositeapp,
- "composite app version": compositeappversion,
- "network control intent": intentName,
- "workload intent": wi.Metadata.Name,
+ "project": project,
+ "composite app": compositeapp,
+ "composite app version": compositeappversion,
+ "deployment intent group": deployIntentGroup,
+ "network control intent": intentName,
+ "workload intent": wi.Metadata.Name,
})
continue
}
@@ -91,14 +94,15 @@ func UpdateAppContext(intentName, appContextId string) error {
strings.Join([]string{wi.Spec.WorkloadResource, wi.Spec.Type}, "+"))
if err != nil {
log.Warn("App Context resource handle not found", log.Fields{
- "project": project,
- "composite app": compositeapp,
- "composite app version": compositeappversion,
- "network control intent": intentName,
- "workload name": wi.Metadata.Name,
- "app": wi.Spec.AppName,
- "resource": wi.Spec.WorkloadResource,
- "resource type": wi.Spec.Type,
+ "project": project,
+ "composite app": compositeapp,
+ "composite app version": compositeappversion,
+ "deployment intent group": deployIntentGroup,
+ "network control intent": intentName,
+ "workload name": wi.Metadata.Name,
+ "app": wi.Spec.AppName,
+ "resource": wi.Spec.WorkloadResource,
+ "resource type": wi.Spec.Type,
})
continue
}
diff --git a/src/ovnaction/pkg/module/chaining.go b/src/ovnaction/pkg/module/chaining.go
index 45f061fa..bc2cac00 100644
--- a/src/ovnaction/pkg/module/chaining.go
+++ b/src/ovnaction/pkg/module/chaining.go
@@ -54,6 +54,7 @@ type ChainKey struct {
Project string `json:"project"`
CompositeApp string `json:"compositeapp"`
CompositeAppVersion string `json:"compositeappversion"`
+ DigName string `json:"deploymentintentgroup"`
NetControlIntent string `json:"netcontrolintent"`
NetworkChain string `json:"networkchain"`
}
@@ -76,10 +77,10 @@ const ChainingKind = "NetworkChaining"
// ChainManager is an interface exposing the Chain functionality
type ChainManager interface {
- CreateChain(ch Chain, pr, ca, caver, netctrlint string, exists bool) (Chain, error)
- GetChain(name, pr, ca, caver, netctrlint string) (Chain, error)
- GetChains(pr, ca, caver, netctrlint string) ([]Chain, error)
- DeleteChain(name, pr, ca, caver, netctrlint string) error
+ CreateChain(ch Chain, pr, ca, caver, dig, netctrlint string, exists bool) (Chain, error)
+ GetChain(name, pr, ca, caver, dig, netctrlint string) (Chain, error)
+ GetChains(pr, ca, caver, dig, netctrlint string) ([]Chain, error)
+ DeleteChain(name, pr, ca, caver, dig, netctrlint string) error
}
// ChainClient implements the Manager
@@ -100,24 +101,25 @@ func NewChainClient() *ChainClient {
}
// CreateChain - create a new Chain
-func (v *ChainClient) CreateChain(ch Chain, pr, ca, caver, netctrlint string, exists bool) (Chain, error) {
+func (v *ChainClient) CreateChain(ch Chain, pr, ca, caver, dig, netctrlint string, exists bool) (Chain, error) {
//Construct key and tag to select the entry
key := ChainKey{
Project: pr,
CompositeApp: ca,
CompositeAppVersion: caver,
+ DigName: dig,
NetControlIntent: netctrlint,
NetworkChain: ch.Metadata.Name,
}
//Check if the Network Control Intent exists
- _, err := NewNetControlIntentClient().GetNetControlIntent(netctrlint, pr, ca, caver)
+ _, err := NewNetControlIntentClient().GetNetControlIntent(netctrlint, pr, ca, caver, dig)
if err != nil {
return Chain{}, pkgerrors.Errorf("Network Control Intent %v does not exist", netctrlint)
}
//Check if this Chain already exists
- _, err = v.GetChain(ch.Metadata.Name, pr, ca, caver, netctrlint)
+ _, err = v.GetChain(ch.Metadata.Name, pr, ca, caver, dig, netctrlint)
if err == nil && !exists {
return Chain{}, pkgerrors.New("Chain already exists")
}
@@ -131,12 +133,13 @@ func (v *ChainClient) CreateChain(ch Chain, pr, ca, caver, netctrlint string, ex
}
// GetChain returns the Chain for corresponding name
-func (v *ChainClient) GetChain(name, pr, ca, caver, netctrlint string) (Chain, error) {
+func (v *ChainClient) GetChain(name, pr, ca, caver, dig, netctrlint string) (Chain, error) {
//Construct key and tag to select the entry
key := ChainKey{
Project: pr,
CompositeApp: ca,
CompositeAppVersion: caver,
+ DigName: dig,
NetControlIntent: netctrlint,
NetworkChain: name,
}
@@ -160,12 +163,13 @@ func (v *ChainClient) GetChain(name, pr, ca, caver, netctrlint string) (Chain, e
}
// GetChains returns all of the Chains for for the given network control intent
-func (v *ChainClient) GetChains(pr, ca, caver, netctrlint string) ([]Chain, error) {
+func (v *ChainClient) GetChains(pr, ca, caver, dig, netctrlint string) ([]Chain, error) {
//Construct key and tag to select the entry
key := ChainKey{
Project: pr,
CompositeApp: ca,
CompositeAppVersion: caver,
+ DigName: dig,
NetControlIntent: netctrlint,
NetworkChain: "",
}
@@ -189,13 +193,14 @@ func (v *ChainClient) GetChains(pr, ca, caver, netctrlint string) ([]Chain, erro
}
// DeleteChain deletes the Chain from the database
-func (v *ChainClient) DeleteChain(name, pr, ca, caver, netctrlint string) error {
+func (v *ChainClient) DeleteChain(name, pr, ca, caver, dig, netctrlint string) error {
//Construct key and tag to select the entry
key := ChainKey{
Project: pr,
CompositeApp: ca,
CompositeAppVersion: caver,
+ DigName: dig,
NetControlIntent: netctrlint,
NetworkChain: name,
}
diff --git a/src/ovnaction/pkg/module/netcontrolintent.go b/src/ovnaction/pkg/module/netcontrolintent.go
index c005a935..eada4be1 100644
--- a/src/ovnaction/pkg/module/netcontrolintent.go
+++ b/src/ovnaction/pkg/module/netcontrolintent.go
@@ -17,17 +17,7 @@
package module
import (
- "encoding/json"
- "strings"
-
- jyaml "github.com/ghodss/yaml"
-
- nettypes "github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/apis/k8s.cni.cncf.io/v1"
- "github.com/onap/multicloud-k8s/src/orchestrator/pkg/appcontext"
"github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/db"
- log "github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/logutils"
- "k8s.io/apimachinery/pkg/runtime"
- "k8s.io/client-go/kubernetes/scheme"
pkgerrors "github.com/pkg/errors"
)
@@ -43,15 +33,15 @@ type NetControlIntentKey struct {
Project string `json:"project"`
CompositeApp string `json:"compositeapp"`
CompositeAppVersion string `json:"compositeappversion"`
+ DigName string `json:"deploymentintentgroup"`
}
// Manager is an interface exposing the NetControlIntent functionality
type NetControlIntentManager interface {
- CreateNetControlIntent(nci NetControlIntent, project, compositeapp, compositeappversion string, exists bool) (NetControlIntent, error)
- GetNetControlIntent(name, project, compositeapp, compositeappversion string) (NetControlIntent, error)
- GetNetControlIntents(project, compositeapp, compositeappversion string) ([]NetControlIntent, error)
- DeleteNetControlIntent(name, project, compositeapp, compositeappversion string) error
- ApplyNetControlIntent(name, project, compositeapp, compositeappversion, appContextId string) error
+ CreateNetControlIntent(nci NetControlIntent, project, compositeapp, compositeappversion, dig string, exists bool) (NetControlIntent, error)
+ GetNetControlIntent(name, project, compositeapp, compositeappversion, dig string) (NetControlIntent, error)
+ GetNetControlIntents(project, compositeapp, compositeappversion, dig string) ([]NetControlIntent, error)
+ DeleteNetControlIntent(name, project, compositeapp, compositeappversion, dig string) error
}
// NetControlIntentClient implements the Manager
@@ -72,7 +62,7 @@ func NewNetControlIntentClient() *NetControlIntentClient {
}
// CreateNetControlIntent - create a new NetControlIntent
-func (v *NetControlIntentClient) CreateNetControlIntent(nci NetControlIntent, project, compositeapp, compositeappversion string, exists bool) (NetControlIntent, error) {
+func (v *NetControlIntentClient) CreateNetControlIntent(nci NetControlIntent, project, compositeapp, compositeappversion, dig string, exists bool) (NetControlIntent, error) {
//Construct key and tag to select the entry
key := NetControlIntentKey{
@@ -80,10 +70,11 @@ func (v *NetControlIntentClient) CreateNetControlIntent(nci NetControlIntent, pr
Project: project,
CompositeApp: compositeapp,
CompositeAppVersion: compositeappversion,
+ DigName: dig,
}
//Check if this NetControlIntent already exists
- _, err := v.GetNetControlIntent(nci.Metadata.Name, project, compositeapp, compositeappversion)
+ _, err := v.GetNetControlIntent(nci.Metadata.Name, project, compositeapp, compositeappversion, dig)
if err == nil && !exists {
return NetControlIntent{}, pkgerrors.New("NetControlIntent already exists")
}
@@ -97,7 +88,7 @@ func (v *NetControlIntentClient) CreateNetControlIntent(nci NetControlIntent, pr
}
// GetNetControlIntent returns the NetControlIntent for corresponding name
-func (v *NetControlIntentClient) GetNetControlIntent(name, project, compositeapp, compositeappversion string) (NetControlIntent, error) {
+func (v *NetControlIntentClient) GetNetControlIntent(name, project, compositeapp, compositeappversion, dig string) (NetControlIntent, error) {
//Construct key and tag to select the entry
key := NetControlIntentKey{
@@ -105,6 +96,7 @@ func (v *NetControlIntentClient) GetNetControlIntent(name, project, compositeapp
Project: project,
CompositeApp: compositeapp,
CompositeAppVersion: compositeappversion,
+ DigName: dig,
}
value, err := db.DBconn.Find(v.db.storeName, key, v.db.tagMeta)
@@ -126,7 +118,7 @@ func (v *NetControlIntentClient) GetNetControlIntent(name, project, compositeapp
}
// GetNetControlIntentList returns all of the NetControlIntent for corresponding name
-func (v *NetControlIntentClient) GetNetControlIntents(project, compositeapp, compositeappversion string) ([]NetControlIntent, error) {
+func (v *NetControlIntentClient) GetNetControlIntents(project, compositeapp, compositeappversion, dig string) ([]NetControlIntent, error) {
//Construct key and tag to select the entry
key := NetControlIntentKey{
@@ -134,6 +126,7 @@ func (v *NetControlIntentClient) GetNetControlIntents(project, compositeapp, com
Project: project,
CompositeApp: compositeapp,
CompositeAppVersion: compositeappversion,
+ DigName: dig,
}
var resp []NetControlIntent
@@ -155,7 +148,7 @@ func (v *NetControlIntentClient) GetNetControlIntents(project, compositeapp, com
}
// Delete the NetControlIntent from database
-func (v *NetControlIntentClient) DeleteNetControlIntent(name, project, compositeapp, compositeappversion string) error {
+func (v *NetControlIntentClient) DeleteNetControlIntent(name, project, compositeapp, compositeappversion, dig string) error {
//Construct key and tag to select the entry
key := NetControlIntentKey{
@@ -163,6 +156,7 @@ func (v *NetControlIntentClient) DeleteNetControlIntent(name, project, composite
Project: project,
CompositeApp: compositeapp,
CompositeAppVersion: compositeappversion,
+ DigName: dig,
}
err := db.DBconn.Remove(v.db.storeName, key)
@@ -172,124 +166,3 @@ func (v *NetControlIntentClient) DeleteNetControlIntent(name, project, composite
return nil
}
-
-// (Test Routine) - Apply network-control-intent
-func (v *NetControlIntentClient) ApplyNetControlIntent(name, project, compositeapp, compositeappversion, appContextId string) error {
- // TODO: Handle all Network Chain Intents for the Network Control Intent
-
- // Handle all Workload Intents for the Network Control Intent
- wis, err := NewWorkloadIntentClient().GetWorkloadIntents(project, compositeapp, compositeappversion, name)
- if err != nil {
- return pkgerrors.Wrapf(err, "Error getting Workload Intents for Network Control Intent %v for %v/%v%v not found", name, project, compositeapp, compositeappversion)
- }
-
- // Setup the AppContext
- var context appcontext.AppContext
- _, err = context.LoadAppContext(appContextId)
- if err != nil {
- return pkgerrors.Wrapf(err, "Error getting AppContext with Id: %v for %v/%v%v",
- appContextId, project, compositeapp, compositeappversion)
- }
-
- // Handle all intents (currently just Interface intents) for each Workload Intent
- for _, wi := range wis {
- // The app/resource identified in the workload intent needs to be updated with two annotations.
- // 1 - The "k8s.v1.cni.cncf.io/networks" annotation will have {"name": "ovn-networkobj", "namespace": "default"} added
- // to it (preserving any existing values for this annotation.
- // 2 - The "k8s.plugin.opnfv.org/nfn-network" annotation will add any network interfaces that are provided by the
- // workload/interfaces intents.
-
- // Prepare the list of interfaces from the workload intent
- wifs, err := NewWorkloadIfIntentClient().GetWorkloadIfIntents(project,
- compositeapp,
- compositeappversion,
- name,
- wi.Metadata.Name)
- if err != nil {
- return pkgerrors.Wrapf(err,
- "Error getting Workload Interface Intents for Workload Intent %v under Network Control Intent %v for %v/%v%v not found",
- wi.Metadata.Name, name, project, compositeapp, compositeappversion)
- }
- if len(wifs) == 0 {
- log.Warn("No interface intents provided for workload intent", log.Fields{
- "project": project,
- "composite app": compositeapp,
- "composite app version": compositeappversion,
- "network control intent": name,
- "workload intent": wi.Metadata.Name,
- })
- continue
- }
-
- // Get all clusters for the current App from the AppContext
- clusters, err := context.GetClusterNames(wi.Spec.AppName)
- for _, c := range clusters {
- rh, err := context.GetResourceHandle(wi.Spec.AppName, c,
- strings.Join([]string{wi.Spec.WorkloadResource, wi.Spec.Type}, "+"))
- if err != nil {
- log.Warn("App Context resource handle not found", log.Fields{
- "project": project,
- "composite app": compositeapp,
- "composite app version": compositeappversion,
- "network control intent": name,
- "workload name": wi.Metadata.Name,
- "app": wi.Spec.AppName,
- "resource": wi.Spec.WorkloadResource,
- "resource type": wi.Spec.Type,
- })
- continue
- }
- r, err := context.GetValue(rh)
- if err != nil {
- log.Error("Error retrieving resource from App Context", log.Fields{
- "error": err,
- "resource handle": rh,
- })
- }
-
- // Unmarshal resource to K8S object
- robj, err := runtime.Decode(scheme.Codecs.UniversalDeserializer(), []byte(r.(string)))
-
- // Add network annotation to object
- netAnnot := nettypes.NetworkSelectionElement{
- Name: "ovn-networkobj",
- Namespace: "default",
- }
- AddNetworkAnnotation(robj, netAnnot)
-
- // Add nfn interface annotations to object
- var newNfnIfs []WorkloadIfIntentSpec
- for _, i := range wifs {
- newNfnIfs = append(newNfnIfs, i.Spec)
- }
- AddNfnAnnotation(robj, newNfnIfs)
-
- // Marshal object back to yaml format (via json - seems to eliminate most clutter)
- j, err := json.Marshal(robj)
- if err != nil {
- log.Error("Error marshalling resource to JSON", log.Fields{
- "error": err,
- })
- continue
- }
- y, err := jyaml.JSONToYAML(j)
- if err != nil {
- log.Error("Error marshalling resource to YAML", log.Fields{
- "error": err,
- })
- continue
- }
-
- // Update resource in AppContext
- err = context.UpdateResourceValue(rh, string(y))
- if err != nil {
- log.Error("Network updating app context resource handle", log.Fields{
- "error": err,
- "resource handle": rh,
- })
- }
- }
- }
-
- return nil
-}
diff --git a/src/ovnaction/pkg/module/workloadifintent.go b/src/ovnaction/pkg/module/workloadifintent.go
index 55062564..cea336f6 100644
--- a/src/ovnaction/pkg/module/workloadifintent.go
+++ b/src/ovnaction/pkg/module/workloadifintent.go
@@ -41,6 +41,7 @@ type WorkloadIfIntentKey struct {
Project string `json:"provider"`
CompositeApp string `json:"compositeapp"`
CompositeAppVersion string `json:"compositeappversion"`
+ DigName string `json:"deploymentintentgroup"`
NetControlIntent string `json:"netcontrolintent"`
WorkloadIntent string `json:"workloadintent"`
WorkloadIfIntent string `json:"workloadifintent"`
@@ -48,10 +49,10 @@ type WorkloadIfIntentKey struct {
// Manager is an interface exposing the WorkloadIfIntent functionality
type WorkloadIfIntentManager interface {
- CreateWorkloadIfIntent(wi WorkloadIfIntent, project, compositeapp, compositeappversion, netcontrolintent, workloadintent string, exists bool) (WorkloadIfIntent, error)
- GetWorkloadIfIntent(name, project, compositeapp, compositeappversion, netcontrolintent, workloadintent string) (WorkloadIfIntent, error)
- GetWorkloadIfIntents(project, compositeapp, compositeappversion, netcontrolintent, workloadintent string) ([]WorkloadIfIntent, error)
- DeleteWorkloadIfIntent(name, project, compositeapp, compositeappversion, netcontrolintent, workloadintent string) error
+ CreateWorkloadIfIntent(wi WorkloadIfIntent, project, compositeapp, compositeappversion, dig, netcontrolintent, workloadintent string, exists bool) (WorkloadIfIntent, error)
+ GetWorkloadIfIntent(name, project, compositeapp, compositeappversion, dig, netcontrolintent, workloadintent string) (WorkloadIfIntent, error)
+ GetWorkloadIfIntents(project, compositeapp, compositeappversion, dig, netcontrolintent, workloadintent string) ([]WorkloadIfIntent, error)
+ DeleteWorkloadIfIntent(name, project, compositeapp, compositeappversion, dig, netcontrolintent, workloadintent string) error
}
// WorkloadIfIntentClient implements the Manager
@@ -72,26 +73,27 @@ func NewWorkloadIfIntentClient() *WorkloadIfIntentClient {
}
// CreateWorkloadIfIntent - create a new WorkloadIfIntent
-func (v *WorkloadIfIntentClient) CreateWorkloadIfIntent(wif WorkloadIfIntent, project, compositeapp, compositeappversion, netcontrolintent, workloadintent string, exists bool) (WorkloadIfIntent, error) {
+func (v *WorkloadIfIntentClient) CreateWorkloadIfIntent(wif WorkloadIfIntent, project, compositeapp, compositeappversion, dig, netcontrolintent, workloadintent string, exists bool) (WorkloadIfIntent, error) {
//Construct key and tag to select the entry
key := WorkloadIfIntentKey{
Project: project,
CompositeApp: compositeapp,
CompositeAppVersion: compositeappversion,
+ DigName: dig,
NetControlIntent: netcontrolintent,
WorkloadIntent: workloadintent,
WorkloadIfIntent: wif.Metadata.Name,
}
//Check if the Workload Intent exists
- _, err := NewWorkloadIntentClient().GetWorkloadIntent(workloadintent, project, compositeapp, compositeappversion, netcontrolintent)
+ _, err := NewWorkloadIntentClient().GetWorkloadIntent(workloadintent, project, compositeapp, compositeappversion, dig, netcontrolintent)
if err != nil {
return WorkloadIfIntent{}, pkgerrors.Errorf("Workload Intent %v does not exist", workloadintent)
}
//Check if this WorkloadIfIntent already exists
- _, err = v.GetWorkloadIfIntent(wif.Metadata.Name, project, compositeapp, compositeappversion, netcontrolintent, workloadintent)
+ _, err = v.GetWorkloadIfIntent(wif.Metadata.Name, project, compositeapp, compositeappversion, dig, netcontrolintent, workloadintent)
if err == nil && !exists {
return WorkloadIfIntent{}, pkgerrors.New("WorkloadIfIntent already exists")
}
@@ -105,13 +107,14 @@ func (v *WorkloadIfIntentClient) CreateWorkloadIfIntent(wif WorkloadIfIntent, pr
}
// GetWorkloadIfIntent returns the WorkloadIfIntent for corresponding name
-func (v *WorkloadIfIntentClient) GetWorkloadIfIntent(name, project, compositeapp, compositeappversion, netcontrolintent, workloadintent string) (WorkloadIfIntent, error) {
+func (v *WorkloadIfIntentClient) GetWorkloadIfIntent(name, project, compositeapp, compositeappversion, dig, netcontrolintent, workloadintent string) (WorkloadIfIntent, error) {
//Construct key and tag to select the entry
key := WorkloadIfIntentKey{
Project: project,
CompositeApp: compositeapp,
CompositeAppVersion: compositeappversion,
+ DigName: dig,
NetControlIntent: netcontrolintent,
WorkloadIntent: workloadintent,
WorkloadIfIntent: name,
@@ -136,13 +139,14 @@ func (v *WorkloadIfIntentClient) GetWorkloadIfIntent(name, project, compositeapp
}
// GetWorkloadIfIntentList returns all of the WorkloadIfIntent for corresponding name
-func (v *WorkloadIfIntentClient) GetWorkloadIfIntents(project, compositeapp, compositeappversion, netcontrolintent, workloadintent string) ([]WorkloadIfIntent, error) {
+func (v *WorkloadIfIntentClient) GetWorkloadIfIntents(project, compositeapp, compositeappversion, dig, netcontrolintent, workloadintent string) ([]WorkloadIfIntent, error) {
//Construct key and tag to select the entry
key := WorkloadIfIntentKey{
Project: project,
CompositeApp: compositeapp,
CompositeAppVersion: compositeappversion,
+ DigName: dig,
NetControlIntent: netcontrolintent,
WorkloadIntent: workloadintent,
WorkloadIfIntent: "",
@@ -167,13 +171,14 @@ func (v *WorkloadIfIntentClient) GetWorkloadIfIntents(project, compositeapp, com
}
// Delete the WorkloadIfIntent from database
-func (v *WorkloadIfIntentClient) DeleteWorkloadIfIntent(name, project, compositeapp, compositeappversion, netcontrolintent, workloadintent string) error {
+func (v *WorkloadIfIntentClient) DeleteWorkloadIfIntent(name, project, compositeapp, compositeappversion, dig, netcontrolintent, workloadintent string) error {
//Construct key and tag to select the entry
key := WorkloadIfIntentKey{
Project: project,
CompositeApp: compositeapp,
CompositeAppVersion: compositeappversion,
+ DigName: dig,
NetControlIntent: netcontrolintent,
WorkloadIntent: workloadintent,
WorkloadIfIntent: name,
diff --git a/src/ovnaction/pkg/module/workloadintent.go b/src/ovnaction/pkg/module/workloadintent.go
index e6916954..b1ca9d02 100644
--- a/src/ovnaction/pkg/module/workloadintent.go
+++ b/src/ovnaction/pkg/module/workloadintent.go
@@ -39,16 +39,17 @@ type WorkloadIntentKey struct {
Project string `json:"provider"`
CompositeApp string `json:"compositeapp"`
CompositeAppVersion string `json:"compositeappversion"`
+ DigName string `json:"deploymentintentgroup"`
NetControlIntent string `json:"netcontrolintent"`
WorkloadIntent string `json:"workloadintent"`
}
// Manager is an interface exposing the WorkloadIntent functionality
type WorkloadIntentManager interface {
- CreateWorkloadIntent(wi WorkloadIntent, project, compositeapp, compositeappversion, netcontrolintent string, exists bool) (WorkloadIntent, error)
- GetWorkloadIntent(name, project, compositeapp, compositeappversion, netcontrolintent string) (WorkloadIntent, error)
- GetWorkloadIntents(project, compositeapp, compositeappversion, netcontrolintent string) ([]WorkloadIntent, error)
- DeleteWorkloadIntent(name, project, compositeapp, compositeappversion, netcontrolintent string) error
+ CreateWorkloadIntent(wi WorkloadIntent, project, compositeapp, compositeappversion, dig, netcontrolintent string, exists bool) (WorkloadIntent, error)
+ GetWorkloadIntent(name, project, compositeapp, compositeappversion, dig, netcontrolintent string) (WorkloadIntent, error)
+ GetWorkloadIntents(project, compositeapp, compositeappversion, dig, netcontrolintent string) ([]WorkloadIntent, error)
+ DeleteWorkloadIntent(name, project, compositeapp, compositeappversion, dig, netcontrolintent string) error
}
// WorkloadIntentClient implements the Manager
@@ -69,25 +70,26 @@ func NewWorkloadIntentClient() *WorkloadIntentClient {
}
// CreateWorkloadIntent - create a new WorkloadIntent
-func (v *WorkloadIntentClient) CreateWorkloadIntent(wi WorkloadIntent, project, compositeapp, compositeappversion, netcontrolintent string, exists bool) (WorkloadIntent, error) {
+func (v *WorkloadIntentClient) CreateWorkloadIntent(wi WorkloadIntent, project, compositeapp, compositeappversion, dig, netcontrolintent string, exists bool) (WorkloadIntent, error) {
//Construct key and tag to select the entry
key := WorkloadIntentKey{
Project: project,
CompositeApp: compositeapp,
CompositeAppVersion: compositeappversion,
+ DigName: dig,
NetControlIntent: netcontrolintent,
WorkloadIntent: wi.Metadata.Name,
}
//Check if the Network Control Intent exists
- _, err := NewNetControlIntentClient().GetNetControlIntent(netcontrolintent, project, compositeapp, compositeappversion)
+ _, err := NewNetControlIntentClient().GetNetControlIntent(netcontrolintent, project, compositeapp, compositeappversion, dig)
if err != nil {
return WorkloadIntent{}, pkgerrors.Errorf("Network Control Intent %v does not exist", netcontrolintent)
}
//Check if this WorkloadIntent already exists
- _, err = v.GetWorkloadIntent(wi.Metadata.Name, project, compositeapp, compositeappversion, netcontrolintent)
+ _, err = v.GetWorkloadIntent(wi.Metadata.Name, project, compositeapp, compositeappversion, dig, netcontrolintent)
if err == nil && !exists {
return WorkloadIntent{}, pkgerrors.New("WorkloadIntent already exists")
}
@@ -101,13 +103,14 @@ func (v *WorkloadIntentClient) CreateWorkloadIntent(wi WorkloadIntent, project,
}
// GetWorkloadIntent returns the WorkloadIntent for corresponding name
-func (v *WorkloadIntentClient) GetWorkloadIntent(name, project, compositeapp, compositeappversion, netcontrolintent string) (WorkloadIntent, error) {
+func (v *WorkloadIntentClient) GetWorkloadIntent(name, project, compositeapp, compositeappversion, dig, netcontrolintent string) (WorkloadIntent, error) {
//Construct key and tag to select the entry
key := WorkloadIntentKey{
Project: project,
CompositeApp: compositeapp,
CompositeAppVersion: compositeappversion,
+ DigName: dig,
NetControlIntent: netcontrolintent,
WorkloadIntent: name,
}
@@ -131,13 +134,14 @@ func (v *WorkloadIntentClient) GetWorkloadIntent(name, project, compositeapp, co
}
// GetWorkloadIntentList returns all of the WorkloadIntent for corresponding name
-func (v *WorkloadIntentClient) GetWorkloadIntents(project, compositeapp, compositeappversion, netcontrolintent string) ([]WorkloadIntent, error) {
+func (v *WorkloadIntentClient) GetWorkloadIntents(project, compositeapp, compositeappversion, dig, netcontrolintent string) ([]WorkloadIntent, error) {
//Construct key and tag to select the entry
key := WorkloadIntentKey{
Project: project,
CompositeApp: compositeapp,
CompositeAppVersion: compositeappversion,
+ DigName: dig,
NetControlIntent: netcontrolintent,
WorkloadIntent: "",
}
@@ -161,13 +165,14 @@ func (v *WorkloadIntentClient) GetWorkloadIntents(project, compositeapp, composi
}
// Delete the WorkloadIntent from database
-func (v *WorkloadIntentClient) DeleteWorkloadIntent(name, project, compositeapp, compositeappversion, netcontrolintent string) error {
+func (v *WorkloadIntentClient) DeleteWorkloadIntent(name, project, compositeapp, compositeappversion, dig, netcontrolintent string) error {
//Construct key and tag to select the entry
key := WorkloadIntentKey{
Project: project,
CompositeApp: compositeapp,
CompositeAppVersion: compositeappversion,
+ DigName: dig,
NetControlIntent: netcontrolintent,
WorkloadIntent: name,
}
diff --git a/src/tools/emcoctl/cmd/utils.go b/src/tools/emcoctl/cmd/utils.go
index d266a00f..5e063d12 100644
--- a/src/tools/emcoctl/cmd/utils.go
+++ b/src/tools/emcoctl/cmd/utils.go
@@ -332,7 +332,7 @@ func GetURL(anchor string) (string, error) {
baseUrl = GetDcmURL()
break
}
- if len(s) >= 6 && s[5] == "network-controller-intent" {
+ if len(s) >= 8 && s[7] == "network-controller-intent" {
baseUrl = GetOvnactionURL()
break
}
diff --git a/src/tools/emcoctl/examples/test.yaml b/src/tools/emcoctl/examples/test.yaml
index e54ff36e..f660f748 100644
--- a/src/tools/emcoctl/examples/test.yaml
+++ b/src/tools/emcoctl/examples/test.yaml
@@ -8,8 +8,8 @@ metadata :
userData1: test1
userData2: test2
spec:
- host: localhost
- port: 9031
+ host: rsync
+ port: 9041
---
#creating cluster provider
@@ -33,7 +33,7 @@ metadata :
userData1: test1
userData2: test2
file:
- /home/otc/.kube/config
+ /home/vagrant/.kube/config
---
#Add label cluster
@@ -137,23 +137,51 @@ file:
---
+#create deployment intent group
+version: emco/v2
+resourceContext:
+ anchor: projects/proj1/composite-apps/collection-composite-app/v1/deployment-intent-groups
+metadata :
+ name: collection-deployment-intent-group
+ description: "description"
+ userData1: test1
+ userData2: test2
+spec:
+ profile: collection-composite-profile
+ version: r1
+ logical-cloud: NA
+ override-values: []
+
+---
+#create intent in deployment intent group
+version: emco/v2
+resourceContext:
+ anchor: projects/proj1/composite-apps/collection-composite-app/v1/deployment-intent-groups/collection-deployment-intent-group/intents
+metadata :
+ name: collection-deployment-intent
+ description: "description"
+ userData1: test1
+ userData2: test2
+spec:
+ intent:
+ genericPlacementIntent: collection-placement-intent
+
+---
#create the generic placement intent
version: emco/v2
resourceContext:
- anchor: projects/proj1/composite-apps/collection-composite-app/v1/generic-placement-intents
+ anchor: projects/proj1/composite-apps/collection-composite-app/v1/deployment-intent-groups/collection-deployment-intent-group/generic-placement-intents
metadata :
name: collection-placement-intent
description: "description for app"
userData1: test1
userData2: test2
-spec:
- logical-cloud: NA
---
#add the prometheus app placement intent to the generic placement intent
version: emco/v2
resourceContext:
- anchor: projects/proj1/composite-apps/collection-composite-app/v1/generic-placement-intents/collection-placement-intent/app-intents
+ anchor: projects/proj1/composite-apps/collection-composite-app/v1/deployment-intent-groups/collection-deployment-intent-group/generic-placement-intents/collection-placement-intent/app-intents
metadata:
name: prometheus-placement-intent
description: description of placement_intent
@@ -169,7 +197,7 @@ spec:
#add the prometheus app placement intent to the generic placement intent
version: emco/v2
resourceContext:
- anchor: projects/proj1/composite-apps/collection-composite-app/v1/generic-placement-intents/collection-placement-intent/app-intents
+ anchor: projects/proj1/composite-apps/collection-composite-app/v1/deployment-intent-groups/collection-deployment-intent-group/generic-placement-intents/collection-placement-intent/app-intents
metadata:
name: collectd-placement-intent
description: description of placement_intent
@@ -183,35 +211,6 @@ spec:
cluster-label-name: edge-cluster
---
-#create deployment intent group
-version: emco/v2
-resourceContext:
- anchor: projects/proj1/composite-apps/collection-composite-app/v1/deployment-intent-groups
-metadata :
- name: collection-deployment-intent-group
- description: "description"
- userData1: test1
- userData2: test2
-spec:
- profile: collection-composite-profile
- version: r1
- override-values: []
-
----
-#create intent in deployment intent group
-version: emco/v2
-resourceContext:
- anchor: projects/proj1/composite-apps/collection-composite-app/v1/deployment-intent-groups/collection-deployment-intent-group/intents
-metadata :
- name: collection-deployment-intent
- description: "description"
- userData1: test1
- userData2: test2
-spec:
- intent:
- genericPlacementIntent: collection-placement-intent
-
----
#Approve
version: emco/v2
resourceContext:
diff --git a/src/tools/emcoctl/examples/vfw.yaml b/src/tools/emcoctl/examples/vfw.yaml
index c84a1bab..251c892d 100644
--- a/src/tools/emcoctl/examples/vfw.yaml
+++ b/src/tools/emcoctl/examples/vfw.yaml
@@ -3,7 +3,7 @@ version: emco/v2
resourceContext:
anchor: controllers
metadata :
- name: rsync
+ name: rsync
spec:
host: "192.168.121.6"
port: 30546
@@ -14,10 +14,10 @@ version: emco/v2
resourceContext:
anchor: controllers
metadata :
- name: ovnaction
+ name: ovnaction
spec:
- host: "192.168.121.6"
- port: 32259
+ host: "ovnaction"
+ port: 9053
type: "action"
priority: 1
@@ -28,7 +28,7 @@ version: emco/v2
resourceContext:
anchor: cluster-providers
metadata :
- name: vfw-cluster-provider
+ name: vfw-cluster-provider
---
#creating cluster
@@ -36,7 +36,7 @@ version: emco/v2
resourceContext:
anchor: cluster-providers/vfw-cluster-provider/clusters
metadata :
- name: edge01
+ name: edge01
file:
/home/otc/.kube/config
@@ -65,7 +65,7 @@ version: emco/v2
resourceContext:
anchor: cluster-providers/vfw-cluster-provider/clusters/edge01/networks
metadata:
- name: emco-unprotected-net
+ name: unprotected-private-net
spec:
cniType: ovn4nfv
ipv4Subnets:
@@ -184,20 +184,52 @@ file:
/opt/csar/cb009bfe-bbee-11e8-9766-525400435678/profile.tar.gz
---
-#create the generic placement intent
+#create deployment intent group
version: emco/v2
resourceContext:
- anchor: projects/testvfw/composite-apps/compositevfw/v1/generic-placement-intents
+ anchor: projects/testvfw/composite-apps/compositevfw/v1/deployment-intent-groups
metadata :
- name: fw-placement-intent
+ name: vfw_deployment_intent_group
spec:
+ profile: vfw_composite-profile
+ version: r1
logical-cloud: NA
+ override-values:
+ - app-name: packetgen
+ values:
+ ".Values.service.ports.nodePort": '30888'
+ - app-name: firewall
+ values:
+ ".Values.global.dcaeCollectorIp": 1.2.3.4
+ ".Values.global.dcaeCollectorPort": '8888'
+ - app-name: sink
+ values:
+ ".Values.service.ports.nodePort": '30677'
+
+---
+version: emco/v2
+resourceContext:
+ anchor: projects/testvfw/composite-apps/compositevfw/v1/deployment-intent-groups/vfw_deployment_intent_group/intents
+metadata :
+ name: fw-deployment-intent
+spec:
+ intent:
+ genericPlacementIntent: fw-placement-intent
+ ovnaction: vfw_ovnaction_intent
+
+---
+#create the generic placement intent
+version: emco/v2
+resourceContext:
+ anchor: projects/testvfw/composite-apps/compositevfw/v1/deployment-intent-groups/vfw_deployment_intent_group/generic-placement-intents
+metadata :
+ name: fw-placement-intent
---
#add the packetgen app placement intent to the generic placement intent
version: emco/v2
resourceContext:
- anchor: projects/testvfw/composite-apps/compositevfw/v1/generic-placement-intents/fw-placement-intent/app-intents
+ anchor: projects/testvfw/composite-apps/compositevfw/v1/deployment-intent-groups/vfw_deployment_intent_group/generic-placement-intents/fw-placement-intent/app-intents
metadata:
name: packetgen-placement-intent
spec:
@@ -210,7 +242,7 @@ spec:
#add the firewall app placement intent to the generic placement intent
version: emco/v2
resourceContext:
- anchor: projects/testvfw/composite-apps/compositevfw/v1/generic-placement-intents/fw-placement-intent/app-intents
+ anchor: projects/testvfw/composite-apps/compositevfw/v1/deployment-intent-groups/vfw_deployment_intent_group/generic-placement-intents/fw-placement-intent/app-intents
metadata:
name: firewall-placement-intent
spec:
@@ -224,7 +256,7 @@ spec:
#add the sink app placement intent to the generic placement intent
version: emco/v2
resourceContext:
- anchor: projects/testvfw/composite-apps/compositevfw/v1/generic-placement-intents/fw-placement-intent/app-intents
+ anchor: projects/testvfw/composite-apps/compositevfw/v1/deployment-intent-groups/vfw_deployment_intent_group/generic-placement-intents/fw-placement-intent/app-intents
metadata:
name: sink-placement-intent
spec:
@@ -235,20 +267,20 @@ spec:
cluster-label-name: LabelA
---
-#creating cluster provider
+#creating network intents
version: emco/v2
resourceContext:
- anchor: projects/testvfw/composite-apps/compositevfw/v1/network-controller-intent
+ anchor: projects/testvfw/composite-apps/compositevfw/v1/deployment-intent-groups/vfw_deployment_intent_group/network-controller-intent
metadata :
- name: vfw_ovnaction_intent
+ name: vfw_ovnaction_intent
---
#
version: emco/v2
resourceContext:
- anchor: projects/testvfw/composite-apps/compositevfw/v1/network-controller-intent/vfw_ovnaction_intent/workload-intents
+ anchor: projects/testvfw/composite-apps/compositevfw/v1/deployment-intent-groups/vfw_deployment_intent_group/network-controller-intent/vfw_ovnaction_intent/workload-intents
metadata :
- name: packetgen_workload_intent
+ name: packetgen_workload_intent
spec:
application-name: packetgen
workload-resource: r1-packetgen
@@ -258,9 +290,9 @@ spec:
#
version: emco/v2
resourceContext:
- anchor: projects/testvfw/composite-apps/compositevfw/v1/network-controller-intent/vfw_ovnaction_intent/workload-intents
+ anchor: projects/testvfw/composite-apps/compositevfw/v1/deployment-intent-groups/vfw_deployment_intent_group/network-controller-intent/vfw_ovnaction_intent/workload-intents
metadata :
- name: firewall_workload_intent
+ name: firewall_workload_intent
spec:
application-name: firewall
workload-resource: r1-firewall
@@ -270,9 +302,9 @@ spec:
#
version: emco/v2
resourceContext:
- anchor: projects/testvfw/composite-apps/compositevfw/v1/network-controller-intent/vfw_ovnaction_intent/workload-intents
+ anchor: projects/testvfw/composite-apps/compositevfw/v1/deployment-intent-groups/vfw_deployment_intent_group/network-controller-intent/vfw_ovnaction_intent/workload-intents
metadata :
- name: sink_workload_intent
+ name: sink_workload_intent
spec:
application-name: sink
workload-resource: r1-sink
@@ -282,9 +314,9 @@ spec:
#
version: emco/v2
resourceContext:
- anchor: projects/testvfw/composite-apps/compositevfw/v1/network-controller-intent/vfw_ovnaction_intent/workload-intents/packetgen_workload_intent/interfaces
+ anchor: projects/testvfw/composite-apps/compositevfw/v1/deployment-intent-groups/vfw_deployment_intent_group/network-controller-intent/vfw_ovnaction_intent/workload-intents/packetgen_workload_intent/interfaces
metadata :
- name: packetgen_unprotected_if
+ name: packetgen_unprotected_if
spec:
interface: eth1
name: unprotected-private-net
@@ -295,9 +327,9 @@ spec:
#
version: emco/v2
resourceContext:
- anchor: projects/testvfw/composite-apps/compositevfw/v1/network-controller-intent/vfw_ovnaction_intent/workload-intents/packetgen_workload_intent/interfaces
+ anchor: projects/testvfw/composite-apps/compositevfw/v1/deployment-intent-groups/vfw_deployment_intent_group/network-controller-intent/vfw_ovnaction_intent/workload-intents/packetgen_workload_intent/interfaces
metadata :
- name: packetgen_emco_if
+ name: packetgen_emco_if
spec:
interface: eth2
name: emco-private-net
@@ -308,9 +340,9 @@ spec:
#
version: emco/v2
resourceContext:
- anchor: projects/testvfw/composite-apps/compositevfw/v1/network-controller-intent/vfw_ovnaction_intent/workload-intents/firewall_workload_intent/interfaces
+ anchor: projects/testvfw/composite-apps/compositevfw/v1/deployment-intent-groups/vfw_deployment_intent_group/network-controller-intent/vfw_ovnaction_intent/workload-intents/firewall_workload_intent/interfaces
metadata :
- name: firewall_emco_if
+ name: firewall_emco_if
spec:
interface: eth3
name: emco-private-net
@@ -321,9 +353,9 @@ spec:
#
version: emco/v2
resourceContext:
- anchor: projects/testvfw/composite-apps/compositevfw/v1/network-controller-intent/vfw_ovnaction_intent/workload-intents/firewall_workload_intent/interfaces
+ anchor: projects/testvfw/composite-apps/compositevfw/v1/deployment-intent-groups/vfw_deployment_intent_group/network-controller-intent/vfw_ovnaction_intent/workload-intents/firewall_workload_intent/interfaces
metadata :
- name: firewall_unprotected_if
+ name: firewall_unprotected_if
spec:
interface: eth1
name: unprotected-private-net
@@ -334,9 +366,9 @@ spec:
#
version: emco/v2
resourceContext:
- anchor: projects/testvfw/composite-apps/compositevfw/v1/network-controller-intent/vfw_ovnaction_intent/workload-intents/firewall_workload_intent/interfaces
+ anchor: projects/testvfw/composite-apps/compositevfw/v1/deployment-intent-groups/vfw_deployment_intent_group/network-controller-intent/vfw_ovnaction_intent/workload-intents/firewall_workload_intent/interfaces
metadata :
- name: firewall_protected_if
+ name: firewall_protected_if
spec:
interface: eth2
name: protected-private-net
@@ -347,9 +379,9 @@ spec:
#
version: emco/v2
resourceContext:
- anchor: projects/testvfw/composite-apps/compositevfw/v1/network-controller-intent/vfw_ovnaction_intent/workload-intents/sink_workload_intent/interfaces
+ anchor: projects/testvfw/composite-apps/compositevfw/v1/deployment-intent-groups/vfw_deployment_intent_group/network-controller-intent/vfw_ovnaction_intent/workload-intents/sink_workload_intent/interfaces
metadata :
- name: sink_protected_if
+ name: sink_protected_if
spec:
interface: eth1
name: protected-private-net
@@ -360,9 +392,9 @@ spec:
#
version: emco/v2
resourceContext:
- anchor: projects/testvfw/composite-apps/compositevfw/v1/network-controller-intent/vfw_ovnaction_intent/workload-intents/sink_workload_intent/interfaces
+ anchor: projects/testvfw/composite-apps/compositevfw/v1/deployment-intent-groups/vfw_deployment_intent_group/network-controller-intent/vfw_ovnaction_intent/workload-intents/sink_workload_intent/interfaces
metadata :
- name: sink_emco_if
+ name: sink_emco_if
spec:
interface: eth2
name: emco-private-net
@@ -370,39 +402,6 @@ spec:
ipAddress: 10.10.20.4
---
-#create deployment intent group
-version: emco/v2
-resourceContext:
- anchor: projects/testvfw/composite-apps/compositevfw/v1/deployment-intent-groups
-metadata :
- name: vfw_deployment_intent_group
-spec:
- profile: vfw_composite-profile
- version: r1
- override-values:
- - app-name: packetgen
- values:
- ".Values.service.ports.nodePort": '30888'
- - app-name: firewall
- values:
- ".Values.global.dcaeCollectorIp": 1.2.3.4
- ".Values.global.dcaeCollectorPort": '8888'
- - app-name: sink
- values:
- ".Values.service.ports.nodePort": '30677'
-
----
-version: emco/v2
-resourceContext:
- anchor: projects/testvfw/composite-apps/compositevfw/v1/deployment-intent-groups/vfw_deployment_intent_group/intents
-metadata :
- name: fw-deployment-intent
-spec:
- intent:
- genericPlacementIntent: fw-placement-intent
- ovnaction: vfw_ovnaction_intent
-
----
version: emco/v2
resourceContext:
anchor: projects/testvfw/composite-apps/compositevfw/v1/deployment-intent-groups/vfw_deployment_intent_group/approve