summaryrefslogtreecommitdiffstats
path: root/kud/tests
diff options
context:
space:
mode:
Diffstat (limited to 'kud/tests')
-rwxr-xr-xkud/tests/ncm-test.sh201
1 files changed, 201 insertions, 0 deletions
diff --git a/kud/tests/ncm-test.sh b/kud/tests/ncm-test.sh
new file mode 100755
index 00000000..363a1819
--- /dev/null
+++ b/kud/tests/ncm-test.sh
@@ -0,0 +1,201 @@
+#!/bin/bash
+set -o errexit
+set -o nounset
+set -o pipefail
+
+source _functions.sh
+
+base_url=${base_url:-"http://localhost:9016/v2"}
+
+# ncm data samples
+clusterprovidername="cluster-provider-a"
+clusterproviderdata="$(cat<<EOF
+{
+ "metadata": {
+ "name": "$clusterprovidername",
+ "description": "description of $clusterprovidername",
+ "userData1": "$clusterprovidername user data 1",
+ "userData2": "$clusterprovidername user data 2"
+ }
+}
+EOF
+)"
+
+clustername="cluster-a"
+clusterdata="$(cat<<EOF
+{
+ "metadata": {
+ "name": "$clustername",
+ "description": "description of $clustername",
+ "userData1": "$clustername user data 1",
+ "userData2": "$clustername user data 2"
+ }
+}
+EOF
+)"
+
+# set $kubeconfigfile before running script to point to the desired config file
+defaultkubeconfig="$(cat<<EOF
+{
+ "not a good kube config file"
+}
+EOF
+)"
+echo "$defaultkubeconfig" > /tmp/ncmkubeconfig
+
+kubeconfigfile=${kubeconfigfile:-"/tmp/ncmkubeconfig"}
+
+labelname="LabelA"
+labeldata="$(cat<<EOF
+{"label-name": "$labelname"}
+EOF
+)"
+
+kvname="kva"
+kvdata="$(cat<<EOF
+{
+ "metadata": {
+ "name": "$kvname",
+ "description": "this is key value $kvname",
+ "userData1": "cluster $kvname pair data",
+ "userData2": "cluster $kvname pair data a"
+ },
+ "spec": {
+ "kv" : [
+ {"keyA": "value A"},
+ {"keyB": "value B"},
+ {"keyC": "value C"}
+ ]
+ }
+}
+EOF
+)"
+
+networkname="network-a"
+networkdata="$(cat<<EOF
+{
+ "metadata": {
+ "name": "$networkname",
+ "description": "Description of $networkname",
+ "userData1": "$networkname data part A",
+ "userData2": "$networkname data part B"
+ },
+ "spec": {
+ "cniType": "ovn4nfv",
+ "ipv4Subnets": [
+ {
+ "subnet": "172.16.33.0/24",
+ "name": "subnet3",
+ "gateway": "172.16.33.1/32",
+ "excludeIps": "172.16.33.2 172.16.33.5..172.16.33.10"
+ },
+ {
+ "subnet": "172.16.34.0/24",
+ "name": "subnet4",
+ "gateway": "172.16.34.1/32",
+ "excludeIps": "172.16.34.2 172.16.34.5..172.16.34.10"
+ }
+ ]
+ }
+}
+EOF
+)"
+
+providernetworkname="providernetwork-a"
+providernetworkdata="$(cat<<EOF
+{
+ "metadata": {
+ "name": "$providernetworkname",
+ "description": "Description of $providernetworkname",
+ "userData1": "$providernetworkname data part A",
+ "userData2": "$providernetworkname data part B"
+ },
+ "spec": {
+ "cniType": "ovn4nfv",
+ "ipv4Subnets": [
+ {
+ "subnet": "172.16.31.0/24",
+ "name": "subnet1",
+ "gateway": "172.16.31.1/32",
+ "excludeIps": "172.16.31.2 172.16.31.5..172.16.31.10"
+ },
+ {
+ "subnet": "172.16.32.0/24",
+ "name": "subnet2",
+ "gateway": "172.16.32.1/32",
+ "excludeIps": "172.16.32.2 172.16.32.5..172.16.32.10"
+ }
+ ],
+ "providerNetType": "VLAN",
+ "vlan": {
+ "vlanId": 100,
+ "providerInterfaceName": "eth1",
+ "logicalInterfaceName": "eth1.100",
+ "vlanNodeSelector": "specific",
+ "nodeLabelList": [
+ "kubernetes.io/hostname=localhost",
+ "kubernetes.io/name=localhost"
+ ]
+ }
+ }
+}
+EOF
+)"
+
+
+function createNcmData {
+ call_api -d "${clusterproviderdata}" "${base_url}/cluster-providers"
+ call_api -H "Content-Type: multipart/form-data" -F "metadata=$clusterdata" -F "file=@$kubeconfigfile" "${base_url}/cluster-providers/${clusterprovidername}/clusters"
+ call_api -d "${labeldata}" "${base_url}/cluster-providers/${clusterprovidername}/clusters/${clustername}/labels"
+ call_api -d "${kvdata}" "${base_url}/cluster-providers/${clusterprovidername}/clusters/${clustername}/kv-pairs"
+ call_api -d "${providernetworkdata}" "${base_url}/cluster-providers/${clusterprovidername}/clusters/${clustername}/provider-networks"
+ call_api -d "${networkdata}" "${base_url}/cluster-providers/${clusterprovidername}/clusters/${clustername}/networks"
+}
+
+# apply the network and providernetwork to an appcontext and instantiate with resource synchronizer (when implemented)
+function applyNcmData {
+ call_api -d "{ }" "${base_url}/cluster-providers/${clusterprovidername}/clusters/${clustername}/apply"
+}
+
+# deletes the appcontext (eventually will terminate from resource synchronizer when that funcationality is ready)
+function terminateNcmData {
+ call_api -d "{ }" "${base_url}/cluster-providers/${clusterprovidername}/clusters/${clustername}/terminate"
+}
+
+function getNcmData {
+ call_api "${base_url}/cluster-providers/${clusterprovidername}" | jq .
+ call_api -H "Accept: application/json" "${base_url}/cluster-providers/${clusterprovidername}/clusters/${clustername}" | jq .
+ call_api "${base_url}/cluster-providers/${clusterprovidername}/clusters?label=${labelname}" | jq .
+ call_api "${base_url}/cluster-providers/${clusterprovidername}/clusters/${clustername}/kv-pairs/${kvname}" | jq .
+ call_api "${base_url}/cluster-providers/${clusterprovidername}/clusters/${clustername}/networks/${networkname}" | jq .
+ call_api "${base_url}/cluster-providers/${clusterprovidername}/clusters/${clustername}/provider-networks/${providernetworkname}" | jq .
+
+}
+
+function deleteNcmData {
+ call_api -X DELETE "${base_url}/cluster-providers/${clusterprovidername}/clusters/${clustername}/networks/${networkname}"
+ call_api -X DELETE "${base_url}/cluster-providers/${clusterprovidername}/clusters/${clustername}/provider-networks/${providernetworkname}"
+ call_api -X DELETE "${base_url}/cluster-providers/${clusterprovidername}/clusters/${clustername}/labels/${labelname}"
+ call_api -X DELETE "${base_url}/cluster-providers/${clusterprovidername}/clusters/${clustername}/kv-pairs/${kvname}"
+ call_api -X DELETE "${base_url}/cluster-providers/${clusterprovidername}/clusters/${clustername}"
+ call_api -X DELETE "${base_url}/cluster-providers/${clusterprovidername}"
+}
+
+function usage {
+ echo "Usage: $0 create|apply|get|terminate|delete"
+ exit
+}
+
+# Put in logic to select from a few choices: create, get, delete
+if [ "$#" -ne 1 ] ; then
+ usage
+fi
+
+case "$1" in
+ "create" ) createNcmData ;;
+ "apply" ) applyNcmData ;;
+ "terminate" ) terminateNcmData ;;
+ "get" ) getNcmData ;;
+ "delete" ) deleteNcmData ;;
+ *) usage ;;
+esac