summaryrefslogtreecommitdiffstats
path: root/kubernetes/robot/resources
diff options
context:
space:
mode:
Diffstat (limited to 'kubernetes/robot/resources')
-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
8 files changed, 1138 insertions, 0 deletions
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}