Wrap pkg install with retries

* Use common install_pkgs function when installing packages.

Related-Prod: PRODX-3456
Change-Id: I79aaf05b5b648625b8ec2f71bee82c567c006199
diff --git a/de/heat-templates/scripts/instance_boot.sh b/de/heat-templates/scripts/instance_boot.sh
index e064e28..37c90c0 100644
--- a/de/heat-templates/scripts/instance_boot.sh
+++ b/de/heat-templates/scripts/instance_boot.sh
@@ -168,6 +168,14 @@
     return 0
 }
 
+function install_pkgs {
+    local pkgs="$@"
+    function _retry_install {
+        apt update && DEBIAN_FRONTEND=noninteractive apt install -y $pkgs
+    }
+    retry 10 "Labeling node failed" _retry_install
+}
+
 function setup_bind_mounts {
     mkdir -p /var/lib/persistant-data
     for component in nova glance cinder docker kubelet; do
@@ -219,14 +227,10 @@
             pkg_list="$pkg_list linux-modules-extra-$(uname -r)"
         fi
     fi
-    function install_retry {
-        apt update
-        export DEBIAN_FRONTEND=noninteractive; apt install -y $pkg_list
-        # Since version 4 yq uses another syntax
-        curl --retry 6 --retry-delay 5 -L ${BINARY_BASE_URL}/openstack/bin/utils/yq/yq-v3.3.2 -o /usr/bin/yq
-        chmod +x /usr/bin/yq
-    }
-    retry 10 "Failed to install required packages" install_retry
+    install_pkgs $pkg_list
+    # Since version 4 yq uses another syntax
+    curl --retry 6 --retry-delay 5 -L ${BINARY_BASE_URL}/openstack/bin/utils/yq/yq-v3.3.2 -o /usr/bin/yq
+    chmod +x /usr/bin/yq
 }
 
 function enable_iscsi {
@@ -284,8 +288,7 @@
     function install_retry {
         curl --retry 6 --retry-delay 5 -fsSL "${DOCKER_URL}/gpg" | sudo apt-key add -
         add-apt-repository "deb [arch=amd64] ${DOCKER_URL}/ ${OS_CODENAME} ${DOCKER_RELEASE}"
-        apt update
-        apt install -y ${DOCKER_PACKAGES}
+        install_pkgs ${DOCKER_PACKAGES}
     }
     retry 10 "Failed to install docker" install_retry
 }
@@ -373,7 +376,7 @@
     k0s token create --role=worker > /etc/k0s/worker_token.yaml
     k0s token create --role=controller > /etc/k0s/controller_token.yaml
 
-    apt install nginx -y
+    install_pkgs nginx
     rm -f /etc/nginx/sites-enabled/default
     ln -s /etc/k0s/ /var/www/k0s
     cat << EOF > /etc/nginx/sites-enabled/k0s
@@ -632,7 +635,7 @@
     local cloud_netplan_cfg="/etc/netplan/50-cloud-init.yaml"
     local match_ip_line
 
-    DEBIAN_FRONTEND=noninteractive apt -y install bridge-utils
+    install_pkgs bridge-utils
 
 cat << EOF > /etc/systemd/network/10-veth-phy-br.netdev
 [NetDev]
@@ -946,8 +949,7 @@
         curl -s https://deb.frrouting.org/frr/keys.asc | sudo apt-key add -
         FRRVER="frr-stable"
         echo deb https://deb.frrouting.org/frr $(lsb_release -s -c) $FRRVER | sudo tee -a /etc/apt/sources.list.d/frr.list
-        apt update
-        apt install -y frr frr-pythontools
+        install_pkgs frr frr-pythontools
     }
     retry 3 "Can't install frr packages" _install_frr_packages