Browse code

Don't die when yum fails.

Not all yum failures has to be considered
catastrofic failures also because install_package
function should implement the same behavior in Fedora,
CentOS and Ubuntu. Let return the error to be solved at higher
level.

Change-Id: I93e9f312a94aeb086925e069a83ec1d3d3419423
Closes-Bug: #1522590

Federico Ressi authored on 2016/01/13 21:17:32
Showing 1 changed files
... ...
@@ -1320,27 +1320,35 @@ function uninstall_package {
1320 1320
 # Uses globals ``OFFLINE``, ``*_proxy``, ``YUM``
1321 1321
 # yum_install package [package ...]
1322 1322
 function yum_install {
1323
+    local result parse_yum_result
1324
+
1323 1325
     [[ "$OFFLINE" = "True" ]] && return
1324
-    local sudo="sudo"
1325
-    [[ "$(id -u)" = "0" ]] && sudo="env"
1326
+
1327
+    time_start "yum_install"
1328
+
1329
+    # Warning: this would not work if yum output message
1330
+    # have been translated to another language
1331
+    parse_yum_result='\
1332
+        BEGIN { result=0 }\
1333
+        /^YUM_FAILED/ { exit $2 }\
1334
+        /^No package/ { result=1 }\
1335
+        //{ print }\
1336
+        END { exit result }'
1326 1337
 
1327 1338
     # The manual check for missing packages is because yum -y assumes
1328
-    # missing packages are OK.  See
1329
-    # https://bugzilla.redhat.com/show_bug.cgi?id=965567
1330
-    $sudo http_proxy="${http_proxy:-}" https_proxy="${https_proxy:-}" \
1331
-        no_proxy="${no_proxy:-}" \
1332
-        ${YUM:-yum} install -y "$@" 2>&1 | \
1333
-        awk '
1334
-            BEGIN { fail=0 }
1335
-            /No package/ { fail=1 }
1336
-            { print }
1337
-            END { exit fail }' || \
1338
-                die $LINENO "Missing packages detected"
1339
+    # missing packages are OK.
1340
+    # See https://bugzilla.redhat.com/show_bug.cgi?id=965567
1341
+    (sudo_with_proxies "${YUM:-yum}" install -y "$@" 2>&1 || echo YUM_FAILED $?) \
1342
+        | awk "$parse_yum_result"
1343
+    result=$?
1339 1344
 
1340
-    # also ensure we catch a yum failure
1341
-    if [[ ${PIPESTATUS[0]} != 0 ]]; then
1342
-        die $LINENO "${YUM:-yum} install failure"
1345
+    if [ "$result" != 0 ]; then
1346
+        echo $LINENO "${YUM:-yum}" install failure: $result
1343 1347
     fi
1348
+
1349
+    time_stop "yum_install"
1350
+
1351
+    return "$result"
1344 1352
 }
1345 1353
 
1346 1354
 # zypper wrapper to set arguments correctly
... ...
@@ -2279,6 +2287,18 @@ function test_with_retry {
2279 2279
     time_stop "test_with_retry"
2280 2280
 }
2281 2281
 
2282
+# Like sudo but forwarding http_proxy https_proxy no_proxy environment vars.
2283
+# If it is run as superuser then sudo is replaced by env.
2284
+#
2285
+function sudo_with_proxies {
2286
+    local sudo
2287
+
2288
+    [[ "$(id -u)" = "0" ]] && sudo="env" || sudo="sudo"
2289
+
2290
+    $sudo http_proxy="${http_proxy:-}" https_proxy="${https_proxy:-}"\
2291
+        no_proxy="${no_proxy:-}" "$@"
2292
+}
2293
+
2282 2294
 # Timing infrastructure - figure out where large blocks of time are
2283 2295
 # used in DevStack
2284 2296
 #