From: Michal Nowikowski Date: Tue, 5 Jan 2021 09:12:00 +0000 (+0100) Subject: [#1512] hammer: improved handling error conditions X-Git-Tag: Kea-1.9.4~124 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=569dd2dfbf5c42182b9c5a509ccbb809d5ecce58;p=thirdparty%2Fkea.git [#1512] hammer: improved handling error conditions --- diff --git a/hammer.py b/hammer.py index 2f79bf020e..6ca0c3ee46 100755 --- a/hammer.py +++ b/hammer.py @@ -232,7 +232,7 @@ class ExecutionError(Exception): def execute(cmd, timeout=60, cwd=None, env=None, raise_error=True, dry_run=False, log_file_path=None, quiet=False, check_times=False, capture=False, interactive=False, attempts=1, - sleep_time_after_attempt=None): + sleep_time_after_attempt=None, super_quiet=False): """Execute a command in shell. :param str cmd: a command to be executed @@ -252,7 +252,10 @@ def execute(cmd, timeout=60, cwd=None, env=None, raise_error=True, dry_run=False :param int attempts: number of attempts to run the command if it fails :param int sleep_time_after_attempt: number of seconds to sleep before taking next attempt """ - log.info('>>>>> Executing %s in %s', cmd, cwd if cwd else os.getcwd()) + if super_quiet: + quiet = True + if not super_quiet: + log.info('>>>>> Executing %s in %s', cmd, cwd if cwd else os.getcwd()) if not check_times: timeout = None if dry_run: @@ -2203,6 +2206,10 @@ def list_created_systems(): def destroy_system(path): """Destroy Vagrant system under given path.""" + vf = os.path.join(path, 'Vagrantfile') + if not os.path.exists(vf): + print('Wrong directory. It does not have Vagrantfile.') + sys.exit(1) execute('vagrant destroy', cwd=path, interactive=True) @@ -2320,6 +2327,7 @@ def prepare_system_cmd(args): ccache_dir = _prepare_ccache_dir(args.ccache_dir, args.system, args.revision) + _check_deps_presence() prepare_system_in_vagrant(args.provider, args.system, args.revision, features, args.dry_run, args.check_times, args.clean_start, ccache_dir) @@ -2341,6 +2349,8 @@ def build_cmd(args): print(msg) sys.exit(1) + _check_deps_presence() + if args.provider == 'all': providers = ['lxc', 'virtualbox'] else: @@ -2390,6 +2400,13 @@ def build_cmd(args): sys.exit(1) +def _check_deps_presence(): + ret = execute('vagrant -v', super_quiet=True) + if ret != 0: + print('Missing vagrant. Please install it from https://www.vagrantup.com/') + sys.exit(1) + + def main(): """Main function - parse args and invoke proper command.""" args, parser = parse_args() @@ -2408,9 +2425,11 @@ def main(): list_supported_systems() elif args.command == 'created-systems': + _check_deps_presence() list_created_systems() elif args.command == "package-box": + _check_deps_presence() _check_system_revision(args.system, args.revision) features = set(['docs', 'perfdhcp', 'shell', 'mysql', 'pgsql', 'radius', 'native-pkg']) @@ -2425,12 +2444,20 @@ def main(): elif args.command == "ssh": _check_system_revision(args.system, args.revision) + if not args.system or not args.revision or args.system == 'all' or args.revision == 'all': + print('System (-s) and revision (-r) parameters are required') + sys.exit(1) + _check_deps_presence() ssh(args.provider, args.system, args.revision) elif args.command == "ensure-hammer-deps": ensure_hammer_deps() elif args.command == "destroy": + if not args.directory: + print('Missing directory (-d) parameter') + sys.exit(1) + _check_deps_presence() destroy_system(args.directory) else: