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"}
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
20 "name": "$clusterprovidername",
21 "description": "description of $clusterprovidername",
22 "userData1": "$clusterprovidername user data 1",
23 "userData2": "$clusterprovidername user data 2"
30 clusterdata="$(cat<<EOF
33 "name": "$clustername",
34 "description": "description of $clustername",
35 "userData1": "$clustername user data 1",
36 "userData2": "$clustername user data 2"
42 # set $kubeconfigfile before running script to point to the desired config file
43 kubeconfigfile=${kubeconfigfile:-"oops"}
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
50 {"label-name": "$labelname"}
55 clusterdata2="$(cat<<EOF
58 "name": "$clustername2",
59 "description": "description of $clustername2",
60 "userData1": "$clustername2 user data 1",
61 "userData2": "$clustername2 user data 2"
67 # set $kubeconfigfile2 before running script to point to the desired config file
68 kubeconfigfile2=${kubeconfigfile2:-"oops"}
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
74 labeldata2="$(cat<<EOF
75 {"label-name": "$labelname"}
79 # add the rsync controller entry
80 rsynccontrollername="rsync"
81 rsynccontrollerdata="$(cat<<EOF
85 "description": "description of $rsynccontrollername controller",
86 "userData1": "user data 1 for $rsynccontrollername",
87 "userData2": "user data 2 for $rsynccontrollername"
90 "host": "${rsynccontrollername}",
97 # add the rsync controller entry
98 ovnactioncontrollername="ovnaction"
99 ovnactioncontrollerdata="$(cat<<EOF
102 "name": "$ovnactioncontrollername",
103 "description": "description of $ovnactioncontrollername controller",
104 "userData1": "user data 2 for $ovnactioncontrollername",
105 "userData2": "user data 2 for $ovnactioncontrollername"
108 "host": "${ovnactioncontrollername}",
118 # define networks and providernetworks intents to ncm for the clusters
119 # define emco-private-net and unprotexted-private-net as provider networks
121 emcoprovidernetworkname="emco-private-net"
122 emcoprovidernetworkdata="$(cat<<EOF
125 "name": "$emcoprovidernetworkname",
126 "description": "description of $emcoprovidernetworkname",
127 "userData1": "user data 1 for $emcoprovidernetworkname",
128 "userData2": "user data 2 for $emcoprovidernetworkname"
131 "cniType": "ovn4nfv",
134 "subnet": "10.10.20.0/24",
136 "gateway": "10.10.20.1/24"
139 "providerNetType": "VLAN",
142 "providerInterfaceName": "eth1",
143 "logicalInterfaceName": "eth1.102",
144 "vlanNodeSelector": "specific",
146 "kubernetes.io/hostname=localhost"
154 unprotectedprovidernetworkname="unprotected-private-net"
155 unprotectedprovidernetworkdata="$(cat<<EOF
158 "name": "$unprotectedprovidernetworkname",
159 "description": "description of $unprotectedprovidernetworkname",
160 "userData1": "user data 2 for $unprotectedprovidernetworkname",
161 "userData2": "user data 2 for $unprotectedprovidernetworkname"
164 "cniType": "ovn4nfv",
167 "subnet": "192.168.10.0/24",
169 "gateway": "192.168.10.1/24"
172 "providerNetType": "VLAN",
175 "providerInterfaceName": "eth1",
176 "logicalInterfaceName": "eth1.100",
177 "vlanNodeSelector": "specific",
179 "kubernetes.io/hostname=localhost"
187 protectednetworkname="protected-private-net"
188 protectednetworkdata="$(cat<<EOF
191 "name": "$protectednetworkname",
192 "description": "description of $protectednetworkname",
193 "userData1": "user data 1 for $protectednetworkname",
194 "userData2": "user data 1 for $protectednetworkname"
197 "cniType": "ovn4nfv",
200 "subnet": "192.168.20.0/24",
202 "gateway": "192.168.20.100/32"
211 projectname="testvfw"
212 projectdata="$(cat<<EOF
215 "name": "$projectname",
216 "description": "description of $projectname controller",
217 "userData1": "$projectname user data 1",
218 "userData2": "$projectname user data 2"
224 # define a composite application
225 vfw_compositeapp_name="compositevfw"
226 vfw_compositeapp_version="v1"
227 vfw_compositeapp_data="$(cat <<EOF
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}"
236 "version":"${vfw_compositeapp_version}"
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
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}"
259 firewall_app_name="firewall"
260 firewall_helm_chart=${firewall_helm_path:-"oops"}
261 firewall_app_data="$(cat <<EOF
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}"
274 sink_helm_chart=${sink_helm_path:-"oops"}
275 sink_app_data="$(cat <<EOF
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}"
288 # Add the composite profile
289 vfw_composite_profile_name="vfw_composite-profile"
290 vfw_composite_profile_data="$(cat <<EOF
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}"
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
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}"
315 "app-name": "${packetgen_app_name}"
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
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}"
333 "app-name": "${firewall_app_name}"
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
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}"
351 "app-name": "${sink_app_name}"
358 # define the generic placement intent
359 generic_placement_intent_name="generic-placement-intent"
360 generic_placement_intent_data="$(cat <<EOF
363 "name":"${generic_placement_intent_name}",
364 "description":"${generic_placement_intent_name}",
365 "userData1":"${generic_placement_intent_name}",
366 "userData2":"${generic_placement_intent_name}"
369 "logical-cloud":"unused_logical_cloud"
376 # define app placement intent for packetgen
377 packetgen_placement_intent_name="packetgen-placement-intent"
378 packetgen_placement_intent_data="$(cat <<EOF
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}"
387 "app-name":"${packetgen_app_name}",
390 { "provider-name":"${clusterprovidername}",
391 "cluster-label-name":"${labelname}"
400 # define app placement intent for firewall
401 firewall_placement_intent_name="firewall-placement-intent"
402 firewall_placement_intent_data="$(cat <<EOF
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}"
411 "app-name":"${firewall_app_name}",
414 { "provider-name":"${clusterprovidername}",
415 "cluster-label-name":"${labelname}"
424 # define app placement intent for sink
425 sink_placement_intent_name="sink-placement-intent"
426 sink_placement_intent_data="$(cat <<EOF
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}"
435 "app-name":"${sink_app_name}",
438 { "provider-name":"${clusterprovidername}",
439 "cluster-label-name":"${labelname}"
448 # define a deployment intent group
450 deployment_intent_group_name="vfw_deployment_intent_group"
451 deployment_intent_group_data="$(cat <<EOF
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}"
460 "profile":"${vfw_composite_profile_name}",
461 "version":"${release}",
464 "app-name":"${packetgen_app_name}",
466 ".Values.service.ports.nodePort":"30888"
470 "app-name":"${firewall_app_name}",
472 ".Values.global.dcaeCollectorIp":"1.2.3.4",
473 ".Values.global.dcaeCollectorPort":"8888"
477 "app-name":"${sink_app_name}",
479 ".Values.service.ports.nodePort":"30677"
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
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}"
502 # define the network workload intent for packetgen app
503 packetgen_workload_intent_name="packetgen_workload_intent"
504 packetgen_workload_intent_data="$(cat <<EOF
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}"
513 "application-name": "${packetgen_app_name}",
514 "workload-resource": "${release}-${packetgen_app_name}",
521 # define the network workload intent for firewall app
522 firewall_workload_intent_name="firewall_workload_intent"
523 firewall_workload_intent_data="$(cat <<EOF
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}"
532 "application-name": "${firewall_app_name}",
533 "workload-resource": "${release}-${firewall_app_name}",
540 # define the network workload intent for sink app
541 sink_workload_intent_name="sink_workload_intent"
542 sink_workload_intent_data="$(cat <<EOF
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}"
551 "application-name": "${sink_app_name}",
552 "workload-resource": "${release}-${sink_app_name}",
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
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}"
571 "name": "${unprotectedprovidernetworkname}",
572 "defaultGateway": "false",
573 "ipAddress": "192.168.10.2"
579 packetgen_emco_interface_name="packetgen_emco_if"
580 packetgen_emco_interface_data="$(cat <<EOF
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}"
590 "name": "${emcoprovidernetworkname}",
591 "defaultGateway": "false",
592 "ipAddress": "10.10.20.2"
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
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}"
610 "name": "${unprotectedprovidernetworkname}",
611 "defaultGateway": "false",
612 "ipAddress": "192.168.10.3"
618 firewall_protected_interface_name="firewall_protected_if"
619 firewall_protected_interface_data="$(cat <<EOF
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}"
629 "name": "${protectednetworkname}",
630 "defaultGateway": "false",
631 "ipAddress": "192.168.20.2"
637 firewall_emco_interface_name="firewall_emco_if"
638 firewall_emco_interface_data="$(cat <<EOF
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}"
648 "name": "${emcoprovidernetworkname}",
649 "defaultGateway": "false",
650 "ipAddress": "10.10.20.3"
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
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}"
668 "name": "${protectednetworkname}",
669 "defaultGateway": "false",
670 "ipAddress": "192.168.20.3"
676 sink_emco_interface_name="sink_emco_if"
677 sink_emco_interface_data="$(cat <<EOF
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}"
687 "name": "${emcoprovidernetworkname}",
688 "defaultGateway": "false",
689 "ipAddress": "10.10.20.4"
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
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}"
707 "genericPlacementIntent":"${generic_placement_intent_name}",
708 "ovnaction" : "${vfw_ovnaction_intent_name}"
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"
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"
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"
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"
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"
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"
750 print_msg "creating project entry"
751 call_api -d "${projectdata}" "${base_url_orchestrator}/projects"
753 print_msg "creating vfw composite app entry"
754 call_api -d "${vfw_compositeapp_data}" "${base_url_orchestrator}/projects/${projectname}/composite-apps"
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"
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"
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"
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"
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"
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"
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"
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"
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"
821 function createData {
823 createOrchData # this will call createOvnactionData
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}"
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}"
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}"
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}"
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}"
844 function getOrchData {
845 call_api_nox "${base_url_orchestrator}/controllers/${rsynccontrollername}"
846 call_api_nox "${base_url_orchestrator}/controllers/${ovnactioncontrollername}"
849 call_api_nox "${base_url_orchestrator}/projects/${projectname}"
851 call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}"
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}"
857 call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/composite-profiles/${vfw_composite_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/${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}"
863 call_api_nox "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/generic-placement-intents/${generic_placement_intent_name}"
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}"
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}"
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}"
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}"
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}"
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}"
909 function deleteOrchData {
910 delete_resource "${base_url_orchestrator}/controllers/${rsynccontrollername}"
911 delete_resource "${base_url_orchestrator}/controllers/${ovnactioncontrollername}"
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}"
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}"
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}"
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}"
932 delete_resource "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}"
933 delete_resource "${base_url_orchestrator}/projects/${projectname}"
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}"
950 function deleteData {
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"
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"
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"
972 # terminates the vfw and ncm resources
973 function terminateVfw {
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"
984 call_api "${base_url_orchestrator}/projects/${projectname}/composite-apps/${vfw_compositeapp_name}/${vfw_compositeapp_version}/deployment-intent-groups/${deployment_intent_group_name}/status"
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'"
1006 echo " a reasonable test sequence:"
1009 echo " 3. instantiate"
1011 echo " 5. terminate"
1016 function check_for_env_settings {
1018 if [ "${kubeconfigfile}" == "oops" ] ; then
1019 echo -e "ERROR - kubeconfigfile environment variable needs to be set"
1022 if [ "${kubeconfigfile2}" == "oops" ] ; then
1023 echo -e "ERROR - kubeconfigfile2 environment variable needs to be set"
1026 if [ "${packetgen_helm_chart}" == "oops" ] ; then
1027 echo -e "ERROR - packetgen_helm_path environment variable needs to be set"
1030 if [ "${firewall_helm_chart}" == "oops" ] ; then
1031 echo -e "ERROR - firewall_helm_path environment variable needs to be set"
1034 if [ "${sink_helm_chart}" == "oops" ] ; then
1035 echo -e "ERROR - sink_helm_path environment variable needs to be set"
1038 if [ "${packetgen_profile_file}" == "oops" ] ; then
1039 echo -e "ERROR - packetgen_profile_targz environment variable needs to be set"
1042 if [ "${firewall_profile_file}" == "oops" ] ; then
1043 echo -e "ERROR - firewall_profile_targz environment variable needs to be set"
1046 if [ "${sink_profile_file}" == "oops" ] ; then
1047 echo -e "ERROR - sink_profile_targz environment variable needs to be set"
1050 if [ "${ok}" == "no" ] ; then
1056 if [ "$#" -ne 1 ] ; then
1062 check_for_env_settings
1066 "delete" ) deleteData ;;
1067 "apply" ) applyNcmData ;;
1068 "instantiate" ) instantiateVfw ;;
1069 "terminate" ) terminateVfw ;;
1070 "status" ) statusVfw ;;