Allow to source functions from install script

Related-Prod: PRODX-11818
Change-Id: Id85f2daa379da089707d3d4aa421d4f49159b21e
diff --git a/de/heat-templates/scripts/instance_boot.sh b/de/heat-templates/scripts/instance_boot.sh
index f1f318e..e3f66cf 100644
--- a/de/heat-templates/scripts/instance_boot.sh
+++ b/de/heat-templates/scripts/instance_boot.sh
@@ -3,6 +3,10 @@
 # allow access to the local variables from prepare-metadata.py
 set -a
 
+# ensure we don't re-source this in the same environment
+[[ -z "$_INSTALL_SCRIPT" ]] || return 0
+declare -r -g _INSTALL_SCRIPT=1
+
 #
 # Variables in this block are passed from heat template
 #
@@ -847,127 +851,129 @@
     setup_evpn
 }
 
-case "$NODE_TYPE" in
-    # Please keep the "prepare_metadata_files", "disable-rp-filter", "network_config" and "prepare_network" functions
-    # at the very beginning in the same order.
-    ucp)
-        prepare_metadata_files
-        disable_rp_filter
-        network_config
-        prepare_network
-        prepare_docker_config
-        install_required_packages
-        configure_ntp
-        configure_atop
-        workaround_default_forward_policy
-        install_docker
-        swarm_init
-        create_ucp_config
-        cache_images
-        install_ucp
-        download_bundles
-        rm_ucp_config
-        install_kubectl
-        wait_for_node
-        set_node_labels
-        collect_ceph_metadata
-        configure_contrack
-        disable_iptables_for_bridges
-        if [[ "${SINGLE_NODE}" == true ]]; then
+if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
+    case "$NODE_TYPE" in
+        # Please keep the "prepare_metadata_files", "disable-rp-filter", "network_config" and "prepare_network" functions
+        # at the very beginning in the same order.
+        ucp)
+            prepare_metadata_files
+            disable_rp_filter
+            network_config
+            prepare_network
+            prepare_docker_config
+            install_required_packages
+            configure_ntp
+            configure_atop
+            workaround_default_forward_policy
+            install_docker
+            swarm_init
+            create_ucp_config
+            cache_images
+            install_ucp
+            download_bundles
+            rm_ucp_config
+            install_kubectl
+            wait_for_node
+            set_node_labels
+            collect_ceph_metadata
+            configure_contrack
+            disable_iptables_for_bridges
+            if [[ "${SINGLE_NODE}" == true ]]; then
+                nested_virt_config
+                disable_master_taint
+                collect_interfaces_metadata
+            fi
+            ;;
+        master)
             nested_virt_config
-            disable_master_taint
+            prepare_metadata_files
+            disable_rp_filter
+            network_config
+            prepare_network
+            prepare_docker_config
+            install_required_packages
+            configure_ntp
+            configure_atop
+            workaround_default_forward_policy
+            install_docker
+            cache_images
+            download_bundles
+            join_node manager
+            install_kubectl
+            wait_for_node
+            set_node_labels
+            collect_ceph_metadata
+            configure_contrack
+            disable_iptables_for_bridges
             collect_interfaces_metadata
-        fi
-        ;;
-    master)
-        nested_virt_config
-        prepare_metadata_files
-        disable_rp_filter
-        network_config
-        prepare_network
-        prepare_docker_config
-        install_required_packages
-        configure_ntp
-        configure_atop
-        workaround_default_forward_policy
-        install_docker
-        cache_images
-        download_bundles
-        join_node manager
-        install_kubectl
-        wait_for_node
-        set_node_labels
-        collect_ceph_metadata
-        configure_contrack
-        disable_iptables_for_bridges
-        collect_interfaces_metadata
-        ;;
-    worker)
-        if [[ "${CONFIGURE_HUGE_PAGES}" == true ]]; then
-            configure_huge_pages
-        fi
-        nested_virt_config
-        prepare_metadata_files
-        disable_rp_filter
-        network_config
-        prepare_network
-        prepare_docker_config
-        install_required_packages
-        enable_iscsi
-        configure_ntp
-        configure_atop
-        workaround_default_forward_policy
-        install_docker
-        cache_images
-        download_bundles
-        join_node worker
-        install_kubectl
-        wait_for_node
-        set_node_labels
-        collect_ceph_metadata
-        configure_contrack
-        disable_iptables_for_bridges
-        collect_interfaces_metadata
-        if [[ "${LVM_LOOP_DEVICE_SIZE}" -gt 0 ]]; then
-            configure_lvm
-        fi
-        ;;
-    spare)
-        prepare_metadata_files
-        disable_rp_filter
-        network_config
-        prepare_network
-        prepare_docker_config
-        install_required_packages
-        configure_ntp
-        configure_atop
-        install_docker
-        cache_images
-        download_bundles
-        workaround_default_forward_policy
-        configure_contrack
-        disable_iptables_for_bridges
-        ;;
-    frr)
-        prepare_metadata_files
-        disable_rp_filter
-        network_config
-        prepare_network
-        prepare_docker_config
-        install_required_packages
-        configure_ntp
-        configure_atop
-        install_docker
-        cache_images
-        download_bundles
-        workaround_default_forward_policy
-        configure_contrack
-        disable_iptables_for_bridges
-        install_frr
-        ;;
-    *)
-        echo "Usage: $0 {ucp|master|worker}"
-        exit 1
-esac
+            ;;
+        worker)
+            if [[ "${CONFIGURE_HUGE_PAGES}" == true ]]; then
+                configure_huge_pages
+            fi
+            nested_virt_config
+            prepare_metadata_files
+            disable_rp_filter
+            network_config
+            prepare_network
+            prepare_docker_config
+            install_required_packages
+            enable_iscsi
+            configure_ntp
+            configure_atop
+            workaround_default_forward_policy
+            install_docker
+            cache_images
+            download_bundles
+            join_node worker
+            install_kubectl
+            wait_for_node
+            set_node_labels
+            collect_ceph_metadata
+            configure_contrack
+            disable_iptables_for_bridges
+            collect_interfaces_metadata
+            if [[ "${LVM_LOOP_DEVICE_SIZE}" -gt 0 ]]; then
+                configure_lvm
+            fi
+            ;;
+        spare)
+            prepare_metadata_files
+            disable_rp_filter
+            network_config
+            prepare_network
+            prepare_docker_config
+            install_required_packages
+            configure_ntp
+            configure_atop
+            install_docker
+            cache_images
+            download_bundles
+            workaround_default_forward_policy
+            configure_contrack
+            disable_iptables_for_bridges
+            ;;
+        frr)
+            prepare_metadata_files
+            disable_rp_filter
+            network_config
+            prepare_network
+            prepare_docker_config
+            install_required_packages
+            configure_ntp
+            configure_atop
+            install_docker
+            cache_images
+            download_bundles
+            workaround_default_forward_policy
+            configure_contrack
+            disable_iptables_for_bridges
+            install_frr
+            ;;
+        *)
+            echo "Usage: $0 {ucp|master|worker}"
+            exit 1
+    esac
 
-wait_condition_send "SUCCESS" "Instance successfuly started." "${HW_METADATA}"
+    wait_condition_send "SUCCESS" "Instance successfuly started." "${HW_METADATA}"
+fi