Ovnaction and vfw updates for deploy api change
[multicloud/k8s.git] / kud / tests / plugin_fw_v2.sh
1 #!/bin/bash
2 # SPDX-license-identifier: Apache-2.0
3 ##############################################################################
4 # Copyright (c) 2020
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 ##############################################################################
10
11 set -o errexit
12 set -o nounset
13 set -o pipefail
14
15 source _common_test.sh
16 source _functions.sh
17 source _functions.sh
18
19 kubeconfig_path="$HOME/.kube/config"
20
21 clusters="${KUD_PLUGIN_FW_CLUSTERS:-$(cat <<EOF
22 [
23   {
24     "metadata": {
25       "name": "edge01",
26       "description": "description of edge01",
27       "userData1": "edge01 user data 1",
28       "userData2": "edge01 user data 2"
29     },
30     "file": "$kubeconfig_path"
31   }
32 ]
33 EOF
34 )}"
35
36 function cluster_names {
37     echo $clusters | jq -e -r '.[].metadata.name'
38 }
39
40 function cluster_metadata {
41     cat<<EOF | jq .
42 {
43   "metadata": $(echo $clusters | jq -e -r --arg name "$1" '.[]|select(.metadata.name==$name)|.metadata')
44 }
45 EOF
46 }
47
48 function cluster_file {
49     echo $clusters | jq -e -r --arg name "$1" '.[]|select(.metadata.name==$name)|.file'
50 }
51
52 ARGS=()
53 while [[ $# -gt 0 ]]; do
54     arg="$1"
55
56     case $arg in
57         "--external" )
58             master_ip=$(kubectl cluster-info | grep "Kubernetes master" | \
59                 awk -F ":" '{print $2}' | awk -F "//" '{print $2}')
60             base_url_clm=${base_url_clm:-"http://$master_ip:30461/v2"}
61             base_url_ncm=${base_url_ncm:-"http://$master_ip:30431/v2"}
62             base_url_orchestrator=${base_url_orchestrator:-"http://$master_ip:30415/v2"}
63             base_url_ovnaction=${base_url_ovnaction:-"http://$master_ip:30471/v2"}
64             rsync_service_port=30441
65             rsync_service_host="$master_ip"
66             ovnaction_service_port=30473
67             ovnaction_service_host="$master_ip"
68             shift
69             ;;
70         * )
71             ARGS+=("$1")
72             shift
73             ;;
74     esac
75 done
76 set -- "${ARGS[@]}" # restore positional parameters
77
78 base_url_clm=${base_url_clm:-"http://localhost:9061/v2"}
79 base_url_ncm=${base_url_ncm:-"http://localhost:9031/v2"}
80 base_url_orchestrator=${base_url_orchestrator:-"http://localhost:9015/v2"}
81 base_url_ovnaction=${base_url_ovnaction:-"http://localhost:9053/v2"}
82 rsync_service_port=${rsync_service_port:-9041}
83 rsync_service_host=${rsync_service_host:-"localhost"}
84 ovnaction_service_port=${ovnaction_service_port:-9053}
85 ovnaction_service_host=${ovnaction_service_host:-"localhost"}
86
87 CSAR_DIR="/opt/csar"
88 csar_id="4bf66240-a0be-4ce2-aebd-a01df7725f16"
89
90 packetgen_helm_path="$CSAR_DIR/$csar_id/packetgen.tar.gz"
91 packetgen_profile_targz="$CSAR_DIR/$csar_id/profile.tar.gz"
92 firewall_helm_path="$CSAR_DIR/$csar_id/firewall.tar.gz"
93 firewall_profile_targz="$CSAR_DIR/$csar_id/profile.tar.gz"
94 sink_helm_path="$CSAR_DIR/$csar_id/sink.tar.gz"
95 sink_profile_targz="$CSAR_DIR/$csar_id/profile.tar.gz"
96
97 demo_folder=$test_folder/../demo
98
99 function populate_CSAR_compositevfw_helm {
100     _checks_args "$1"
101     pushd "${CSAR_DIR}/$1"
102     print_msg "Create Helm Chart Archives for compositevfw"
103     rm -f *.tar.gz
104     tar -czf packetgen.tar.gz -C $demo_folder/composite-firewall packetgen
105     tar -czf firewall.tar.gz -C $demo_folder/composite-firewall firewall
106     tar -czf sink.tar.gz -C $demo_folder/composite-firewall sink
107     tar -czf profile.tar.gz -C $demo_folder/composite-firewall manifest.yaml override_values.yaml
108     popd
109 }
110
111 function setup {
112     install_deps
113     populate_CSAR_compositevfw_helm "$csar_id"
114 }
115
116 clusterprovidername="vfw-cluster-provider"
117 clusterproviderdata="$(cat<<EOF
118 {
119   "metadata": {
120     "name": "$clusterprovidername",
121     "description": "description of $clusterprovidername",
122     "userData1": "$clusterprovidername user data 1",
123     "userData2": "$clusterprovidername user data 2"
124   }
125 }
126 EOF
127 )"
128
129 labelname="LabelA"
130 labeldata="$(cat<<EOF
131 {"label-name": "$labelname"}
132 EOF
133 )"
134
135 # add the rsync controller entry
136 rsynccontrollername="rsync"
137 rsynccontrollerdata="$(cat<<EOF
138 {
139   "metadata": {
140     "name": "rsync",
141     "description": "description of $rsynccontrollername controller",
142     "userData1": "user data 1 for $rsynccontrollername",
143     "userData2": "user data 2 for $rsynccontrollername"
144   },
145   "spec": {
146     "host": "${rsync_service_host}",
147     "port": ${rsync_service_port}
148   }
149 }
150 EOF
151 )"
152
153 # add the ovn action controller entry
154 ovnactioncontrollername="ovnaction"
155 ovnactioncontrollerdata="$(cat<<EOF
156 {
157   "metadata": {
158     "name": "$ovnactioncontrollername",
159     "description": "description of $ovnactioncontrollername controller",
160     "userData1": "user data 2 for $ovnactioncontrollername",
161     "userData2": "user data 2 for $ovnactioncontrollername"
162   },
163   "spec": {
164     "host": "${ovnaction_service_host}",
165     "type": "action",
166     "priority": 1,
167     "port": ${ovnaction_service_port}
168   }
169 }
170 EOF
171 )"
172
173 # define networks and providernetworks intents to ncm for the clusters
174 #      define emco-private-net and unprotexted-private-net as provider networks
175
176 emcoprovidernetworkname="emco-private-net"
177 emcoprovidernetworkdata="$(cat<<EOF
178 {
179   "metadata": {
180     "name": "$emcoprovidernetworkname",
181     "description": "description of $emcoprovidernetworkname",
182     "userData1": "user data 1 for $emcoprovidernetworkname",
183     "userData2": "user data 2 for $emcoprovidernetworkname"
184   },
185   "spec": {
186       "cniType": "ovn4nfv",
187       "ipv4Subnets": [
188           {
189               "subnet": "10.10.20.0/24",
190               "name": "subnet1",
191               "gateway":  "10.10.20.1/24"
192           }
193       ],
194       "providerNetType": "VLAN",
195       "vlan": {
196           "vlanId": "102",
197           "providerInterfaceName": "eth1",
198           "logicalInterfaceName": "eth1.102",
199           "vlanNodeSelector": "specific",
200           "nodeLabelList": [
201               "kubernetes.io/hostname=localhost"
202           ]
203       }
204   }
205 }
206 EOF
207 )"
208
209 unprotectedprovidernetworkname="unprotected-private-net"
210 unprotectedprovidernetworkdata="$(cat<<EOF
211 {
212   "metadata": {
213     "name": "$unprotectedprovidernetworkname",
214     "description": "description of $unprotectedprovidernetworkname",
215     "userData1": "user data 2 for $unprotectedprovidernetworkname",
216     "userData2": "user data 2 for $unprotectedprovidernetworkname"
217   },
218   "spec": {
219       "cniType": "ovn4nfv",
220       "ipv4Subnets": [
221           {
222               "subnet": "192.168.10.0/24",
223               "name": "subnet1",
224               "gateway":  "192.168.10.1/24"
225           }
226       ],
227       "providerNetType": "VLAN",
228       "vlan": {
229           "vlanId": "100",
230           "providerInterfaceName": "eth1",
231           "logicalInterfaceName": "eth1.100",
232           "vlanNodeSelector": "specific",
233           "nodeLabelList": [
234               "kubernetes.io/hostname=localhost"
235           ]
236       }
237   }
238 }
239 EOF
240 )"
241
242 protectednetworkname="protected-private-net"
243 protectednetworkdata="$(cat<<EOF
244 {
245   "metadata": {
246     "name": "$protectednetworkname",
247     "description": "description of $protectednetworkname",
248     "userData1": "user data 1 for $protectednetworkname",
249     "userData2": "user data 1 for $protectednetworkname"
250   },
251   "spec": {
252       "cniType": "ovn4nfv",
253       "ipv4Subnets": [
254           {
255               "subnet": "192.168.20.0/24",
256               "name": "subnet1",
257               "gateway":  "192.168.20.100/32"
258           }
259       ]
260   }
261 }
262 EOF
263 )"
264
265 # define a project
266 projectname="testvfw"
267 projectdata="$(cat<<EOF
268 {
269   "metadata": {
270     "name": "$projectname",
271     "description": "description of $projectname controller",
272     "userData1": "$projectname user data 1",
273     "userData2": "$projectname user data 2"
274   }
275 }
276 EOF
277 )"
278
279 # define a composite application
280 vfw_compositeapp_name="compositevfw"
281 vfw_compositeapp_version="v1"
282 vfw_compositeapp_data="$(cat <<EOF
283 {
284   "metadata": {
285     "name": "${vfw_compositeapp_name}",
286     "description": "description of ${vfw_compositeapp_name}",
287     "userData1": "user data 1 for ${vfw_compositeapp_name}",
288     "userData2": "user data 2 for ${vfw_compositeapp_name}"
289    },
290    "spec":{
291       "version":"${vfw_compositeapp_version}"
292    }
293 }
294 EOF
295 )"
296
297 # define app entries for the composite application
298 #   includes the multipart tgz of the helm chart for vfw
299 # BEGIN: Create entries for app1&app2 in the database
300 packetgen_app_name="packetgen"
301 packetgen_helm_chart=${packetgen_helm_path}
302 packetgen_app_data="$(cat <<EOF
303 {
304   "metadata": {
305     "name": "${packetgen_app_name}",
306     "description": "description for app ${packetgen_app_name}",
307     "userData1": "user data 2 for ${packetgen_app_name}",
308     "userData2": "user data 2 for ${packetgen_app_name}"
309    }
310 }
311 EOF
312 )"
313
314 firewall_app_name="firewall"
315 firewall_helm_chart=${firewall_helm_path}
316 firewall_app_data="$(cat <<EOF
317 {
318   "metadata": {
319     "name": "${firewall_app_name}",
320     "description": "description for app ${firewall_app_name}",
321     "userData1": "user data 2 for ${firewall_app_name}",
322     "userData2": "user data 2 for ${firewall_app_name}"
323    }
324 }
325 EOF
326 )"
327
328 sink_app_name="sink"
329 sink_helm_chart=${sink_helm_path}
330 sink_app_data="$(cat <<EOF
331 {
332   "metadata": {
333     "name": "${sink_app_name}",
334     "description": "description for app ${sink_app_name}",
335     "userData1": "user data 2 for ${sink_app_name}",
336     "userData2": "user data 2 for ${sink_app_name}"
337    }
338 }
339 EOF
340 )"
341
342 # Add the composite profile
343 vfw_composite_profile_name="vfw_composite-profile"
344 vfw_composite_profile_data="$(cat <<EOF
345 {
346    "metadata":{
347       "name":"${vfw_composite_profile_name}",
348       "description":"description of ${vfw_composite_profile_name}",
349       "userData1":"user data 1 for ${vfw_composite_profile_name}",
350       "userData2":"user data 2 for ${vfw_composite_profile_name}"
351    }
352 }
353 EOF
354 )"
355
356 # define the packetgen profile data
357 packetgen_profile_name="packetgen-profile"
358 packetgen_profile_file=${packetgen_profile_targz}
359 packetgen_profile_data="$(cat <<EOF
360 {
361    "metadata":{
362       "name":"${packetgen_profile_name}",
363       "description":"description of ${packetgen_profile_name}",
364       "userData1":"user data 1 for ${packetgen_profile_name}",
365       "userData2":"user data 2 for ${packetgen_profile_name}"
366    },
367    "spec":{
368       "app-name":  "${packetgen_app_name}"
369    }
370 }
371 EOF
372 )"
373
374 # define the firewall profile data
375 firewall_profile_name="firewall-profile"
376 firewall_profile_file=${firewall_profile_targz}
377 firewall_profile_data="$(cat <<EOF
378 {
379    "metadata":{
380       "name":"${firewall_profile_name}",
381       "description":"description of ${firewall_profile_name}",
382       "userData1":"user data 1 for ${firewall_profile_name}",
383       "userData2":"user data 2 for ${firewall_profile_name}"
384    },
385    "spec":{
386       "app-name":  "${firewall_app_name}"
387    }
388 }
389 EOF
390 )"
391
392 # define the sink profile data
393 sink_profile_name="sink-profile"
394 sink_profile_file=${sink_profile_targz}
395 sink_profile_data="$(cat <<EOF
396 {
397    "metadata":{
398       "name":"${sink_profile_name}",
399       "description":"description of ${sink_profile_name}",
400       "userData1":"user data 1 for ${sink_profile_name}",
401       "userData2":"user data 2 for ${sink_profile_name}"
402    },
403    "spec":{
404       "app-name":  "${sink_app_name}"
405    }
406 }
407 EOF
408 )"
409
410 # define the generic placement intent
411 generic_placement_intent_name="generic-placement-intent"
412 generic_placement_intent_data="$(cat <<EOF
413 {
414    "metadata":{
415       "name":"${generic_placement_intent_name}",
416       "description":"${generic_placement_intent_name}",
417       "userData1":"${generic_placement_intent_name}",
418       "userData2":"${generic_placement_intent_name}"
419    }
420 }
421 EOF
422 )"
423
424 # define app placement intent for packetgen
425 packetgen_placement_intent_name="packetgen-placement-intent"
426 packetgen_placement_intent_data="$(cat <<EOF
427 {
428    "metadata":{
429       "name":"${packetgen_placement_intent_name}",
430       "description":"description of ${packetgen_placement_intent_name}",
431       "userData1":"user data 1 for ${packetgen_placement_intent_name}",
432       "userData2":"user data 2 for ${packetgen_placement_intent_name}"
433    },
434    "spec":{
435       "app-name":"${packetgen_app_name}",
436       "intent":{
437          "allOf":[
438             {  "provider-name":"${clusterprovidername}",
439                "cluster-label-name":"${labelname}"
440             }
441          ]
442       }
443    }
444 }
445 EOF
446 )"
447
448 # define app placement intent for firewall
449 firewall_placement_intent_name="firewall-placement-intent"
450 firewall_placement_intent_data="$(cat <<EOF
451 {
452    "metadata":{
453       "name":"${firewall_placement_intent_name}",
454       "description":"description of ${firewall_placement_intent_name}",
455       "userData1":"user data 1 for ${firewall_placement_intent_name}",
456       "userData2":"user data 2 for ${firewall_placement_intent_name}"
457    },
458    "spec":{
459       "app-name":"${firewall_app_name}",
460       "intent":{
461          "allOf":[
462             {  "provider-name":"${clusterprovidername}",
463                "cluster-label-name":"${labelname}"
464             }
465          ]
466       }
467    }
468 }
469 EOF
470 )"
471
472 # define app placement intent for sink
473 sink_placement_intent_name="sink-placement-intent"
474 sink_placement_intent_data="$(cat <<EOF
475 {
476    "metadata":{
477       "name":"${sink_placement_intent_name}",
478       "description":"description of ${sink_placement_intent_name}",
479       "userData1":"user data 1 for ${sink_placement_intent_name}",
480       "userData2":"user data 2 for ${sink_placement_intent_name}"
481    },
482    "spec":{
483       "app-name":"${sink_app_name}",
484       "intent":{
485          "allOf":[
486             {  "provider-name":"${clusterprovidername}",
487                "cluster-label-name":"${labelname}"
488             }
489          ]
490       }
491    }
492 }
493 EOF
494 )"
495
496 # define a deployment intent group
497 release="fw0"
498 deployment_intent_group_name="vfw_deployment_intent_group"
499 deployment_intent_group_data="$(cat <<EOF
500 {
501    "metadata":{
502       "name":"${deployment_intent_group_name}",
503       "description":"descriptiont of ${deployment_intent_group_name}",
504       "userData1":"user data 1 for ${deployment_intent_group_name}",
505       "userData2":"user data 2 for ${deployment_intent_group_name}"
506    },
507    "spec":{
508       "profile":"${vfw_composite_profile_name}",
509       "version":"${release}",
510       "logical-cloud":"unused_logical_cloud",
511       "override-values":[
512          {
513             "app-name":"${packetgen_app_name}",
514             "values": {
515                   ".Values.service.ports.nodePort":"30888"
516                }
517          },
518          {
519             "app-name":"${firewall_app_name}",
520             "values": {
521                   ".Values.global.dcaeCollectorIp":"1.2.3.4",
522                   ".Values.global.dcaeCollectorPort":"8888"
523                }
524          },
525          {
526             "app-name":"${sink_app_name}",
527             "values": {
528                   ".Values.service.ports.nodePort":"30677"
529                }
530          }
531       ]
532    }
533 }
534 EOF
535 )"
536
537 # define the network-control-intent for the vfw composite app
538 vfw_ovnaction_intent_name="vfw_ovnaction_intent"
539 vfw_ovnaction_intent_data="$(cat <<EOF
540 {
541    "metadata":{
542       "name":"${vfw_ovnaction_intent_name}",
543       "description":"descriptionf of ${vfw_ovnaction_intent_name}",
544       "userData1":"user data 1 for ${vfw_ovnaction_intent_name}",
545       "userData2":"user data 2 for ${vfw_ovnaction_intent_name}"
546    }
547 }
548 EOF
549 )"
550
551 # define the network workload intent for packetgen app
552 packetgen_workload_intent_name="packetgen_workload_intent"
553 packetgen_workload_intent_data="$(cat <<EOF
554 {
555   "metadata": {
556     "name": "${packetgen_workload_intent_name}",
557     "description": "description of ${packetgen_workload_intent_name}",
558     "userData1": "useer data 2 for ${packetgen_workload_intent_name}",
559     "userData2": "useer data 2 for ${packetgen_workload_intent_name}"
560   },
561   "spec": {
562     "application-name": "${packetgen_app_name}",
563     "workload-resource": "${release}-${packetgen_app_name}",
564     "type": "Deployment"
565   }
566 }
567 EOF
568 )"
569
570 # define the network workload intent for firewall app
571 firewall_workload_intent_name="firewall_workload_intent"
572 firewall_workload_intent_data="$(cat <<EOF
573 {
574   "metadata": {
575     "name": "${firewall_workload_intent_name}",
576     "description": "description of ${firewall_workload_intent_name}",
577     "userData1": "useer data 2 for ${firewall_workload_intent_name}",
578     "userData2": "useer data 2 for ${firewall_workload_intent_name}"
579   },
580   "spec": {
581     "application-name": "${firewall_app_name}",
582     "workload-resource": "${release}-${firewall_app_name}",
583     "type": "Deployment"
584   }
585 }
586 EOF
587 )"
588
589 # define the network workload intent for sink app
590 sink_workload_intent_name="sink_workload_intent"
591 sink_workload_intent_data="$(cat <<EOF
592 {
593   "metadata": {
594     "name": "${sink_workload_intent_name}",
595     "description": "description of ${sink_workload_intent_name}",
596     "userData1": "useer data 2 for ${sink_workload_intent_name}",
597     "userData2": "useer data 2 for ${sink_workload_intent_name}"
598   },
599   "spec": {
600     "application-name": "${sink_app_name}",
601     "workload-resource": "${release}-${sink_app_name}",
602     "type": "Deployment"
603   }
604 }
605 EOF
606 )"
607
608 # define the network interface intents for the packetgen workload intent
609 packetgen_unprotected_interface_name="packetgen_unprotected_if"
610 packetgen_unprotected_interface_data="$(cat <<EOF
611 {
612   "metadata": {
613     "name": "${packetgen_unprotected_interface_name}",
614     "description": "description of ${packetgen_unprotected_interface_name}",
615     "userData1": "useer data 2 for ${packetgen_unprotected_interface_name}",
616     "userData2": "useer data 2 for ${packetgen_unprotected_interface_name}"
617   },
618   "spec": {
619     "interface": "eth1",
620     "name": "${unprotectedprovidernetworkname}",
621     "defaultGateway": "false",
622     "ipAddress": "192.168.10.2"
623   }
624 }
625 EOF
626 )"
627
628 packetgen_emco_interface_name="packetgen_emco_if"
629 packetgen_emco_interface_data="$(cat <<EOF
630 {
631   "metadata": {
632     "name": "${packetgen_emco_interface_name}",
633     "description": "description of ${packetgen_emco_interface_name}",
634     "userData1": "useer data 2 for ${packetgen_emco_interface_name}",
635     "userData2": "useer data 2 for ${packetgen_emco_interface_name}"
636   },
637   "spec": {
638     "interface": "eth2",
639     "name": "${emcoprovidernetworkname}",
640     "defaultGateway": "false",
641     "ipAddress": "10.10.20.2"
642   }
643 }
644 EOF
645 )"
646
647 # define the network interface intents for the firewall workload intent
648 firewall_unprotected_interface_name="firewall_unprotected_if"
649 firewall_unprotected_interface_data="$(cat <<EOF
650 {
651   "metadata": {
652     "name": "${firewall_unprotected_interface_name}",
653     "description": "description of ${firewall_unprotected_interface_name}",
654     "userData1": "useer data 2 for ${firewall_unprotected_interface_name}",
655     "userData2": "useer data 2 for ${firewall_unprotected_interface_name}"
656   },
657   "spec": {
658     "interface": "eth1",
659     "name": "${unprotectedprovidernetworkname}",
660     "defaultGateway": "false",
661     "ipAddress": "192.168.10.3"
662   }
663 }
664 EOF
665 )"
666
667 firewall_protected_interface_name="firewall_protected_if"
668 firewall_protected_interface_data="$(cat <<EOF
669 {
670   "metadata": {
671     "name": "${firewall_protected_interface_name}",
672     "description": "description of ${firewall_protected_interface_name}",
673     "userData1": "useer data 2 for ${firewall_protected_interface_name}",
674     "userData2": "useer data 2 for ${firewall_protected_interface_name}"
675   },
676   "spec": {
677     "interface": "eth2",
678     "name": "${protectednetworkname}",
679     "defaultGateway": "false",
680     "ipAddress": "192.168.20.2"
681   }
682 }
683 EOF
684 )"
685
686 firewall_emco_interface_name="firewall_emco_if"
687 firewall_emco_interface_data="$(cat <<EOF
688 {
689   "metadata": {
690     "name": "${firewall_emco_interface_name}",
691     "description": "description of ${firewall_emco_interface_name}",
692     "userData1": "useer data 2 for ${firewall_emco_interface_name}",
693     "userData2": "useer data 2 for ${firewall_emco_interface_name}"
694   },
695   "spec": {
696     "interface": "eth3",
697     "name": "${emcoprovidernetworkname}",
698     "defaultGateway": "false",
699     "ipAddress": "10.10.20.3"
700   }
701 }
702 EOF
703 )"
704
705 # define the network interface intents for the sink workload intent
706 sink_protected_interface_name="sink_protected_if"
707 sink_protected_interface_data="$(cat <<EOF
708 {
709   "metadata": {
710     "name": "${sink_protected_interface_name}",
711     "description": "description of ${sink_protected_interface_name}",
712     "userData1": "useer data 2 for ${sink_protected_interface_name}",
713     "userData2": "useer data 2 for ${sink_protected_interface_name}"
714   },
715   "spec": {
716     "interface": "eth1",
717     "name": "${protectednetworkname}",
718     "defaultGateway": "false",
719     "ipAddress": "192.168.20.3"
720   }
721 }
722 EOF
723 )"
724
725 sink_emco_interface_name="sink_emco_if"
726 sink_emco_interface_data="$(cat <<EOF
727 {
728   "metadata": {
729     "name": "${sink_emco_interface_name}",
730     "description": "description of ${sink_emco_interface_name}",
731     "userData1": "useer data 2 for ${sink_emco_interface_name}",
732     "userData2": "useer data 2 for ${sink_emco_interface_name}"
733   },
734   "spec": {
735     "interface": "eth2",
736     "name": "${emcoprovidernetworkname}",
737     "defaultGateway": "false",
738     "ipAddress": "10.10.20.4"
739   }
740 }
741 EOF
742 )"
743
744 # define the intents to be used by the group
745 deployment_intents_in_group_name="vfw_deploy_intents"
746 deployment_intents_in_group_data="$(cat <<EOF
747 {
748    "metadata":{
749       "name":"${deployment_intents_in_group_name}",
750       "description":"descriptionf of ${deployment_intents_in_group_name}",
751       "userData1":"user data 1 for ${deployment_intents_in_group_name}",
752       "userData2":"user data 2 for ${deployment_intents_in_group_name}"
753    },
754    "spec":{
755       "intent":{
756          "genericPlacementIntent":"${generic_placement_intent_name}",
757          "ovnaction" : "${vfw_ovnaction_intent_name}"
758       }
759    }
760 }
761 EOF
762 )"
763
764 function createOvnactionData {
765     call_api -d "${vfw_ovnaction_intent_data}" \
766              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent"
767
768     call_api -d "${packetgen_workload_intent_data}" \
769              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents"
770     call_api -d "${firewall_workload_intent_data}" \
771              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents"
772     call_api -d "${sink_workload_intent_data}" \
773              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents"
774
775     call_api -d "${packetgen_emco_interface_data}" \
776              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces"
777     call_api -d "${packetgen_unprotected_interface_data}" \
778              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces"
779
780     call_api -d "${firewall_emco_interface_data}" \
781              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces"
782     call_api -d "${firewall_unprotected_interface_data}" \
783              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces"
784     call_api -d "${firewall_protected_interface_data}" \
785              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces"
786
787     call_api -d "${sink_emco_interface_data}" \
788              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces"
789     call_api -d "${sink_protected_interface_data}" \
790              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces"
791 }
792
793 function createOrchData {
794     print_msg "Creating controller entries"
795     call_api -d "${rsynccontrollerdata}" "${base_url_orchestrator}/controllers"
796     call_api -d "${ovnactioncontrollerdata}" "${base_url_orchestrator}/controllers"
797
798     print_msg "Creating project entry"
799     call_api -d "${projectdata}" "${base_url_orchestrator}/projects"
800
801     print_msg "Creating vfw composite app entry"
802     call_api -d "${vfw_compositeapp_data}" "${base_url_orchestrator}/projects/${projectname}/composite-apps"
803
804     print_msg "Adding vfw apps to the composite app"
805     call_api -F "metadata=${packetgen_app_data}" \
806              -F "file=@${packetgen_helm_chart}" \
807              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps"
808     call_api -F "metadata=${firewall_app_data}" \
809              -F "file=@${firewall_helm_chart}" \
810              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps"
811     call_api -F "metadata=${sink_app_data}" \
812              -F "file=@${sink_helm_chart}" \
813              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps"
814
815     print_msg "Creating vfw composite profile entry"
816     call_api -d "${vfw_composite_profile_data}" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles"
817
818     print_msg "Adding vfw app profiles to the composite profile"
819     call_api -F "metadata=${packetgen_profile_data}" \
820              -F "file=@${packetgen_profile_file}" \
821              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles"
822     call_api -F "metadata=${firewall_profile_data}" \
823              -F "file=@${firewall_profile_file}" \
824              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles"
825     call_api -F "metadata=${sink_profile_data}" \
826              -F "file=@${sink_profile_file}" \
827              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles"
828
829     print_msg "Create the deployment intent group"
830     call_api -d "${deployment_intent_group_data}" \
831              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups"
832     call_api -d "${deployment_intents_in_group_data}" \
833              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/intents"
834
835     createOvnactionData
836
837     print_msg "Create the generic placement intent"
838     call_api -d "${generic_placement_intent_data}" \
839              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents"
840
841     print_msg "Add the vfw app placement intents to the generic placement intent"
842     call_api -d "${packetgen_placement_intent_data}" \
843              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
844     call_api -d "${firewall_placement_intent_data}" \
845              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
846     call_api -d "${sink_placement_intent_data}" \
847              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
848 }
849
850 function createNcmData {
851     print_msg "Creating cluster provider ${clusterprovidername}"
852     call_api -d "${clusterproviderdata}" "${base_url_clm}/cluster-providers"
853
854     for name in $(cluster_names); do
855         metadata=$(cluster_metadata "$name")
856         file=$(cluster_file "$name")
857         print_msg "Creating cluster ${name}"
858         call_api -H "Content-Type: multipart/form-data" -F "metadata=$metadata" -F "file=@$file" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters"
859         call_api -d "${labeldata}" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${name}/labels"
860
861         print_msg "Creating provider network and network intents for ${name}"
862         call_api -d "${emcoprovidernetworkdata}" "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${name}/provider-networks"
863         call_api -d "${unprotectedprovidernetworkdata}" "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${name}/provider-networks"
864         call_api -d "${protectednetworkdata}" "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${name}/networks"
865     done
866 }
867
868 function createData {
869     setup
870     createNcmData
871     createOrchData  # this will call createOvnactionData
872 }
873
874 function getOvnactionData {
875     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}"
876
877     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}"
878     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}"
879     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}"
880
881     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_emco_interface_name}"
882     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_unprotected_interface_name}"
883
884     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_emco_interface_name}"
885     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_unprotected_interface_name}"
886     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_protected_interface_name}"
887
888     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_emco_interface_name}"
889     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_protected_interface_name}"
890 }
891
892 function getOrchData {
893     call_api_nox "${base_url_orchestrator}/controllers/${rsynccontrollername}"
894     call_api_nox "${base_url_orchestrator}/controllers/${ovnactioncontrollername}"
895
896     call_api_nox "${base_url_orchestrator}/projects/${projectname}"
897     call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}"
898
899     call_api_nox -H "Accept: application/json" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps/${packetgen_app_name}"
900     call_api_nox -H "Accept: application/json" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps/${firewall_app_name}"
901     call_api_nox -H "Accept: application/json" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps/${sink_app_name}"
902
903     call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}"
904
905     call_api_nox -H "Accept: application/json" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles/${packetgen_profile_name}"
906     call_api_nox -H "Accept: application/json" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles/${firewall_profile_name}"
907     call_api_nox -H "Accept: application/json" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles/${sink_profile_name}"
908
909     call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}"
910
911     call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${packetgen_placement_intent_name}"
912     call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${firewall_placement_intent_name}"
913     call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${sink_placement_intent_name}"
914
915     call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}"
916     call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/intents/${deployment_intents_in_group_name}"
917 }
918
919 function getNcmData {
920     call_api_nox "${base_url_clm}/cluster-providers/${clusterprovidername}"
921     call_api_nox "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters?label=${labelname}"
922
923     for name in $(cluster_names); do
924         call_api_nox -H "Accept: application/json" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${name}"
925         call_api_nox "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${name}/labels/${labelname}"
926         call_api_nox "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${name}/provider-networks/${emcoprovidernetworkname}"
927         call_api_nox "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${name}/provider-networks/${unprotectedprovidernetworkname}"
928         call_api_nox "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${name}/networks/${protectednetworkname}"
929     done
930 }
931
932 function getData {
933     getNcmData
934     getOrchData
935     getOvnactionData
936 }
937
938 function deleteOvnactionData {
939     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_protected_interface_name}"
940     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_emco_interface_name}"
941     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_protected_interface_name}"
942     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_unprotected_interface_name}"
943     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_emco_interface_name}"
944     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_unprotected_interface_name}"
945     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_emco_interface_name}"
946     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}"
947     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}"
948     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}"
949     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/network-controller-intent/${vfw_ovnaction_intent_name}"
950 }
951
952 function deleteOrchData {
953     delete_resource "${base_url_orchestrator}/controllers/${rsynccontrollername}"
954     delete_resource "${base_url_orchestrator}/controllers/${ovnactioncontrollername}"
955
956     deleteOvnactionData
957
958     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${sink_placement_intent_name}"
959     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${firewall_placement_intent_name}"
960     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${packetgen_placement_intent_name}"
961     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/generic-placement-intents/${generic_placement_intent_name}"
962
963     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/intents/${deployment_intents_in_group_name}"
964     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}"
965
966     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles/${sink_profile_name}"
967     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles/${firewall_profile_name}"
968     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles/${packetgen_profile_name}"
969     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}"
970
971     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps/${sink_app_name}"
972     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps/${firewall_app_name}"
973     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps/${packetgen_app_name}"
974
975     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}"
976     delete_resource "${base_url_orchestrator}/projects/${projectname}"
977 }
978
979 function deleteNcmData {
980     for name in $(cluster_names); do
981         delete_resource "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${name}/networks/${protectednetworkname}"
982         delete_resource "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${name}/provider-networks/${unprotectedprovidernetworkname}"
983         delete_resource "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${name}/provider-networks/${emcoprovidernetworkname}"
984         delete_resource "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${name}/labels/${labelname}"
985         delete_resource "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${name}"
986     done
987
988     delete_resource "${base_url_clm}/cluster-providers/${clusterprovidername}"
989 }
990
991 function deleteData {
992     deleteNcmData
993     deleteOrchData
994 }
995
996 # apply the network and providernetwork to an appcontext and instantiate with rsync
997 function applyNcmData {
998     for name in $(cluster_names); do
999         call_api -d "{ }" "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${name}/apply"
1000     done
1001 }
1002
1003 # deletes the network resources from the clusters and the associated appcontext entries
1004 function terminateNcmData {
1005     for name in $(cluster_names); do
1006         call_api -d "{ }" "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${name}/terminate"
1007     done
1008 }
1009
1010 # terminates the vfw resources
1011 function terminateOrchData {
1012     call_api -d "{ }" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/terminate"
1013 }
1014
1015 # terminates the vfw and ncm resources
1016 function terminateVfw {
1017     terminateOrchData
1018     terminateNcmData
1019 }
1020
1021 function instantiateVfw {
1022     call_api -d "{ }" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/approve"
1023     call_api -d "{ }" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/instantiate"
1024 }
1025
1026 function statusVfw {
1027     call_api "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/status"
1028 }
1029
1030 function waitForVfw {
1031     wait_for_deployment_status "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/status" $1
1032 }
1033
1034 function usage {
1035     echo "Usage: $0  create|get|delete|apply|terminate|instantiate"
1036     echo "    create - creates all ncm, ovnaction, clm resources needed for vfw"
1037     echo "    get - queries all resources in ncm, ovnaction, clm resources created for vfw"
1038     echo "    delete - deletes all resources in ncm, ovnaction, clm resources created for vfw"
1039     echo "    apply - applys the network intents - e.g. networks created in ncm"
1040     echo "    instantiate - approves and instantiates the composite app via the generic deployment intent"
1041     echo "    status - get status of deployed resources"
1042     echo "    terminate - remove the vFW composite app resources and network resources create by 'instantiate' and 'apply'"
1043     echo ""
1044     echo "    a reasonable test sequence:"
1045     echo "    1.  create"
1046     echo "    2.  apply"
1047     echo "    3.  instantiate"
1048     echo "    4.  status"
1049     echo "    5.  terminate"
1050     echo "    6.  destroy"
1051
1052     exit
1053 }
1054
1055 if [[ "$#" -gt 0 ]] ; then
1056     case "$1" in
1057         "create" ) createData ;;
1058         "get" ) getData ;;
1059         "apply" ) applyNcmData ;;
1060         "instantiate" ) instantiateVfw ;;
1061         "status" ) statusVfw ;;
1062         "wait" ) waitForVfw "Instantiated" ;;
1063         "terminate" ) terminateVfw ;;
1064         "delete" ) deleteData ;;
1065         *) usage ;;
1066     esac
1067 else
1068     createData
1069     applyNcmData
1070     instantiateVfw
1071
1072     print_msg "[BEGIN] Basic checks for instantiated resource"
1073     print_msg "Wait for deployment to be instantiated"
1074     waitForVfw "Instantiated"
1075     for name in $(cluster_names); do
1076         print_msg "Check that networks were created on cluster $name"
1077         file=$(cluster_file "$name")
1078         KUBECONFIG=$file kubectl get network protected-private-net
1079         KUBECONFIG=$file kubectl get providernetwork emco-private-net
1080         KUBECONFIG=$file kubectl get providernetwork unprotected-private-net
1081     done
1082     for name in $(cluster_names); do
1083         print_msg "Wait for all pods to start on cluster $name"
1084         file=$(cluster_file "$name")
1085         KUBECONFIG=$file wait_for_pod -l app=sink
1086         KUBECONFIG=$file wait_for_pod -l app=firewall
1087         KUBECONFIG=$file wait_for_pod -l app=packetgen
1088     done
1089     # TODO: Provide some health check to verify vFW work
1090     print_msg "Not waiting for vFW to fully install as no further checks are implemented in testcase"
1091     #print_msg "Waiting 8minutes for vFW installation"
1092     #sleep 8m
1093     print_msg "[END] Basic checks for instantiated resource"
1094
1095     terminateVfw
1096     waitForVfw "Terminated"
1097     deleteData
1098 fi