diff --git a/eoptasks/eoptasks.py b/eoptasks/eoptasks.py index 34259cd..3507583 100755 --- a/eoptasks/eoptasks.py +++ b/eoptasks/eoptasks.py @@ -30,6 +30,10 @@ # eoptasks -k saas/test/passerelle,ext/test --list-servers # List servers that have saas AND test AND passerelle keywords, OR the # ext AND test keywords. +# +# eoptasks -k saas/prod -x ^node,^database.node,.*docbow sudo apt install publik-base-theme +# Install/upgrade publik-base-theme on all production server of the SaaS excepted +# the hypervisor, database, and docbow nodes. import argparse import configparser @@ -96,6 +100,7 @@ def parse_args(): parser.add_argument('--command-server-name', dest='command_server_name', type=str) parser.add_argument('--noinput', dest='noinput', action='store_true') parser.add_argument('-k', dest='keywords', type=str) + parser.add_argument('-x', dest='exclude', type=str) parser.add_argument('cmd', type=str, nargs='?', default=None) parser.add_argument('args', nargs=argparse.REMAINDER) args = parser.parse_args() @@ -114,8 +119,13 @@ def filter_servers(servers, args): selected_servers = [x for x in selected_servers if keyword[1:] not in x.keywords] else: selected_servers = servers + if args.exclude: + for exclude in args.exclude.split(','): + regex = re.compile(exclude) + selected_servers = [x for x in selected_servers if not regex.match(x.name)] return selected_servers + def status_window(args): session_name = args.session_name curses.setupterm()