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