[vFW_CNF_CDS] Minor updates after review 73/116373/1
authorLukasz Rajewski <lukasz.rajewski@orange.com>
Wed, 30 Dec 2020 17:43:39 +0000 (18:43 +0100)
committerMorgan Richomme <morgan.richomme@orange.com>
Mon, 4 Jan 2021 07:18:26 +0000 (07:18 +0000)
- Updated profile description part
- Improved Status API description
- Added extra info about both CNF paths

Issue-ID: DOC-698
Signed-off-by: Lukasz Rajewski <lukasz.rajewski@orange.com>
Change-Id: I85280aab86deaade35b5b6d5178d3538ea29808b
(cherry picked from commit dd9bf99fe8c5bd124b2a578399dcd8c77496c1f8)

docs/docs_vFW_CNF_CDS.rst
docs/files/vFW_CNF_CDS/Dummy_Heat_Flow.png
docs/files/vFW_CNF_CDS/Native_Helm_Flow.png
docs/files/vFW_CNF_CDS/helm-overrides-steps.png [new file with mode: 0644]
docs/files/vFW_CNF_CDS/helm-overrides.png
docs/files/vFW_CNF_CDS/profile-templating.png
docs/files/vFW_CNF_CDS/status-response.json [new file with mode: 0644]

index d0dd7e6..6b5d5b4 100644 (file)
@@ -431,12 +431,19 @@ SO requires for instantiation name of the profile in the parameter: *k8s-rb-prof
 
 In the SO request user can pass parameter of name *k8s-rb-profile-name* which in our case may have value: *vfw-cnf-cds-base-profile*, *vfw-cnf-cds-vpkg-profile* or *default*. The *default* profile doesn’t contain any content inside and allows instantiation of CNF without the need to define and upload any additional profiles. *vfw-cnf-cds-vpkg-profile* has been prepared to test instantiation of the second modified vFW CNF instance `Second Service Instance Instantiation`_.
 
-K8splugin allows to specify override parameters (similar to --set behavior of helm client) to instantiated resource bundles. This allows for providing dynamic parameters to instantiated resources without the need to create new profiles for this purpose and should be used with *default* profile but may be used also with custom profiles. The overall flow of helm overrides parameters processing is visible on following figure.
+K8splugin allows to specify override parameters (similar to --set behavior of helm client) to instantiated resource bundles. This allows for providing dynamic parameters to instantiated resources without the need to create new profiles for this purpose and should be used with *default* profile but may be used also with custom profiles. The overall flow of helm overrides parameters processing is visible on following figure. When *rb definition* (helm package) is being instantiated for specified *rb profile* K8splugin combines override values from the helm pakage, *rb profile* and from the instantiation request - in the respective order. It means that the some from instantiation request (SO request input or CDS resource assignement result) has a precedence over the value from the *rb profile* and value from the *rb profile* has a precedence over the helm package default override value. Similarly, profile can contain resource files that may extend or ammend the existing files for the original helm package content.
 
 .. figure:: files/vFW_CNF_CDS/helm-overrides.png
    :align: center
 
-   The overall flow of helm overrides
+   The overall flow of helm data processing
+
+Both profile content (4) like the instantiation request values (5) can be generated during the resource assignment process according to its definition for CBA associated with helm package. CBA may generate i.e. names, IP addresses, ports and can use this information to produce the *rb-profile* (3) content. Finally, all three sources of override values, temnplates and additional resources files are merged together (6) by K8splugin in the order exaplained before.
+
+.. figure:: files/vFW_CNF_CDS/helm-overrides-steps.png
+   :align: center
+
+   The steps of processing of helm data with help of CDS
 
 Finally, `Data Dictionary`_ is also included into demo git directory, re-modeling and making changes into model utilizing CDS model time / runtime is easier as used DD is also known. 
 
@@ -808,17 +815,27 @@ This part contains all the steps to run the use case by using ONAP GUIs, Postman
 
 Following pictures describe the overall sequential flow of the use case in two scenarios: **Dummy Heat** path (with OpenStack adapter) and **Native Helm** path (with CNF Adapter)
 
+Dummy Heat CNF Orchestration
+............................
+
+This orchestration method stands on the grounds of Heat template orchestration mechanisms. In SDC onboarding package needs to contains simple Heat templates that are associated with additional Cloud artifacts. SDC distributes Heat templates to SO and Helm packages to K8sPlugin directly. SO orchestrates the Heat templates without any knowledge about their existence, however the OpenStack adater in SO understands k8s region type for which communication over MSB/Mutlicloud is provided - it handles interaction with K8sPlugin for CNF instantiation.
+
 .. figure:: files/vFW_CNF_CDS/Dummy_Heat_Flow.png
    :align: center
 
    vFW CNF CDS Use Case sequence flow for *Dummy Heat* (Frankfurt) path.
 
+Native Helm CNF Orchestration
+.............................
+
+Introduced in the Guilin release CNF orchestration method brings native distribution of Helm packages from SDC and native orchestration of CNFs (Helm packages) with SO. SO leverages CNF adapter to interact with K8sPlugin that takes resposnibility for the communication with k8s clusters. Heat templates are not required in the SDC onboarding package and thanks to the fact that SO knows about Helm package orchestration future synchronization of data between k8s clusters and AAI is possible.
+
 .. figure:: files/vFW_CNF_CDS/Native_Helm_Flow.png
    :align: center
 
    vFW CNF CDS Use Case sequence flow for *Native Helm* (Guilin) path.
 
-.. warning:: The **Native Helm** path has identified defects in the instantiation process and requires SO images of version 1.7.11 for successfull instantiation of the CNF. Please monitor `SO-3403`_ and `SO-3404`_ tickets to make sure that necessary fixes have been delivered. SO 1.7.11 images were released Dec 24th 2020. Make sure to use then in You ONAP/Guilin installation.
+.. warning:: The **Native Helm** path has identified defects in the instantiation process and requires SO images of version 1.7.11 for successfull instantiation of the CNF. Please monitor `SO-3403`_ and `SO-3404`_ tickets to make sure that necessary fixes have been delivered. SO 1.7.11 images were released Dec 24th 2020. Make sure to use them in Your ONAP/Guilin installation.
 
 
 3-1 Onboarding
@@ -1527,9 +1544,9 @@ where {rb-instance-id} can be taken from the list of instances resolved the foll
 
 or from AAI *heat-stack-id* property of created *vf-module* associated with each Helm package from onboarded VSP which holds the *rb-instance-id* value.
 
-Examplary output of Status API is shown below (result of test vFW CNF helm package). It shows the list of GVK resources created for requested *rb-instance* (Helm and vf-module in the same time) with assocated describe result for all of them.
+Examplary output of Status API is shown below (full result of test vFW CNF helm package in the attached file). It shows the list of GVK resources created for requested *rb-instance* (Helm and vf-module in the same time) with assocated describe result for all of them.
 
-.. note:: The example of how the Stauts API could be integrated into CDS can be found in the Frankfurt version of k8s profile upload mechanism `Frankfurt CBA Definition`_ (*profile-upload* TOSCA node template), implemented in inside of the Kotlin script `Frankfurt CBA Script`_ for profile upload. This method shows how to integrate mutlicloud-k8s API endpoint into Kotlin script executed by CDS. For more details please take a look into Definition file of 1.0.45 version of the CBA and also the kotlin script used there for uploading the profile. 
+  :download:`Full Status API Result <files/vFW_CNF_CDS/status-response.json>`
 
 ::
 
@@ -1548,7 +1565,7 @@ Examplary output of Status API is shown below (result of test vFW CNF helm packa
             }
         },
         "ready": false,
-        "resourceCount": 7,
+        "resourceCount": 1,
         "resourcesStatus": [
             {
                 "name": "sink-configmap",
@@ -1576,512 +1593,14 @@ Examplary output of Status API is shown below (result of test vFW CNF helm packa
                         "uid": "46c8bec4-980c-455b-9eb0-fb84ac8cc450"
                     }
                 }
-            },
-            {
-                "name": "sink-service",
-                "GVK": {
-                    "Group": "",
-                    "Version": "v1",
-                    "Kind": "Service"
-                },
-                "status": {
-                    "apiVersion": "v1",
-                    "kind": "Service",
-                    "metadata": {
-                        "creationTimestamp": "2020-09-29T13:36:25Z",
-                        "labels": {
-                            "app": "sink",
-                            "chart": "sink",
-                            "k8splugin.io/rb-instance-id": "practical_nobel",
-                            "release": "test-release"
-                        },
-                        "name": "sink-service",
-                        "namespace": "plugin-tests-namespace",
-                        "resourceVersion": "10720780",
-                        "selfLink": "/api/v1/namespaces/plugin-tests-namespace/services/sink-service",
-                        "uid": "789a14fe-1246-4cdd-ba9a-359240ba614f"
-                    },
-                    "spec": {
-                        "clusterIP": "10.244.2.4",
-                        "externalTrafficPolicy": "Cluster",
-                        "ports": [
-                            {
-                                "nodePort": 30667,
-                                "port": 667,
-                                "protocol": "TCP",
-                                "targetPort": 667
-                            }
-                        ],
-                        "selector": {
-                            "app": "sink",
-                            "release": "test-release"
-                        },
-                        "sessionAffinity": "None",
-                        "type": "NodePort"
-                    },
-                    "status": {
-                        "loadBalancer": {}
-                    }
-                }
-            },
-            {
-                "name": "test-release-sink",
-                "GVK": {
-                    "Group": "apps",
-                    "Version": "v1",
-                    "Kind": "Deployment"
-                },
-                "status": {
-                    "apiVersion": "apps/v1",
-                    "kind": "Deployment",
-                    "metadata": {
-                        "annotations": {
-                            "deployment.kubernetes.io/revision": "1"
-                        },
-                        "creationTimestamp": "2020-09-29T13:36:25Z",
-                        "generation": 1,
-                        "labels": {
-                            "app": "sink",
-                            "chart": "sink",
-                            "k8splugin.io/rb-instance-id": "practical_nobel",
-                            "release": "test-release"
-                        },
-                        "name": "test-release-sink",
-                        "namespace": "plugin-tests-namespace",
-                        "resourceVersion": "10720857",
-                        "selfLink": "/apis/apps/v1/namespaces/plugin-tests-namespace/deployments/test-release-sink",
-                        "uid": "1f50eecf-c924-4434-be87-daf7c64b6506"
-                    },
-                    "spec": {
-                        "progressDeadlineSeconds": 600,
-                        "replicas": 1,
-                        "revisionHistoryLimit": 10,
-                        "selector": {
-                            "matchLabels": {
-                                "app": "sink",
-                                "release": "test-release"
-                            }
-                        },
-                        "strategy": {
-                            "rollingUpdate": {
-                                "maxSurge": "25%",
-                                "maxUnavailable": "25%"
-                            },
-                            "type": "RollingUpdate"
-                        },
-                        "template": {
-                            "metadata": {
-                                "annotations": {
-                                    "k8s.plugin.opnfv.org/nfn-network": "{ \"type\": \"ovn4nfv\", \"interface\": [ { \"name\": \"protected-private-net\", \"ipAddress\": \"192.168.20.3\", \"interface\": \"eth1\", \"defaultGateway\": \"false\" }, { \"name\": \"onap-private-net-test\", \"ipAddress\": \"10.10.100.4\", \"interface\": \"eth2\" , \"defaultGateway\": \"false\"} ]}",
-                                    "k8s.v1.cni.cncf.io/networks": "[{\"name\": \"ovn-networkobj\", \"namespace\": \"default\"}]"
-                                },
-                                "creationTimestamp": null,
-                                "labels": {
-                                    "app": "sink",
-                                    "k8splugin.io/rb-instance-id": "practical_nobel",
-                                    "release": "test-release"
-                                }
-                            },
-                            "spec": {
-                                "containers": [
-                                    {
-                                        "envFrom": [
-                                            {
-                                                "configMapRef": {
-                                                    "name": "sink-configmap"
-                                                }
-                                            }
-                                        ],
-                                        "image": "rtsood/onap-vfw-demo-sink:0.2.0",
-                                        "imagePullPolicy": "IfNotPresent",
-                                        "name": "sink",
-                                        "resources": {},
-                                        "securityContext": {
-                                            "privileged": true
-                                        },
-                                        "stdin": true,
-                                        "terminationMessagePath": "/dev/termination-log",
-                                        "terminationMessagePolicy": "File",
-                                        "tty": true
-                                    },
-                                    {
-                                        "image": "electrocucaracha/darkstat:latest",
-                                        "imagePullPolicy": "IfNotPresent",
-                                        "name": "darkstat",
-                                        "ports": [
-                                            {
-                                                "containerPort": 667,
-                                                "protocol": "TCP"
-                                            }
-                                        ],
-                                        "resources": {},
-                                        "stdin": true,
-                                        "terminationMessagePath": "/dev/termination-log",
-                                        "terminationMessagePolicy": "File",
-                                        "tty": true
-                                    }
-                                ],
-                                "dnsPolicy": "ClusterFirst",
-                                "restartPolicy": "Always",
-                                "schedulerName": "default-scheduler",
-                                "securityContext": {},
-                                "terminationGracePeriodSeconds": 30
-                            }
-                        }
-                    },
-                    "status": {
-                        "availableReplicas": 1,
-                        "conditions": [
-                            {
-                                "lastTransitionTime": "2020-09-29T13:36:33Z",
-                                "lastUpdateTime": "2020-09-29T13:36:33Z",
-                                "message": "Deployment has minimum availability.",
-                                "reason": "MinimumReplicasAvailable",
-                                "status": "True",
-                                "type": "Available"
-                            },
-                            {
-                                "lastTransitionTime": "2020-09-29T13:36:25Z",
-                                "lastUpdateTime": "2020-09-29T13:36:33Z",
-                                "message": "ReplicaSet \"test-release-sink-6546c4f698\" has successfully progressed.",
-                                "reason": "NewReplicaSetAvailable",
-                                "status": "True",
-                                "type": "Progressing"
-                            }
-                        ],
-                        "observedGeneration": 1,
-                        "readyReplicas": 1,
-                        "replicas": 1,
-                        "updatedReplicas": 1
-                    }
-                }
-            },
-            {
-                "name": "onap-private-net-test",
-                "GVK": {
-                    "Group": "k8s.plugin.opnfv.org",
-                    "Version": "v1alpha1",
-                    "Kind": "Network"
-                },
-                "status": {
-                    "apiVersion": "k8s.plugin.opnfv.org/v1alpha1",
-                    "kind": "Network",
-                    "metadata": {
-                        "creationTimestamp": "2020-09-29T13:36:25Z",
-                        "finalizers": [
-                            "nfnCleanUpNetwork"
-                        ],
-                        "generation": 2,
-                        "labels": {
-                            "k8splugin.io/rb-instance-id": "practical_nobel"
-                        },
-                        "name": "onap-private-net-test",
-                        "namespace": "plugin-tests-namespace",
-                        "resourceVersion": "10720825",
-                        "selfLink": "/apis/k8s.plugin.opnfv.org/v1alpha1/namespaces/plugin-tests-namespace/networks/onap-private-net-test",
-                        "uid": "43d413f1-f222-4d98-9ddd-b209d3ade106"
-                    },
-                    "spec": {
-                        "cniType": "ovn4nfv",
-                        "dns": {},
-                        "ipv4Subnets": [
-                            {
-                                "gateway": "10.10.0.1/16",
-                                "name": "subnet1",
-                                "subnet": "10.10.0.0/16"
-                            }
-                        ]
-                    },
-                    "status": {
-                        "state": "Created"
-                    }
-                }
-            },
-            {
-                "name": "protected-private-net",
-                "GVK": {
-                    "Group": "k8s.plugin.opnfv.org",
-                    "Version": "v1alpha1",
-                    "Kind": "Network"
-                },
-                "status": {
-                    "apiVersion": "k8s.plugin.opnfv.org/v1alpha1",
-                    "kind": "Network",
-                    "metadata": {
-                        "creationTimestamp": "2020-09-29T13:36:25Z",
-                        "finalizers": [
-                            "nfnCleanUpNetwork"
-                        ],
-                        "generation": 2,
-                        "labels": {
-                            "k8splugin.io/rb-instance-id": "practical_nobel"
-                        },
-                        "name": "protected-private-net",
-                        "namespace": "plugin-tests-namespace",
-                        "resourceVersion": "10720827",
-                        "selfLink": "/apis/k8s.plugin.opnfv.org/v1alpha1/namespaces/plugin-tests-namespace/networks/protected-private-net",
-                        "uid": "75c98944-80b6-4158-afed-8efa7a1075e2"
-                    },
-                    "spec": {
-                        "cniType": "ovn4nfv",
-                        "dns": {},
-                        "ipv4Subnets": [
-                            {
-                                "gateway": "192.168.20.100/24",
-                                "name": "subnet1",
-                                "subnet": "192.168.20.0/24"
-                            }
-                        ]
-                    },
-                    "status": {
-                        "state": "Created"
-                    }
-                }
-            },
-            {
-                "name": "unprotected-private-net",
-                "GVK": {
-                    "Group": "k8s.plugin.opnfv.org",
-                    "Version": "v1alpha1",
-                    "Kind": "Network"
-                },
-                "status": {
-                    "apiVersion": "k8s.plugin.opnfv.org/v1alpha1",
-                    "kind": "Network",
-                    "metadata": {
-                        "creationTimestamp": "2020-09-29T13:36:25Z",
-                        "finalizers": [
-                            "nfnCleanUpNetwork"
-                        ],
-                        "generation": 2,
-                        "labels": {
-                            "k8splugin.io/rb-instance-id": "practical_nobel"
-                        },
-                        "name": "unprotected-private-net",
-                        "namespace": "plugin-tests-namespace",
-                        "resourceVersion": "10720829",
-                        "selfLink": "/apis/k8s.plugin.opnfv.org/v1alpha1/namespaces/plugin-tests-namespace/networks/unprotected-private-net",
-                        "uid": "54995c10-bffd-4bb2-bbab-5de266af9456"
-                    },
-                    "spec": {
-                        "cniType": "ovn4nfv",
-                        "dns": {},
-                        "ipv4Subnets": [
-                            {
-                                "gateway": "192.168.10.1/24",
-                                "name": "subnet1",
-                                "subnet": "192.168.10.0/24"
-                            }
-                        ]
-                    },
-                    "status": {
-                        "state": "Created"
-                    }
-                }
-            },
-            {
-                "name": "test-release-sink-6546c4f698-dv529",
-                "GVK": {
-                    "Group": "",
-                    "Version": "v1",
-                    "Kind": "Pod"
-                },
-                "status": {
-                    "metadata": {
-                        "annotations": {
-                            "k8s.plugin.opnfv.org/nfn-network": "{ \"type\": \"ovn4nfv\", \"interface\": [ { \"name\": \"protected-private-net\", \"ipAddress\": \"192.168.20.3\", \"interface\": \"eth1\", \"defaultGateway\": \"false\" }, { \"name\": \"onap-private-net-test\", \"ipAddress\": \"10.10.100.4\", \"interface\": \"eth2\" , \"defaultGateway\": \"false\"} ]}",
-                            "k8s.plugin.opnfv.org/ovnInterfaces": "[{\"ip_address\":\"192.168.20.3/24\", \"mac_address\":\"00:00:00:13:40:87\", \"gateway_ip\": \"192.168.20.100\",\"defaultGateway\":\"false\",\"interface\":\"eth1\"},{\"ip_address\":\"10.10.100.4/16\", \"mac_address\":\"00:00:00:49:de:fc\", \"gateway_ip\": \"10.10.0.1\",\"defaultGateway\":\"false\",\"interface\":\"eth2\"}]",
-                            "k8s.v1.cni.cncf.io/networks": "[{\"name\": \"ovn-networkobj\", \"namespace\": \"default\"}]",
-                            "k8s.v1.cni.cncf.io/networks-status": "[{\n    \"name\": \"cni0\",\n    \"interface\": \"eth0\",\n    \"ips\": [\n        \"10.244.64.46\"\n    ],\n    \"mac\": \"0a:58:0a:f4:40:2e\",\n    \"default\": true,\n    \"dns\": {}\n},{\n    \"name\": \"ovn4nfv-k8s-plugin\",\n    \"interface\": \"eth2\",\n    \"ips\": [\n        \"192.168.20.3\",\n        \"10.10.100.4\"\n    ],\n    \"mac\": \"00:00:00:49:de:fc\",\n    \"dns\": {}\n}]"
-                        },
-                        "creationTimestamp": "2020-09-29T13:36:25Z",
-                        "generateName": "test-release-sink-6546c4f698-",
-                        "labels": {
-                            "app": "sink",
-                            "k8splugin.io/rb-instance-id": "practical_nobel",
-                            "pod-template-hash": "6546c4f698",
-                            "release": "test-release"
-                        },
-                        "name": "test-release-sink-6546c4f698-dv529",
-                        "namespace": "plugin-tests-namespace",
-                        "ownerReferences": [
-                            {
-                                "apiVersion": "apps/v1",
-                                "blockOwnerDeletion": true,
-                                "controller": true,
-                                "kind": "ReplicaSet",
-                                "name": "test-release-sink-6546c4f698",
-                                "uid": "72c9da29-af3b-4b5c-a90b-06285ae83429"
-                            }
-                        ],
-                        "resourceVersion": "10720854",
-                        "selfLink": "/api/v1/namespaces/plugin-tests-namespace/pods/test-release-sink-6546c4f698-dv529",
-                        "uid": "a4e24041-65c9-4b86-8f10-a27a4dba26bb"
-                    },
-                    "spec": {
-                        "containers": [
-                            {
-                                "envFrom": [
-                                    {
-                                        "configMapRef": {
-                                            "name": "sink-configmap"
-                                        }
-                                    }
-                                ],
-                                "image": "rtsood/onap-vfw-demo-sink:0.2.0",
-                                "imagePullPolicy": "IfNotPresent",
-                                "name": "sink",
-                                "resources": {},
-                                "securityContext": {
-                                    "privileged": true
-                                },
-                                "stdin": true,
-                                "terminationMessagePath": "/dev/termination-log",
-                                "terminationMessagePolicy": "File",
-                                "tty": true,
-                                "volumeMounts": [
-                                    {
-                                        "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
-                                        "name": "default-token-gsh95",
-                                        "readOnly": true
-                                    }
-                                ]
-                            },
-                            {
-                                "image": "electrocucaracha/darkstat:latest",
-                                "imagePullPolicy": "IfNotPresent",
-                                "name": "darkstat",
-                                "ports": [
-                                    {
-                                        "containerPort": 667,
-                                        "protocol": "TCP"
-                                    }
-                                ],
-                                "resources": {},
-                                "stdin": true,
-                                "terminationMessagePath": "/dev/termination-log",
-                                "terminationMessagePolicy": "File",
-                                "tty": true,
-                                "volumeMounts": [
-                                    {
-                                        "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
-                                        "name": "default-token-gsh95",
-                                        "readOnly": true
-                                    }
-                                ]
-                            }
-                        ],
-                        "dnsPolicy": "ClusterFirst",
-                        "enableServiceLinks": true,
-                        "nodeName": "localhost",
-                        "priority": 0,
-                        "restartPolicy": "Always",
-                        "schedulerName": "default-scheduler",
-                        "securityContext": {},
-                        "serviceAccount": "default",
-                        "serviceAccountName": "default",
-                        "terminationGracePeriodSeconds": 30,
-                        "tolerations": [
-                            {
-                                "effect": "NoExecute",
-                                "key": "node.kubernetes.io/not-ready",
-                                "operator": "Exists",
-                                "tolerationSeconds": 300
-                            },
-                            {
-                                "effect": "NoExecute",
-                                "key": "node.kubernetes.io/unreachable",
-                                "operator": "Exists",
-                                "tolerationSeconds": 300
-                            }
-                        ],
-                        "volumes": [
-                            {
-                                "name": "default-token-gsh95",
-                                "secret": {
-                                    "defaultMode": 420,
-                                    "secretName": "default-token-gsh95"
-                                }
-                            }
-                        ]
-                    },
-                    "status": {
-                        "conditions": [
-                            {
-                                "lastProbeTime": null,
-                                "lastTransitionTime": "2020-09-29T13:36:25Z",
-                                "status": "True",
-                                "type": "Initialized"
-                            },
-                            {
-                                "lastProbeTime": null,
-                                "lastTransitionTime": "2020-09-29T13:36:33Z",
-                                "status": "True",
-                                "type": "Ready"
-                            },
-                            {
-                                "lastProbeTime": null,
-                                "lastTransitionTime": "2020-09-29T13:36:33Z",
-                                "status": "True",
-                                "type": "ContainersReady"
-                            },
-                            {
-                                "lastProbeTime": null,
-                                "lastTransitionTime": "2020-09-29T13:36:25Z",
-                                "status": "True",
-                                "type": "PodScheduled"
-                            }
-                        ],
-                        "containerStatuses": [
-                            {
-                                "containerID": "docker://87c9af78735400606d70ccd9cd85e2545e43cb3be9c30d4b4fe173da0062dda9",
-                                "image": "electrocucaracha/darkstat:latest",
-                                "imageID": "docker-pullable://electrocucaracha/darkstat@sha256:a6764fcc2e15f6156ac0e56f1d220b98970f2d4da9005bae99fb518cfd2f9c25",
-                                "lastState": {},
-                                "name": "darkstat",
-                                "ready": true,
-                                "restartCount": 0,
-                                "started": true,
-                                "state": {
-                                    "running": {
-                                        "startedAt": "2020-09-29T13:36:33Z"
-                                    }
-                                }
-                            },
-                            {
-                                "containerID": "docker://a004f95e7c7a681c7f400852aade096e3ffd75b7efc64e12e65b4ce1fe326577",
-                                "image": "rtsood/onap-vfw-demo-sink:0.2.0",
-                                "imageID": "docker-pullable://rtsood/onap-vfw-demo-sink@sha256:15b7abb0b67a3804ea5f954254633f996fc99c680b09d86a6cf15c3d7b14ab16",
-                                "lastState": {},
-                                "name": "sink",
-                                "ready": true,
-                                "restartCount": 0,
-                                "started": true,
-                                "state": {
-                                    "running": {
-                                        "startedAt": "2020-09-29T13:36:32Z"
-                                    }
-                                }
-                            }
-                        ],
-                        "hostIP": "192.168.255.3",
-                        "phase": "Running",
-                        "podIP": "10.244.64.46",
-                        "podIPs": [
-                            {
-                                "ip": "10.244.64.46"
-                            }
-                        ],
-                        "qosClass": "BestEffort",
-                        "startTime": "2020-09-29T13:36:25Z"
-                    }
-                }
             }
         ]
     }
 
+.. note:: The example of how the Stauts API could be integrated into CDS can be found in the Frankfurt version of k8s profile upload mechanism `Frankfurt CBA Definition`_ (*profile-upload* TOSCA node template), implemented in inside of the Kotlin script `Frankfurt CBA Script`_ for profile upload. This method shows how to integrate mutlicloud-k8s API endpoint into Kotlin script executed by CDS. For more details please take a look into Definition file of 1.0.45 version of the CBA and also the kotlin script used there for uploading the profile. 
+
 PART 4 - Future improvements needed
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Future development areas for this use case:
 
index 0f6d418..1dc0c23 100644 (file)
Binary files a/docs/files/vFW_CNF_CDS/Dummy_Heat_Flow.png and b/docs/files/vFW_CNF_CDS/Dummy_Heat_Flow.png differ
index 20123b2..7e896aa 100644 (file)
Binary files a/docs/files/vFW_CNF_CDS/Native_Helm_Flow.png and b/docs/files/vFW_CNF_CDS/Native_Helm_Flow.png differ
diff --git a/docs/files/vFW_CNF_CDS/helm-overrides-steps.png b/docs/files/vFW_CNF_CDS/helm-overrides-steps.png
new file mode 100644 (file)
index 0000000..1e93ef9
Binary files /dev/null and b/docs/files/vFW_CNF_CDS/helm-overrides-steps.png differ
index 98e3744..93a4a34 100644 (file)
Binary files a/docs/files/vFW_CNF_CDS/helm-overrides.png and b/docs/files/vFW_CNF_CDS/helm-overrides.png differ
index cf6a451..a60b040 100644 (file)
Binary files a/docs/files/vFW_CNF_CDS/profile-templating.png and b/docs/files/vFW_CNF_CDS/profile-templating.png differ
diff --git a/docs/files/vFW_CNF_CDS/status-response.json b/docs/files/vFW_CNF_CDS/status-response.json
new file mode 100644 (file)
index 0000000..78b6c83
--- /dev/null
@@ -0,0 +1,1213 @@
+{
+  "request": {
+    "rb-name": "vfw",
+    "rb-version": "plugin_test",
+    "profile-name": "test_profile",
+    "release-name": "",
+    "cloud-region": "kud",
+    "labels": {
+      "testCaseName": "plugin_fw.sh"
+    },
+    "override-values": {
+      "global.onapPrivateNetworkName": "onap-private-net-test"
+    }
+  },
+  "ready": false,
+  "resourceCount": 12,
+  "resourcesStatus": [
+    {
+      "name": "sink-configmap",
+      "GVK": {
+        "Group": "",
+        "Version": "v1",
+        "Kind": "ConfigMap"
+      },
+      "status": {
+        "apiVersion": "v1",
+        "data": {
+          "protected_net_gw": "192.168.20.100",
+          "protected_private_net_cidr": "192.168.10.0/24"
+        },
+        "kind": "ConfigMap",
+        "metadata": {
+          "creationTimestamp": "2020-09-29T13:36:25Z",
+          "labels": {
+            "k8splugin.io/rb-instance-id": "practical_nobel"
+          },
+          "name": "sink-configmap",
+          "namespace": "plugin-tests-namespace",
+          "resourceVersion": "10720771",
+          "selfLink": "/api/v1/namespaces/plugin-tests-namespace/configmaps/sink-configmap",
+          "uid": "46c8bec4-980c-455b-9eb0-fb84ac8cc450"
+        }
+      }
+    },
+    {
+      "name": "packetgen-service",
+      "GVK": {
+        "Group": "",
+        "Version": "v1",
+        "Kind": "Service"
+      },
+      "status": {
+        "apiVersion": "v1",
+        "kind": "Service",
+        "metadata": {
+          "creationTimestamp": "2020-09-29T13:36:25Z",
+          "labels": {
+            "app": "packetgen",
+            "chart": "packetgen",
+            "k8splugin.io/rb-instance-id": "practical_nobel",
+            "release": "test-release"
+          },
+          "name": "packetgen-service",
+          "namespace": "plugin-tests-namespace",
+          "resourceVersion": "10720776",
+          "selfLink": "/api/v1/namespaces/plugin-tests-namespace/services/packetgen-service",
+          "uid": "5e1c27c8-1db8-4883-a3a2-6f4e98e2f48b"
+        },
+        "spec": {
+          "clusterIP": "10.244.8.190",
+          "externalTrafficPolicy": "Cluster",
+          "ports": [
+            {
+              "nodePort": 30831,
+              "port": 2831,
+              "protocol": "TCP",
+              "targetPort": 2831
+            }
+          ],
+          "selector": {
+            "app": "packetgen",
+            "release": "test-release"
+          },
+          "sessionAffinity": "None",
+          "type": "NodePort"
+        },
+        "status": {
+          "loadBalancer": {}
+        }
+      }
+    },
+    {
+      "name": "sink-service",
+      "GVK": {
+        "Group": "",
+        "Version": "v1",
+        "Kind": "Service"
+      },
+      "status": {
+        "apiVersion": "v1",
+        "kind": "Service",
+        "metadata": {
+          "creationTimestamp": "2020-09-29T13:36:25Z",
+          "labels": {
+            "app": "sink",
+            "chart": "sink",
+            "k8splugin.io/rb-instance-id": "practical_nobel",
+            "release": "test-release"
+          },
+          "name": "sink-service",
+          "namespace": "plugin-tests-namespace",
+          "resourceVersion": "10720780",
+          "selfLink": "/api/v1/namespaces/plugin-tests-namespace/services/sink-service",
+          "uid": "789a14fe-1246-4cdd-ba9a-359240ba614f"
+        },
+        "spec": {
+          "clusterIP": "10.244.2.4",
+          "externalTrafficPolicy": "Cluster",
+          "ports": [
+            {
+              "nodePort": 30667,
+              "port": 667,
+              "protocol": "TCP",
+              "targetPort": 667
+            }
+          ],
+          "selector": {
+            "app": "sink",
+            "release": "test-release"
+          },
+          "sessionAffinity": "None",
+          "type": "NodePort"
+        },
+        "status": {
+          "loadBalancer": {}
+        }
+      }
+    },
+    {
+      "name": "test-release-packetgen",
+      "GVK": {
+        "Group": "apps",
+        "Version": "v1",
+        "Kind": "Deployment"
+      },
+      "status": {
+        "apiVersion": "apps/v1",
+        "kind": "Deployment",
+        "metadata": {
+          "annotations": {
+            "deployment.kubernetes.io/revision": "1"
+          },
+          "creationTimestamp": "2020-09-29T13:36:25Z",
+          "generation": 1,
+          "labels": {
+            "app": "packetgen",
+            "chart": "packetgen",
+            "k8splugin.io/rb-instance-id": "practical_nobel",
+            "release": "test-release"
+          },
+          "name": "test-release-packetgen",
+          "namespace": "plugin-tests-namespace",
+          "resourceVersion": "10720804",
+          "selfLink": "/apis/apps/v1/namespaces/plugin-tests-namespace/deployments/test-release-packetgen",
+          "uid": "42578e9f-7c88-46d6-94f7-a7bcc8e69ec6"
+        },
+        "spec": {
+          "progressDeadlineSeconds": 600,
+          "replicas": 1,
+          "revisionHistoryLimit": 10,
+          "selector": {
+            "matchLabels": {
+              "app": "packetgen",
+              "release": "test-release"
+            }
+          },
+          "strategy": {
+            "rollingUpdate": {
+              "maxSurge": "25%",
+              "maxUnavailable": "25%"
+            },
+            "type": "RollingUpdate"
+          },
+          "template": {
+            "metadata": {
+              "annotations": {
+                "VirtletCloudInitUserData": "ssh_pwauth: True\nusers:\n- name: admin\n  gecos: User\n  primary-group: admin\n  groups: users\n  sudo: ALL=(ALL) NOPASSWD:ALL\n  lock_passwd: false\n  passwd: \"$6$rounds=4096$QA5OCKHTE41$jRACivoPMJcOjLRgxl3t.AMfU7LhCFwOWv2z66CQX.TSxBy50JoYtycJXSPr2JceG.8Tq/82QN9QYt3euYEZW/\"\nruncmd:\n  - export demo_artifacts_version=1.5.0\n  - export vfw_private_ip_0=192.168.10.3\n  - export vsn_private_ip_0=192.168.20.3\n  - export protected_net_cidr=192.168.20.0/24\n  - export dcae_collector_ip=10.0.4.1\n  - export dcae_collector_port=8081\n  - export protected_net_gw=192.168.20.100/24\n  - export protected_private_net_cidr=192.168.10.0/24\n  - wget -O - https://git.onap.org/multicloud/k8s/plain/kud/tests/vFW/packetgen | sudo -E bash\n",
+                "VirtletLibvirtCPUSetting": "mode: host-model\n",
+                "VirtletRootVolumeSize": "5Gi",
+                "app": "packetgen",
+                "k8s.plugin.opnfv.org/nfn-network": "{ \"type\": \"ovn4nfv\", \"interface\":[ { \"name\": \"unprotected-private-net\", \"ipAddress\": \"192.168.10.2\", \"interface\": \"eth1\" , \"defaultGateway\": \"false\"}, { \"name\": \"onap-private-net-test\", \"ipAddress\": \"10.0.100.2\", \"interface\": \"eth2\" , \"defaultGateway\": \"false\"} ]}",
+                "k8s.v1.cni.cncf.io/networks": "[{\"name\": \"ovn-networkobj\", \"namespace\": \"default\"}]",
+                "kubernetes.io/target-runtime": "virtlet.cloud",
+                "release": "test-release"
+              },
+              "creationTimestamp": null,
+              "labels": {
+                "app": "packetgen",
+                "k8splugin.io/rb-instance-id": "practical_nobel",
+                "release": "test-release"
+              }
+            },
+            "spec": {
+              "affinity": {
+                "nodeAffinity": {
+                  "requiredDuringSchedulingIgnoredDuringExecution": {
+                    "nodeSelectorTerms": [
+                      {
+                        "matchExpressions": [
+                          {
+                            "key": "extraRuntime",
+                            "operator": "In",
+                            "values": [
+                              "virtlet"
+                            ]
+                          }
+                        ]
+                      }
+                    ]
+                  }
+                }
+              },
+              "containers": [
+                {
+                  "image": "virtlet.cloud/ubuntu/16.04:latest",
+                  "imagePullPolicy": "IfNotPresent",
+                  "name": "packetgen",
+                  "resources": {
+                    "limits": {
+                      "memory": "4Gi"
+                    }
+                  },
+                  "stdin": true,
+                  "terminationMessagePath": "/dev/termination-log",
+                  "terminationMessagePolicy": "File",
+                  "tty": true
+                }
+              ],
+              "dnsPolicy": "ClusterFirst",
+              "restartPolicy": "Always",
+              "schedulerName": "default-scheduler",
+              "securityContext": {},
+              "terminationGracePeriodSeconds": 30
+            }
+          }
+        },
+        "status": {
+          "conditions": [
+            {
+              "lastTransitionTime": "2020-09-29T13:36:25Z",
+              "lastUpdateTime": "2020-09-29T13:36:25Z",
+              "message": "Deployment does not have minimum availability.",
+              "reason": "MinimumReplicasUnavailable",
+              "status": "False",
+              "type": "Available"
+            },
+            {
+              "lastTransitionTime": "2020-09-29T13:36:25Z",
+              "lastUpdateTime": "2020-09-29T13:36:25Z",
+              "message": "ReplicaSet \"test-release-packetgen-5647bfb56\" is progressing.",
+              "reason": "ReplicaSetUpdated",
+              "status": "True",
+              "type": "Progressing"
+            }
+          ],
+          "observedGeneration": 1,
+          "replicas": 1,
+          "unavailableReplicas": 1,
+          "updatedReplicas": 1
+        }
+      }
+    },
+    {
+      "name": "test-release-sink",
+      "GVK": {
+        "Group": "apps",
+        "Version": "v1",
+        "Kind": "Deployment"
+      },
+      "status": {
+        "apiVersion": "apps/v1",
+        "kind": "Deployment",
+        "metadata": {
+          "annotations": {
+            "deployment.kubernetes.io/revision": "1"
+          },
+          "creationTimestamp": "2020-09-29T13:36:25Z",
+          "generation": 1,
+          "labels": {
+            "app": "sink",
+            "chart": "sink",
+            "k8splugin.io/rb-instance-id": "practical_nobel",
+            "release": "test-release"
+          },
+          "name": "test-release-sink",
+          "namespace": "plugin-tests-namespace",
+          "resourceVersion": "10720857",
+          "selfLink": "/apis/apps/v1/namespaces/plugin-tests-namespace/deployments/test-release-sink",
+          "uid": "1f50eecf-c924-4434-be87-daf7c64b6506"
+        },
+        "spec": {
+          "progressDeadlineSeconds": 600,
+          "replicas": 1,
+          "revisionHistoryLimit": 10,
+          "selector": {
+            "matchLabels": {
+              "app": "sink",
+              "release": "test-release"
+            }
+          },
+          "strategy": {
+            "rollingUpdate": {
+              "maxSurge": "25%",
+              "maxUnavailable": "25%"
+            },
+            "type": "RollingUpdate"
+          },
+          "template": {
+            "metadata": {
+              "annotations": {
+                "k8s.plugin.opnfv.org/nfn-network": "{ \"type\": \"ovn4nfv\", \"interface\": [ { \"name\": \"protected-private-net\", \"ipAddress\": \"192.168.20.3\", \"interface\": \"eth1\", \"defaultGateway\": \"false\" }, { \"name\": \"onap-private-net-test\", \"ipAddress\": \"10.10.100.4\", \"interface\": \"eth2\" , \"defaultGateway\": \"false\"} ]}",
+                "k8s.v1.cni.cncf.io/networks": "[{\"name\": \"ovn-networkobj\", \"namespace\": \"default\"}]"
+              },
+              "creationTimestamp": null,
+              "labels": {
+                "app": "sink",
+                "k8splugin.io/rb-instance-id": "practical_nobel",
+                "release": "test-release"
+              }
+            },
+            "spec": {
+              "containers": [
+                {
+                  "envFrom": [
+                    {
+                      "configMapRef": {
+                        "name": "sink-configmap"
+                      }
+                    }
+                  ],
+                  "image": "rtsood/onap-vfw-demo-sink:0.2.0",
+                  "imagePullPolicy": "IfNotPresent",
+                  "name": "sink",
+                  "resources": {},
+                  "securityContext": {
+                    "privileged": true
+                  },
+                  "stdin": true,
+                  "terminationMessagePath": "/dev/termination-log",
+                  "terminationMessagePolicy": "File",
+                  "tty": true
+                },
+                {
+                  "image": "electrocucaracha/darkstat:latest",
+                  "imagePullPolicy": "IfNotPresent",
+                  "name": "darkstat",
+                  "ports": [
+                    {
+                      "containerPort": 667,
+                      "protocol": "TCP"
+                    }
+                  ],
+                  "resources": {},
+                  "stdin": true,
+                  "terminationMessagePath": "/dev/termination-log",
+                  "terminationMessagePolicy": "File",
+                  "tty": true
+                }
+              ],
+              "dnsPolicy": "ClusterFirst",
+              "restartPolicy": "Always",
+              "schedulerName": "default-scheduler",
+              "securityContext": {},
+              "terminationGracePeriodSeconds": 30
+            }
+          }
+        },
+        "status": {
+          "availableReplicas": 1,
+          "conditions": [
+            {
+              "lastTransitionTime": "2020-09-29T13:36:33Z",
+              "lastUpdateTime": "2020-09-29T13:36:33Z",
+              "message": "Deployment has minimum availability.",
+              "reason": "MinimumReplicasAvailable",
+              "status": "True",
+              "type": "Available"
+            },
+            {
+              "lastTransitionTime": "2020-09-29T13:36:25Z",
+              "lastUpdateTime": "2020-09-29T13:36:33Z",
+              "message": "ReplicaSet \"test-release-sink-6546c4f698\" has successfully progressed.",
+              "reason": "NewReplicaSetAvailable",
+              "status": "True",
+              "type": "Progressing"
+            }
+          ],
+          "observedGeneration": 1,
+          "readyReplicas": 1,
+          "replicas": 1,
+          "updatedReplicas": 1
+        }
+      }
+    },
+    {
+      "name": "test-release-firewall",
+      "GVK": {
+        "Group": "apps",
+        "Version": "v1",
+        "Kind": "Deployment"
+      },
+      "status": {
+        "apiVersion": "apps/v1",
+        "kind": "Deployment",
+        "metadata": {
+          "annotations": {
+            "deployment.kubernetes.io/revision": "1"
+          },
+          "creationTimestamp": "2020-09-29T13:36:25Z",
+          "generation": 1,
+          "labels": {
+            "app": "firewall",
+            "chart": "firewall",
+            "k8splugin.io/rb-instance-id": "practical_nobel",
+            "release": "test-release"
+          },
+          "name": "test-release-firewall",
+          "namespace": "plugin-tests-namespace",
+          "resourceVersion": "10720823",
+          "selfLink": "/apis/apps/v1/namespaces/plugin-tests-namespace/deployments/test-release-firewall",
+          "uid": "77392f60-7d12-4846-8edb-f4a65a4be098"
+        },
+        "spec": {
+          "progressDeadlineSeconds": 600,
+          "replicas": 1,
+          "revisionHistoryLimit": 10,
+          "selector": {
+            "matchLabels": {
+              "app": "firewall",
+              "release": "test-release"
+            }
+          },
+          "strategy": {
+            "rollingUpdate": {
+              "maxSurge": "25%",
+              "maxUnavailable": "25%"
+            },
+            "type": "RollingUpdate"
+          },
+          "template": {
+            "metadata": {
+              "annotations": {
+                "VirtletCloudInitUserData": "ssh_pwauth: True\nusers:\n- name: admin\n  gecos: User\n  primary-group: admin\n  groups: users\n  sudo: ALL=(ALL) NOPASSWD:ALL\n  lock_passwd: false\n  passwd: \"$6$rounds=4096$QA5OCKHTE41$jRACivoPMJcOjLRgxl3t.AMfU7LhCFwOWv2z66CQX.TSxBy50JoYtycJXSPr2JceG.8Tq/82QN9QYt3euYEZW/\"\nruncmd:\n  - export demo_artifacts_version=1.5.0\n  - export vfw_private_ip_0=192.168.10.3\n  - export vsn_private_ip_0=192.168.20.3\n  - export protected_net_cidr=192.168.20.0/24\n  - export dcae_collector_ip=10.0.4.1\n  - export dcae_collector_port=8081\n  - export protected_net_gw=192.168.20.100/24\n  - export protected_private_net_cidr=192.168.10.0/24\n  - wget -O - https://git.onap.org/multicloud/k8s/plain/kud/tests/vFW/firewall | sudo -E bash\n",
+                "VirtletLibvirtCPUSetting": "mode: host-model\n",
+                "VirtletRootVolumeSize": "5Gi",
+                "k8s.plugin.opnfv.org/nfn-network": "{ \"type\": \"ovn4nfv\", \"interface\": [ { \"name\": \"unprotected-private-net\", \"ipAddress\": \"192.168.10.3\", \"interface\": \"eth1\" , \"defaultGateway\": \"false\"}, { \"name\": \"protected-private-net\", \"ipAddress\": \"192.168.20.2\", \"interface\": \"eth2\", \"defaultGateway\": \"false\" }, { \"name\": \"onap-private-net-test\", \"ipAddress\": \"10.10.100.3\", \"interface\": \"eth3\" , \"defaultGateway\": \"false\"} ]}",
+                "k8s.v1.cni.cncf.io/networks": "[{\"name\": \"ovn-networkobj\", \"namespace\": \"default\"}]",
+                "kubernetes.io/target-runtime": "virtlet.cloud"
+              },
+              "creationTimestamp": null,
+              "labels": {
+                "app": "firewall",
+                "k8splugin.io/rb-instance-id": "practical_nobel",
+                "release": "test-release"
+              }
+            },
+            "spec": {
+              "affinity": {
+                "nodeAffinity": {
+                  "requiredDuringSchedulingIgnoredDuringExecution": {
+                    "nodeSelectorTerms": [
+                      {
+                        "matchExpressions": [
+                          {
+                            "key": "extraRuntime",
+                            "operator": "In",
+                            "values": [
+                              "virtlet"
+                            ]
+                          }
+                        ]
+                      }
+                    ]
+                  }
+                }
+              },
+              "containers": [
+                {
+                  "image": "virtlet.cloud/ubuntu/16.04:latest",
+                  "imagePullPolicy": "IfNotPresent",
+                  "name": "firewall",
+                  "resources": {
+                    "limits": {
+                      "memory": "4Gi"
+                    }
+                  },
+                  "stdin": true,
+                  "terminationMessagePath": "/dev/termination-log",
+                  "terminationMessagePolicy": "File",
+                  "tty": true
+                }
+              ],
+              "dnsPolicy": "ClusterFirst",
+              "restartPolicy": "Always",
+              "schedulerName": "default-scheduler",
+              "securityContext": {},
+              "terminationGracePeriodSeconds": 30
+            }
+          }
+        },
+        "status": {
+          "conditions": [
+            {
+              "lastTransitionTime": "2020-09-29T13:36:25Z",
+              "lastUpdateTime": "2020-09-29T13:36:25Z",
+              "message": "Deployment does not have minimum availability.",
+              "reason": "MinimumReplicasUnavailable",
+              "status": "False",
+              "type": "Available"
+            },
+            {
+              "lastTransitionTime": "2020-09-29T13:36:25Z",
+              "lastUpdateTime": "2020-09-29T13:36:25Z",
+              "message": "ReplicaSet \"test-release-firewall-5bf9995f5f\" is progressing.",
+              "reason": "ReplicaSetUpdated",
+              "status": "True",
+              "type": "Progressing"
+            }
+          ],
+          "observedGeneration": 1,
+          "replicas": 1,
+          "unavailableReplicas": 1,
+          "updatedReplicas": 1
+        }
+      }
+    },
+    {
+      "name": "onap-private-net-test",
+      "GVK": {
+        "Group": "k8s.plugin.opnfv.org",
+        "Version": "v1alpha1",
+        "Kind": "Network"
+      },
+      "status": {
+        "apiVersion": "k8s.plugin.opnfv.org/v1alpha1",
+        "kind": "Network",
+        "metadata": {
+          "creationTimestamp": "2020-09-29T13:36:25Z",
+          "finalizers": [
+            "nfnCleanUpNetwork"
+          ],
+          "generation": 2,
+          "labels": {
+            "k8splugin.io/rb-instance-id": "practical_nobel"
+          },
+          "name": "onap-private-net-test",
+          "namespace": "plugin-tests-namespace",
+          "resourceVersion": "10720825",
+          "selfLink": "/apis/k8s.plugin.opnfv.org/v1alpha1/namespaces/plugin-tests-namespace/networks/onap-private-net-test",
+          "uid": "43d413f1-f222-4d98-9ddd-b209d3ade106"
+        },
+        "spec": {
+          "cniType": "ovn4nfv",
+          "dns": {},
+          "ipv4Subnets": [
+            {
+              "gateway": "10.10.0.1/16",
+              "name": "subnet1",
+              "subnet": "10.10.0.0/16"
+            }
+          ]
+        },
+        "status": {
+          "state": "Created"
+        }
+      }
+    },
+    {
+      "name": "protected-private-net",
+      "GVK": {
+        "Group": "k8s.plugin.opnfv.org",
+        "Version": "v1alpha1",
+        "Kind": "Network"
+      },
+      "status": {
+        "apiVersion": "k8s.plugin.opnfv.org/v1alpha1",
+        "kind": "Network",
+        "metadata": {
+          "creationTimestamp": "2020-09-29T13:36:25Z",
+          "finalizers": [
+            "nfnCleanUpNetwork"
+          ],
+          "generation": 2,
+          "labels": {
+            "k8splugin.io/rb-instance-id": "practical_nobel"
+          },
+          "name": "protected-private-net",
+          "namespace": "plugin-tests-namespace",
+          "resourceVersion": "10720827",
+          "selfLink": "/apis/k8s.plugin.opnfv.org/v1alpha1/namespaces/plugin-tests-namespace/networks/protected-private-net",
+          "uid": "75c98944-80b6-4158-afed-8efa7a1075e2"
+        },
+        "spec": {
+          "cniType": "ovn4nfv",
+          "dns": {},
+          "ipv4Subnets": [
+            {
+              "gateway": "192.168.20.100/24",
+              "name": "subnet1",
+              "subnet": "192.168.20.0/24"
+            }
+          ]
+        },
+        "status": {
+          "state": "Created"
+        }
+      }
+    },
+    {
+      "name": "unprotected-private-net",
+      "GVK": {
+        "Group": "k8s.plugin.opnfv.org",
+        "Version": "v1alpha1",
+        "Kind": "Network"
+      },
+      "status": {
+        "apiVersion": "k8s.plugin.opnfv.org/v1alpha1",
+        "kind": "Network",
+        "metadata": {
+          "creationTimestamp": "2020-09-29T13:36:25Z",
+          "finalizers": [
+            "nfnCleanUpNetwork"
+          ],
+          "generation": 2,
+          "labels": {
+            "k8splugin.io/rb-instance-id": "practical_nobel"
+          },
+          "name": "unprotected-private-net",
+          "namespace": "plugin-tests-namespace",
+          "resourceVersion": "10720829",
+          "selfLink": "/apis/k8s.plugin.opnfv.org/v1alpha1/namespaces/plugin-tests-namespace/networks/unprotected-private-net",
+          "uid": "54995c10-bffd-4bb2-bbab-5de266af9456"
+        },
+        "spec": {
+          "cniType": "ovn4nfv",
+          "dns": {},
+          "ipv4Subnets": [
+            {
+              "gateway": "192.168.10.1/24",
+              "name": "subnet1",
+              "subnet": "192.168.10.0/24"
+            }
+          ]
+        },
+        "status": {
+          "state": "Created"
+        }
+      }
+    },
+    {
+      "name": "test-release-firewall-5bf9995f5f-hnvps",
+      "GVK": {
+        "Group": "",
+        "Version": "",
+        "Kind": ""
+      },
+      "status": {
+        "metadata": {
+          "annotations": {
+            "VirtletCloudInitUserData": "ssh_pwauth: True\nusers:\n- name: admin\n  gecos: User\n  primary-group: admin\n  groups: users\n  sudo: ALL=(ALL) NOPASSWD:ALL\n  lock_passwd: false\n  passwd: \"$6$rounds=4096$QA5OCKHTE41$jRACivoPMJcOjLRgxl3t.AMfU7LhCFwOWv2z66CQX.TSxBy50JoYtycJXSPr2JceG.8Tq/82QN9QYt3euYEZW/\"\nruncmd:\n  - export demo_artifacts_version=1.5.0\n  - export vfw_private_ip_0=192.168.10.3\n  - export vsn_private_ip_0=192.168.20.3\n  - export protected_net_cidr=192.168.20.0/24\n  - export dcae_collector_ip=10.0.4.1\n  - export dcae_collector_port=8081\n  - export protected_net_gw=192.168.20.100/24\n  - export protected_private_net_cidr=192.168.10.0/24\n  - wget -O - https://git.onap.org/multicloud/k8s/plain/kud/tests/vFW/firewall | sudo -E bash\n",
+            "VirtletLibvirtCPUSetting": "mode: host-model\n",
+            "VirtletRootVolumeSize": "5Gi",
+            "k8s.plugin.opnfv.org/nfn-network": "{ \"type\": \"ovn4nfv\", \"interface\": [ { \"name\": \"unprotected-private-net\", \"ipAddress\": \"192.168.10.3\", \"interface\": \"eth1\" , \"defaultGateway\": \"false\"}, { \"name\": \"protected-private-net\", \"ipAddress\": \"192.168.20.2\", \"interface\": \"eth2\", \"defaultGateway\": \"false\" }, { \"name\": \"onap-private-net-test\", \"ipAddress\": \"10.10.100.3\", \"interface\": \"eth3\" , \"defaultGateway\": \"false\"} ]}",
+            "k8s.plugin.opnfv.org/ovnInterfaces": "[{\"ip_address\":\"192.168.10.3/24\", \"mac_address\":\"00:00:00:2b:62:71\", \"gateway_ip\": \"192.168.10.1\",\"defaultGateway\":\"false\",\"interface\":\"eth1\"},{\"ip_address\":\"192.168.20.2/24\", \"mac_address\":\"00:00:00:43:d6:f3\", \"gateway_ip\": \"192.168.20.100\",\"defaultGateway\":\"false\",\"interface\":\"eth2\"},{\"ip_address\":\"10.10.100.3/16\", \"mac_address\":\"00:00:00:03:4c:34\", \"gateway_ip\": \"10.10.0.1\",\"defaultGateway\":\"false\",\"interface\":\"eth3\"}]",
+            "k8s.v1.cni.cncf.io/networks": "[{\"name\": \"ovn-networkobj\", \"namespace\": \"default\"}]",
+            "k8s.v1.cni.cncf.io/networks-status": "[{\n    \"name\": \"cni0\",\n    \"interface\": \"virtlet-eth0\",\n    \"ips\": [\n        \"10.244.64.45\"\n    ],\n    \"mac\": \"0a:58:0a:f4:40:2d\",\n    \"default\": true,\n    \"dns\": {}\n},{\n    \"name\": \"ovn4nfv-k8s-plugin\",\n    \"interface\": \"eth3\",\n    \"ips\": [\n        \"192.168.10.3\",\n        \"192.168.20.2\",\n        \"10.10.100.3\"\n    ],\n    \"mac\": \"00:00:00:03:4c:34\",\n    \"dns\": {}\n}]",
+            "kubernetes.io/target-runtime": "virtlet.cloud"
+          },
+          "creationTimestamp": "2020-09-29T13:36:25Z",
+          "generateName": "test-release-firewall-5bf9995f5f-",
+          "labels": {
+            "app": "firewall",
+            "k8splugin.io/rb-instance-id": "practical_nobel",
+            "pod-template-hash": "5bf9995f5f",
+            "release": "test-release"
+          },
+          "name": "test-release-firewall-5bf9995f5f-hnvps",
+          "namespace": "plugin-tests-namespace",
+          "ownerReferences": [
+            {
+              "apiVersion": "apps/v1",
+              "blockOwnerDeletion": true,
+              "controller": true,
+              "kind": "ReplicaSet",
+              "name": "test-release-firewall-5bf9995f5f",
+              "uid": "8d68ff0c-c6f8-426c-8ebc-0ce5b7fb5132"
+            }
+          ],
+          "resourceVersion": "10720850",
+          "selfLink": "/api/v1/namespaces/plugin-tests-namespace/pods/test-release-firewall-5bf9995f5f-hnvps",
+          "uid": "92b169e3-2d25-449d-b029-d47674eb98e6"
+        },
+        "spec": {
+          "affinity": {
+            "nodeAffinity": {
+              "requiredDuringSchedulingIgnoredDuringExecution": {
+                "nodeSelectorTerms": [
+                  {
+                    "matchExpressions": [
+                      {
+                        "key": "extraRuntime",
+                        "operator": "In",
+                        "values": [
+                          "virtlet"
+                        ]
+                      }
+                    ]
+                  }
+                ]
+              }
+            }
+          },
+          "containers": [
+            {
+              "image": "virtlet.cloud/ubuntu/16.04:latest",
+              "imagePullPolicy": "IfNotPresent",
+              "name": "firewall",
+              "resources": {
+                "limits": {
+                  "memory": "4Gi"
+                },
+                "requests": {
+                  "memory": "4Gi"
+                }
+              },
+              "stdin": true,
+              "terminationMessagePath": "/dev/termination-log",
+              "terminationMessagePolicy": "File",
+              "tty": true,
+              "volumeMounts": [
+                {
+                  "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+                  "name": "default-token-gsh95",
+                  "readOnly": true
+                }
+              ]
+            }
+          ],
+          "dnsPolicy": "ClusterFirst",
+          "enableServiceLinks": true,
+          "nodeName": "localhost",
+          "priority": 0,
+          "restartPolicy": "Always",
+          "schedulerName": "default-scheduler",
+          "securityContext": {},
+          "serviceAccount": "default",
+          "serviceAccountName": "default",
+          "terminationGracePeriodSeconds": 30,
+          "tolerations": [
+            {
+              "effect": "NoExecute",
+              "key": "node.kubernetes.io/not-ready",
+              "operator": "Exists",
+              "tolerationSeconds": 300
+            },
+            {
+              "effect": "NoExecute",
+              "key": "node.kubernetes.io/unreachable",
+              "operator": "Exists",
+              "tolerationSeconds": 300
+            }
+          ],
+          "volumes": [
+            {
+              "name": "default-token-gsh95",
+              "secret": {
+                "defaultMode": 420,
+                "secretName": "default-token-gsh95"
+              }
+            }
+          ]
+        },
+        "status": {
+          "conditions": [
+            {
+              "lastProbeTime": null,
+              "lastTransitionTime": "2020-09-29T13:36:25Z",
+              "status": "True",
+              "type": "Initialized"
+            },
+            {
+              "lastProbeTime": null,
+              "lastTransitionTime": "2020-09-29T13:36:25Z",
+              "message": "containers with unready status: [firewall]",
+              "reason": "ContainersNotReady",
+              "status": "False",
+              "type": "Ready"
+            },
+            {
+              "lastProbeTime": null,
+              "lastTransitionTime": "2020-09-29T13:36:25Z",
+              "message": "containers with unready status: [firewall]",
+              "reason": "ContainersNotReady",
+              "status": "False",
+              "type": "ContainersReady"
+            },
+            {
+              "lastProbeTime": null,
+              "lastTransitionTime": "2020-09-29T13:36:25Z",
+              "status": "True",
+              "type": "PodScheduled"
+            }
+          ],
+          "containerStatuses": [
+            {
+              "image": "virtlet.cloud/ubuntu/16.04:latest",
+              "imageID": "",
+              "lastState": {},
+              "name": "firewall",
+              "ready": false,
+              "restartCount": 0,
+              "state": {
+                "waiting": {
+                  "reason": "ContainerCreating"
+                }
+              }
+            }
+          ],
+          "hostIP": "192.168.255.3",
+          "phase": "Pending",
+          "qosClass": "Burstable",
+          "startTime": "2020-09-29T13:36:25Z"
+        }
+      }
+    },
+    {
+      "name": "test-release-packetgen-5647bfb56-ghpbs",
+      "GVK": {
+        "Group": "",
+        "Version": "",
+        "Kind": ""
+      },
+      "status": {
+        "metadata": {
+          "annotations": {
+            "VirtletCloudInitUserData": "ssh_pwauth: True\nusers:\n- name: admin\n  gecos: User\n  primary-group: admin\n  groups: users\n  sudo: ALL=(ALL) NOPASSWD:ALL\n  lock_passwd: false\n  passwd: \"$6$rounds=4096$QA5OCKHTE41$jRACivoPMJcOjLRgxl3t.AMfU7LhCFwOWv2z66CQX.TSxBy50JoYtycJXSPr2JceG.8Tq/82QN9QYt3euYEZW/\"\nruncmd:\n  - export demo_artifacts_version=1.5.0\n  - export vfw_private_ip_0=192.168.10.3\n  - export vsn_private_ip_0=192.168.20.3\n  - export protected_net_cidr=192.168.20.0/24\n  - export dcae_collector_ip=10.0.4.1\n  - export dcae_collector_port=8081\n  - export protected_net_gw=192.168.20.100/24\n  - export protected_private_net_cidr=192.168.10.0/24\n  - wget -O - https://git.onap.org/multicloud/k8s/plain/kud/tests/vFW/packetgen | sudo -E bash\n",
+            "VirtletLibvirtCPUSetting": "mode: host-model\n",
+            "VirtletRootVolumeSize": "5Gi",
+            "app": "packetgen",
+            "k8s.plugin.opnfv.org/nfn-network": "{ \"type\": \"ovn4nfv\", \"interface\":[ { \"name\": \"unprotected-private-net\", \"ipAddress\": \"192.168.10.2\", \"interface\": \"eth1\" , \"defaultGateway\": \"false\"}, { \"name\": \"onap-private-net-test\", \"ipAddress\": \"10.0.100.2\", \"interface\": \"eth2\" , \"defaultGateway\": \"false\"} ]}",
+            "k8s.plugin.opnfv.org/ovnInterfaces": "[{\"ip_address\":\"192.168.10.2/24\", \"mac_address\":\"00:00:00:ed:8c:d1\", \"gateway_ip\": \"192.168.10.1\",\"defaultGateway\":\"false\",\"interface\":\"eth1\"},{\"ip_address\":\"10.0.100.2/16\", \"mac_address\":\"00:00:00:97:31:3f\", \"gateway_ip\": \"10.10.0.1\",\"defaultGateway\":\"false\",\"interface\":\"eth2\"}]",
+            "k8s.v1.cni.cncf.io/networks": "[{\"name\": \"ovn-networkobj\", \"namespace\": \"default\"}]",
+            "k8s.v1.cni.cncf.io/networks-status": "[{\n    \"name\": \"cni0\",\n    \"interface\": \"virtlet-eth0\",\n    \"ips\": [\n        \"10.244.64.44\"\n    ],\n    \"mac\": \"0a:58:0a:f4:40:2c\",\n    \"default\": true,\n    \"dns\": {}\n},{\n    \"name\": \"ovn4nfv-k8s-plugin\",\n    \"interface\": \"eth2\",\n    \"ips\": [\n        \"192.168.10.2\",\n        \"10.0.100.2\"\n    ],\n    \"mac\": \"00:00:00:97:31:3f\",\n    \"dns\": {}\n}]",
+            "kubernetes.io/target-runtime": "virtlet.cloud",
+            "release": "test-release"
+          },
+          "creationTimestamp": "2020-09-29T13:36:25Z",
+          "generateName": "test-release-packetgen-5647bfb56-",
+          "labels": {
+            "app": "packetgen",
+            "k8splugin.io/rb-instance-id": "practical_nobel",
+            "pod-template-hash": "5647bfb56",
+            "release": "test-release"
+          },
+          "name": "test-release-packetgen-5647bfb56-ghpbs",
+          "namespace": "plugin-tests-namespace",
+          "ownerReferences": [
+            {
+              "apiVersion": "apps/v1",
+              "blockOwnerDeletion": true,
+              "controller": true,
+              "kind": "ReplicaSet",
+              "name": "test-release-packetgen-5647bfb56",
+              "uid": "3c227839-04ad-4d16-b9ea-d8f436426de1"
+            }
+          ],
+          "resourceVersion": "10720852",
+          "selfLink": "/api/v1/namespaces/plugin-tests-namespace/pods/test-release-packetgen-5647bfb56-ghpbs",
+          "uid": "74aad8c5-b881-4881-b634-46ad48ccb857"
+        },
+        "spec": {
+          "affinity": {
+            "nodeAffinity": {
+              "requiredDuringSchedulingIgnoredDuringExecution": {
+                "nodeSelectorTerms": [
+                  {
+                    "matchExpressions": [
+                      {
+                        "key": "extraRuntime",
+                        "operator": "In",
+                        "values": [
+                          "virtlet"
+                        ]
+                      }
+                    ]
+                  }
+                ]
+              }
+            }
+          },
+          "containers": [
+            {
+              "image": "virtlet.cloud/ubuntu/16.04:latest",
+              "imagePullPolicy": "IfNotPresent",
+              "name": "packetgen",
+              "resources": {
+                "limits": {
+                  "memory": "4Gi"
+                },
+                "requests": {
+                  "memory": "4Gi"
+                }
+              },
+              "stdin": true,
+              "terminationMessagePath": "/dev/termination-log",
+              "terminationMessagePolicy": "File",
+              "tty": true,
+              "volumeMounts": [
+                {
+                  "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+                  "name": "default-token-gsh95",
+                  "readOnly": true
+                }
+              ]
+            }
+          ],
+          "dnsPolicy": "ClusterFirst",
+          "enableServiceLinks": true,
+          "nodeName": "localhost",
+          "priority": 0,
+          "restartPolicy": "Always",
+          "schedulerName": "default-scheduler",
+          "securityContext": {},
+          "serviceAccount": "default",
+          "serviceAccountName": "default",
+          "terminationGracePeriodSeconds": 30,
+          "tolerations": [
+            {
+              "effect": "NoExecute",
+              "key": "node.kubernetes.io/not-ready",
+              "operator": "Exists",
+              "tolerationSeconds": 300
+            },
+            {
+              "effect": "NoExecute",
+              "key": "node.kubernetes.io/unreachable",
+              "operator": "Exists",
+              "tolerationSeconds": 300
+            }
+          ],
+          "volumes": [
+            {
+              "name": "default-token-gsh95",
+              "secret": {
+                "defaultMode": 420,
+                "secretName": "default-token-gsh95"
+              }
+            }
+          ]
+        },
+        "status": {
+          "conditions": [
+            {
+              "lastProbeTime": null,
+              "lastTransitionTime": "2020-09-29T13:36:25Z",
+              "status": "True",
+              "type": "Initialized"
+            },
+            {
+              "lastProbeTime": null,
+              "lastTransitionTime": "2020-09-29T13:36:25Z",
+              "message": "containers with unready status: [packetgen]",
+              "reason": "ContainersNotReady",
+              "status": "False",
+              "type": "Ready"
+            },
+            {
+              "lastProbeTime": null,
+              "lastTransitionTime": "2020-09-29T13:36:25Z",
+              "message": "containers with unready status: [packetgen]",
+              "reason": "ContainersNotReady",
+              "status": "False",
+              "type": "ContainersReady"
+            },
+            {
+              "lastProbeTime": null,
+              "lastTransitionTime": "2020-09-29T13:36:25Z",
+              "status": "True",
+              "type": "PodScheduled"
+            }
+          ],
+          "containerStatuses": [
+            {
+              "image": "virtlet.cloud/ubuntu/16.04:latest",
+              "imageID": "",
+              "lastState": {},
+              "name": "packetgen",
+              "ready": false,
+              "restartCount": 0,
+              "state": {
+                "waiting": {
+                  "reason": "ContainerCreating"
+                }
+              }
+            }
+          ],
+          "hostIP": "192.168.255.3",
+          "phase": "Pending",
+          "qosClass": "Burstable",
+          "startTime": "2020-09-29T13:36:25Z"
+        }
+      }
+    },
+    {
+      "name": "test-release-sink-6546c4f698-dv529",
+      "GVK": {
+        "Group": "",
+        "Version": "",
+        "Kind": ""
+      },
+      "status": {
+        "metadata": {
+          "annotations": {
+            "k8s.plugin.opnfv.org/nfn-network": "{ \"type\": \"ovn4nfv\", \"interface\": [ { \"name\": \"protected-private-net\", \"ipAddress\": \"192.168.20.3\", \"interface\": \"eth1\", \"defaultGateway\": \"false\" }, { \"name\": \"onap-private-net-test\", \"ipAddress\": \"10.10.100.4\", \"interface\": \"eth2\" , \"defaultGateway\": \"false\"} ]}",
+            "k8s.plugin.opnfv.org/ovnInterfaces": "[{\"ip_address\":\"192.168.20.3/24\", \"mac_address\":\"00:00:00:13:40:87\", \"gateway_ip\": \"192.168.20.100\",\"defaultGateway\":\"false\",\"interface\":\"eth1\"},{\"ip_address\":\"10.10.100.4/16\", \"mac_address\":\"00:00:00:49:de:fc\", \"gateway_ip\": \"10.10.0.1\",\"defaultGateway\":\"false\",\"interface\":\"eth2\"}]",
+            "k8s.v1.cni.cncf.io/networks": "[{\"name\": \"ovn-networkobj\", \"namespace\": \"default\"}]",
+            "k8s.v1.cni.cncf.io/networks-status": "[{\n    \"name\": \"cni0\",\n    \"interface\": \"eth0\",\n    \"ips\": [\n        \"10.244.64.46\"\n    ],\n    \"mac\": \"0a:58:0a:f4:40:2e\",\n    \"default\": true,\n    \"dns\": {}\n},{\n    \"name\": \"ovn4nfv-k8s-plugin\",\n    \"interface\": \"eth2\",\n    \"ips\": [\n        \"192.168.20.3\",\n        \"10.10.100.4\"\n    ],\n    \"mac\": \"00:00:00:49:de:fc\",\n    \"dns\": {}\n}]"
+          },
+          "creationTimestamp": "2020-09-29T13:36:25Z",
+          "generateName": "test-release-sink-6546c4f698-",
+          "labels": {
+            "app": "sink",
+            "k8splugin.io/rb-instance-id": "practical_nobel",
+            "pod-template-hash": "6546c4f698",
+            "release": "test-release"
+          },
+          "name": "test-release-sink-6546c4f698-dv529",
+          "namespace": "plugin-tests-namespace",
+          "ownerReferences": [
+            {
+              "apiVersion": "apps/v1",
+              "blockOwnerDeletion": true,
+              "controller": true,
+              "kind": "ReplicaSet",
+              "name": "test-release-sink-6546c4f698",
+              "uid": "72c9da29-af3b-4b5c-a90b-06285ae83429"
+            }
+          ],
+          "resourceVersion": "10720854",
+          "selfLink": "/api/v1/namespaces/plugin-tests-namespace/pods/test-release-sink-6546c4f698-dv529",
+          "uid": "a4e24041-65c9-4b86-8f10-a27a4dba26bb"
+        },
+        "spec": {
+          "containers": [
+            {
+              "envFrom": [
+                {
+                  "configMapRef": {
+                    "name": "sink-configmap"
+                  }
+                }
+              ],
+              "image": "rtsood/onap-vfw-demo-sink:0.2.0",
+              "imagePullPolicy": "IfNotPresent",
+              "name": "sink",
+              "resources": {},
+              "securityContext": {
+                "privileged": true
+              },
+              "stdin": true,
+              "terminationMessagePath": "/dev/termination-log",
+              "terminationMessagePolicy": "File",
+              "tty": true,
+              "volumeMounts": [
+                {
+                  "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+                  "name": "default-token-gsh95",
+                  "readOnly": true
+                }
+              ]
+            },
+            {
+              "image": "electrocucaracha/darkstat:latest",
+              "imagePullPolicy": "IfNotPresent",
+              "name": "darkstat",
+              "ports": [
+                {
+                  "containerPort": 667,
+                  "protocol": "TCP"
+                }
+              ],
+              "resources": {},
+              "stdin": true,
+              "terminationMessagePath": "/dev/termination-log",
+              "terminationMessagePolicy": "File",
+              "tty": true,
+              "volumeMounts": [
+                {
+                  "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount",
+                  "name": "default-token-gsh95",
+                  "readOnly": true
+                }
+              ]
+            }
+          ],
+          "dnsPolicy": "ClusterFirst",
+          "enableServiceLinks": true,
+          "nodeName": "localhost",
+          "priority": 0,
+          "restartPolicy": "Always",
+          "schedulerName": "default-scheduler",
+          "securityContext": {},
+          "serviceAccount": "default",
+          "serviceAccountName": "default",
+          "terminationGracePeriodSeconds": 30,
+          "tolerations": [
+            {
+              "effect": "NoExecute",
+              "key": "node.kubernetes.io/not-ready",
+              "operator": "Exists",
+              "tolerationSeconds": 300
+            },
+            {
+              "effect": "NoExecute",
+              "key": "node.kubernetes.io/unreachable",
+              "operator": "Exists",
+              "tolerationSeconds": 300
+            }
+          ],
+          "volumes": [
+            {
+              "name": "default-token-gsh95",
+              "secret": {
+                "defaultMode": 420,
+                "secretName": "default-token-gsh95"
+              }
+            }
+          ]
+        },
+        "status": {
+          "conditions": [
+            {
+              "lastProbeTime": null,
+              "lastTransitionTime": "2020-09-29T13:36:25Z",
+              "status": "True",
+              "type": "Initialized"
+            },
+            {
+              "lastProbeTime": null,
+              "lastTransitionTime": "2020-09-29T13:36:33Z",
+              "status": "True",
+              "type": "Ready"
+            },
+            {
+              "lastProbeTime": null,
+              "lastTransitionTime": "2020-09-29T13:36:33Z",
+              "status": "True",
+              "type": "ContainersReady"
+            },
+            {
+              "lastProbeTime": null,
+              "lastTransitionTime": "2020-09-29T13:36:25Z",
+              "status": "True",
+              "type": "PodScheduled"
+            }
+          ],
+          "containerStatuses": [
+            {
+              "containerID": "docker://87c9af78735400606d70ccd9cd85e2545e43cb3be9c30d4b4fe173da0062dda9",
+              "image": "electrocucaracha/darkstat:latest",
+              "imageID": "docker-pullable://electrocucaracha/darkstat@sha256:a6764fcc2e15f6156ac0e56f1d220b98970f2d4da9005bae99fb518cfd2f9c25",
+              "lastState": {},
+              "name": "darkstat",
+              "ready": true,
+              "restartCount": 0,
+              "started": true,
+              "state": {
+                "running": {
+                  "startedAt": "2020-09-29T13:36:33Z"
+                }
+              }
+            },
+            {
+              "containerID": "docker://a004f95e7c7a681c7f400852aade096e3ffd75b7efc64e12e65b4ce1fe326577",
+              "image": "rtsood/onap-vfw-demo-sink:0.2.0",
+              "imageID": "docker-pullable://rtsood/onap-vfw-demo-sink@sha256:15b7abb0b67a3804ea5f954254633f996fc99c680b09d86a6cf15c3d7b14ab16",
+              "lastState": {},
+              "name": "sink",
+              "ready": true,
+              "restartCount": 0,
+              "started": true,
+              "state": {
+                "running": {
+                  "startedAt": "2020-09-29T13:36:32Z"
+                }
+              }
+            }
+          ],
+          "hostIP": "192.168.255.3",
+          "phase": "Running",
+          "podIP": "10.244.64.46",
+          "podIPs": [
+            {
+              "ip": "10.244.64.46"
+            }
+          ],
+          "qosClass": "BestEffort",
+          "startTime": "2020-09-29T13:36:25Z"
+        }
+      }
+    }
+  ]
+}