Add ability to install docker-ee

also:

- added retries to install ucp
- required packages moved to separate method

Related-Prod: https://mirantis.jira.com/browse/PRODX-2228
Change-Id: I3890d9518b5dfd9e969416cbed06af6a96bbeecb
diff --git a/de/heat-templates/scripts/instance_boot.sh b/de/heat-templates/scripts/instance_boot.sh
index 7282da4..1e12aee 100644
--- a/de/heat-templates/scripts/instance_boot.sh
+++ b/de/heat-templates/scripts/instance_boot.sh
@@ -11,6 +11,8 @@
 NODE_TYPE=$node_type
 UCP_MASTER_HOST=$ucp_master_host
 NODE_METADATA='$node_metadata'
+DOCKER_EE_URL='$docker_ee_url'
+DOCKER_EE_RELEASE='$docker_ee_release'
 #
 # End of block
 #
@@ -19,6 +21,15 @@
 # DOCKER_DEFAULT_ADDRESS_SIZE have to be less then netmask in DOCKER_DEFAULT_ADDRESS_POOL because
 # to the fact that actual netmask for docker_gwbridge is given from it
 DOCKER_DEFAULT_ADDRESS_SIZE=${DOCKER_DEFAULT_ADDRESS_SIZE:-24}
+DOCKER_EE_RELEASE=${DOCKER_EE_RELEASE:-stable-19.03}
+DOCKER_EE_PACKAGES='docker-ee'
+DOCKER_RELEASE='stable'
+DOCKER_PACKAGES='docker-ce'
+if [ -n "${DOCKER_EE_URL}" ]; then
+    DOCKER_URL="${DOCKER_EE_URL}"
+    DOCKER_RELEASE="${DOCKER_EE_RELEASE}"
+    DOCKER_PACKAGES="${DOCKER_EE_PACKAGES}"
+fi
 HOST_INTERFACE=${HOST_INTERFACE:-ens3}
 PUBLIC_INTERFACE=${PUBLIC_INTERFACE:-ens4}
 NODE_IP_ADDRESS=$(ip addr show dev ${HOST_INTERFACE} |grep -Po 'inet \K[\d.]+' |egrep -v "127.0.|172.17")
@@ -78,15 +89,23 @@
     fi
 }
 
-function install_docker_ce {
+function install_required_packages {
     function install_retry {
-        apt install -y apt-transport-https ca-certificates curl software-properties-common
-        curl --retry 6 --retry-delay 5 -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
-        add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu ${OS_CODENAME} stable"
         apt update
-        apt install -y docker-ce jq unzip
+        apt install -y apt-transport-https ca-certificates curl software-properties-common jq unzip atop
     }
-    retry 10 "Failed to install docker CE" install_retry
+    retry 10 "Failed to install required packages" install_retry
+}
+
+
+function install_docker {
+    function install_retry {
+        curl --retry 6 --retry-delay 5 -fsSL "${DOCKER_URL}/ubuntu/gpg" | sudo apt-key add -
+        add-apt-repository "deb [arch=amd64] ${DOCKER_URL}/ubuntu ${OS_CODENAME} ${DOCKER_RELEASE}"
+        apt update
+        apt install -y ${DOCKER_PACKAGES}
+    }
+    retry 10 "Failed to install docker" install_retry
 }
 
 function update_docker_network {
@@ -207,7 +226,8 @@
     local public_interface=${1:-${PUBLIC_INTERFACE}}
     local cloud_netplan_cfg="/etc/netplan/50-cloud-init.yaml"
     local match_ip_line
-    DEBIAN_FRONTEND=noninteractive apt -y install bridge-utils atop
+    DEBIAN_FRONTEND=noninteractive apt -y install bridge-utils
+
 cat << EOF > /etc/systemd/network/10-veth-phy-br.netdev
 [NetDev]
 Name=veth-phy
@@ -246,7 +266,8 @@
     ucp)
         prepare_network
         update_docker_network
-        install_docker_ce
+        install_required_packages
+        install_docker
         network_config
         swarm_init
         create_ucp_config
@@ -261,7 +282,8 @@
     master)
         prepare_network
         update_docker_network
-        install_docker_ce
+        install_required_packages
+        install_docker
         network_config
         download_bundles
         join_node manager
@@ -273,7 +295,8 @@
     worker)
         prepare_network
         update_docker_network
-        install_docker_ce
+        install_required_packages
+        install_docker
         network_config
         download_bundles
         join_node worker
diff --git a/de/heat-templates/scripts/license.lic b/de/heat-templates/scripts/license.lic
index a923a91..7407f46 100644
--- a/de/heat-templates/scripts/license.lic
+++ b/de/heat-templates/scripts/license.lic
@@ -1 +1 @@
-{"key_id":"lm_DfgeIFfNITZK-oUibhI4poRik1cMA-OFmuofxyeAz","private_key":"tExKBK6pHfFdWoYAeqBbRKQuV8UTCG4jRh7j9WyW43ih","authorization":"ewogICAicGF5bG9hZCI6ICJleUpsZUhCcGNtRjBhVzl1SWpvaU1qQXlNQzB3TVMweE9GUXhORG93T1RvMU9Gb2lMQ0owYjJ0bGJpSTZJa3BGVUU5MVIzVnRObmROYjNRM056VnRVbEpwZEdGZlZXTndaakZHZVRWb2RYWnRhMU5aUkZJMldFRTlJaXdpYldGNFJXNW5hVzVsY3lJNk1UQXNJbk5qWVc1dWFXNW5SVzVoWW14bFpDSTZkSEoxWlN3aWJHbGpaVzV6WlZSNWNHVWlPaUpQYm14cGJtVWlMQ0owYVdWeUlqb2lWSEpwWVd3aUxDSnpkV0p6WTNKcGNIUnBiMjVmYVdRaU9pSnpkV0l0WlRFMVl6ZGhOell0WldKaU1pMDBZekF4TFRobE9HWXRaakkyTUdKak5ETTJORE5sSWl3aWNISnZaSFZqZEY5cFpDSTZJbVJ2WTJ0bGNpMWxaUzF6WlhKMlpYSXRkV0oxYm5SMUlpd2ljbUYwWlY5d2JHRnVYMmxrSWpvaVpHOWphMlZ5TFdWbExYTmxjblpsY2kxMVluVnVkSFV0ZEhKcFlXd3RkR2xsY2lJc0luWmxjbk5wYjI0aU9qRXNJbWR5WVdObFgyUmhlWE1pT2pFc0ltMWxkR0ZrWVhSaElqcDdJblZ6WlhKdVlXMWxJam9pYW5WdGNHOXFiM2tpTENKamIyMXdZVzU1SWpvaWVHRjBZU0o5TENKd2NtbGphVzVuWDJOdmJYQnZibVZ1ZEhNaU9sdDdJbTVoYldVaU9pSk9iMlJsY3lJc0luWmhiSFZsSWpveE1IMWRmUSIsCiAgICJzaWduYXR1cmVzIjogWwogICAgICB7CiAgICAgICAgICJoZWFkZXIiOiB7CiAgICAgICAgICAgICJqd2siOiB7CiAgICAgICAgICAgICAgICJlIjogIkFRQUIiLAogICAgICAgICAgICAgICAia2V5SUQiOiAiSjdMRDo2N1ZSOkw1SFo6VTdCQToyTzRHOjRBTDM6T0YyTjpKSEdCOkVGVEg6NUNWUTpNRkVPOkFFSVQiLAogICAgICAgICAgICAgICAia2lkIjogIko3TEQ6NjdWUjpMNUhaOlU3QkE6Mk80Rzo0QUwzOk9GMk46SkhHQjpFRlRIOjVDVlE6TUZFTzpBRUlUIiwKICAgICAgICAgICAgICAgImt0eSI6ICJSU0EiLAogICAgICAgICAgICAgICAibiI6ICJ5ZEl5LWxVN283UGNlWS00LXMtQ1E1T0VnQ3lGOEN4SWNRSVd1Szg0cElpWmNpWTY3MzB5Q1lud0xTS1Rsdy1VNlVDX1FSZVdSaW9NTk5FNURzNVRZRVhiR0c2b2xtMnFkV2JCd2NDZy0yVVVIX09jQjlXdVA2Z1JQSHBNRk1zeER6V3d2YXk4SlV1SGdZVUxVcG0xSXYtbXE3bHA1blFfUnhyVDBLWlJBUVRZTEVNRWZHd20zaE1PX2dlTFBTLWhnS1B0SUhsa2c2X1djb3hUR29LUDc5ZF93YUhZeEdObDdXaFNuZWlCU3hicGJRQUtrMjFsZzc5OFhiN3ZaeUVBVERNclJSOU1lRTZBZGo1SEpwWTNDb3lSQVBDbWFLR1JDSzR1b1pTb0l1MGhGVmxLVVB5YmJ3MDAwR08td2EyS044VXdnSUltMGk1STF1VzlHa3E0empCeTV6aGdxdVVYYkc5YldQQU9ZcnE1UWE4MUR4R2NCbEp5SFlBcC1ERFBFOVRHZzR6WW1YakpueFpxSEVkdUdxZGV2WjhYTUkwdWtma0dJSTE0d1VPaU1JSUlyWGxFY0JmXzQ2SThnUVdEenh5Y1plX0pHWC1MQXVheVhyeXJVRmVoVk5VZFpVbDl3WE5hSkIta2FDcXo1UXdhUjkzc0d3LVFTZnREME52TGU3Q3lPSC1FNnZnNlN0X05lVHZndjhZbmhDaVhJbFo4SE9mSXdOZTd0RUZfVWN6NU9iUHlrbTN0eWxyTlVqdDBWeUFtdHRhY1ZJMmlHaWhjVVBybWs0bFZJWjdWRF9MU1ctaTd5b1N1cnRwc1BYY2UycEtESW8zMGxKR2hPXzNLVW1sMlNVWkNxekoxeUVtS3B5c0g1SERXOWNzSUZDQTNkZUFqZlpVdk43VSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImFsZyI6ICJSUzI1NiIKICAgICAgICAgfSwKICAgICAgICAgInNpZ25hdHVyZSI6ICJLOTdEcC1yMTlPV1k0c0taZ0c0SGdGWGk0ZHJZX056a3hzeDJIbGY0NXJ5a0tWU3VOWWtrblYyaFMwdlY3ODB3anM5M1B3cTJLR2l2dkVteG5vc05qeWVodnJxYktDVFBUWEE5S1REQnNIT052QlEwT3gzSFpPdWRCXzF6Y2xSY3NIX3oyT1I0RFV5NFBXNGhHNUVSa055WnJHbE5FSFBXR2hMT1RVckU4OEIxRjc4eFAtU2RncGxtb3dkVVdaUEhPdzJxZUlxQ1NNUHZ2cHJ3OGVDSE1vYnJvNnZ2d00wTThxdkMxMkI1Tk5JUkMwTXVrbFhYdnVuN3pQTnU0c0dId2xfUDlfaU1VMkVCajlhOTBYRkJRWklQVFJlVG9JbmdPT2xuNExRTk9DdzNsYXZzRjhrbWRxZkdwSWRhNHFINWhYSmx6eEVWdlZEelNFUDlTbWY2QVFaUlNHT0h1TkZ0THZYRTB5TlBYOXNzV3B2Zy1GM0VZUUl2S0ZXdDBUbG9lS3lhdllnZEc4bFQ5VE8xdEZYdEJrdEdFb3hYa0FKb3BKWGJpc3pTdzJnd2c2dGJ6N0J6bFdQbWZzelBHUk94UTY3ZjFrQ3VGOXhKQ0RTcFhJb1BzM1FIWWJZMUVQMkJNUzRqNFVHQVVTaV8yanJQajhmZEpBaWFIeF9LWUZaSGMtMmZKd2R5VUQ4eWhmWk02UXlMRF95cDZyeGNiYkpuU1Z4TVlwRjc5SGxRR0d2UzBSN3Y5VUl2czhDRW9NLXBDeEJrc1NabjZtVVpnMTRjdGZLYVQ4cEtYd3NGRnFBZmthandxWDk4WjI5T1dtZTJlNmoxRWRXZWtOSVU5dzA0THlYR0lITmk5cHlpbzlVX2V5bnFFbkZNbjZ1aW5mcDVMa3U2TnZHUXgzQSIsCiAgICAgICAgICJwcm90ZWN0ZWQiOiAiZXlKbWIzSnRZWFJNWlc1bmRHZ2lPalExTUN3aVptOXliV0YwVkdGcGJDSTZJbVpSSWl3aWRHbHRaU0k2SWpJd01Ua3RNVEl0TVRkVU1UVTZORFU2TkROYUluMCIKICAgICAgfQogICBdCn0="}
\ No newline at end of file
+{"key_id":"lhF-hcUDANCs7YmGaTNHQ4N1aTSUfhO-jPhDchNbbmkd","private_key":"g-uMHRNS4BAn9yRMTAyLS2HbuwzKkRl3-Z1yGMaPD2Mn","authorization":"ewogICAicGF5bG9hZCI6ICJleUpsZUhCcGNtRjBhVzl1SWpvaU1qQXlNQzB3TWkweU9GUXhOVG95TXpveU1sb2lMQ0owYjJ0bGJpSTZJbFZUVmsxVFprZE9lVGQyUTE4ME0zQkViazF2ZGxjNFlraDVURGRWUm1GTlMyNW5hM0F5ZUZWSmJtODlJaXdpYldGNFJXNW5hVzVsY3lJNk1UQXNJbk5qWVc1dWFXNW5SVzVoWW14bFpDSTZkSEoxWlN3aWJHbGpaVzV6WlZSNWNHVWlPaUpQYm14cGJtVWlMQ0owYVdWeUlqb2lWSEpwWVd3aUxDSnpkV0p6WTNKcGNIUnBiMjVmYVdRaU9pSnpkV0l0TjJGaVlUWm1ZMlF0TkRGa1lpMDBZVEEwTFdKaU5EVXRObUUzT1dZM09EWXlaVGhrSWl3aWNISnZaSFZqZEY5cFpDSTZJbVJ2WTJ0bGNpMWxaUzEwY21saGJDSXNJbkpoZEdWZmNHeGhibDlwWkNJNkltUnZZMnRsY2kxbFpTMTBjbWxoYkMxMGNtbGhiQzEwYVdWeUlpd2lkbVZ5YzJsdmJpSTZNU3dpWjNKaFkyVmZaR0Y1Y3lJNk1Td2liV1YwWVdSaGRHRWlPbnNpZFhObGNtNWhiV1VpT2lKdWEyRnljR2x1SWl3aVkyOXRjR0Z1ZVNJNklrMXBjbUZ1ZEdsekluMHNJbkJ5YVdOcGJtZGZZMjl0Y0c5dVpXNTBjeUk2VzNzaWJtRnRaU0k2SWs1dlpHVnpJaXdpZG1Gc2RXVWlPakV3ZlYxOSIsCiAgICJzaWduYXR1cmVzIjogWwogICAgICB7CiAgICAgICAgICJoZWFkZXIiOiB7CiAgICAgICAgICAgICJqd2siOiB7CiAgICAgICAgICAgICAgICJlIjogIkFRQUIiLAogICAgICAgICAgICAgICAia2V5SUQiOiAiSjdMRDo2N1ZSOkw1SFo6VTdCQToyTzRHOjRBTDM6T0YyTjpKSEdCOkVGVEg6NUNWUTpNRkVPOkFFSVQiLAogICAgICAgICAgICAgICAia2lkIjogIko3TEQ6NjdWUjpMNUhaOlU3QkE6Mk80Rzo0QUwzOk9GMk46SkhHQjpFRlRIOjVDVlE6TUZFTzpBRUlUIiwKICAgICAgICAgICAgICAgImt0eSI6ICJSU0EiLAogICAgICAgICAgICAgICAibiI6ICJ5ZEl5LWxVN283UGNlWS00LXMtQ1E1T0VnQ3lGOEN4SWNRSVd1Szg0cElpWmNpWTY3MzB5Q1lud0xTS1Rsdy1VNlVDX1FSZVdSaW9NTk5FNURzNVRZRVhiR0c2b2xtMnFkV2JCd2NDZy0yVVVIX09jQjlXdVA2Z1JQSHBNRk1zeER6V3d2YXk4SlV1SGdZVUxVcG0xSXYtbXE3bHA1blFfUnhyVDBLWlJBUVRZTEVNRWZHd20zaE1PX2dlTFBTLWhnS1B0SUhsa2c2X1djb3hUR29LUDc5ZF93YUhZeEdObDdXaFNuZWlCU3hicGJRQUtrMjFsZzc5OFhiN3ZaeUVBVERNclJSOU1lRTZBZGo1SEpwWTNDb3lSQVBDbWFLR1JDSzR1b1pTb0l1MGhGVmxLVVB5YmJ3MDAwR08td2EyS044VXdnSUltMGk1STF1VzlHa3E0empCeTV6aGdxdVVYYkc5YldQQU9ZcnE1UWE4MUR4R2NCbEp5SFlBcC1ERFBFOVRHZzR6WW1YakpueFpxSEVkdUdxZGV2WjhYTUkwdWtma0dJSTE0d1VPaU1JSUlyWGxFY0JmXzQ2SThnUVdEenh5Y1plX0pHWC1MQXVheVhyeXJVRmVoVk5VZFpVbDl3WE5hSkIta2FDcXo1UXdhUjkzc0d3LVFTZnREME52TGU3Q3lPSC1FNnZnNlN0X05lVHZndjhZbmhDaVhJbFo4SE9mSXdOZTd0RUZfVWN6NU9iUHlrbTN0eWxyTlVqdDBWeUFtdHRhY1ZJMmlHaWhjVVBybWs0bFZJWjdWRF9MU1ctaTd5b1N1cnRwc1BYY2UycEtESW8zMGxKR2hPXzNLVW1sMlNVWkNxekoxeUVtS3B5c0g1SERXOWNzSUZDQTNkZUFqZlpVdk43VSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImFsZyI6ICJSUzI1NiIKICAgICAgICAgfSwKICAgICAgICAgInNpZ25hdHVyZSI6ICJLc1NzNnNlRjMxOXloaHNXaU8za3VtNGY0N0FuRUxTNHhteDNJcVg1bHl0aDRsUTlwX2dhYk1LN1liOUR5NEt5cUl0UUVXbWFQMWRJUEJJVXZqa1lvdGRyMGEzUjMtcHYxTlJqZVJEZk9RV2lFOEdWRklMRFpFamhmMW55bGFfRHJOcmx1NjNpQmd0ZU1DU0pNcVZwOHdhUGVEYS1zenRCVTRLT0dGaGE2Yk8wSU4xbFFMMGlmLWVfOF9WMnM2c1BLNnQ0SlNPVUE3VHp1aVo2MC1JSW5ibi01VC1pVi1lMGpXUTZzeXA1T0gxZnR5VWVpMXlvQjlLeXFpaVVZZm9PN0ZRN29LWmQyNjhzOGVqb3JueFVqdGdTaWF2aGZ4cVIyS0xxT1FOeldPSFpMVF9abGtRMHpVUUc4U3c4Z3NsUTBEb2k0SVpBRzRtMkgyQ19Mck9pbHhBRXBEWU9GZE1TeWhlaTBPZ2YzRU9mYzhCel9oc1BkZGFrU1hwUHVQcTJYV3N3SlVXX28zYXhJTjliTnNtUHp2djRscWJ2VVlybkNGWTQzLVEzaTFwajZLQXIzb0FlUG52LUI1dUJGYzJ6dzM0Mkg1NUItVVBBbWZkWnRnTUI5RVplc0d3VXBaMTZDUWFRa2I4M0lDWkdMUG8ybXdERFpsRzM3TmR4V203Vm5nRVFZRGVVU2ZaQS1RM3JqQW9ua1pvbjRNZldLMzVET0h2amV4SUJ5RzljTkU0STVIaGNKQlBqYURFVDRrcE9GcGZtQ1ZlQndiZXRXY21BZXFRWF9DVlpXRFowLWRhQzE4UnBLZU1lVFg5MnVYWU1oeFBpbGR4TzFZaTF4eWdFQzNVTXZYdDZHY0tvcWZtVnRTTUZWME44NWs3b2ZDVnI0Uk9Jc0RsY09pYyIsCiAgICAgICAgICJwcm90ZWN0ZWQiOiAiZXlKbWIzSnRZWFJNWlc1bmRHZ2lPalF6Tnl3aVptOXliV0YwVkdGcGJDSTZJbVpSSWl3aWRHbHRaU0k2SWpJd01qQXRNREV0TWpoVU1URTZNVEU2TlRoYUluMCIKICAgICAgfQogICBdCn0="}
\ No newline at end of file