Support deploy noble as heat base image

Related-Prod: PRODX-3456
Change-Id: Ib1f43f5f3a569cf2687a2247954a3c24c757ac91
diff --git a/de/heat-templates/scripts/functions.sh b/de/heat-templates/scripts/functions.sh
index 5fc6c28..b106bd9 100644
--- a/de/heat-templates/scripts/functions.sh
+++ b/de/heat-templates/scripts/functions.sh
@@ -535,15 +535,24 @@
 }
 
 function configure_ntp {
-    echo "" > /etc/ntp.conf
+    if [[ ${CODENAME} == "bionic" ]] || [[ ${CODENAME} == "focal" ]] || [[ ${CODENAME} == "jammy" ]]; then
+        local ntp_conf="/etc/ntp.conf"
+        local ntp_driftfile="/var/lib/ntp/ntp.drift"
+        local ntp_service_name="ntp"
+    else
+        local ntp_conf="/etc/ntpsec/ntp.conf"
+        local ntp_driftfile="/var/lib/ntpsec/ntp.drift"
+        local ntp_service_name="ntpsec"
+    fi
+    echo "" > ${ntp_conf}
 
     for server in $NTP_SERVERS; do
-cat << EOF >> /etc/ntp.conf
+cat << EOF >> ${ntp_conf}
 server ${server} iburst
 EOF
     done
 
-    cat << EOF >> /etc/ntp.conf
+    cat << EOF >> ${ntp_conf}
 # Set general access to this service
 restrict -4 default kod nomodify notrap nopeer noquery
 restrict -6 default kod nomodify notrap nopeer noquery
@@ -558,12 +567,14 @@
 interface listen ${DEFAULT_INTERFACE}
 
 # Location of drift file
-driftfile /var/lib/ntp/ntp.drift
+driftfile ${ntp_driftfile}
 EOF
 
-    systemctl disable systemd-timesyncd
-    systemctl enable ntp
-    systemctl restart ntp
+    if systemctl --quiet is-enabled systemd-timesyncd ; then
+        systemctl disable systemd-timesyncd
+    fi
+    systemctl enable ${ntp_service_name}
+    systemctl restart ${ntp_service_name}
 }
 
 function wait_for_external_network {
@@ -674,6 +685,9 @@
     local public_interface=${1:-${PUBLIC_INTERFACE}}
     local cloud_netplan_cfg="/etc/netplan/50-cloud-init.yaml"
     local match_ip_line
+    # Normalize YAML indentation for consistent structure
+    cp ${cloud_netplan_cfg} ${cloud_netplan_cfg}.bak
+    yq r -I 2 ${cloud_netplan_cfg}.bak > ${cloud_netplan_cfg}
 
     install_pkgs bridge-utils
 
@@ -704,18 +718,18 @@
 EOF
 fi
 
-    sed -i 's/.*ethernets:.*/&\n        veth-phy: {}/' ${cloud_netplan_cfg}
-    sed -i 's/.*ethernets:.*/&\n        veth-br: {}/' ${cloud_netplan_cfg}
+    sed -i 's/.*ethernets:.*/&\n    veth-phy: {}/' ${cloud_netplan_cfg}
+    sed -i 's/.*ethernets:.*/&\n    veth-br: {}/' ${cloud_netplan_cfg}
 if [[ -n ${IRONIC_BAREMETAL_INTERFACE} ]]; then
-    sed -i 's/.*ethernets:.*/&\n        veth-bm: {}/' ${cloud_netplan_cfg}
-    sed -i 's/.*ethernets:.*/&\n        veth-bm-br: {}/' ${cloud_netplan_cfg}
-    sed -i 's/.*ethernets:.*/&\n        veth-vbmc: {}/' ${cloud_netplan_cfg}
-    sed -i 's/.*ethernets:.*/&\n        veth-vbmc-br: {}/' ${cloud_netplan_cfg}
+    sed -i 's/.*ethernets:.*/&\n    veth-bm: {}/' ${cloud_netplan_cfg}
+    sed -i 's/.*ethernets:.*/&\n    veth-bm-br: {}/' ${cloud_netplan_cfg}
+    sed -i 's/.*ethernets:.*/&\n    veth-vbmc: {}/' ${cloud_netplan_cfg}
+    sed -i 's/.*ethernets:.*/&\n    veth-vbmc-br: {}/' ${cloud_netplan_cfg}
 
     if [[ "${IRONIC_MT_ENABLED,,}" == true ]] ; then
-        sed -i "s/.*ethernets:.*/&\n        ${IRONIC_BAREMETAL_VXLAN_INTERFACE}: {}/" ${cloud_netplan_cfg}
-        sed -i 's/.*ethernets:.*/&\n        veth-pxe: {}/' ${cloud_netplan_cfg}
-        sed -i 's/.*ethernets:.*/&\n        veth-pxe-br: {}/' ${cloud_netplan_cfg}
+        sed -i "s/.*ethernets:.*/&\n    ${IRONIC_BAREMETAL_VXLAN_INTERFACE}: {}/" ${cloud_netplan_cfg}
+        sed -i 's/.*ethernets:.*/&\n    veth-pxe: {}/' ${cloud_netplan_cfg}
+        sed -i 's/.*ethernets:.*/&\n    veth-pxe-br: {}/' ${cloud_netplan_cfg}
 cat << EOF > /etc/systemd/network/13-veth-pxe.netdev
 [NetDev]
 Name=veth-pxe
@@ -725,12 +739,12 @@
 EOF
         sed -i "s/- ${IRONIC_BAREMETAL_NETWORK_PREFIX}\([0-9]*\)/- ${IRONIC_BAREMETAL_TUNNEL_NETWORK_PREFIX}\1/" ${cloud_netplan_cfg}
 cat << EOF >> ${cloud_netplan_cfg}
-    vlans:
-        pxe.1000:
-            id: 1000
-            link: veth-pxe
-            addresses:
-            - ${IRONIC_BAREMETAL_INTERFACE_IP}/${IRONIC_BAREMETAL_NETWORK_NETMASK}
+  vlans:
+    pxe.1000:
+      id: 1000
+      link: veth-pxe
+      addresses:
+        - ${IRONIC_BAREMETAL_INTERFACE_IP}/${IRONIC_BAREMETAL_NETWORK_NETMASK}
 EOF
     else
         ironic_baremetal_address_match_ip_line=$(grep -nm1 "${IRONIC_BAREMETAL_INTERFACE_IP}/${IRONIC_BAREMETAL_NETWORK_NETMASK}" ${cloud_netplan_cfg} | cut -d: -f1)
@@ -749,23 +763,23 @@
 fi
 
 cat << EOF >> ${cloud_netplan_cfg}
-    bridges:
-        br-public:
-            dhcp4: false
-            interfaces:
-            - ${PUBLIC_INTERFACE}
-            - veth-br
+  bridges:
+    br-public:
+      dhcp4: false
+      interfaces:
+        - ${PUBLIC_INTERFACE}
+        - veth-br
 EOF
 if [[ "${TUNGSTENFABRIC_ENABLED,,}" != true ]]; then
     if [[ ${NODE_METADATA} == *"tempest"* ]]; then
 cat << EOF >> ${cloud_netplan_cfg}
-            addresses:
-            - ${PUBLIC_NODE_IP_ADDRESS}/${PUBLIC_NODE_IP_NETMASK}
+      addresses:
+        - ${PUBLIC_NODE_IP_ADDRESS}/${PUBLIC_NODE_IP_NETMASK}
 EOF
 # Assign more ips for neutron dynamic routing PRODX-31417
         for i in {71..76}; do
 cat << EOF >> ${cloud_netplan_cfg}
-            - ${PUBLIC_NODE_IP_ADDRESS%.*}.${i}/${PUBLIC_NODE_IP_NETMASK}
+        - ${PUBLIC_NODE_IP_ADDRESS%.*}.${i}/${PUBLIC_NODE_IP_NETMASK}
 EOF
         done
     fi
@@ -773,27 +787,27 @@
 
 # Remove Tunnel interface from netplan
 if [[ $TUNNEL_INTERFACE_NETPLAN_MANAGE == false ]]; then
-    sed -i "/        ${TUNNEL_INTERFACE}/,/            set-name: ${TUNNEL_INTERFACE}/d" ${cloud_netplan_cfg}
+    sed -i "/    ${TUNNEL_INTERFACE}/,/      set-name: ${TUNNEL_INTERFACE}/d" ${cloud_netplan_cfg}
 fi
 
 if [[ -n ${IRONIC_BAREMETAL_INTERFACE} ]]; then
 cat << EOF >> ${cloud_netplan_cfg}
-        br-baremetal:
-            dhcp4: false
-            interfaces:
-            - veth-bm-br
-            - veth-vbmc-br
+    br-baremetal:
+      dhcp4: false
+      interfaces:
+        - veth-bm-br
+        - veth-vbmc-br
 EOF
     if [[ "${IRONIC_MT_ENABLED,,}" != true ]] ; then
 cat << EOF >> ${cloud_netplan_cfg}
-            - ${IRONIC_BAREMETAL_INTERFACE}
-            addresses:
-            - ${IRONIC_BAREMETAL_INTERFACE_IP}/${IRONIC_BAREMETAL_NETWORK_NETMASK}
+        - ${IRONIC_BAREMETAL_INTERFACE}
+      addresses:
+        - ${IRONIC_BAREMETAL_INTERFACE_IP}/${IRONIC_BAREMETAL_NETWORK_NETMASK}
 EOF
     else
 cat << EOF >> ${cloud_netplan_cfg}
-            - ${IRONIC_BAREMETAL_VXLAN_INTERFACE}
-            - veth-pxe-br
+        - ${IRONIC_BAREMETAL_VXLAN_INTERFACE}
+        - veth-pxe-br
 EOF
 
 cat << EOF > /etc/systemd/system/ironic-vxlan-tunnel.service
diff --git a/de/heat-templates/scripts/launch.sh b/de/heat-templates/scripts/launch.sh
index ef03877..060c42c 100644
--- a/de/heat-templates/scripts/launch.sh
+++ b/de/heat-templates/scripts/launch.sh
@@ -133,12 +133,12 @@
             wait_for_external_network
             prepare_metadata_files
             disable_rp_filter
+            install_required_packages
             network_config
             prepare_network
             if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then
                 prepare_docker_config
             fi
-            install_required_packages
             install_kubectl
             configure_ntp
             configure_atop
@@ -180,12 +180,12 @@
             nested_virt_config
             prepare_metadata_files
             disable_rp_filter
+            install_required_packages
             network_config
             prepare_network
             if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then
                 prepare_docker_config
             fi
-            install_required_packages
             install_kubectl
             configure_ntp
             configure_atop
@@ -219,12 +219,12 @@
             nested_virt_config
             prepare_metadata_files
             disable_rp_filter
+            install_required_packages
             network_config
             prepare_network
             if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then
                 prepare_docker_config
             fi
-            install_required_packages
             install_kubectl
             enable_iscsi
             configure_ntp
@@ -258,12 +258,12 @@
             wait_for_external_network
             prepare_metadata_files
             disable_rp_filter
+            install_required_packages
             network_config
             prepare_network
             if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then
                 prepare_docker_config
             fi
-            install_required_packages
             configure_ntp
             configure_atop
             if [[ "${KUBERNETES_INSTALLER}" == "ucp" ]]; then