Merge "Add retry to RHEL registration"
[apex-tripleo-heat-templates.git] / extraconfig / pre_deploy / rhel-registration / scripts / rhel-registration
index cbbd6a1..2650a96 100644 (file)
@@ -11,10 +11,12 @@ if [ -e $OK ] ; then
     exit 0
 fi
 
+retryCount=0
 opts=
 attach_opts=
+sat5_opts=
 repos="repos --enable rhel-7-server-rpms"
-satellite_repo="rhel-7-server-rh-common-rpms"
+satellite_repo=${REG_SAT_REPO}
 if [ -n "${REG_AUTO_ATTACH:-}" ]; then
     opts="$opts --auto-attach"
 
@@ -49,6 +51,7 @@ fi
 
 if [ -n "${REG_FORCE:-}" ]; then
     opts="$opts --force"
+    sat5_opts="$sat5_opts --force"
 fi
 
 if [ -n "${REG_SERVER_URL:-}" ]; then
@@ -57,6 +60,7 @@ fi
 
 if [ -n "${REG_ACTIVATION_KEY:-}" ]; then
     opts="$opts --activationkey=$REG_ACTIVATION_KEY"
+    sat5_opts="$sat5_opts --activationkey=$REG_ACTIVATION_KEY"
 
     if [ -z "${REG_ORG:-}" ]; then
         echo "WARNING: REG_ACTIVATION_KEY set without REG_ORG."
@@ -75,10 +79,12 @@ fi
 
 if [ -n "${REG_MACHINE_NAME:-}" ]; then
     opts="$opts --name $REG_MACHINE_NAME"
+    sat5_opts="$sat5_opts --profilename=$REG_MACHINE_NAME"
 fi
 
 if [ -n "${REG_ORG:-}" ]; then
     opts="$opts --org=$REG_ORG"
+    sat5_opts="$sat5_opts --systemorgid=$REG_ORG"
 fi
 
 if [ -n "${REG_REPOS:-}" ]; then
@@ -91,22 +97,62 @@ if [ -n "${REG_TYPE:-}" ]; then
     opts="$opts --type=$REG_TYPE"
 fi
 
+function retry() {
+  if [[ $retryCount < 3 ]]; then
+    $@
+    if ! [[ $? == 0 ]]; then
+      retryCount=$(echo $retryCount + 1 | bc)
+      echo "WARN: Failed to connect when running '$@', retrying..."
+      retry $@
+    else
+      retryCount=0
+    fi
+  else
+    echo "ERROR: Failed to connect after 3 attempts when running '$@'"
+    exit 1
+  fi
+}
+
+function detect_satellite_version {
+    ping_api=$REG_SAT_URL/katello/api/ping
+    if curl --retry 3 --retry-delay 10 --max-time 30 -L -k -s -D - -o /dev/null $ping_api | grep "200 OK"; then
+        echo Satellite 6 detected at $REG_SAT_URL
+        satellite_version=6
+    elif curl --retry 3 --retry-delay 10 --max-time 30 -L -k -s -D - -o /dev/null $REG_SAT_URL/rhn/Login.do | grep "200 OK"; then
+        echo Satellite 5 detected at $REG_SAT_URL
+        satellite_version=5
+    else
+        echo No Satellite detected at $REG_SAT_URL
+        exit 1
+    fi
+}
+
 case "${REG_METHOD:-}" in
     portal)
-        subscription-manager register $opts
+        retry subscription-manager register $opts
         if [ -z "${REG_AUTO_ATTACH:-}" -a -z "${REG_ACTIVATION_KEY:-}" ]; then
-            subscription-manager attach $attach_opts
+            retry subscription-manager attach $attach_opts
         fi
-        subscription-manager $repos
+        retry subscription-manager repos --disable '*'
+        retry subscription-manager $repos
         ;;
     satellite)
-        repos="$repos --enable ${satellite_repo}"
-        rpm -Uvh "$REG_SAT_URL/pub/katello-ca-consumer-latest.noarch.rpm" || true
-        subscription-manager register $opts
-        subscription-manager $repos
-        yum install -y katello-agent || true # needed for errata reporting to satellite6
-        katello-package-upload
-        subscription-manager repos --disable ${satellite_repo}
+        detect_satellite_version
+        if [ "$satellite_version" = "6" ]; then
+            repos="$repos --enable ${satellite_repo}"
+            curl --retry 3 --retry-delay 10 --max-time 30 -L -k -O "$REG_SAT_URL/pub/katello-ca-consumer-latest.noarch.rpm"
+            rpm -Uvh katello-ca-consumer-latest.noarch.rpm || true
+            retry subscription-manager register $opts
+            retry subscription-manager $repos
+            retry yum install -y katello-agent || true # needed for errata reporting to satellite6
+            katello-package-upload
+            retry subscription-manager repos --disable ${satellite_repo}
+        else
+            pushd /usr/share/rhn/
+            curl --retry 3 --retry-delay 10 --max-time 30 -k -O $REG_SAT_URL/pub/RHN-ORG-TRUSTED-SSL-CERT
+            popd
+            retry rhnreg_ks --serverUrl=$REG_SAT_URL/XMLRPC $sat5_opts
+        fi
         ;;
     disable)
         echo "Disabling RHEL registration"