Merge "Update ResourceBundleState CRD and monitor-deploy"
[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    "spec":{
369       "logical-cloud":"unused_logical_cloud"
370    }
371 }
372 EOF
373 )"
374
375
376 # define app placement intent for packetgen
377 packetgen_placement_intent_name="packetgen-placement-intent"
378 packetgen_placement_intent_data="$(cat <<EOF
379 {
380    "metadata":{
381       "name":"${packetgen_placement_intent_name}",
382       "description":"description of ${packetgen_placement_intent_name}",
383       "userData1":"user data 1 for ${packetgen_placement_intent_name}",
384       "userData2":"user data 2 for ${packetgen_placement_intent_name}"
385    },
386    "spec":{
387       "app-name":"${packetgen_app_name}",
388       "intent":{
389          "allOf":[
390             {  "provider-name":"${clusterprovidername}",
391                "cluster-label-name":"${labelname}"
392             }
393          ]
394       }
395    }
396 }
397 EOF
398 )"
399
400 # define app placement intent for firewall
401 firewall_placement_intent_name="firewall-placement-intent"
402 firewall_placement_intent_data="$(cat <<EOF
403 {
404    "metadata":{
405       "name":"${firewall_placement_intent_name}",
406       "description":"description of ${firewall_placement_intent_name}",
407       "userData1":"user data 1 for ${firewall_placement_intent_name}",
408       "userData2":"user data 2 for ${firewall_placement_intent_name}"
409    },
410    "spec":{
411       "app-name":"${firewall_app_name}",
412       "intent":{
413          "allOf":[
414             {  "provider-name":"${clusterprovidername}",
415                "cluster-label-name":"${labelname}"
416             }
417          ]
418       }
419    }
420 }
421 EOF
422 )"
423
424 # define app placement intent for sink
425 sink_placement_intent_name="sink-placement-intent"
426 sink_placement_intent_data="$(cat <<EOF
427 {
428    "metadata":{
429       "name":"${sink_placement_intent_name}",
430       "description":"description of ${sink_placement_intent_name}",
431       "userData1":"user data 1 for ${sink_placement_intent_name}",
432       "userData2":"user data 2 for ${sink_placement_intent_name}"
433    },
434    "spec":{
435       "app-name":"${sink_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 a deployment intent group
449 release="fw0"
450 deployment_intent_group_name="vfw_deployment_intent_group"
451 deployment_intent_group_data="$(cat <<EOF
452 {
453    "metadata":{
454       "name":"${deployment_intent_group_name}",
455       "description":"descriptiont of ${deployment_intent_group_name}",
456       "userData1":"user data 1 for ${deployment_intent_group_name}",
457       "userData2":"user data 2 for ${deployment_intent_group_name}"
458    },
459    "spec":{
460       "profile":"${vfw_composite_profile_name}",
461       "version":"${release}",
462       "override-values":[
463          {
464             "app-name":"${packetgen_app_name}",
465             "values": {
466                   ".Values.service.ports.nodePort":"30888"
467                }
468          },
469          {
470             "app-name":"${firewall_app_name}",
471             "values": {
472                   ".Values.global.dcaeCollectorIp":"1.2.3.4",
473                   ".Values.global.dcaeCollectorPort":"8888"
474                }
475          },
476          {
477             "app-name":"${sink_app_name}",
478             "values": {
479                   ".Values.service.ports.nodePort":"30677"
480                }
481          }
482       ]
483    }
484 }
485 EOF
486 )"
487
488 # define the network-control-intent for the vfw composite app
489 vfw_ovnaction_intent_name="vfw_ovnaction_intent"
490 vfw_ovnaction_intent_data="$(cat <<EOF
491 {
492    "metadata":{
493       "name":"${vfw_ovnaction_intent_name}",
494       "description":"descriptionf of ${vfw_ovnaction_intent_name}",
495       "userData1":"user data 1 for ${vfw_ovnaction_intent_name}",
496       "userData2":"user data 2 for ${vfw_ovnaction_intent_name}"
497    }
498 }
499 EOF
500 )"
501
502 # define the network workload intent for packetgen app
503 packetgen_workload_intent_name="packetgen_workload_intent"
504 packetgen_workload_intent_data="$(cat <<EOF
505 {
506   "metadata": {
507     "name": "${packetgen_workload_intent_name}",
508     "description": "description of ${packetgen_workload_intent_name}",
509     "userData1": "useer data 2 for ${packetgen_workload_intent_name}",
510     "userData2": "useer data 2 for ${packetgen_workload_intent_name}"
511   },
512   "spec": {
513     "application-name": "${packetgen_app_name}",
514     "workload-resource": "${release}-${packetgen_app_name}",
515     "type": "Deployment"
516   }
517 }
518 EOF
519 )"
520
521 # define the network workload intent for firewall app
522 firewall_workload_intent_name="firewall_workload_intent"
523 firewall_workload_intent_data="$(cat <<EOF
524 {
525   "metadata": {
526     "name": "${firewall_workload_intent_name}",
527     "description": "description of ${firewall_workload_intent_name}",
528     "userData1": "useer data 2 for ${firewall_workload_intent_name}",
529     "userData2": "useer data 2 for ${firewall_workload_intent_name}"
530   },
531   "spec": {
532     "application-name": "${firewall_app_name}",
533     "workload-resource": "${release}-${firewall_app_name}",
534     "type": "Deployment"
535   }
536 }
537 EOF
538 )"
539
540 # define the network workload intent for sink app
541 sink_workload_intent_name="sink_workload_intent"
542 sink_workload_intent_data="$(cat <<EOF
543 {
544   "metadata": {
545     "name": "${sink_workload_intent_name}",
546     "description": "description of ${sink_workload_intent_name}",
547     "userData1": "useer data 2 for ${sink_workload_intent_name}",
548     "userData2": "useer data 2 for ${sink_workload_intent_name}"
549   },
550   "spec": {
551     "application-name": "${sink_app_name}",
552     "workload-resource": "${release}-${sink_app_name}",
553     "type": "Deployment"
554   }
555 }
556 EOF
557 )"
558
559 # define the network interface intents for the packetgen workload intent
560 packetgen_unprotected_interface_name="packetgen_unprotected_if"
561 packetgen_unprotected_interface_data="$(cat <<EOF
562 {
563   "metadata": {
564     "name": "${packetgen_unprotected_interface_name}",
565     "description": "description of ${packetgen_unprotected_interface_name}",
566     "userData1": "useer data 2 for ${packetgen_unprotected_interface_name}",
567     "userData2": "useer data 2 for ${packetgen_unprotected_interface_name}"
568   },
569   "spec": {
570     "interface": "eth1",
571     "name": "${unprotectedprovidernetworkname}",
572     "defaultGateway": "false",
573     "ipAddress": "192.168.10.2"
574   }
575 }
576 EOF
577 )"
578
579 packetgen_emco_interface_name="packetgen_emco_if"
580 packetgen_emco_interface_data="$(cat <<EOF
581 {
582   "metadata": {
583     "name": "${packetgen_emco_interface_name}",
584     "description": "description of ${packetgen_emco_interface_name}",
585     "userData1": "useer data 2 for ${packetgen_emco_interface_name}",
586     "userData2": "useer data 2 for ${packetgen_emco_interface_name}"
587   },
588   "spec": {
589     "interface": "eth2",
590     "name": "${emcoprovidernetworkname}",
591     "defaultGateway": "false",
592     "ipAddress": "10.10.20.2"
593   }
594 }
595 EOF
596 )"
597
598 # define the network interface intents for the firewall workload intent
599 firewall_unprotected_interface_name="firewall_unprotected_if"
600 firewall_unprotected_interface_data="$(cat <<EOF
601 {
602   "metadata": {
603     "name": "${firewall_unprotected_interface_name}",
604     "description": "description of ${firewall_unprotected_interface_name}",
605     "userData1": "useer data 2 for ${firewall_unprotected_interface_name}",
606     "userData2": "useer data 2 for ${firewall_unprotected_interface_name}"
607   },
608   "spec": {
609     "interface": "eth1",
610     "name": "${unprotectedprovidernetworkname}",
611     "defaultGateway": "false",
612     "ipAddress": "192.168.10.3"
613   }
614 }
615 EOF
616 )"
617
618 firewall_protected_interface_name="firewall_protected_if"
619 firewall_protected_interface_data="$(cat <<EOF
620 {
621   "metadata": {
622     "name": "${firewall_protected_interface_name}",
623     "description": "description of ${firewall_protected_interface_name}",
624     "userData1": "useer data 2 for ${firewall_protected_interface_name}",
625     "userData2": "useer data 2 for ${firewall_protected_interface_name}"
626   },
627   "spec": {
628     "interface": "eth2",
629     "name": "${protectednetworkname}",
630     "defaultGateway": "false",
631     "ipAddress": "192.168.20.2"
632   }
633 }
634 EOF
635 )"
636
637 firewall_emco_interface_name="firewall_emco_if"
638 firewall_emco_interface_data="$(cat <<EOF
639 {
640   "metadata": {
641     "name": "${firewall_emco_interface_name}",
642     "description": "description of ${firewall_emco_interface_name}",
643     "userData1": "useer data 2 for ${firewall_emco_interface_name}",
644     "userData2": "useer data 2 for ${firewall_emco_interface_name}"
645   },
646   "spec": {
647     "interface": "eth3",
648     "name": "${emcoprovidernetworkname}",
649     "defaultGateway": "false",
650     "ipAddress": "10.10.20.3"
651   }
652 }
653 EOF
654 )"
655
656 # define the network interface intents for the sink workload intent
657 sink_protected_interface_name="sink_protected_if"
658 sink_protected_interface_data="$(cat <<EOF
659 {
660   "metadata": {
661     "name": "${sink_protected_interface_name}",
662     "description": "description of ${sink_protected_interface_name}",
663     "userData1": "useer data 2 for ${sink_protected_interface_name}",
664     "userData2": "useer data 2 for ${sink_protected_interface_name}"
665   },
666   "spec": {
667     "interface": "eth1",
668     "name": "${protectednetworkname}",
669     "defaultGateway": "false",
670     "ipAddress": "192.168.20.3"
671   }
672 }
673 EOF
674 )"
675
676 sink_emco_interface_name="sink_emco_if"
677 sink_emco_interface_data="$(cat <<EOF
678 {
679   "metadata": {
680     "name": "${sink_emco_interface_name}",
681     "description": "description of ${sink_emco_interface_name}",
682     "userData1": "useer data 2 for ${sink_emco_interface_name}",
683     "userData2": "useer data 2 for ${sink_emco_interface_name}"
684   },
685   "spec": {
686     "interface": "eth2",
687     "name": "${emcoprovidernetworkname}",
688     "defaultGateway": "false",
689     "ipAddress": "10.10.20.4"
690   }
691 }
692 EOF
693 )"
694
695 # define the intents to be used by the group
696 deployment_intents_in_group_name="vfw_deploy_intents"
697 deployment_intents_in_group_data="$(cat <<EOF
698 {
699    "metadata":{
700       "name":"${deployment_intents_in_group_name}",
701       "description":"descriptionf of ${deployment_intents_in_group_name}",
702       "userData1":"user data 1 for ${deployment_intents_in_group_name}",
703       "userData2":"user data 2 for ${deployment_intents_in_group_name}"
704    },
705    "spec":{
706       "intent":{
707          "genericPlacementIntent":"${generic_placement_intent_name}",
708          "ovnaction" : "${vfw_ovnaction_intent_name}"
709       }
710    }
711 }
712 EOF
713 )"
714
715
716 function createOvnactionData {
717     call_api -d "${vfw_ovnaction_intent_data}" \
718              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent"
719
720     call_api -d "${packetgen_workload_intent_data}" \
721              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents"
722     call_api -d "${firewall_workload_intent_data}" \
723              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents"
724     call_api -d "${sink_workload_intent_data}" \
725              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents"
726
727     call_api -d "${packetgen_emco_interface_data}" \
728              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces"
729     call_api -d "${packetgen_unprotected_interface_data}" \
730              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces"
731
732     call_api -d "${firewall_emco_interface_data}" \
733              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces"
734     call_api -d "${firewall_unprotected_interface_data}" \
735              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces"
736     call_api -d "${firewall_protected_interface_data}" \
737              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces"
738
739     call_api -d "${sink_emco_interface_data}" \
740              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces"
741     call_api -d "${sink_protected_interface_data}" \
742              "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces"
743 }
744
745 function createOrchData {
746     print_msg "creating controller entries"
747     call_api -d "${rsynccontrollerdata}" "${base_url_orchestrator}/controllers"
748     call_api -d "${ovnactioncontrollerdata}" "${base_url_orchestrator}/controllers"
749
750     print_msg "creating project entry"
751     call_api -d "${projectdata}" "${base_url_orchestrator}/projects"
752
753     print_msg "creating vfw composite app entry"
754     call_api -d "${vfw_compositeapp_data}" "${base_url_orchestrator}/projects/${projectname}/composite-apps"
755
756     print_msg "adding vfw apps to the composite app"
757     call_api -F "metadata=${packetgen_app_data}" \
758              -F "file=@${packetgen_helm_chart}" \
759              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps"
760     call_api -F "metadata=${firewall_app_data}" \
761              -F "file=@${firewall_helm_chart}" \
762              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps"
763     call_api -F "metadata=${sink_app_data}" \
764              -F "file=@${sink_helm_chart}" \
765              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps"
766
767     print_msg "creating vfw composite profile entry"
768     call_api -d "${vfw_composite_profile_data}" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles"
769
770     print_msg "adding vfw app profiles to the composite profile"
771     call_api -F "metadata=${packetgen_profile_data}" \
772              -F "file=@${packetgen_profile_file}" \
773              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles"
774     call_api -F "metadata=${firewall_profile_data}" \
775              -F "file=@${firewall_profile_file}" \
776              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles"
777     call_api -F "metadata=${sink_profile_data}" \
778              -F "file=@${sink_profile_file}" \
779              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}/profiles"
780
781     print_msg "create the generic placement intent"
782     call_api -d "${generic_placement_intent_data}" \
783              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents"
784
785     print_msg "add the vfw app placement intents to the generic placement intent"
786     call_api -d "${packetgen_placement_intent_data}" \
787              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
788     call_api -d "${firewall_placement_intent_data}" \
789              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
790     call_api -d "${sink_placement_intent_data}" \
791              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents"
792
793     createOvnactionData
794
795     print_msg "create the deployment intent group"
796     call_api -d "${deployment_intent_group_data}" \
797              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups"
798     call_api -d "${deployment_intents_in_group_data}" \
799              "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/intents"
800 }
801
802 function createNcmData {
803     print_msg "Creating cluster provider and cluster"
804     call_api -d "${clusterproviderdata}" "${base_url_clm}/cluster-providers"
805     call_api -H "Content-Type: multipart/form-data" -F "metadata=$clusterdata" -F "file=@$kubeconfigfile" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters"
806     call_api -d "${labeldata}" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/labels"
807     call_api -H "Content-Type: multipart/form-data" -F "metadata=$clusterdata2" -F "file=@$kubeconfigfile2" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters"
808     call_api -d "${labeldata}" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername2}/labels"
809
810     print_msg "Creating provider network and network intents"
811     call_api -d "${emcoprovidernetworkdata}" "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/provider-networks"
812     call_api -d "${unprotectedprovidernetworkdata}" "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/provider-networks"
813     call_api -d "${protectednetworkdata}" "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/networks"
814
815     call_api -d "${emcoprovidernetworkdata}" "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${clustername2}/provider-networks"
816     call_api -d "${unprotectedprovidernetworkdata}" "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${clustername2}/provider-networks"
817     call_api -d "${protectednetworkdata}" "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${clustername2}/networks"
818 }
819
820
821 function createData {
822     createNcmData
823     createOrchData  # this will call createOvnactionData
824 }
825
826 function getOvnactionData {
827     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}"
828
829     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}"
830     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}"
831     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}"
832
833     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_emco_interface_name}"
834     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_unprotected_interface_name}"
835
836     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_emco_interface_name}"
837     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_unprotected_interface_name}"
838     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_protected_interface_name}"
839
840     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_emco_interface_name}"
841     call_api_nox "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_protected_interface_name}"
842 }
843
844 function getOrchData {
845     call_api_nox "${base_url_orchestrator}/controllers/${rsynccontrollername}"
846     call_api_nox "${base_url_orchestrator}/controllers/${ovnactioncontrollername}"
847
848
849     call_api_nox "${base_url_orchestrator}/projects/${projectname}"
850
851     call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}"
852
853     call_api_nox -H "Accept: application/json" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps/${packetgen_app_name}"
854     call_api_nox -H "Accept: application/json" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps/${firewall_app_name}"
855     call_api_nox -H "Accept: application/json" "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps/${sink_app_name}"
856
857     call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}"
858
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/${packetgen_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/${firewall_profile_name}"
861     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}"
862
863     call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}"
864
865     call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${packetgen_placement_intent_name}"
866     call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${firewall_placement_intent_name}"
867     call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${sink_placement_intent_name}"
868
869     call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}"
870     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}"
871 }
872
873 function getNcmData {
874     call_api_nox "${base_url_clm}/cluster-providers/${clusterprovidername}"
875     call_api_nox -H "Accept: application/json" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}"
876     call_api_nox -H "Accept: application/json" "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername2}"
877     call_api_nox "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/labels/${labelname}"
878     call_api_nox "${base_url_clm}/cluster-providers/${clusterprovidername}/clusters?label=${labelname}"
879
880     call_api_nox "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/provider-networks/${emcoprovidernetworkname}"
881     call_api_nox "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/provider-networks/${unprotectedprovidernetworkname}"
882     call_api_nox "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${clustername}/networks/${protectednetworkname}"
883
884     call_api_nox "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${clustername2}/provider-networks/${emcoprovidernetworkname}"
885     call_api_nox "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${clustername2}/provider-networks/${unprotectedprovidernetworkname}"
886     call_api_nox "${base_url_ncm}/cluster-providers/${clusterprovidername}/clusters/${clustername2}/networks/${protectednetworkname}"
887 }
888
889 function getData {
890     getNcmData
891     getOrchData
892     getOvnactionData
893 }
894
895 function deleteOvnactionData {
896     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_protected_interface_name}"
897     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}/interfaces/${sink_emco_interface_name}"
898     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_protected_interface_name}"
899     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_unprotected_interface_name}"
900     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}/interfaces/${firewall_emco_interface_name}"
901     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_unprotected_interface_name}"
902     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}/interfaces/${packetgen_emco_interface_name}"
903     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${sink_workload_intent_name}"
904     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${firewall_workload_intent_name}"
905     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}/workload-intents/${packetgen_workload_intent_name}"
906     delete_resource "${base_url_ovnaction}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/network-controller-intent/${vfw_ovnaction_intent_name}"
907 }
908
909 function deleteOrchData {
910     delete_resource "${base_url_orchestrator}/controllers/${rsynccontrollername}"
911     delete_resource "${base_url_orchestrator}/controllers/${ovnactioncontrollername}"
912
913     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}"
914     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}"
915
916     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${sink_placement_intent_name}"
917     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${firewall_placement_intent_name}"
918     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}/app-intents/${packetgen_placement_intent_name}"
919     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}"
920
921     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}"
922     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}"
923     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}"
924     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_profile_name}"
925
926     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps/${sink_app_name}"
927     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps/${firewall_app_name}"
928     delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/apps/${packetgen_app_name}"
929
930     deleteOvnactionData
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"
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 [ "$#" -ne 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" ) statusVfw ;;
1071     *) usage ;;
1072 esac