2 # SPDX-license-identifier: Apache-2.0
3 ##############################################################################
5 # All rights reserved. This program and the accompanying materials
6 # are made available under the terms of the Apache License, Version 2.0
7 # which accompanies this distribution, and is available at
8 # http://www.apache.org/licenses/LICENSE-2.0
9 ##############################################################################
15 source _common_test.sh
18 # TODO KUBECONFIG may be a list of paths
19 KUBECONFIG_PATH="${KUBECONFIG:-$HOME/.kube/config}"
20 DEMO_FOLDER="${DEMO_FOLDER:-$test_folder/../demo}"
22 clusters="${KUD_PLUGIN_FW_CLUSTERS:-$(cat <<EOF
27 "description": "description of edge01",
28 "userData1": "edge01 user data 1",
29 "userData2": "edge01 user data 2"
31 "file": "$KUBECONFIG_PATH"
37 function cluster_names {
38 echo $clusters | jq -e -r '.[].metadata.name'
41 function cluster_metadata {
44 "metadata": $(echo $clusters | jq -e -r --arg name "$1" '.[]|select(.metadata.name==$name)|.metadata')
49 function cluster_file {
50 echo $clusters | jq -e -r --arg name "$1" '.[]|select(.metadata.name==$name)|.file'
54 while [[ $# -gt 0 ]]; do
59 service_host=$(control_plane_ip)
68 set -- "${ARGS[@]}" # restore positional parameters
70 service_host=${service_host:-"localhost"}
73 csar_id="4bf66240-a0be-4ce2-aebd-a01df7725f16"
75 function populate_CSAR_compositevfw_helm {
77 pushd "${CSAR_DIR}/$1"
78 print_msg "Create Helm Chart Archives for compositevfw"
80 tar -czf packetgen.tar.gz -C $DEMO_FOLDER/composite-firewall packetgen
81 tar -czf firewall.tar.gz -C $DEMO_FOLDER/composite-firewall firewall
82 tar -czf sink.tar.gz -C $DEMO_FOLDER/composite-firewall sink
83 tar -czf profile.tar.gz -C $DEMO_FOLDER/composite-firewall manifest.yaml override_values.yaml
88 composite_app="compositevfw"
90 deployment_intent_group="vfw_deployment_intent_group"
94 populate_CSAR_compositevfw_helm "$csar_id"
95 cat <<EOF >plugin_fw_v2_config.yaml
100 host: ${service_host}
103 host: ${service_host}
106 host: ${service_host}
109 host: ${service_host}
112 host: ${service_host}
115 host: ${service_host}
118 cat <<EOF >plugin_fw_v2_values.yaml
119 ClusterProvider: vfw-cluster-provider
123 echo $clusters | jq -r '.[] | "- Name: \(.metadata.name)\n KubeConfig: \(.file)"' >>plugin_fw_v2_values.yaml
124 cat <<EOF >>plugin_fw_v2_values.yaml
125 EmcoProviderNetwork: emco-private-net
126 UnprotectedProviderNetwork: unprotected-private-net
127 ProtectedNetwork: protected-private-net
129 LogicalCloud: lcadmin
130 CompositeApp: ${composite_app}
132 PackagesPath: ${CSAR_DIR}/${csar_id}
133 CompositeProfile: vfw_composite-profile
134 DeploymentIntentGroup: ${deployment_intent_group}
136 DeploymentIntentsInGroup: vfw_deploy_intents
137 GenericPlacementIntent: generic-placement-intent
138 OvnActionIntent: vfw_ovnaction_intent
142 function call_emcoctl {
145 # retry due to known issue with emcoctl and instantiating/terminating multiple resources
147 until [[ $(emcoctl $@ | awk '/Response Code:/ {code=$3} END{print code}') =~ $rc ]]; do
148 if [[ $try -lt 10 ]]; then
158 function createData {
159 call_emcoctl 2.. --config plugin_fw_v2_config.yaml apply -f plugin_fw_v2.yaml -v plugin_fw_v2_values.yaml
163 emcoctl --config plugin_fw_v2_config.yaml get -f plugin_fw_v2.yaml -v plugin_fw_v2_values.yaml
166 function deleteData {
167 call_emcoctl 4.. --config plugin_fw_v2_config.yaml delete -f plugin_fw_v2.yaml -v plugin_fw_v2_values.yaml
171 emcoctl --config plugin_fw_v2_config.yaml get projects/${project}/composite-apps/${composite_app}/${version}/deployment-intent-groups/${deployment_intent_group}/status
174 function waitForVfw {
175 for try in {0..59}; do
177 new_phase="$(emcoctl --config plugin_fw_v2_config.yaml get projects/${project}/composite-apps/${composite_app}/${version}/deployment-intent-groups/${deployment_intent_group}/status | awk '/Response: / {print $2}' | jq -r .status)"
178 echo "$(date +%H:%M:%S) - Filter=[$*] : $new_phase"
179 if [[ "$new_phase" == "$1" ]]; then
186 echo "Usage: $0 setup|create|get|destroy|status"
187 echo " setup - creates the emcoctl files and packages needed for vfw"
188 echo " create - creates all ncm, ovnaction, clm resources needed for vfw"
189 echo " get - queries all resources in ncm, ovnaction, clm resources created for vfw"
190 echo " destroy - deletes all resources in ncm, ovnaction, clm resources created for vfw"
191 echo " status - get status of deployed resources"
193 echo " a reasonable test sequence:"
201 if [[ "$#" -gt 0 ]] ; then
204 "create" ) createData ;;
206 "status" ) statusVfw ;;
207 "wait" ) waitForVfw "Instantiated" ;;
208 "delete" ) deleteData ;;
215 print_msg "[BEGIN] Basic checks for instantiated resource"
216 print_msg "Wait for deployment to be instantiated"
217 waitForVfw "Instantiated"
218 for name in $(cluster_names); do
219 print_msg "Check that networks were created on cluster $name"
220 file=$(cluster_file "$name")
221 KUBECONFIG=$file kubectl get network protected-private-net -o name
222 KUBECONFIG=$file kubectl get providernetwork emco-private-net -o name
223 KUBECONFIG=$file kubectl get providernetwork unprotected-private-net -o name
225 # Give some time for the Pods to show up on the clusters. kubectl
226 # wait may return with "error: no matching resources found" if the
227 # Pods have not started yet.
229 for name in $(cluster_names); do
230 print_msg "Wait for all pods to start on cluster $name"
231 file=$(cluster_file "$name")
232 KUBECONFIG=$file kubectl wait pod -l release=fw0 --for=condition=Ready --timeout=5m
234 # TODO: Provide some health check to verify vFW work
235 print_msg "Not waiting for vFW to fully install as no further checks are implemented in testcase"
236 #print_msg "Waiting 8minutes for vFW installation"
238 print_msg "[END] Basic checks for instantiated resource"
240 print_msg "Delete deployment"