You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datalab.apache.org by lf...@apache.org on 2021/08/20 12:09:03 UTC
[incubator-datalab] 01/01: [DATALAB-1527]: remade manage_pkg to
catch installation errors
This is an automated email from the ASF dual-hosted git repository.
lfrolov pushed a commit to branch DATALAB-1837
in repository https://gitbox.apache.org/repos/asf/incubator-datalab.git
commit 04c04432600e3e599e26715a962df485e1a4d8d3
Author: leonidfrolov <fr...@gmail.com>
AuthorDate: Fri Aug 20 15:07:43 2021 +0300
[DATALAB-1527]: remade manage_pkg to catch installation errors
---
.../src/general/lib/os/debian/common_lib.py | 90 +++++++++++++++-------
1 file changed, 62 insertions(+), 28 deletions(-)
diff --git a/infrastructure-provisioning/src/general/lib/os/debian/common_lib.py b/infrastructure-provisioning/src/general/lib/os/debian/common_lib.py
index 28c3bb5..7067218 100644
--- a/infrastructure-provisioning/src/general/lib/os/debian/common_lib.py
+++ b/infrastructure-provisioning/src/general/lib/os/debian/common_lib.py
@@ -29,7 +29,7 @@ import os
import time
import subprocess
import datalab.fab
-def handle_dpkg_lock(error, parser, rerun=False):
+def handle_dpkg_lock(error, rerun=False):
try:
count = 0
while 'no_lock' not in error and count < 10:
@@ -44,9 +44,15 @@ def handle_dpkg_lock(error, parser, rerun=False):
datalab.fab.conn.sudo('rm -f /var/lib/dpkg/lock')
if rerun:
- datalab.fab.conn.sudo('dpkg --configure -a 2>&1 | tee /tmp/tee.tmp; if ! grep -w -E "({0})" /tmp/tee.tmp > '
- '/tmp/dpkg.log; then echo "no_lock" > /tmp/dpkg.log;fi'.format(parser))
+ datalab.fab.conn.sudo('dpkg --configure -a 2>&1 | tee /tmp/tee.tmp; '
+ 'if ! grep -w -E "({0})" /tmp/tee.tmp; '
+ 'then echo "no_lock" > /tmp/dpkg.log;fi; '
+ 'if ! grep -w -E "({1})" /tmp/tee.tmp; '
+ 'then echo "no_error" >> /tmp/dpkg.log;fi'.format(lock_parser,
+ error_parser))
error = datalab.fab.conn.sudo('cat /tmp/dpkg.log').stdout
+ if 'no_error' not in error:
+ raise Exception
else:
error = 'no_lock'
@@ -54,7 +60,7 @@ def handle_dpkg_lock(error, parser, rerun=False):
except:
sys.exit(1)
-def handle_apt_lock(error, parser, rerun=False):
+def handle_apt_lock(error, rerun=False):
try:
count = 0
while 'no_lock' not in error and count < 10:
@@ -64,9 +70,15 @@ def handle_apt_lock(error, parser, rerun=False):
datalab.fab.conn.sudo('rm -f /var/lib/apt/lists/lock')
if rerun:
- datalab.fab.conn.sudo('apt update 2>&1 | tee /tmp/tee.tmp; if ! grep -w -E "({0})" /tmp/tee.tmp > '
- '/tmp/apt.log; then echo "no_lock" > /tmp/apt.log;fi'.format(parser))
+ datalab.fab.conn.sudo('apt update 2>&1 | tee /tmp/tee.tmp; '
+ 'if ! grep -w -E "({0})" /tmp/tee.tmp; '
+ 'then echo "no_lock" > /tmp/apt.log;fi; '
+ 'if ! grep -w -E "({1})" /tmp/tee.tmp; '
+ 'then echo "no_error" >> /tmp/apt.log;fi'.format(lock_parser,
+ error_parser))
error = datalab.fab.conn.sudo('cat /tmp/apt.log').stdout
+ if 'no_error' not in error:
+ raise Exception
else:
error = 'no_lock'
@@ -74,7 +86,7 @@ def handle_apt_lock(error, parser, rerun=False):
except:
sys.exit(1)
-def handle_apt_get_lock(error, command, requisites, parser, rerun=False):
+def handle_apt_get_lock(error, rerun=False):
try:
count = 0
while 'no_lock' not in error and count < 10:
@@ -86,9 +98,17 @@ def handle_apt_get_lock(error, command, requisites, parser, rerun=False):
datalab.fab.conn.sudo('rm -f /var/lib/dpkg/lock')
if rerun:
- datalab.fab.conn.sudo('apt-get {0} {1} 2>&1 | tee /tmp/tee.tmp; if ! grep -w -E "({2})" /tmp/tee.tmp > '
- '/tmp/apt.log; then echo "no_lock" > /tmp/apt.log;fi'.format(command, requisites, parser))
- error = datalab.fab.conn.sudo('cat /tmp/apt.log').stdout
+ datalab.fab.conn.sudo('apt-get {0} {1} 2>&1 | tee /tmp/tee.tmp; '
+ 'if ! grep -w -E "({2})" /tmp/tee.tmp; '
+ 'then echo "no_lock" > /tmp/apt_get.log;fi; '
+ 'if ! grep -w -E "({3})" /tmp/tee.tmp; '
+ 'then echo "no_error" >> /tmp/apt_get.log;fi'.format(command,
+ requisites,
+ lock_parser,
+ error_parser))
+ error = datalab.fab.conn.sudo('cat /tmp/apt_get.log').stdout
+ if 'no_error' not in error:
+ raise Exception
else:
error = 'no_lock'
@@ -112,30 +132,44 @@ def manage_pkg(command, environment, requisites):
time.sleep(10)
else:
try:
- error_parser = "frontend is locked|locked|not get lock|unavailable"
-
- datalab.fab.conn.sudo('dpkg --configure -a 2>&1 | tee /tmp/tee.tmp; if ! grep -w -E "({0})" /tmp/tee.tmp > '
- '/tmp/dpkg.log; then echo "no_lock" > /tmp/dpkg.log;fi'.format(error_parser))
+ lock_parser = "frontend is locked|locked|not get lock|unavailable"
+ error_parser = "Could not|No matching|Error:|E:|failed|Requires:"
+
+ datalab.fab.conn.sudo('dpkg --configure -a 2>&1 | tee /tmp/tee.tmp; '
+ 'if ! grep -w -E "({0})" /tmp/tee.tmp; '
+ 'then echo "no_lock" > /tmp/dpkg.log;fi; '
+ 'if ! grep -w -E "({1})" /tmp/tee.tmp; '
+ 'then echo "no_error" >> /tmp/dpkg.log;fi'.format(lock_parser,
+ error_parser))
err = datalab.fab.conn.sudo('cat /tmp/dpkg.log').stdout.replace('\n','')
if 'no_lock' not in err:
- handle_dpkg_lock(err, error_parser, rerun=True)
-
-
- datalab.fab.conn.sudo('apt update 2>&1 | tee /tmp/tee.tmp; if ! grep -w -E "({0})" /tmp/tee.tmp > '
- '/tmp/apt.log; then echo "no_lock" > /tmp/apt.log;fi'.format(error_parser))
+ handle_dpkg_lock(err, lock_parser, rerun=True)
+
+ datalab.fab.conn.sudo('apt update 2>&1 | tee /tmp/tee.tmp; '
+ 'if ! grep -w -E "({0})" /tmp/tee.tmp; '
+ 'then echo "no_lock" > /tmp/apt.log;fi; '
+ 'if ! grep -w -E "({1})" /tmp/tee.tmp; '
+ 'then echo "no_error" >> /tmp/apt.log;fi'.format(lock_parser,
+ error_parser))
err = datalab.fab.conn.sudo('cat /tmp/apt.log').stdout
if 'no_lock' not in err:
- handle_dpkg_lock(err, error_parser)
- handle_apt_lock(err, error_parser, rerun=True)
-
- datalab.fab.conn.sudo('apt-get {0} {1} 2>&1 | tee /tmp/tee.tmp; if ! grep -w -E "({2})" /tmp/tee.tmp > '
- '/tmp/apt-get.log; then echo "no_lock" > /tmp/apt-get.log;fi'.format(command, requisites, error_parser))
- err = datalab.fab.conn.sudo('cat /tmp/apt-get.log').stdout
+ handle_dpkg_lock(err, lock_parser)
+ handle_apt_lock(err, lock_parser, rerun=True)
+
+ datalab.fab.conn.sudo('apt-get {0} {1} 2>&1 | tee /tmp/tee.tmp; '
+ 'if ! grep -w -E "({2})" /tmp/tee.tmp; '
+ 'then echo "no_lock" > /tmp/apt_get.log;fi; '
+ 'if ! grep -w -E "({3})" /tmp/tee.tmp; '
+ 'then echo "no_error" >> /tmp/apt_get.log;fi'.format(command,
+ requisites,
+ lock_parser,
+ error_parser))
+ err = datalab.fab.conn.sudo('cat /tmp/apt_get.log').stdout
if 'no_lock' not in err:
- handle_dpkg_lock(err, error_parser)
- handle_apt_lock(err, error_parser)
- handle_apt_get_lock(err, command, requisites, error_parser, rerun=True)
+ handle_dpkg_lock(err)
+ handle_apt_lock(err)
+ handle_apt_get_lock(err, rerun=True)
allow = True
except Exception as err:
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datalab.apache.org
For additional commands, e-mail: commits-help@datalab.apache.org