From 8b08aab4e75b0900adc0d58e83e5d1a3e1c80063 Mon Sep 17 00:00:00 2001 From: Gilles Grandou Date: Sat, 1 May 2021 16:28:24 +0200 Subject: [PATCH] symlink enhancements * runon -l now install symlink * install -u now removes all found symlinks to runon --- README.md | 3 +-- install | 7 +++++++ runon | 14 ++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 79150e4..8d133e8 100644 --- a/README.md +++ b/README.md @@ -78,8 +78,7 @@ simply pass `-u` to install command you have used, eg.: you can create soft links to `runos` to simplify calls: - cd /usr/local/bin - ln -s runon centos7 + runos centos7 -l now calling `centos7 ...` is equivalent to call `runos centos7 ...`: diff --git a/install b/install index b41c58d..7b7b6b9 100755 --- a/install +++ b/install @@ -89,6 +89,13 @@ elif [ "$op" = "installdev" ]; then do_exec ln -s -f $(realpath runon) $bin_dir/ do_exec ln -s -f $(realpath runon.conf) $config_dir/ elif [ "$op" = "uninstall" ]; then + # find all symlinks targetting to runon, and remove them + find $bin_dir -type l | while read l; do + if [ "$(readlink $l)" = "runon" ]; then + do_exec rm $l + fi + done + do_exec rm -f $bin_dir/runon do_exec rm -f $config_dir/runon.conf test -d $bin_dir && do_exec rmdir --parents --ignore-fail-on-non-empty $bin_dir 2> /dev/null diff --git a/runon b/runon index bf77939..6111bc6 100755 --- a/runon +++ b/runon @@ -56,6 +56,13 @@ def load_config(user_confname, osname): return conf +def make_osname_link(binpath, osname): + link = os.path.join(os.path.dirname(binpath), osname) + try: + os.symlink('runon', link) + except FileExistsError: + pass + def make_image_name(osname): user = getpass.getuser() name = 'runon-{}-{}'.format(osname, user) @@ -175,6 +182,8 @@ def main(): help='specify config file') parser.add_argument('-u', '--update', action='store_true', help='force image update') + parser.add_argument('-l', '--link', action='store_true', + help='create a symlink to call "osname" as a shortcut to "runon osname"') parser.add_argument('command', nargs='*', default=None, help = 'command to execute') @@ -188,10 +197,15 @@ def main(): for o in sorted(osnames, key=natural_sortkey): print(' {}'.format(o)) print() + if args.link: + for o in osnames: + make_osname_link(sys.argv[0], args.osname) return 0 client = docker.from_env() conf = load_config(args.config, args.osname) + if args.link: + make_osname_link(sys.argv[0], args.osname) image = build_image(client, conf, args.update, args.verbose) container = create_container(client, image, conf, args.command, args.verbose) ret = run_container(client, container)