diff options
Diffstat (limited to 'kubernetes/robot')
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 |