aboutsummaryrefslogtreecommitdiffstats
path: root/kubernetes/robot
diff options
context:
space:
mode:
Diffstat (limited to 'kubernetes/robot')
-rw-r--r--kubernetes/robot/.helmignore22
-rw-r--r--kubernetes/robot/Chart.yaml4
-rw-r--r--kubernetes/robot/all-services.yaml13
-rwxr-xr-xkubernetes/robot/demo-k8s.sh32
-rwxr-xr-xkubernetes/robot/ete-k8s.sh13
-rw-r--r--kubernetes/robot/requirements.yaml7
-rwxr-xr-xkubernetes/robot/resources/config/authorization1
-rwxr-xr-xkubernetes/robot/resources/config/eteshare/config/integration_preload_parameters.py181
-rwxr-xr-xkubernetes/robot/resources/config/eteshare/config/integration_robot_properties.py81
-rwxr-xr-xkubernetes/robot/resources/config/eteshare/config/vm_config2robot.sh24
-rwxr-xr-xkubernetes/robot/resources/config/eteshare/config/vm_properties.py77
-rw-r--r--kubernetes/robot/resources/config/robot/resources/asdc_interface.robot495
-rw-r--r--kubernetes/robot/resources/config/robot/resources/policy_interface.robot57
-rw-r--r--kubernetes/robot/resources/config/robot/resources/sdngc_interface.robot222
-rw-r--r--kubernetes/robot/templates/NOTES.txt19
-rw-r--r--kubernetes/robot/templates/all-services.yaml16
-rw-r--r--kubernetes/robot/templates/configmap.yaml23
-rw-r--r--kubernetes/robot/templates/deployment.yaml82
-rw-r--r--kubernetes/robot/templates/robot-deployment.yaml63
-rw-r--r--kubernetes/robot/templates/service.yaml25
-rw-r--r--kubernetes/robot/values.yaml93
21 files changed, 1427 insertions, 123 deletions
diff --git a/kubernetes/robot/.helmignore b/kubernetes/robot/.helmignore
index 586046af66..f0c1319444 100644
--- a/kubernetes/robot/.helmignore
+++ b/kubernetes/robot/.helmignore
@@ -1,7 +1,21 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
-
-# k8s scripts
-ete-k8s.sh
-demo-k8s.sh
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
diff --git a/kubernetes/robot/Chart.yaml b/kubernetes/robot/Chart.yaml
index 1f59785ede..d37773dd61 100644
--- a/kubernetes/robot/Chart.yaml
+++ b/kubernetes/robot/Chart.yaml
@@ -1,4 +1,4 @@
apiVersion: v1
-description: A Helm chart for Kubernetes
+description: A helm Chart for kubernetes-ONAP Robot
name: robot
-version: 0.1.0
+version: 2.0.0
diff --git a/kubernetes/robot/all-services.yaml b/kubernetes/robot/all-services.yaml
deleted file mode 100644
index 1fbabe2df6..0000000000
--- a/kubernetes/robot/all-services.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-apiVersion: v1
-kind: Service
-metadata:
- labels:
- app: robot
- name: robot
-spec:
- ports:
- - port: 88
- nodePort: {{ .Values.nodePortPrefix }}09
- selector:
- app: robot
- type: NodePort
diff --git a/kubernetes/robot/demo-k8s.sh b/kubernetes/robot/demo-k8s.sh
index 251388b26e..23fc555dc5 100755
--- a/kubernetes/robot/demo-k8s.sh
+++ b/kubernetes/robot/demo-k8s.sh
@@ -1,45 +1,49 @@
-#!/bin/bash
+#!/bin/bash -x
#
# Execute tags built to support the hands on demo,
#
function usage
{
- echo "Usage: demo.sh <command> [<parameters>]"
+ echo "Usage: demo.sh namespace <command> [<parameters>]"
echo " "
- echo " demo.sh init"
+ echo " demo.sh <namespace> init"
echo " - Execute both init_customer + distribute"
echo " "
- echo " demo.sh init_customer"
+ echo " demo.sh <namespace> init_customer"
echo " - Create demo customer (Demonstration) and services, etc."
echo " "
- echo " demo.sh distribute [<prefix>]"
+ echo " demo.sh <namespace> distribute [<prefix>]"
echo " - Distribute demo models (demoVFW and demoVLB)"
echo " "
- echo " demo.sh preload <vnf_name> <module_name>"
+ echo " demo.sh <namespace> preload <vnf_name> <module_name>"
echo " - Preload data for VNF for the <module_name>"
echo " "
- echo " demo.sh appc <module_name>"
+ echo " demo.sh <namespace> appc <module_name>"
echo " - provide APPC with vFW module mount point for closed loop"
echo " "
- echo " demo.sh init_robot"
+ echo " demo.sh <namespace> init_robot"
echo " - Initialize robot after all ONAP VMs have started"
echo " "
- echo " demo.sh instantiateVFW"
+ echo " demo.sh <namespace> instantiateVFW"
echo " - Instantiate vFW module for the a demo customer (DemoCust<uuid>)"
echo " "
- echo " demo.sh deleteVNF <module_name from instantiateVFW>"
+ echo " demo.sh <namespace> deleteVNF <module_name from instantiateVFW>"
echo " - Delete the module created by instantiateVFW"
echo " "
- echo " demo.sh heatbridge <stack_name> <service_instance_id> <service>"
+ echo " demo.sh <namespace> heatbridge <stack_name> <service_instance_id> <service>"
echo " - Run heatbridge against the stack for the given service instance and service"
}
# Set the defaults
-if [ $# -eq 0 ];then
+if [ $# -le 1 ];then
usage
exit
fi
+
+NAMESPACE=$1
+shift
+
##
## if more than 1 tag is supplied, the must be provided with -i or -e
##
@@ -140,5 +144,5 @@ done
ETEHOME=/var/opt/OpenECOMP_ETE
VARIABLEFILES="-V /share/config/vm_properties.py -V /share/config/integration_robot_properties.py -V /share/config/integration_preload_parameters.py"
-POD=$(kubectl --namespace onap-robot get pods | sed 's/ .*//'| grep robot)
-kubectl --namespace onap-robot exec ${POD} -- ${ETEHOME}/runTags.sh ${VARIABLEFILES} ${VARIABLES} -d /share/logs/demo/${TAG} -i ${TAG} --display 89 2> ${TAG}.out
+POD=$(kubectl --namespace $NAMESPACE get pods | sed 's/ .*//'| grep robot)
+kubectl --namespace $NAMESPACE exec ${POD} -- ${ETEHOME}/runTags.sh ${VARIABLEFILES} ${VARIABLES} -d /share/logs/demo/${TAG} -i ${TAG} --display 89 2> ${TAG}.out
diff --git a/kubernetes/robot/ete-k8s.sh b/kubernetes/robot/ete-k8s.sh
index 2305a584c3..9810ac236e 100755
--- a/kubernetes/robot/ete-k8s.sh
+++ b/kubernetes/robot/ete-k8s.sh
@@ -5,19 +5,18 @@
# Please clean up logs when you are done...
# Note: Do not run multiple concurrent ete.sh as the --display is not parameterized and tests will collide
#
-if [ "$1" == "" ];then
- echo "Usage: ete.sh [ health | ete | closedloop | instantiate | distribute ]"
+if [ "$1" == "" ] || [ "$2" == "" ]; then
+ echo "Usage: ete.sh [namespace] [ health | ete | closedloop | instantiate | distribute ]"
exit
fi
-export TAGS="-i $1"
+export NAMESPACE="$1"
+export TAGS="-i $2"
export ETEHOME=/var/opt/OpenECOMP_ETE
export OUTPUT_FOLDER=ETE_$$
VARIABLEFILES="-V /share/config/vm_properties.py -V /share/config/integration_robot_properties.py -V /share/config/integration_preload_parameters.py"
VARIABLES="-v GLOBAL_BUILD_NUMBER:$$"
-#docker exec openecompete_container ${ETEHOME}/runTags.sh ${VARIABLEFILES} ${VARIABLES} -d /share/logs/${OUTPUT_FOLDER} ${TAGS} --display 88
-
-POD=$(kubectl --namespace onap-robot get pods | sed 's/ .*//'| grep robot)
-kubectl --namespace onap-robot exec ${POD} -- ${ETEHOME}/runTags.sh ${VARIABLEFILES} ${VARIABLES} -d /share/logs/${OUTPUT_FOLDER} ${TAGS} --display 88
+POD=$(kubectl --namespace $NAMESPACE get pods | sed 's/ .*//'| grep robot)
+kubectl --namespace $NAMESPACE exec ${POD} -- ${ETEHOME}/runTags.sh ${VARIABLEFILES} ${VARIABLES} -d /share/logs/${OUTPUT_FOLDER} ${TAGS} --display 88
diff --git a/kubernetes/robot/requirements.yaml b/kubernetes/robot/requirements.yaml
new file mode 100644
index 0000000000..56029ab047
--- /dev/null
+++ b/kubernetes/robot/requirements.yaml
@@ -0,0 +1,7 @@
+dependencies:
+ - name: common
+ version: ~2.0.0
+ # 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: '@local' \ No newline at end of file
diff --git a/kubernetes/robot/resources/config/authorization b/kubernetes/robot/resources/config/authorization
new file mode 100755
index 0000000000..988730f7a8
--- /dev/null
+++ b/kubernetes/robot/resources/config/authorization
@@ -0,0 +1 @@
+robot:robot
diff --git a/kubernetes/robot/resources/config/eteshare/config/integration_preload_parameters.py b/kubernetes/robot/resources/config/eteshare/config/integration_preload_parameters.py
new file mode 100755
index 0000000000..b125f792b9
--- /dev/null
+++ b/kubernetes/robot/resources/config/eteshare/config/integration_preload_parameters.py
@@ -0,0 +1,181 @@
+GLOBAL_PRELOAD_PARAMETERS = {
+# heat template parameter values common to all heat template continaing these parameters
+ "defaults" : {
+ 'key_name' : 'vfw_key${uuid}',
+ "pub_key" : "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAqqnA9BAiMLtjOPSYBfhzLu4CiBolWoskDg4KVwhTJVTTeB6CqrQNcadlGXxOHhCYuNCKkUmIVF4WTOisVOJ75Z1c4OMoZLL85xVPKSIeH63kgVugwgPYQu55NbbWX+rsbUha3LnElDhNviMM3iTPbD5nnhKixNERAJMTLKXvZZZGqxW94bREknYPQTT2qrk3YRqwldncopp6Nkgv3AnSJz2gc9tjxnWF0poTQnQm/3D6hiJICrzKfAV0EaPN0KdtYjPhKrYoy6Qb/tKOVaaqsvwfKBJGrT9LfcA7D7M/yj292RT1XN63hI84WC383LsaPJ6eWdDTE6zUP1eGTWCoOw== rsa-key-20161026",
+ "repo_url_blob" : "https://nexus.onap.org/content/repositories/raw",
+ "repo_url_artifacts" : "https://nexus.onap.org/content/groups/staging",
+ "demo_artifacts_version" : "{{ .Values.demoArtifactsVersion }}",
+ "onap_private_net_id" : "{{ .Values.openStackPrivateNetId }}",
+ "onap_private_subnet_id" : "{{ .Values.openStackPrivateSubnetId }}",
+ "onap_private_net_cidr" : "{{ .Values.openStackPrivateNetCidr }}",
+ "dcae_collector_ip" : "10.0.4.102",
+ "dcae_collector_port" : "8080",
+ "public_net_id" : "{{ .Values.openStackPublicNetId }}",
+ "cloud_env" : "${cloud_env}",
+ "install_script_version" : "${install_script_version}",
+###
+# vims_preload same for every instantiation
+###
+ "bono_image_name" : "${vm_image_name}",
+ "sprout_image_name" : "${vm_image_name}",
+ "homer_image_name" : "${vm_image_name}",
+ "homestead_image_name" : "${vm_image_name}",
+ "ralf_image_name" : "${vm_image_name}",
+ "ellis_image_name" : "${vm_image_name}",
+ "dns_image_name" : "${vm_image_name}",
+ "bono_flavor_name" : "${vm_flavor_name}",
+ "sprout_flavor_name" : "${vm_flavor_name}",
+ "homer_flavor_name" : "${vm_flavor_name}",
+ "homestead_flavor_name" : "${vm_flavor_name}",
+ "ralf_flavor_name" : "${vm_flavor_name}",
+ "ellis_flavor_name" : "${vm_flavor_name}",
+ "dns_flavor_name" : "${vm_flavor_name}",
+ "repo_url" : "http://repo.cw-ngv.com/stable",
+ "zone" : "me.cw-ngv.com",
+ "dn_range_start" : "2425550000",
+ "dn_range_length" : "10000",
+ "dnssec_key" : "9FPdYTWhk5+LbhrqtTPQKw==",
+###
+# vlb_preload same for every instantiation
+###
+ "vlb_image_name" : "${vm_image_name}",
+ "vlb_flavor_name" : "${vm_flavor_name}",
+###
+# vlb_preload same for every instantiation
+###
+ "vfw_image_name" : "${vm_image_name}",
+ "vfw_flavor_name" : "${vm_flavor_name}",
+###
+ },
+
+###
+# heat template parameter values for heat template instances created during Vnf-Orchestration test cases
+###
+ "Vnf-Orchestration" : {
+ "vfw_preload.template": {
+ "unprotected_private_net_id" : "vofwl01_unprotected${hostid}",
+ "unprotected_private_net_cidr" : "192.168.10.0/24",
+ "protected_private_net_id" : "vofwl01_protected${hostid}",
+ "protected_private_net_cidr" : "192.168.20.0/24",
+ "vfw_private_ip_0" : "192.168.10.100",
+ "vfw_private_ip_1" : "192.168.20.100",
+ "vfw_private_ip_2" : "{{ .Values.openStackOamNetworkCidrPrefix }}.1",
+ "vpg_private_ip_0" : "192.168.10.200",
+ "vpg_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.2",
+ "vsn_private_ip_0" : "192.168.20.250",
+ "vsn_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.3",
+ 'vfw_name_0':'vofwl01fwl${hostid}',
+ 'vpg_name_0':'vofwl01pgn${hostid}',
+ 'vsn_name_0':'vofwl01snk${hostid}'
+ },
+ "vlb_preload.template" : {
+ "vlb_private_net_id" : "volb01_private${hostid}",
+ "vlb_private_net_cidr" : "192.168.30.0/24",
+ "vlb_private_ip_0" : "192.168.30.100",
+ "vlb_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.4",
+ "vdns_private_ip_0" : "192.168.30.110",
+ "vdns_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.5",
+ 'vlb_name_0':'vovlblb${hostid}',
+ 'vdns_name_0':'vovlbdns${hostid}',
+ "vlb_private_net_cidr" : "192.168.10.0/24",
+ "pktgen_private_net_cidr" : "192.168.9.0/24"
+
+ },
+ "dnsscaling_preload.template" : {
+ "vlb_private_net_id" : "volb01_private${hostid}",
+ "vlb_private_ip_0" : "192.168.30.100",
+ "vlb_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.4",
+ "vdns_private_ip_0" : "192.168.30.222",
+ "vdns_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.6",
+ 'scaling_vdns_name_0':'vovlbscaling${hostid}',
+ "vlb_private_net_cidr" : "192.168.10.0/24"
+ },
+ "vvg_preload.template" : {
+ }
+ },
+# heat template parameter values for heat template instances created during Closed-Loop test cases
+ "Closed-Loop" : {
+ "vfw_preload.template": {
+ "unprotected_private_net_id" : "clfwl01_unprotected${hostid}",
+ "unprotected_private_net_cidr" : "192.168.110.0/24",
+ "protected_private_net_id" : "clfwl01_protected${hostid}",
+ "protected_private_net_cidr" : "192.168.120.0/24",
+ "vfw_private_ip_0" : "192.168.110.100",
+ "vfw_private_ip_1" : "192.168.120.100",
+ "vfw_private_ip_2" : "{{ .Values.openStackOamNetworkCidrPrefix }}.11",
+ "vpg_private_ip_0" : "192.168.110.200",
+ "vpg_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.12",
+ "vsn_private_ip_0" : "192.168.120.250",
+ "vsn_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.13",
+ 'vfw_name_0':'clfwl01fwl${hostid}',
+ 'vpg_name_0':'clfwl01pgn${hostid}',
+ 'vsn_name_0':'clfwl01snk${hostid}'
+ },
+ "vlb_preload.template" : {
+ "vlb_private_net_id" : "cllb01_private${hostid}",
+ "vlb_private_net_cidr" : "192.168.130.0/24",
+ "vlb_private_ip_0" : "192.168.130.100",
+ "vlb_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.14",
+ "vdns_private_ip_0" : "192.168.130.110",
+ "vdns_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.15",
+ 'vlb_name_0':'clvlblb${hostid}',
+ 'vdns_name_0':'clvlbdns${hostid}',
+ "vlb_private_net_cidr" : "192.168.10.0/24",
+ "pktgen_private_net_cidr" : "192.168.9.0/24"
+ },
+ "dnsscaling_preload.template" : {
+ "vlb_private_net_id" : "cllb01_private${hostid}",
+ "vlb_private_ip_0" : "192.168.130.100",
+ "vlb_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.14",
+ "vdns_private_ip_0" : "192.168.130.222",
+ "vdns_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.16",
+ 'scaling_vdns_name_0':'clvlbscaling${hostid}',
+ "vlb_private_net_cidr" : "192.168.10.0/24"
+ },
+ "vvg_preload.template" : {
+ }
+ },
+ # heat template parameter values for heat template instances created for hands on demo test case
+ "Demo" : {
+ "vfw_preload.template": {
+ "unprotected_private_net_id" : "demofwl_unprotected",
+ "unprotected_private_net_cidr" : "192.168.110.0/24",
+ "protected_private_net_id" : "demofwl_protected",
+ "protected_private_net_cidr" : "192.168.120.0/24",
+ "vfw_private_ip_0" : "192.168.110.100",
+ "vfw_private_ip_1" : "192.168.120.100",
+ "vfw_private_ip_2" : "{{ .Values.openStackOamNetworkCidrPrefix }}.11",
+ "vpg_private_ip_0" : "192.168.110.200",
+ "vpg_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.12",
+ "vsn_private_ip_0" : "192.168.120.250",
+ "vsn_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.13",
+ 'vfw_name_0':'demofwl01fwl',
+ 'vpg_name_0':'demofwl01pgn',
+ 'vsn_name_0':'demofwl01snk'
+ },
+ "vlb_preload.template" : {
+ "vlb_private_net_id" : "demolb_private",
+ "vlb_private_net_cidr" : "192.168.130.0/24",
+ "vlb_private_ip_0" : "192.168.130.100",
+ "vlb_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.14",
+ "vdns_private_ip_0" : "192.168.130.110",
+ "vdns_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.15",
+ 'vlb_name_0':'demovlblb',
+ 'vdns_name_0':'demovlbdns',
+ "vlb_private_net_cidr" : "192.168.10.0/24",
+ "pktgen_private_net_cidr" : "192.168.9.0/24"
+ },
+ "dnsscaling_preload.template" : {
+ "vlb_private_net_id" : "demolb_private",
+ "vlb_private_ip_0" : "192.168.130.100",
+ "vlb_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.14",
+ "vdns_private_ip_0" : "192.168.130.222",
+ "vdns_private_ip_1" : "{{ .Values.openStackOamNetworkCidrPrefix }}.16",
+ 'scaling_vdns_name_0':'demovlbscaling',
+ "vlb_private_net_cidr" : "192.168.10.0/24"
+ },
+ "vvg_preload.template" : {
+ }
+ }
+}
diff --git a/kubernetes/robot/resources/config/eteshare/config/integration_robot_properties.py b/kubernetes/robot/resources/config/eteshare/config/integration_robot_properties.py
new file mode 100755
index 0000000000..305ba3e8a0
--- /dev/null
+++ b/kubernetes/robot/resources/config/eteshare/config/integration_robot_properties.py
@@ -0,0 +1,81 @@
+# aaf info - everything is from the private oam network (also called ecomp private network)
+GLOBAL_AAF_SERVER = "http://10.0.12.1:8101"
+GLOBAL_AAF_USERNAME = "dgl@openecomp.org"
+GLOBAL_AAF_PASSWORD = "ecomp_admin"
+# aai info - everything is from the private oam network (also called ecomp private network)
+GLOBAL_AAI_SERVER_PROTOCOL = "https"
+GLOBAL_AAI_SERVER_PORT = "8443"
+GLOBAL_AAI_USERNAME = "AAI"
+GLOBAL_AAI_PASSWORD = "AAI"
+# appc info - everything is from the private oam network (also called ecomp private network)
+GLOBAL_APPC_SERVER_PROTOCOL = "http"
+GLOBAL_APPC_SERVER_PORT = "8282"
+GLOBAL_APPC_SERVER = "http://10.0.2.1:"
+GLOBAL_APPC_USERNAME = "admin"
+GLOBAL_APPC_PASSWORD = "Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U"
+# sdc info - everything is from the private oam network (also called ecomp private network)
+GLOBAL_ASDC_SERVER_PROTOCOL = "http"
+GLOBAL_ASDC_FE_PORT = "8181"
+GLOBAL_ASDC_BE_PORT = "8080"
+GLOBAL_ASDC_BE_USERNAME = "beep"
+GLOBAL_ASDC_BE_PASSWORD = "boop"
+# clamp info - everything is from the private oam network (also called ecomp private network)
+GLOBAL_CLAMP_SERVER_PROTOCOL = "http"
+GLOBAL_CLAMP_SERVER_PORT = "8080"
+# dcae info - everything is from the private oam network (also called ecomp private network)
+GLOBAL_DCAE_SERVER_PROTOCOL = "http"
+GLOBAL_DCAE_SERVER_PORT = "8080"
+GLOBAL_DCAE_USERNAME = "console"
+GLOBAL_DCAE_PASSWORD = "ZjJkYjllMjljMTI2M2Iz"
+# microservice bus info - everything is from the private oam network (also called ecomp private network)
+GLOBAL_MSB_SERVER_PROTOCOL = "http"
+GLOBAL_MSB_SERVER_PORT = "80"
+# message router info - everything is from the private oam network (also called ecomp private network)
+GLOBAL_MR_SERVER_PROTOCOL = "http"
+GLOBAL_MR_SERVER_PORT = "3904"
+# mso info - everything is from the private oam network (also called ecomp private network)
+GLOBAL_MSO_SERVER_PROTOCOL = "http"
+GLOBAL_MSO_SERVER_PORT = "8080"
+GLOBAL_MSO_USERNAME = "InfraPortalClient"
+GLOBAL_MSO_PASSWORD = "password1$"
+# openstack info - info to select right info in environment
+# packet generate vnf info - everything is from the private oam network (also called ecomp private network)
+GLOBAL_PACKET_GENERATOR_PORT = "8183"
+GLOBAL_PACKET_GENERATOR_USERNAME = "admin"
+GLOBAL_PACKET_GENERATOR_PASSWORD = "admin"
+GLOBAL_PGN_PORT = "2831"
+# policy info - everything is from the private oam network (also called ecomp private network)
+GLOBAL_POLICY_SERVER_PROTOCOL = "http"
+GLOBAL_POLICY_SERVER_PORT = "8081"
+GLOBAL_POLICY_HEALTHCHECK_PORT = "6969"
+GLOBAL_POLICY_AUTH = "dGVzdHBkcDphbHBoYTEyMw=="
+GLOBAL_POLICY_CLIENTAUTH = "cHl0aG9uOnRlc3Q="
+GLOBAL_POLICY_USERNAME = "healthcheck"
+GLOBAL_POLICY_PASSWORD = "zb!XztG34"
+# portal info - everything is from the private oam network (also called ecomp private network)
+GLOBAL_PORTAL_SERVER_PROTOCOL = "http"
+GLOBAL_PORTAL_SERVER_PORT = "8989"
+GLOBAL_PORTAL_USERNAME = "demo"
+GLOBAL_PORTAL_PASSWORD = "Kp8bJ4SXszM0WXlhak3eHlcse"
+# sdngc info - everything is from the private oam network (also called ecomp private network)
+GLOBAL_SDNGC_SERVER_PROTOCOL = "http"
+GLOBAL_SDNGC_REST_PORT = "8282"
+GLOBAL_SDNGC_ADMIN_PORT = "8843"
+GLOBAL_SDNGC_USERNAME = "admin"
+GLOBAL_SDNGC_PASSWORD = "Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U"
+# vid info - everything is from the private oam network (also called ecomp private network)
+GLOBAL_VID_SERVER_PROTOCOL = "http"
+GLOBAL_VID_SERVER_PORT = "8080"
+GLOBAL_VID_USERNAME = "demo"
+GLOBAL_VID_PASSWORD = "Kp8bJ4SXszM0WX"
+GLOBAL_VID_HEALTH_USERNAME = "Default"
+GLOBAL_VID_HEALTH_PASSWORD = "AppPassword!1"
+#global selenium info
+GLOBAL_PROXY_WARNING_TITLE = ""
+GLOBAL_PROXY_WARNING_CONTINUE_XPATH = ""
+# settings for vm to attach vvg too
+GLOBAL_VVGSERVER_IMAGE = "{{ .Values.ubuntuImage }}"
+GLOBAL_VVGSERVER_FLAVOR = "{{ .Values.openStackFlavourMedium }}"
+# dns info
+GLOBAL_DNS_TRAFFIC_DURATION = "600"
+GLOBAL_HEAT_TEMPLATES_FOLDER = "/share/heat"
diff --git a/kubernetes/robot/resources/config/eteshare/config/vm_config2robot.sh b/kubernetes/robot/resources/config/eteshare/config/vm_config2robot.sh
new file mode 100755
index 0000000000..c50fa5f491
--- /dev/null
+++ b/kubernetes/robot/resources/config/eteshare/config/vm_config2robot.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+#
+# Make vm1_robot config available to robot
+#
+CONFIG=/opt/config
+PROPERTIES=/opt/eteshare/config/vm_properties.py
+GLOBAL_VM_PROPERTIES="# File generated from /opt/config\n#\n"
+HASH="GLOBAL_INJECTED_PROPERTIES={"
+COMMA=""
+for f in `ls $CONFIG/*.txt`;
+do
+ VALUE=`cat $f`
+ NAME=${f%.*}
+ NAME=${NAME##*/}
+ NAME=${NAME^^}
+ GLOBAL_VM_PROPERTIES=$"${GLOBAL_VM_PROPERTIES}GLOBAL_INJECTED_$NAME = \"$VALUE\"\n"
+ HASH=$"${HASH}${COMMA}\n\"GLOBAL_INJECTED_$NAME\" : \"$VALUE\""
+ COMMA=","
+done
+HASH="${HASH}}\n"
+GLOBAL_VM_PROPERTIES="${GLOBAL_VM_PROPERTIES}\n${HASH}"
+GLOBAL_VM_PROPERTIES=${GLOBAL_VM_PROPERTIES}
+echo -e $GLOBAL_VM_PROPERTIES > $PROPERTIES
diff --git a/kubernetes/robot/resources/config/eteshare/config/vm_properties.py b/kubernetes/robot/resources/config/eteshare/config/vm_properties.py
new file mode 100755
index 0000000000..b4a724697d
--- /dev/null
+++ b/kubernetes/robot/resources/config/eteshare/config/vm_properties.py
@@ -0,0 +1,77 @@
+# File generated from /opt/config
+#
+GLOBAL_INJECTED_AAI1_IP_ADDR = "aai-service.{{ .Values.nsPrefix }}"
+GLOBAL_INJECTED_AAI2_IP_ADDR = "N/A"
+GLOBAL_INJECTED_APPC_IP_ADDR = "appc-sdnhost.{{ .Values.nsPrefix }}"
+GLOBAL_INJECTED_ARTIFACTS_VERSION = "1.1.0-SNAPSHOT"
+GLOBAL_INJECTED_CLAMP_IP_ADDR = "clamp.{{ .Values.nsPrefix }}"
+GLOBAL_INJECTED_CLOUD_ENV = "openstack"
+GLOBAL_INJECTED_DCAE_IP_ADDR = "dcae-controller.{{ .Values.nsPrefix }}"
+GLOBAL_INJECTED_DNS_IP_ADDR = "10.0.100.1"
+GLOBAL_INJECTED_DOCKER_VERSION = "1.1-STAGING-latest"
+#GLOBAL_INJECTED_EXTERNAL_DNS = "N/A"
+GLOBAL_INJECTED_GERRIT_BRANCH = "master"
+GLOBAL_INJECTED_KEYSTONE = "{{ .Values.openStackKeyStoneUrl }}"
+GLOBAL_INJECTED_MR_IP_ADDR = "dmaap.{{ .Values.nsPrefix }}"
+GLOBAL_INJECTED_MSO_IP_ADDR = "mso.{{ .Values.nsPrefix }}"
+GLOBAL_INJECTED_NETWORK = "{{ .Values.openStackPrivateNetId }}"
+GLOBAL_INJECTED_NEXUS_DOCKER_REPO = "nexus3.onap.org:10001"
+GLOBAL_INJECTED_NEXUS_PASSWORD = "docker"
+GLOBAL_INJECTED_NEXUS_REPO = "https://nexus.onap.org/content/sites/raw"
+GLOBAL_INJECTED_NEXUS_USERNAME = "docker"
+GLOBAL_INJECTED_OPENO_IP_ADDR = "msb-iag.{{ .Values.nsPrefix }}"
+GLOBAL_INJECTED_OPENSTACK_PASSWORD = "{{ .Values.openStackEncryptedPassword }}"
+GLOBAL_INJECTED_OPENSTACK_TENANT_ID = "{{ .Values.openStackTenantId }}"
+GLOBAL_INJECTED_OPENSTACK_USERNAME = "{{ .Values.openStackUserName }}"
+GLOBAL_INJECTED_POLICY_IP_ADDR = "pypdp.{{ .Values.nsPrefix }}"
+GLOBAL_INJECTED_POLICY_HEALTHCHECK_IP_ADDR = "drools.{{ .Values.nsPrefix }}"
+GLOBAL_INJECTED_PORTAL_IP_ADDR = "portalapps.{{ .Values.nsPrefix }}"
+GLOBAL_INJECTED_REGION = "{{ .Values.openStackRegion }}"
+GLOBAL_INJECTED_REMOTE_REPO = "http://gerrit.onap.org/r/testsuite/properties.git"
+GLOBAL_INJECTED_SDC_IP_ADDR = "sdc-be.{{ .Values.nsPrefix }}"
+GLOBAL_INJECTED_SDC_FE_IP_ADDR = "sdc-fe.{{ .Values.nsPrefix }}"
+GLOBAL_INJECTED_SDC_BE_IP_ADDR = "sdc-be.{{ .Values.nsPrefix }}"
+GLOBAL_INJECTED_SDNC_IP_ADDR = "sdnhost.{{ .Values.nsPrefix }}"
+GLOBAL_INJECTED_SDNC_PORTAL_IP_ADDR = "sdnc-portal.{{ .Values.nsPrefix }}"
+GLOBAL_INJECTED_SO_IP_ADDR = "mso.{{ .Values.nsPrefix }}"
+GLOBAL_INJECTED_VID_IP_ADDR = "vid-server.{{ .Values.nsPrefix }}"
+GLOBAL_INJECTED_VM_FLAVOR = "{{ .Values.openStackFlavourMedium }}"
+GLOBAL_INJECTED_VM_IMAGE_NAME = "{{ .Values.ubuntuImage }}"
+GLOBAL_INJECTED_PUBLIC_NET_ID = "{{ .Values.openStackPublicNetId }}"
+GLOBAL_INJECTED_PROPERTIES = {
+ "GLOBAL_INJECTED_AAI1_IP_ADDR" : "aai-service.{{ .Values.nsPrefix }}",
+ "GLOBAL_INJECTED_APPC_IP_ADDR" : "appc-sdnhost.{{ .Values.nsPrefix }}",
+ "GLOBAL_INJECTED_ARTIFACTS_VERSION" : "1.1.0-SNAPSHOT",
+ "GLOBAL_INJECTED_CLAMP_IP_ADDR" : "clamp.{{ .Values.nsPrefix }}",
+ "GLOBAL_INJECTED_CLOUD_ENV" : "openstack",
+ "GLOBAL_INJECTED_DCAE_IP_ADDR" : "dcae-controller.{{ .Values.nsPrefix }}",
+ "GLOBAL_INJECTED_DNS_IP_ADDR" : "10.0.100.1",
+ "GLOBAL_INJECTED_DOCKER_VERSION" : "1.1-STAGING-latest",
+ "GLOBAL_INJECTED_GERRIT_BRANCH" : "master",
+ "GLOBAL_INJECTED_KEYSTONE" : "{{ .Values.openStackKeyStoneUrl }}",
+ "GLOBAL_INJECTED_MR_IP_ADDR" : "dmaap.{{ .Values.nsPrefix }}",
+ "GLOBAL_INJECTED_MSO_IP_ADDR" : "mso.{{ .Values.nsPrefix }}",
+ "GLOBAL_INJECTED_NETWORK" : "{{ .Values.openStackPrivateNetId }}",
+ "GLOBAL_INJECTED_NEXUS_DOCKER_REPO" : "nexus3.onap.org:10001",
+ "GLOBAL_INJECTED_NEXUS_PASSWORD" : "docker",
+ "GLOBAL_INJECTED_NEXUS_REPO" : "https://nexus.onap.org/content/sites/raw",
+ "GLOBAL_INJECTED_NEXUS_USERNAME" : "docker",
+ "GLOBAL_INJECTED_OPENO_IP_ADDR" : "msb-iag.{{ .Values.nsPrefix }}",
+ "GLOBAL_INJECTED_OPENSTACK_PASSWORD" : "{{ .Values.openStackEncryptedPassword }}",
+ "GLOBAL_INJECTED_OPENSTACK_TENANT_ID" : "{{ .Values.openStackTenantId }}",
+ "GLOBAL_INJECTED_OPENSTACK_USERNAME" : "{{ .Values.openStackUserName }}",
+ "GLOBAL_INJECTED_POLICY_IP_ADDR" : "pypdp.{{ .Values.nsPrefix }}",
+ "GLOBAL_INJECTED_POLICY_HEALTHCHECK_IP_ADDR" : "drools.{{ .Values.nsPrefix }}",
+ "GLOBAL_INJECTED_PORTAL_IP_ADDR" : "portalapps.{{ .Values.nsPrefix }}",
+ "GLOBAL_INJECTED_REGION" : "{{ .Values.openStackRegion }}",
+ "GLOBAL_INJECTED_REMOTE_REPO" : "http://gerrit.onap.org/r/testsuite/properties.git",
+ "GLOBAL_INJECTED_SDC_FE_IP_ADDR" : "sdc-fe.{{ .Values.nsPrefix }}",
+ "GLOBAL_INJECTED_SDC_BE_IP_ADDR" : "sdc-be.{{ .Values.nsPrefix }}",
+ "GLOBAL_INJECTED_SDNC_IP_ADDR" : "sdnhost.{{ .Values.nsPrefix }}",
+ "GLOBAL_INJECTED_SDNC_PORTAL_IP_ADDR" : "sdnc-portal.{{ .Values.nsPrefix }}",
+ "GLOBAL_INJECTED_SO_IP_ADDR" : "mso.{{ .Values.nsPrefix }}",
+ "GLOBAL_INJECTED_VID_IP_ADDR" : "vid-server.{{ .Values.nsPrefix }}",
+ "GLOBAL_INJECTED_VM_FLAVOR" : "{{ .Values.openStackFlavourMedium }}",
+ "GLOBAL_INJECTED_VM_IMAGE_NAME" : "{{ .Values.ubuntuImage }}",
+ "GLOBAL_INJECTED_PUBLIC_NET_ID" : "{{ .Values.openStackPublicNetId }}"
+}
diff --git a/kubernetes/robot/resources/config/robot/resources/asdc_interface.robot b/kubernetes/robot/resources/config/robot/resources/asdc_interface.robot
new file mode 100644
index 0000000000..5b69a66c7c
--- /dev/null
+++ b/kubernetes/robot/resources/config/robot/resources/asdc_interface.robot
@@ -0,0 +1,495 @@
+*** Settings ***
+Documentation The main interface for interacting with ASDC. It handles low level stuff like managing the http request library and DCAE required fields
+Library RequestsLibrary
+Library UUID
+Library JSONUtils
+Library OperatingSystem
+Library Collections
+Library ExtendedSelenium2Library
+Resource global_properties.robot
+Resource browser_setup.robot
+Resource json_templater.robot
+*** Variables ***
+${ASDC_DESIGNER_USER_ID} cs0008
+${ASDC_TESTER_USER_ID} jm0007
+${ASDC_GOVERNOR_USER_ID} gv0001
+${ASDC_OPS_USER_ID} op0001
+${ASDC_HEALTH_CHECK_PATH} /sdc1/rest/healthCheck
+${ASDC_VENDOR_LICENSE_MODEL_PATH} /onboarding-api/v1.0/vendor-license-models
+${ASDC_VENDOR_SOFTWARE_PRODUCT_PATH} /onboarding-api/v1.0/vendor-software-products
+${ASDC_VENDOR_KEY_GROUP_PATH} /license-key-groups
+${ASDC_VENDOR_ENTITLEMENT_POOL_PATH} /entitlement-pools
+${ASDC_VENDOR_FEATURE_GROUP_PATH} /feature-groups
+${ASDC_VENDOR_LICENSE_AGREEMENT_PATH} /license-agreements
+${ASDC_VENDOR_ACTIONS_PATH} /actions
+${ASDC_VENDOR_SOFTWARE_UPLOAD_PATH} /orchestration-template-candidate
+${ASDC_CATALOG_RESOURCES_PATH} /sdc2/rest/v1/catalog/resources
+${ASDC_CATALOG_SERVICES_PATH} /sdc2/rest/v1/catalog/services
+${ASDC_CATALOG_INACTIVE_RESOURCES_PATH} /sdc2/rest/v1/inactiveComponents/resource
+${ASDC_CATALOG_INACTIVE_SERVICES_PATH} /sdc2/rest/v1/inactiveComponents/service
+${ASDC_CATALOG_LIFECYCLE_PATH} /lifecycleState
+${ASDC_CATALOG_SERVICE_RESOURCE_INSTANCE_PATH} /resourceInstance
+${ASDC_CATALOG_SERVICE_DISTRIBUTION_STATE_PATH} /distribution-state
+${ASDC_CATALOG_SERVICE_DISTRIBUTION_PATH} /distribution
+${ASDC_DISTRIBUTION_STATE_APPROVE_PATH} /approve
+${ASDC_CATALOG_SERVICE_DISTRIBUTION_ACTIVATE_PATH} /distribution/PROD/activate
+${ASDC_LICENSE_MODEL_TEMPLATE} robot/assets/templates/asdc/license_model.template
+${ASDC_KEY_GROUP_TEMPLATE} robot/assets/templates/asdc/key_group.template
+${ASDC_ENTITLEMENT_POOL_TEMPLATE} robot/assets/templates/asdc/entitlement_pool.template
+${ASDC_FEATURE_GROUP_TEMPLATE} robot/assets/templates/asdc/feature_group.template
+${ASDC_LICENSE_AGREEMENT_TEMPLATE} robot/assets/templates/asdc/license_agreement.template
+${ASDC_ACTION_TEMPLATE} robot/assets/templates/asdc/action.template
+${ASDC_SOFTWARE_PRODUCT_TEMPLATE} robot/assets/templates/asdc/software_product.template
+${ASDC_CATALOG_RESOURCE_TEMPLATE} robot/assets/templates/asdc/catalog_resource.template
+${ASDC_USER_REMARKS_TEMPLATE} robot/assets/templates/asdc/user_remarks.template
+${ASDC_CATALOG_SERVICE_TEMPLATE} robot/assets/templates/asdc/catalog_service.template
+${ASDC_RESOURCE_INSTANCE_TEMPLATE} robot/assets/templates/asdc/resource_instance.template
+${ASDC_FE_ENDPOINT} ${GLOBAL_ASDC_SERVER_PROTOCOL}://${GLOBAL_INJECTED_SDC_FE_IP_ADDR}:${GLOBAL_ASDC_FE_PORT}
+${ASDC_BE_ENDPOINT} ${GLOBAL_ASDC_SERVER_PROTOCOL}://${GLOBAL_INJECTED_SDC_BE_IP_ADDR}:${GLOBAL_ASDC_BE_PORT}
+
+*** Keywords ***
+Distribute Model From ASDC
+ [Documentation] goes end to end creating all the asdc objects based ona model and distributing it to the systems. it then returns the service name, vf name and vf module name
+ [Arguments] ${model_zip_path} ${catalog_service_name}=
+ ${catalog_service_id}= Add ASDC Catalog Service ${catalog_service_name}
+ ${catalog_resource_ids}= Create List
+ ${catalog_resources}= Create Dictionary
+ : FOR ${zip} IN @{model_zip_path}
+ \ ${loop_catalog_resource_id}= Setup ASDC Catalog Resource ${zip}
+ \ Append To List ${catalog_resource_ids} ${loop_catalog_resource_id}
+ \ ${loop_catalog_resource_resp}= Get ASDC Catalog Resource ${loop_catalog_resource_id}
+ \ Add ASDC Resource Instance ${catalog_service_id} ${loop_catalog_resource_id} ${loop_catalog_resource_resp['name']}
+ \ Set To Dictionary ${catalog_resources} ${loop_catalog_resource_id}=${loop_catalog_resource_resp}
+ ${catalog_service_resp}= Get ASDC Catalog Service ${catalog_service_id}
+ Checkin ASDC Catalog Service ${catalog_service_id}
+ Request Certify ASDC Catalog Service ${catalog_service_id}
+ Start Certify ASDC Catalog Service ${catalog_service_id}
+ # on certify it gets a new id
+ ${catalog_service_id}= Certify ASDC Catalog Service ${catalog_service_id}
+ Approve ASDC Catalog Service ${catalog_service_id}
+ Distribute ASDC Catalog Service ${catalog_service_id}
+ ${catalog_service_resp}= Get ASDC Catalog Service ${catalog_service_id}
+ ${vf_module}= Find Element In Array ${loop_catalog_resource_resp['groups']} type org.openecomp.groups.VfModule
+ Check Catalog Service Distributed ${catalog_service_resp['uuid']}
+ [Return] ${catalog_service_resp['name']} ${loop_catalog_resource_resp['name']} ${vf_module} ${catalog_resource_ids} ${catalog_service_id} ${catalog_resources}
+
+Setup ASDC Catalog Resource
+ [Documentation] Creates all the steps a vf needs for an asdc catalog resource and returns the id
+ [Arguments] ${model_zip_path}
+ ${license_model_id}= Add ASDC License Model
+ ${key_group_id}= Add ASDC License Group ${license_model_id}
+ ${pool_id}= Add ASDC Entitlement Pool ${license_model_id}
+ ${feature_group_id}= Add ASDC Feature Group ${license_model_id} ${key_group_id} ${pool_id}
+ ${license_agreement_id}= Add ASDC License Agreement ${license_model_id} ${feature_group_id}
+ Checkin ASDC License Model ${license_model_id}
+ Submit ASDC License Model ${license_model_id}
+ ${license_model_resp}= Get ASDC License Model ${license_model_id} 1.0
+ ${software_product_id}= Add ASDC Software Product ${license_agreement_id} ${feature_group_id} ${license_model_resp['vendorName']} ${license_model_id}
+ Upload ASDC Heat Package ${software_product_id} ${model_zip_path}
+ Validate ASDC Software Product ${software_product_id}
+ Checkin ASDC Software Product ${software_product_id}
+ Submit ASDC Software Product ${software_product_id}
+ Package ASDC Software Product ${software_product_id}
+ ${software_product_resp}= Get ASDC Software Product ${software_product_id} 1.0
+ ${catalog_resource_id}= Add ASDC Catalog Resource ${license_agreement_id} ${software_product_resp['name']} ${license_model_resp['vendorName']} ${software_product_id}
+ Checkin ASDC Catalog Resource ${catalog_resource_id}
+ Request Certify ASDC Catalog Resource ${catalog_resource_id}
+ Start Certify ASDC Catalog Resource ${catalog_resource_id}
+ # on certify it gets a new id
+ [Return] ${catalog_resource_id}
+ ${catalog_resource_id}= Certify ASDC Catalog Resource ${catalog_resource_id}
+Add ASDC License Model
+ [Documentation] Creates an asdc license model and returns its id
+ ${uuid}= Generate UUID
+ ${shortened_uuid}= Evaluate str("${uuid}")[:23]
+ ${map}= Create Dictionary vendor_name=${shortened_uuid}
+ ${data}= Fill JSON Template File ${ASDC_LICENSE_MODEL_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request ${ASDC_VENDOR_LICENSE_MODEL_PATH} ${data}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()['value']}
+Get ASDC License Model
+ [Documentation] gets an asdc license model by its id
+ [Arguments] ${id} ${version_id}=0.1
+ ${resp}= Run ASDC Get Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${id}/versions/${version_id}
+ [Return] ${resp.json()}
+Get ASDC License Models
+ [Documentation] gets an asdc license model by its id
+ ${resp}= Run ASDC Get Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}
+ [Return] ${resp.json()}
+Checkin ASDC License Model
+ [Documentation] checksin an asdc license model by its id
+ [Arguments] ${id} ${version_id}=0.1
+ ${map}= Create Dictionary action=Checkin
+ ${data}= Fill JSON Template File ${ASDC_ACTION_TEMPLATE} ${map}
+ ${resp}= Run ASDC Put Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${id}/versions/${version_id}${ASDC_VENDOR_ACTIONS_PATH} ${data}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+Submit ASDC License Model
+ [Documentation] submits an asdc license model by its id
+ [Arguments] ${id} ${version_id}=0.1
+ ${map}= Create Dictionary action=Submit
+ ${data}= Fill JSON Template File ${ASDC_ACTION_TEMPLATE} ${map}
+ ${resp}= Run ASDC Put Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${id}/versions/${version_id}${ASDC_VENDOR_ACTIONS_PATH} ${data}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+Checkin ASDC Software Product
+ [Documentation] checksin an asdc Software Product by its id
+ [Arguments] ${id} ${version_id}=0.1
+ ${map}= Create Dictionary action=Checkin
+ ${data}= Fill JSON Template File ${ASDC_ACTION_TEMPLATE} ${map}
+ ${resp}= Run ASDC Put Request ${ASDC_VENDOR_SOFTWARE_PRODUCT_PATH}/${id}/versions/${version_id}${ASDC_VENDOR_ACTIONS_PATH} ${data}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+Validate ASDC Software Product
+ [Documentation] checksin an asdc Software Product by its id
+ [Arguments] ${id} ${version_id}=0.1
+ ${data}= Catenate
+ ${resp}= Run ASDC Put Request ${ASDC_VENDOR_SOFTWARE_PRODUCT_PATH}/${id}/versions/${version_id}/orchestration-template-candidate/process ${data}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+Submit ASDC Software Product
+ [Documentation] submits an asdc Software Product by its id
+ [Arguments] ${id} ${version_id}=0.1
+ ${map}= Create Dictionary action=Submit
+ ${data}= Fill JSON Template File ${ASDC_ACTION_TEMPLATE} ${map}
+ ${resp}= Run ASDC Put Request ${ASDC_VENDOR_SOFTWARE_PRODUCT_PATH}/${id}/versions/${version_id}${ASDC_VENDOR_ACTIONS_PATH} ${data}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+Package ASDC Software Product
+ [Documentation] creates_package on an asdc Software Product by its id
+ [Arguments] ${id} ${version_id}=0.1
+ ${map}= Create Dictionary action=Create_Package
+ ${data}= Fill JSON Template File ${ASDC_ACTION_TEMPLATE} ${map}
+ ${resp}= Run ASDC Put Request ${ASDC_VENDOR_SOFTWARE_PRODUCT_PATH}/${id}/versions/${version_id}${ASDC_VENDOR_ACTIONS_PATH} ${data}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+Add ASDC Entitlement Pool
+ [Documentation] Creates an asdc Entitlement Pool and returns its id
+ [Arguments] ${license_model_id} ${version_id}=0.1
+ ${uuid}= Generate UUID
+ ${shortened_uuid}= Evaluate str("${uuid}")[:23]
+ ${map}= Create Dictionary entitlement_pool_name=${shortened_uuid}
+ ${data}= Fill JSON Template File ${ASDC_ENTITLEMENT_POOL_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${license_model_id}/versions/${version_id}${ASDC_VENDOR_ENTITLEMENT_POOL_PATH} ${data}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()['value']}
+Get ASDC Entitlement Pool
+ [Documentation] gets an asdc Entitlement Pool by its id
+ [Arguments] ${license_model_id} ${pool_id}
+ ${resp}= Run ASDC Get Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${license_model_id}${ASDC_VENDOR_ENTITLEMENT_POOL_PATH}/${pool_id}
+ [Return] ${resp.json()}
+Add ASDC License Group
+ [Documentation] Creates an asdc license group and returns its id
+ [Arguments] ${license_model_id} ${version_id}=0.1
+ ${uuid}= Generate UUID
+ ${shortened_uuid}= Evaluate str("${uuid}")[:23]
+ ${map}= Create Dictionary key_group_name=${shortened_uuid}
+ ${data}= Fill JSON Template File ${ASDC_KEY_GROUP_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${license_model_id}/versions/${version_id}${ASDC_VENDOR_KEY_GROUP_PATH} ${data}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()['value']}
+Get ASDC License Group
+ [Documentation] gets an asdc license group by its id
+ [Arguments] ${license_model_id} ${group_id} ${version_id}
+ ${resp}= Run ASDC Get Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${license_model_id}/versions/${version_id}${ASDC_VENDOR_KEY_GROUP_PATH}/${group_id}
+ [Return] ${resp.json()}
+Add ASDC Feature Group
+ [Documentation] Creates an asdc Feature Group and returns its id
+ [Arguments] ${license_model_id} ${key_group_id} ${entitlement_pool_id} ${version_id}=0.1
+ ${uuid}= Generate UUID
+ ${shortened_uuid}= Evaluate str("${uuid}")[:23]
+ ${map}= Create Dictionary feature_group_name=${shortened_uuid} key_group_id=${key_group_id} entitlement_pool_id=${entitlement_pool_id} manufacturer_reference_number=mrn${shortened_uuid}
+ ${data}= Fill JSON Template File ${ASDC_FEATURE_GROUP_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${license_model_id}/versions/${version_id}${ASDC_VENDOR_FEATURE_GROUP_PATH} ${data}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()['value']}
+Get ASDC Feature Group
+ [Documentation] gets an asdc Feature Group by its id
+ [Arguments] ${license_model_id} ${group_id}
+ ${resp}= Run ASDC Get Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${license_model_id}${ASDC_VENDOR_FEATURE_GROUP_PATH}/${group_id}
+ [Return] ${resp.json()}
+Add ASDC License Agreement
+ [Documentation] Creates an asdc License Agreement and returns its id
+ [Arguments] ${license_model_id} ${feature_group_id} ${version_id}=0.1
+ ${uuid}= Generate UUID
+ ${shortened_uuid}= Evaluate str("${uuid}")[:23]
+ ${map}= Create Dictionary license_agreement_name=${shortened_uuid} feature_group_id=${feature_group_id}
+ ${data}= Fill JSON Template File ${ASDC_LICENSE_AGREEMENT_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${license_model_id}/versions/${version_id}${ASDC_VENDOR_LICENSE_AGREEMENT_PATH} ${data}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()['value']}
+Get ASDC License Agreement
+ [Documentation] gets an asdc License Agreement by its id
+ [Arguments] ${license_model_id} ${agreement_id}
+ ${resp}= Run ASDC Get Request ${ASDC_VENDOR_LICENSE_MODEL_PATH}/${license_model_id}${ASDC_VENDOR_LICENSE_AGREEMENT_PATH}/${agreement_id}
+ [Return] ${resp.json()}
+Add ASDC Software Product
+ [Documentation] Creates an asdc Software Product and returns its id
+ [Arguments] ${license_agreement_id} ${feature_group_id} ${license_model_name} ${license_model_id}
+ ${uuid}= Generate UUID
+ ${shortened_uuid}= Evaluate str("${uuid}")[:23]
+ ${map}= Create Dictionary software_product_name=${shortened_uuid} feature_group_id=${feature_group_id} license_agreement_id=${license_agreement_id} vendor_name=${license_model_name} vendor_id=${license_model_id}
+ ${data}= Fill JSON Template File ${ASDC_SOFTWARE_PRODUCT_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request ${ASDC_VENDOR_SOFTWARE_PRODUCT_PATH} ${data}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()['vspId']}
+Get ASDC Software Product
+ [Documentation] gets an asdc Software Product by its id
+ [Arguments] ${software_product_id} ${version_id}=0.1
+ ${resp}= Run ASDC Get Request ${ASDC_VENDOR_SOFTWARE_PRODUCT_PATH}/${software_product_id}/versions/${version_id}
+ [Return] ${resp.json()}
+Add ASDC Catalog Resource
+ [Documentation] Creates an asdc Catalog Resource and returns its id
+ [Arguments] ${license_agreement_id} ${software_product_name} ${license_model_name} ${software_product_id}
+ ${map}= Create Dictionary software_product_id=${software_product_id} software_product_name=${software_product_name} license_agreement_id=${license_agreement_id} vendor_name=${license_model_name}
+ ${data}= Fill JSON Template File ${ASDC_CATALOG_RESOURCE_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request ${ASDC_CATALOG_RESOURCES_PATH} ${data} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 201
+ [Return] ${resp.json()['uniqueId']}
+Mark ASDC Catalog Resource Inactive
+ [Documentation] deletes an asdc Catalog Resource
+ [Arguments] ${catalog_resource_id}
+ ${resp}= Run ASDC Delete Request ${ASDC_CATALOG_RESOURCES_PATH}/${catalog_resource_id} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 204
+ [Return] ${resp}
+Delete Inactive ASDC Catalog Resources
+ [Documentation] delete all asdc Catalog Resources that are inactive
+ ${resp}= Run ASDC Delete Request ${ASDC_CATALOG_INACTIVE_RESOURCES_PATH} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+Get ASDC Catalog Resource
+ [Documentation] gets an asdc Catalog Resource by its id
+ [Arguments] ${catalog_resource_id}
+ ${resp}= Run ASDC Get Request ${ASDC_CATALOG_RESOURCES_PATH}/${catalog_resource_id} ${ASDC_DESIGNER_USER_ID}
+ [Return] ${resp.json()}
+Checkin ASDC Catalog Resource
+ [Documentation] checksin an asdc Catalog Resource by its id
+ [Arguments] ${catalog_resource_id}
+ ${map}= Create Dictionary user_remarks=Robot remarks
+ ${data}= Fill JSON Template File ${ASDC_USER_REMARKS_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request ${ASDC_CATALOG_RESOURCES_PATH}/${catalog_resource_id}${ASDC_CATALOG_LIFECYCLE_PATH}/checkin ${data} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+Request Certify ASDC Catalog Resource
+ [Documentation] requests certify on an asdc Catalog Resource by its id
+ [Arguments] ${catalog_resource_id}
+ ${map}= Create Dictionary user_remarks=Robot remarks
+ ${data}= Fill JSON Template File ${ASDC_USER_REMARKS_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request ${ASDC_CATALOG_RESOURCES_PATH}/${catalog_resource_id}${ASDC_CATALOG_LIFECYCLE_PATH}/certificationRequest ${data} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+Start Certify ASDC Catalog Resource
+ [Documentation] start certify an asdc Catalog Resource by its id
+ [Arguments] ${catalog_resource_id}
+ ${resp}= Run ASDC Post Request ${ASDC_CATALOG_RESOURCES_PATH}/${catalog_resource_id}${ASDC_CATALOG_LIFECYCLE_PATH}/startCertification ${None} ${ASDC_TESTER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+Certify ASDC Catalog Resource
+ [Documentation] start certify an asdc Catalog Resource by its id and returns the new id
+ [Arguments] ${catalog_resource_id}
+ ${map}= Create Dictionary user_remarks=Robot remarks
+ ${data}= Fill JSON Template File ${ASDC_USER_REMARKS_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request ${ASDC_CATALOG_RESOURCES_PATH}/${catalog_resource_id}${ASDC_CATALOG_LIFECYCLE_PATH}/certify ${data} ${ASDC_TESTER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()['uniqueId']}
+
+Upload ASDC Heat Package
+ [Documentation] Creates an asdc Software Product and returns its id
+ [Arguments] ${software_product_id} ${file_path} ${version_id}=0.1
+ ${files}= Create Dictionary
+ Create Multi Part ${files} upload ${file_path} contentType=application/zip
+ ${resp}= Run ASDC Post Files Request ${ASDC_VENDOR_SOFTWARE_PRODUCT_PATH}/${software_product_id}/versions/${version_id}${ASDC_VENDOR_SOFTWARE_UPLOAD_PATH} ${files} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+
+Add ASDC Catalog Service
+ [Documentation] Creates an asdc Catalog Service and returns its id
+ [Arguments] ${catalog_service_name}
+ ${uuid}= Generate UUID
+ ${shortened_uuid}= Evaluate str("${uuid}")[:23]
+ ${catalog_service_name}= Set Variable If '${catalog_service_name}' =='' ${shortened_uuid} ${catalog_service_name}
+ ${map}= Create Dictionary service_name=${catalog_service_name}
+ ${data}= Fill JSON Template File ${ASDC_CATALOG_SERVICE_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request ${ASDC_CATALOG_SERVICES_PATH} ${data} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 201
+ [Return] ${resp.json()['uniqueId']}
+Mark ASDC Catalog Service Inactive
+ [Documentation] Deletes an asdc Catalog Service
+ [Arguments] ${catalog_service_id}
+ ${resp}= Run ASDC Delete Request ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 204
+ [Return] ${resp}
+Delete Inactive ASDC Catalog Services
+ [Documentation] delete all asdc Catalog Serivces that are inactive
+ ${resp}= Run ASDC Delete Request ${ASDC_CATALOG_INACTIVE_SERVICES_PATH} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+Get ASDC Catalog Service
+ [Documentation] gets an asdc Catalog Service by its id
+ [Arguments] ${catalog_service_id}
+ ${resp}= Run ASDC Get Request ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id} ${ASDC_DESIGNER_USER_ID}
+ [Return] ${resp.json()}
+Checkin ASDC Catalog Service
+ [Documentation] checksin an asdc Catalog Service by its id
+ [Arguments] ${catalog_service_id}
+ ${map}= Create Dictionary user_remarks=Robot remarks
+ ${data}= Fill JSON Template File ${ASDC_USER_REMARKS_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id}${ASDC_CATALOG_LIFECYCLE_PATH}/checkin ${data} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+Request Certify ASDC Catalog Service
+ [Documentation] requests certify on an asdc Catalog Service by its id
+ [Arguments] ${catalog_service_id}
+ ${map}= Create Dictionary user_remarks=Robot remarks
+ ${data}= Fill JSON Template File ${ASDC_USER_REMARKS_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id}${ASDC_CATALOG_LIFECYCLE_PATH}/certificationRequest ${data} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+Start Certify ASDC Catalog Service
+ [Documentation] start certify an asdc Catalog Service by its id
+ [Arguments] ${catalog_service_id}
+ ${resp}= Run ASDC Post Request ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id}${ASDC_CATALOG_LIFECYCLE_PATH}/startCertification ${None} ${ASDC_TESTER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+Certify ASDC Catalog Service
+ [Documentation] start certify an asdc Catalog Service by its id and returns the new id
+ [Arguments] ${catalog_service_id}
+ ${map}= Create Dictionary user_remarks=Robot remarks
+ ${data}= Fill JSON Template File ${ASDC_USER_REMARKS_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id}${ASDC_CATALOG_LIFECYCLE_PATH}/certify ${data} ${ASDC_TESTER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()['uniqueId']}
+Approve ASDC Catalog Service
+ [Documentation] approve an asdc Catalog Service by its id
+ [Arguments] ${catalog_service_id}
+ ${map}= Create Dictionary user_remarks=Robot remarks
+ ${data}= Fill JSON Template File ${ASDC_USER_REMARKS_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id}${ASDC_CATALOG_SERVICE_DISTRIBUTION_STATE_PATH}${ASDC_DISTRIBUTION_STATE_APPROVE_PATH} ${data} ${ASDC_GOVERNOR_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+Distribute ASDC Catalog Service
+ [Documentation] distribute an asdc Catalog Service by its id
+ [Arguments] ${catalog_service_id}
+ ${resp}= Run ASDC Post Request ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id}${ASDC_CATALOG_SERVICE_DISTRIBUTION_ACTIVATE_PATH} ${None} ${ASDC_OPS_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+Add ASDC Resource Instance
+ [Documentation] Creates an asdc Resource Instance and returns its id
+ [Arguments] ${catalog_service_id} ${catalog_resource_id} ${catalog_resource_name}
+ ${milli_timestamp}= Generate MilliTimestamp UUID
+ ${map}= Create Dictionary catalog_resource_id=${catalog_resource_id} catalog_resource_name=${catalog_resource_name} milli_timestamp=${milli_timestamp}
+ ${data}= Fill JSON Template File ${ASDC_RESOURCE_INSTANCE_TEMPLATE} ${map}
+ ${resp}= Run ASDC Post Request ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_id}${ASDC_CATALOG_SERVICE_RESOURCE_INSTANCE_PATH} ${data} ${ASDC_DESIGNER_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 201
+ [Return] ${resp.json()['uniqueId']}
+Get Catalog Service Distribution
+ [Documentation] gets an asdc catalog Service distrbution
+ [Arguments] ${catalog_service_uuid}
+ ${resp}= Run ASDC Get Request ${ASDC_CATALOG_SERVICES_PATH}/${catalog_service_uuid}${ASDC_CATALOG_SERVICE_DISTRIBUTION_PATH} ${ASDC_OPS_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+Check Catalog Service Distributed
+ [Documentation] gets an asdc catalog Service distrbution
+ [Arguments] ${catalog_service_uuid}
+ ${dist_resp}= Get Catalog Service Distribution ${catalog_service_uuid}
+ Should Be Equal As Strings ${dist_resp['distributionStatusOfServiceList'][0]['deployementStatus']} Distributed
+ Sleep 3 minutes
+ ${det_resp}= Get Catalog Service Distribution Details ${dist_resp['distributionStatusOfServiceList'][0]['distributionID']}
+ @{ITEMS}= Copy List ${det_resp['distributionStatusList']}
+ :FOR ${ELEMENT} IN @{ITEMS}
+ \ Log ${ELEMENT['status']}
+ \ Should Match Regexp ${ELEMENT['status']} ^(DEPLOY_OK|NOTIFIED|DOWNLOAD_OK|NOT_NOTIFIED)$
+Get Catalog Service Distribution Details
+ [Documentation] gets an asdc catalog Service distrbution details
+ [Arguments] ${catalog_service_distribution_id}
+ ${resp}= Run ASDC Get Request ${ASDC_CATALOG_SERVICES_PATH}${ASDC_CATALOG_SERVICE_DISTRIBUTION_PATH}/${catalog_service_distribution_id} ${ASDC_OPS_USER_ID}
+ Should Be Equal As Strings ${resp.status_code} 200
+ [Return] ${resp.json()}
+Run ASDC Health Check
+ [Documentation] Runs a ASDC health check
+ ${session}= Create Session asdc ${ASDC_FE_ENDPOINT}
+ ${uuid}= Generate UUID
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID}
+ ${resp}= Get Request asdc ${ASDC_HEALTH_CHECK_PATH} headers=${headers}
+ Should Be Equal As Strings ${resp.status_code} 200
+ @{ITEMS}= Copy List ${resp.json()['componentsInfo']}
+ :FOR ${ELEMENT} IN @{ITEMS}
+ \ Log ${ELEMENT['healthCheckStatus']}
+ \ Should Be Equal As Strings ${ELEMENT['healthCheckStatus']} UP
+Run ASDC Get Request
+ [Documentation] Runs an ASDC get request
+ [Arguments] ${data_path} ${user}=${ASDC_DESIGNER_USER_ID}
+ ${auth}= Create List ${GLOBAL_ASDC_BE_USERNAME} ${GLOBAL_ASDC_BE_PASSWORD}
+ Log Creating session ${ASDC_BE_ENDPOINT}
+ ${session}= Create Session asdc ${ASDC_BE_ENDPOINT} auth=${auth}
+ ${uuid}= Generate UUID
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json USER_ID=${user} X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID}
+ ${resp}= Get Request asdc ${data_path} headers=${headers}
+ Log Received response from asdc ${resp.text}
+ [Return] ${resp}
+Run ASDC Put Request
+ [Documentation] Runs an ASDC put request
+ [Arguments] ${data_path} ${data} ${user}=${ASDC_DESIGNER_USER_ID}
+ ${auth}= Create List ${GLOBAL_ASDC_BE_USERNAME} ${GLOBAL_ASDC_BE_PASSWORD}
+ Log Creating session ${ASDC_BE_ENDPOINT}
+ ${session}= Create Session asdc ${ASDC_BE_ENDPOINT} auth=${auth}
+ ${uuid}= Generate UUID
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json USER_ID=${user} X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID}
+ ${resp}= Put Request asdc ${data_path} data=${data} headers=${headers}
+ Log Received response from asdc ${resp.text}
+ [Return] ${resp}
+
+Run ASDC Post Files Request
+ [Documentation] Runs an ASDC post request
+ [Arguments] ${data_path} ${files} ${user}=${ASDC_DESIGNER_USER_ID}
+ ${auth}= Create List ${GLOBAL_ASDC_BE_USERNAME} ${GLOBAL_ASDC_BE_PASSWORD}
+ Log Creating session ${ASDC_BE_ENDPOINT}
+ ${session}= Create Session asdc ${ASDC_BE_ENDPOINT} auth=${auth}
+ ${uuid}= Generate UUID
+ ${headers}= Create Dictionary Accept=application/json Content-Type=multipart/form-data USER_ID=${user} X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID}
+ ${resp}= Post Request asdc ${data_path} files=${files} headers=${headers}
+ Log Received response from asdc ${resp.text}
+ [Return] ${resp}
+
+Run ASDC Post Request
+ [Documentation] Runs an ASDC post request
+ [Arguments] ${data_path} ${data} ${user}=${ASDC_DESIGNER_USER_ID}
+ ${auth}= Create List ${GLOBAL_ASDC_BE_USERNAME} ${GLOBAL_ASDC_BE_PASSWORD}
+ Log Creating session ${ASDC_BE_ENDPOINT}
+ ${session}= Create Session asdc ${ASDC_BE_ENDPOINT} auth=${auth}
+ ${uuid}= Generate UUID
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json USER_ID=${user} X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID}
+ ${resp}= Post Request asdc ${data_path} data=${data} headers=${headers}
+ Log Received response from asdc ${resp.text}
+ [Return] ${resp}
+Run ASDC Delete Request
+ [Documentation] Runs an ASDC delete request
+ [Arguments] ${data_path} ${user}=${ASDC_DESIGNER_USER_ID}
+ ${auth}= Create List ${GLOBAL_ASDC_BE_USERNAME} ${GLOBAL_ASDC_BE_PASSWORD}
+ Log Creating session ${ASDC_BE_ENDPOINT}
+ ${session}= Create Session asdc ${ASDC_BE_ENDPOINT} auth=${auth}
+ ${uuid}= Generate UUID
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json USER_ID=${user} X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID}
+ ${resp}= Delete Request asdc ${data_path} headers=${headers}
+ Log Received response from asdc ${resp.text}
+ [Return] ${resp}
+Open ASDC GUI
+ [Documentation] Logs in to ASDC GUI
+ [Arguments] ${PATH}
+ ## Setup Browever now being managed by the test case
+ ##Setup Browser
+ Go To ${ASDC_FE_ENDPOINT}${PATH}
+ Maximize Browser Window
+
+ Set Browser Implicit Wait ${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT}
+ Log Logging in to ${ASDC_FE_ENDPOINT}${PATH}
+ Title Should Be ASDC
+ Wait Until Page Contains Element xpath=//div/a[text()='SDC'] ${GLOBAL_SELENIUM_BROWSER_WAIT_TIMEOUT}
+ Log Logged in to ${ASDC_FE_ENDPOINT}${PATH}
+
+
+Create Multi Part
+ [Arguments] ${addTo} ${partName} ${filePath} ${contentType}=${None}
+ ${fileData}= Get Binary File ${filePath}
+ ${fileDir} ${fileName}= Split Path ${filePath}
+ ${partData}= Create List ${fileName} ${fileData} ${contentType}
+ Set To Dictionary ${addTo} ${partName}=${partData}
diff --git a/kubernetes/robot/resources/config/robot/resources/policy_interface.robot b/kubernetes/robot/resources/config/robot/resources/policy_interface.robot
new file mode 100644
index 0000000000..9193fe438a
--- /dev/null
+++ b/kubernetes/robot/resources/config/robot/resources/policy_interface.robot
@@ -0,0 +1,57 @@
+*** Settings ***
+Documentation The main interface for interacting with Policy. It handles low level stuff like managing the http request library and Policy required fields
+Library RequestsClientCert
+Library RequestsLibrary
+Library String
+Library JSONUtils
+Library Collections
+Resource global_properties.robot
+
+*** Variables ***
+${POLICY_HEALTH_CHECK_PATH} /healthcheck
+${POLICY_ENDPOINT} ${GLOBAL_POLICY_SERVER_PROTOCOL}://${GLOBAL_INJECTED_POLICY_IP_ADDR}:${GLOBAL_POLICY_SERVER_PORT}
+${POLICY_HEALTHCHECK_ENDPOINT} ${GLOBAL_POLICY_SERVER_PROTOCOL}://${GLOBAL_INJECTED_POLICY_HEALTHCHECK_IP_ADDR}:${GLOBAL_POLICY_HEALTHCHECK_PORT}
+
+*** Keywords ***
+
+Run Policy Health Check
+ [Documentation] Runs Policy Health check
+ ${auth}= Create List ${GLOBAL_POLICY_USERNAME} ${GLOBAL_POLICY_PASSWORD}
+ Log Creating session ${POLICY_ENDPOINT}
+ ${session}= Create Session policy ${POLICY_HEALTHCHECK_ENDPOINT} auth=${auth}
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json
+ ${resp}= Get Request policy ${POLICY_HEALTH_CHECK_PATH} headers=${headers}
+ Log Received response from policy ${resp.text}
+ Should Be Equal As Strings ${resp.status_code} 200
+ Should Be True ${resp.json()['healthy']}
+ @{ITEMS}= Copy List ${resp.json()['details']}
+ :FOR ${ELEMENT} IN @{ITEMS}
+ \ Should Be Equal As Strings ${ELEMENT['code']} 200
+ \ Should Be True ${ELEMENT['healthy']}
+Run Policy Put Request
+ [Documentation] Runs Policy Put request
+ [Arguments] ${data_path} ${data}
+ Log Creating session ${POLICY_ENDPOINT}
+ ${session}= Create Session policy ${POLICY_ENDPOINT}
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json Authorization=Basic ${GLOBAL_POLICY_AUTH} ClientAuth=${GLOBAL_POLICY_CLIENTAUTH} Environment=TEST
+ ${resp}= Put Request policy ${data_path} data=${data} headers=${headers}
+ Log Received response from policy ${resp.text}
+ [Return] ${resp}
+Run Policy Delete Request
+ [Documentation] Runs Policy Delete request
+ [Arguments] ${data_path} ${data}
+ Log Creating session ${POLICY_ENDPOINT}
+ ${session}= Create Session policy ${POLICY_ENDPOINT}
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json Authorization=Basic ${GLOBAL_POLICY_AUTH} ClientAuth=${GLOBAL_POLICY_CLIENTAUTH} Environment=TEST
+ ${resp}= Delete Request policy ${data_path} data=${data} headers=${headers}
+ Log Received response from policy ${resp.text}
+ [Return] ${resp}
+Run Policy Get Configs Request
+ [Documentation] Runs Policy Get Configs request
+ [Arguments] ${data_path} ${data}
+ Log Creating session ${POLICY_ENDPOINT}
+ ${session}= Create Session policy ${POLICY_ENDPOINT}
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json Authorization=Basic ${GLOBAL_POLICY_AUTH} ClientAuth=${GLOBAL_POLICY_CLIENTAUTH}
+ ${resp}= Post Request policy ${data_path} data=${data} headers=${headers}
+ Log Received response from policy ${resp.text}
+ [Return] ${resp}
diff --git a/kubernetes/robot/resources/config/robot/resources/sdngc_interface.robot b/kubernetes/robot/resources/config/robot/resources/sdngc_interface.robot
new file mode 100644
index 0000000000..5b79f9a305
--- /dev/null
+++ b/kubernetes/robot/resources/config/robot/resources/sdngc_interface.robot
@@ -0,0 +1,222 @@
+*** Settings ***
+Documentation The main interface for interacting with SDN-GC. It handles low level stuff like managing the http request library and SDN-GC required fields
+Library RequestsLibrary
+Library UUID
+Library OperatingSystem
+Library ExtendedSelenium2Library
+Library Collections
+Library String
+Library StringTemplater
+Resource global_properties.robot
+Resource ../resources/json_templater.robot
+Resource browser_setup.robot
+
+Variables ../assets/service_mappings.py
+
+*** Variables ***
+${PRELOAD_VNF_TOPOLOGY_OPERATION_PATH} /operations/VNF-API:preload-vnf-topology-operation
+${PRELOAD_VNF_CONFIG_PATH} /config/VNF-API:preload-vnfs/vnf-preload-list
+${PRELOAD_VNF_TOPOLOGY_OPERATION_BODY} robot/assets/templates/sdnc/
+${SDNGC_INDEX_PATH} /restconf
+${SDNCGC_HEALTHCHECK_OPERATION_PATH} /operations/SLI-API:healthcheck
+${SDNGC_REST_ENDPOINT} ${GLOBAL_SDNGC_SERVER_PROTOCOL}://${GLOBAL_INJECTED_SDNC_IP_ADDR}:${GLOBAL_SDNGC_REST_PORT}
+${SDNGC_ADMIN_ENDPOINT} ${GLOBAL_SDNGC_SERVER_PROTOCOL}://${GLOBAL_INJECTED_SDNC_PORTAL_IP_ADDR}:${GLOBAL_SDNGC_ADMIN_PORT}
+${SDNGC_ADMIN_SIGNUP_URL} ${SDNGC_ADMIN_ENDPOINT}/signup
+${SDNGC_ADMIN_LOGIN_URL} ${SDNGC_ADMIN_ENDPOINT}/login
+${SDNGC_ADMIN_VNF_PROFILE_URL} ${SDNGC_ADMIN_ENDPOINT}/mobility/getVnfProfile
+
+*** Keywords ***
+Run SDNGC Health Check
+ [Documentation] Runs an SDNGC healthcheck
+ ${resp}= Run SDNGC Post Request ${SDNGC_INDEX PATH}${SDNCGC_HEALTHCHECK_OPERATION_PATH} ${None}
+ Should Be Equal As Strings ${resp.status_code} 200
+ Should Be Equal As Strings ${resp.json()['output']['response-code']} 200
+
+Run SDNGC Get Request
+ [Documentation] Runs an SDNGC get request
+ [Arguments] ${data_path}
+ ${auth}= Create List ${GLOBAL_SDNGC_USERNAME} ${GLOBAL_SDNGC_PASSWORD}
+ Log Creating session ${SDNGC_REST_ENDPOINT}
+ ${session}= Create Session sdngc ${SDNGC_REST_ENDPOINT} auth=${auth}
+ ${uuid}= Generate UUID
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID}
+ ${resp}= Get Request sdngc ${data_path} headers=${headers}
+ Log Received response from sdngc ${resp.text}
+ [Return] ${resp}
+
+Run SDNGC Put Request
+ [Documentation] Runs an SDNGC put request
+ [Arguments] ${data_path} ${data}
+ ${auth}= Create List ${GLOBAL_SDNGC_USERNAME} ${GLOBAL_SDNGC_PASSWORD}
+ Log Creating session ${SDNGC_REST_ENDPOINT}
+ ${session}= Create Session sdngc ${SDNGC_REST_ENDPOINT} auth=${auth}
+ ${uuid}= Generate UUID
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID}
+ ${resp}= Put Request sdngc ${data_path} data=${data} headers=${headers}
+ Log Received response from sdngc ${resp.text}
+ [Return] ${resp}
+
+Run SDNGC Post Request
+ [Documentation] Runs an SDNGC post request
+ [Arguments] ${data_path} ${data}
+ ${auth}= Create List ${GLOBAL_SDNGC_USERNAME} ${GLOBAL_SDNGC_PASSWORD}
+ Log Creating session ${SDNGC_REST_ENDPOINT}
+ ${session}= Create Session sdngc ${SDNGC_REST_ENDPOINT} auth=${auth}
+ ${uuid}= Generate UUID
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID}
+ ${resp}= Post Request sdngc ${data_path} data=${data} headers=${headers}
+ Log Received response from sdngc ${resp.text}
+ [Return] ${resp}
+
+Run SDNGC Delete Request
+ [Documentation] Runs an SDNGC delete request
+ [Arguments] ${data_path}
+ ${auth}= Create List ${GLOBAL_SDNGC_USERNAME} ${GLOBAL_SDNGC_PASSWORD}
+ Log Creating session ${SDNGC_REST_ENDPOINT}
+ ${session}= Create Session sdngc ${SDNGC_REST_ENDPOINT} auth=${auth}
+ ${uuid}= Generate UUID
+ ${headers}= Create Dictionary Accept=application/json Content-Type=application/json X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid} X-FromAppId=${GLOBAL_APPLICATION_ID}
+ ${resp}= Delete Request sdngc ${data_path} headers=${headers}
+ Log Received response from sdngc ${resp.text}
+ [Return] ${resp}
+
+
+Preload Vnf
+ [Arguments] ${service_type_uuid} ${generic_vnf_name} ${generic_vnf_type} ${vf_module_name} ${vf_modules} ${service} ${uuid}
+ ${base_vf_module_type}= Catenate ''
+ ${closedloop_vf_module}= Create Dictionary
+ ${templates}= Get From Dictionary ${GLOBAL_SERVICE_TEMPLATE_MAPPING} ${service}
+ :for ${vf_module} in @{vf_modules}
+ \ ${vf_module_type}= Get From Dictionary ${vf_module} name
+ \ ${dict} Get From Mapping ${templates} ${vf_module}
+ \ ${filename}= Get From Dictionary ${dict} template
+ \ ${base_vf_module_type}= Set Variable If '${dict['isBase']}' == 'true' ${vf_module_type} ${base_vf_module_type}
+ \ ${closedloop_vf_module}= Set Variable If '${dict['isBase']}' == 'false' ${vf_module} ${closedloop_vf_module}
+ \ ${vf_name}= Update Module Name ${dict} ${vf_module_name}
+ \ Preload Vnf Profile ${vf_module_type}
+ \ Preload One Vnf Topology ${service_type_uuid} ${generic_vnf_name} ${generic_vnf_type} ${vf_name} ${vf_module_type} ${service} ${filename} ${uuid}
+ [Return] ${base_vf_module_type} ${closedloop_vf_module}
+
+
+Update Module Name
+ [Arguments] ${dict} ${vf_module_name}
+ Return From Keyword If 'prefix' not in ${dict} ${vf_module_name}
+ Return From Keyword If '${dict['prefix']}' == '' ${vf_module_name}
+ ${name}= Replace String ${vf_module_name} Vfmodule_ ${dict['prefix']}
+ [Return] ${name}
+
+Get From Mapping
+ [Documentation] Retrieve the appropriate prelad template entry for the passed vf_module
+ [Arguments] ${templates} ${vf_module}
+ ${vf_module_name}= Get From DIctionary ${vf_module} name
+ :for ${template} in @{templates}
+ \ Return From Keyword If '${template['name_pattern']}' in '${vf_module_name}' ${template}
+ [Return] None
+
+Preload One Vnf Topology
+ [Arguments] ${service_type_uuid} ${generic_vnf_name} ${generic_vnf_type} ${vf_module_name} ${vf_module_type} ${service} ${filename} ${uuid}
+ Return From Keyword If '${filename}' == ''
+ ${data_template}= OperatingSystem.Get File ${PRELOAD_VNF_TOPOLOGY_OPERATION_BODY}/preload.template
+ ${parameters}= Get Template Parameters ${filename} ${uuid}
+ Set To Dictionary ${parameters} generic_vnf_name=${generic_vnf_name} generic_vnf_type=${generic_vnf_type} service_type=${service_type_uuid} vf_module_name=${vf_module_name} vf_module_type=${vf_module_type} uuid=${uuid}
+ ${data}= Fill JSON Template ${data_template} ${parameters}
+ ${put_resp}= Run SDNGC Post Request ${SDNGC_INDEX_PATH}${PRELOAD_VNF_TOPOLOGY_OPERATION_PATH} ${data}
+ Should Be Equal As Strings ${put_resp.json()['output']['response-code']} 200
+ ${get_resp}= Run SDNGC Get Request ${SDNGC_INDEX_PATH}${PRELOAD_VNF_CONFIG_PATH}/${vf_module_name}/${vf_module_type}
+ Should Be Equal As Strings ${get_resp.status_code} 200
+
+Get Template Parameters
+ [Arguments] ${template} ${uuid}
+ ${rest} ${suite}= Split String From Right ${SUITE NAME} . 1
+ ${uuid}= Catenate ${uuid}
+ ${hostid}= Get Substring ${uuid} -4
+ ${ecompnet}= Evaluate ${GLOBAL_BUILD_NUMBER}%255
+ # Initialize the value map with the properties generated from the Robot VM /opt/config folder
+ ${valuemap}= Create Dictionary
+ Set To Dictionary ${valuemap} artifacts_version=${GLOBAL_INJECTED_ARTIFACTS_VERSION}
+ Set To Dictionary ${valuemap} network=${GLOBAL_INJECTED_NETWORK}
+ Set To Dictionary ${valuemap} public_net_id=${GLOBAL_INJECTED_PUBLIC_NET_ID}
+ Set To Dictionary ${valuemap} cloud_env=${GLOBAL_INJECTED_CLOUD_ENV}
+ Set To Dictionary ${valuemap} install_script_version=${GLOBAL_INJECTED_SCRIPT_VERSION}
+ Set To Dictionary ${valuemap} vm_image_name=${GLOBAL_INJECTED_VM_IMAGE_NAME}
+ Set To Dictionary ${valuemap} vm_flavor_name=${GLOBAL_INJECTED_VM_FLAVOR}
+ # update the value map with unique values.
+ Set To Dictionary ${valuemap} uuid=${uuid} hostid=${hostid} ecompnet=${ecompnet}
+ ${parameters}= Create Dictionary
+ ${defaults}= Get From Dictionary ${GLOBAL_PRELOAD_PARAMETERS} defaults
+ Resolve Values Into Dictionary ${valuemap} ${defaults} ${parameters}
+ ${suite_templates}= Get From Dictionary ${GLOBAL_PRELOAD_PARAMETERS} ${suite}
+ ${template}= Get From Dictionary ${suite_templates} ${template}
+ ${vnf_parameters}= Resolve VNF Parameters Into Array ${valuemap} ${template} ${parameters}
+ ${vnf_parameters_json}= Evaluate json.dumps(${vnf_parameters}) json
+ Set To Dictionary ${parameters} vnf_parameters=${vnf_parameters_json}
+ [Return] ${parameters}
+
+Resolve Values Into Dictionary
+ [Arguments] ${valuemap} ${from} ${to}
+ ${keys}= Get Dictionary Keys ${from}
+ :for ${key} in @{keys}
+ \ ${value}= Get From Dictionary ${from} ${key}
+ \ ${value}= Template String ${value} ${valuemap}
+ \ Set To Dictionary ${to} ${key} ${value}
+
+Resolve VNF Parameters Into Array
+ [Arguments] ${valuemap} ${from} ${to}
+ ${vnf_parameters}= Create List
+ ${keys}= Get Dictionary Keys ${from}
+ :for ${key} in @{keys}
+ \ ${value}= Get From Dictionary ${from} ${key}
+ \ ${value}= Template String ${value} ${valuemap}
+ \ ${parameter}= Create Dictionary vnf-parameter-name=${key} vnf-parameter-value=${value}
+ \ Append To List ${vnf_parameters} ${parameter}
+ [Return] ${vnf_parameters}
+
+Preload Vnf Profile
+ [Arguments] ${vnf_name}
+ Login To SDNGC Admin GUI
+ Go To ${SDNGC_ADMIN_VNF_PROFILE_URL}
+ Click Button xpath=//button[@data-target='#add_vnf_profile']
+ Input Text xpath=//input[@id='nf_vnf_type'] ${vnf_name}
+ Input Text xpath=//input[@id='nf_availability_zone_count'] 999
+ Input Text xpath=//input[@id='nf_equipment_role'] robot-ete-test
+ Click Button xpath=//button[contains(.,'Submit')]
+ Page Should Contain VNF Profile
+ Input Text xpath=//div[@id='vnf_profile_filter']//input ${vnf_name}
+ Page Should Contain ${vnf_name}
+
+Delete Vnf Profile
+ [Arguments] ${vnf_name}
+ Login To SDNGC Admin GUI
+ Go To ${SDNGC_ADMIN_VNF_PROFILE_URL}
+ Page Should Contain VNF Profile
+ Input Text xpath=//div[@id='vnf_profile_filter']//input ${vnf_name}
+ Page Should Contain ${vnf_name}
+ Click Button xpath=//button[contains(@onclick, '${vnf_name}')]
+ Page Should Contain Are you sure you want to delete VNF_PROFILE
+ Click Button xpath=//button[contains(text(), 'Yes')]
+ Page Should Not Contain ${vnf_name}
+
+Login To SDNGC Admin GUI
+ [Documentation] Login To SDNGC Admin GUI
+ ## Setup Browser is now being managed by the test case
+ ## Setup Browser
+ Go To ${SDNGC_ADMIN_SIGNUP_URL}
+ ##Maximize Browser Window
+ Set Selenium Speed ${GLOBAL_SELENIUM_DELAY}
+ Set Browser Implicit Wait ${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT}
+ Log Logging in to ${SDNGC_ADMIN_LOGIN_URL}
+ Handle Proxy Warning
+ Title Should Be AdminPortal
+ ${uuid}= Generate UUID
+ ${shortened_uuid}= Evaluate str("${uuid}")[:12]
+ ${email}= Catenate ${shortened_uuid}@robotete.com
+ Input Text xpath=//input[@id='nf_email'] ${email}
+ Input Password xpath=//input[@id='nf_password'] ${shortened_uuid}
+ Click Button xpath=//button[@type='submit']
+ Wait Until Page Contains User created 20s
+ Go To ${SDNGC_ADMIN_LOGIN_URL}
+ Input Text xpath=//input[@id='email'] ${email}
+ Input Password xpath=//input[@id='password'] ${shortened_uuid}
+ Click Button xpath=//button[@type='submit']
+ Title Should Be SDN-C AdminPortal
+ Log Logged in to ${SDNGC_ADMIN_LOGIN_URL}
diff --git a/kubernetes/robot/templates/NOTES.txt b/kubernetes/robot/templates/NOTES.txt
new file mode 100644
index 0000000000..91d8ed42f1
--- /dev/null
+++ b/kubernetes/robot/templates/NOTES.txt
@@ -0,0 +1,19 @@
+1. Get the application URL by running these commands:
+{{- if .Values.ingress.enabled }}
+{{- range .Values.ingress.hosts }}
+ http://{{ . }}
+{{- end }}
+{{- else if contains "NodePort" .Values.service.type }}
+ export NODE_PORT=$(kubectl get --namespace {{ include "common.namespace" . }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "common.name" . }})
+ export NODE_IP=$(kubectl get nodes --namespace {{ include "common.namespace" . }} -o jsonpath="{.items[0].status.addresses[0].address}")
+ echo http://$NODE_IP:$NODE_PORT
+{{- else if contains "LoadBalancer" .Values.service.type }}
+ NOTE: It may take a few minutes for the LoadBalancer IP to be available.
+ You can watch the status of by running 'kubectl get svc -w {{ include "common.name" . }}'
+ export SERVICE_IP=$(kubectl get svc --namespace {{ include "common.namespace" . }} {{ include "common.name" . }} -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
+ echo http://$SERVICE_IP:{{ .Values.service.externalPort }}
+{{- else if contains "ClusterIP" .Values.service.type }}
+ export POD_NAME=$(kubectl get pods --namespace {{ include "common.namespace" . }} -l "app={{ template "so.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
+ echo "Visit http://127.0.0.1:8080 to use your application"
+ kubectl port-forward $POD_NAME 8080:{{ .Values.service.internalPort }}
+{{- end }}
diff --git a/kubernetes/robot/templates/all-services.yaml b/kubernetes/robot/templates/all-services.yaml
deleted file mode 100644
index 196e7b196a..0000000000
--- a/kubernetes/robot/templates/all-services.yaml
+++ /dev/null
@@ -1,16 +0,0 @@
-#{{ if not .Values.disableRobotRobot }}
-apiVersion: v1
-kind: Service
-metadata:
- labels:
- app: robot
- name: robot
- namespace: "{{ .Values.nsPrefix }}-robot"
-spec:
- ports:
- - port: 88
- nodePort: {{ .Values.nodePortPrefix }}09
- selector:
- app: robot
- type: NodePort
-#{{ end }} \ No newline at end of file
diff --git a/kubernetes/robot/templates/configmap.yaml b/kubernetes/robot/templates/configmap.yaml
new file mode 100644
index 0000000000..fd26992273
--- /dev/null
+++ b/kubernetes/robot/templates/configmap.yaml
@@ -0,0 +1,23 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "common.name" . }}-eteshare-configmap
+ namespace: {{ include "common.namespace" . }}
+data:
+{{ tpl (.Files.Glob "resources/config/eteshare/config/*").AsConfig . | indent 2 }}
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "common.name" . }}-resources-configmap
+ namespace: {{ include "common.namespace" . }}
+data:
+{{ tpl (.Files.Glob "resources/config/robot/resources/*").AsConfig . | indent 2 }}
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ include "common.name" . }}-lighttpd-authorization-configmap
+ namespace: {{ include "common.namespace" . }}
+data:
+{{ tpl (.Files.Glob "resources/config/authorization").AsConfig . | indent 2 }}
diff --git a/kubernetes/robot/templates/deployment.yaml b/kubernetes/robot/templates/deployment.yaml
new file mode 100644
index 0000000000..596d622a4b
--- /dev/null
+++ b/kubernetes/robot/templates/deployment.yaml
@@ -0,0 +1,82 @@
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: {{ include "common.name" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.name" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+spec:
+ replicas: {{ .Values.robotReplicas }}
+ template:
+ metadata:
+ labels:
+ app: {{ include "common.name" . }}
+ release: {{ .Release.Name }}
+ spec:
+ containers:
+ - name: {{ .Chart.Name }}
+ image: "{{ .Values.global.repository | default .Values.repository }}/{{ .Values.image }}"
+ imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
+ ports:
+ - containerPort: {{ .Values.service.internalPort }}
+ # disable liveness probe when breakpoints set in debugger
+ # so K8s doesn't restart unresponsive container
+ {{- if eq .Values.liveness.enabled true }}
+ livenessProbe:
+ tcpSocket:
+ port: {{ .Values.service.internalPort }}
+ initialDelaySeconds: {{ .Values.liveness.initialDelaySeconds }}
+ periodSeconds: {{ .Values.liveness.periodSeconds }}
+ {{ end -}}
+ readinessProbe:
+ tcpSocket:
+ port: {{ .Values.service.internalPort }}
+ initialDelaySeconds: {{ .Values.readiness.initialDelaySeconds }}
+ periodSeconds: {{ .Values.readiness.periodSeconds }}
+ volumeMounts:
+ - name: localtime
+ mountPath: /etc/localtime
+ readOnly: true
+ - name: robot-eteshare
+ mountPath: /share/config
+ - name: robot-resources
+ mountPath: /var/opt/OpenECOMP_ETE/robot/resources/asdc_interface.robot
+ subPath: asdc_interface.robot
+ - name: robot-resources
+ mountPath: /var/opt/OpenECOMP_ETE/robot/resources/policy_interface.robot
+ subPath: policy_interface.robot
+ - name: robot-resources
+ mountPath: /var/opt/OpenECOMP_ETE/robot/resources/sdngc_interface.robot
+ subPath: sdngc_interface.robot
+ - name: robot-lighttpd-authorization
+ mountPath: /etc/lighttpd/authorization
+ subPath: authorization
+ resources:
+{{ toYaml .Values.resources | indent 12 }}
+ {{- if .Values.nodeSelector }}
+ nodeSelector:
+{{ toYaml .Values.nodeSelector | indent 10 }}
+ {{- end -}}
+ {{- if .Values.affinity }}
+ affinity:
+{{ toYaml .Values.affinity | indent 10 }}
+ {{- end }}
+ volumes:
+ - name: localtime
+ hostPath:
+ path: /etc/localtime
+ - name: robot-eteshare
+ configMap:
+ name: {{ include "common.name" . }}-eteshare-configmap
+ defaultMode: 0755
+ - name: robot-resources
+ configMap:
+ name: {{ include "common.name" . }}-resources-configmap
+ - name: robot-lighttpd-authorization
+ configMap:
+ name: {{ include "common.name" . }}-lighttpd-authorization-configmap
+ imagePullSecrets:
+ - name: "{{ include "common.namespace" . }}-docker-registry-key"
diff --git a/kubernetes/robot/templates/robot-deployment.yaml b/kubernetes/robot/templates/robot-deployment.yaml
deleted file mode 100644
index 5130955919..0000000000
--- a/kubernetes/robot/templates/robot-deployment.yaml
+++ /dev/null
@@ -1,63 +0,0 @@
-#{{ if not .Values.disableRobotRobot }}
-apiVersion: extensions/v1beta1
-kind: Deployment
-metadata:
- name: robot
- namespace: "{{ .Values.nsPrefix }}-robot"
-spec:
- selector:
- matchLabels:
- app: robot
- template:
- metadata:
- labels:
- app: robot
- name: robot
- spec:
- containers:
- - image: {{ .Values.image.testsuite }}
- imagePullPolicy: {{ .Values.pullPolicy }}
- name: robot
- volumeMounts:
- - name: localtime
- mountPath: /etc/localtime
- readOnly: true
- - name: robot-eteshare
- mountPath: /share
- - name: robot-resources-asdc-interface
- mountPath: /var/opt/OpenECOMP_ETE/robot/resources/asdc_interface.robot
- - name: robot-resources-policy-interface
- mountPath: /var/opt/OpenECOMP_ETE/robot/resources/policy_interface.robot
- - name: robot-resources-sdngc-interface
- mountPath: /var/opt/OpenECOMP_ETE/robot/resources/sdngc_interface.robot
- - name: lighttpd-authorization
- mountPath: /etc/lighttpd/authorization
- ports:
- - containerPort: 88
- readinessProbe:
- tcpSocket:
- port: 88
- initialDelaySeconds: 5
- periodSeconds: 10
- volumes:
- - name: localtime
- hostPath:
- path: /etc/localtime
- - name: robot-eteshare
- hostPath:
- path: /dockerdata-nfs/{{ .Values.nsPrefix }}/robot/eteshare
- - name: robot-resources-asdc-interface
- hostPath:
- path: /dockerdata-nfs/{{ .Values.nsPrefix }}/robot/robot/resources/asdc_interface.robot
- - name: robot-resources-policy-interface
- hostPath:
- path: /dockerdata-nfs/{{ .Values.nsPrefix }}/robot/robot/resources/policy_interface.robot
- - name: robot-resources-sdngc-interface
- hostPath:
- path: /dockerdata-nfs/{{ .Values.nsPrefix }}/robot/robot/resources/sdngc_interface.robot
- - name: lighttpd-authorization
- hostPath:
- path: /dockerdata-nfs/{{ .Values.nsPrefix }}/robot/authorization
- imagePullSecrets:
- - name: "{{ .Values.nsPrefix }}-docker-registry-key"
-#{{ end }} \ No newline at end of file
diff --git a/kubernetes/robot/templates/service.yaml b/kubernetes/robot/templates/service.yaml
new file mode 100644
index 0000000000..90d0ab8d18
--- /dev/null
+++ b/kubernetes/robot/templates/service.yaml
@@ -0,0 +1,25 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "common.name" . }}
+ namespace: {{ include "common.namespace" . }}
+ labels:
+ app: {{ include "common.name" . }}
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+spec:
+ type: {{ .Values.service.type }}
+ ports:
+ {{if eq .Values.service.type "NodePort" -}}
+ - port: {{ .Values.service.internalPort }}
+ nodePort: {{ .Values.global.nodePortPrefix | default .Values.nodePortPrefix }}{{ .Values.service.externalPort }}
+ name: {{ .Values.service.name }}
+ {{- else -}}
+ - port: {{ .Values.service.externalPort }}
+ targetPort: {{ .Values.service.internalPort }}
+ name: {{ .Values.service.name }}
+ {{- end}}
+ selector:
+ app: {{ include "common.name" . }}
+ release: {{ .Release.Name }}
diff --git a/kubernetes/robot/values.yaml b/kubernetes/robot/values.yaml
index 221b572264..a2da2b71a8 100644
--- a/kubernetes/robot/values.yaml
+++ b/kubernetes/robot/values.yaml
@@ -1,6 +1,91 @@
-nsPrefix: onap
+#################################################################
+# Global configuration defaults.
+#################################################################
+global: # global defaults
+ nodePortPrefix: 302
+ repositorySecret: eyJuZXh1czMub25hcC5vcmc6MTAwMDEiOnsidXNlcm5hbWUiOiJkb2NrZXIiLCJwYXNzd29yZCI6ImRvY2tlciIsImVtYWlsIjoiQCIsImF1dGgiOiJaRzlqYTJWeU9tUnZZMnRsY2c9PSJ9fQ==
+ readinessRepository: oomk8s
+ readinessImage: readiness-check:1.0.0
+ loggingRepository: docker.elastic.co
+ loggingImage: beats/filebeat:5.5.0
+
+subChartsOnly:
+ enabled: true
+
+# application image
+repository: nexus3.onap.org:10001
+image: openecomp/testsuite:1.1-STAGING-latest
pullPolicy: Always
-nodePortPrefix: 302
-image:
- testsuite: nexus3.onap.org:10001/openecomp/testsuite:1.1-STAGING-latest
+# flag to enable debugging - application support required
+debugEnabled: false
+
+#################################################################
+# Application configuration defaults.
+#################################################################
+
+# openstack configuration
+
+demoArtifactsVersion: "1.1.0-SNAPSHOT"
+openStackPrivateNetCidr: "192.168.30.0"
+openStackFlavourMedium: "m1.medium"
+openStackKeyStoneUrl: "http://1.2.3.4:5000"
+openStackPublicNetId: "e8f51958045716781ffc"
+openStackPrivateNetId: "e8f51956-00dd-4425-af36-045716781ffc"
+openStackOamNetworkCidrPrefix: "192.168.120"
+openStackEncryptedPassword: "c124921a3a0efbe579782cde8227681e"
+openStackRegion: "RegionOne"
+openStackPrivateSubnetId: "e8f51956-00dd-4425-af36-045716781ffc"
+openStackTenantId: "47899782ed714295b1151681fdfd51f5"
+openStackUserName: "vnf_user"
+ubuntuImage: "Ubuntu_14.04.5_LTS"
+
+# default number of instances
+robotReplicas: 1
+
+nodeSelector: {}
+
+affinity: {}
+
+# probe configuration parameters
+liveness:
+ initialDelaySeconds: 10
+ periodSeconds: 10
+ # necessary to disable liveness probe when setting breakpoints
+ # in debugger so K8s doesn't restart unresponsive container
+ enabled: true
+
+readiness:
+ initialDelaySeconds: 10
+ periodSeconds: 10
+
+
+service:
+ type: NodePort
+ name: robot
+ externalPort: "09"
+ internalPort: 88
+
+
+ingress:
+ enabled: false
+
+
+resources: {}
+ # We usually recommend not to specify default resources and to leave this as a conscious
+ # choice for the user. This also increases chances charts run on environments with little
+ # resources, such as Minikube. If you do want to specify resources, uncomment the following
+ # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+ #
+ # Example:
+ # Configure resource requests and limits
+ # ref: http://kubernetes.io/docs/user-guide/compute-resources/
+ # Minimum memory for development is 2 CPU cores and 4GB memory
+ # Minimum memory for production is 4 CPU cores and 8GB memory
+#resources:
+# limits:
+# cpu: 2
+# memory: 4Gi
+# requests:
+# cpu: 2
+# memory: 4Gi