eoptasks: refactor into multiple functions
This commit is contained in:
parent
1f70d4830c
commit
a312e6e3c4
|
@ -50,42 +50,52 @@ class Server:
|
|||
return 'ssh %s "%s"' % (self.name, cmd)
|
||||
|
||||
|
||||
servers = []
|
||||
def get_servers():
|
||||
servers = []
|
||||
config = configparser.ConfigParser()
|
||||
config.read(os.path.join(os.path.expanduser('~/.config/eoptasks.ini')))
|
||||
servergroup = config.get('config', 'servergroups', fallback=None)
|
||||
if servergroup is None:
|
||||
print("You need to create ~/.config/eoptasks.ini with such a content:\n"
|
||||
"\n"
|
||||
" [config]\n"
|
||||
" servergroups = /home/user/src/puppet/data/servergroups.yaml\n")
|
||||
sys.exit(1)
|
||||
|
||||
config = configparser.ConfigParser()
|
||||
config.read(os.path.join(os.path.expanduser('~/.config/eoptasks.ini')))
|
||||
servergroup = config.get('config', 'servergroups', fallback=None)
|
||||
if servergroup is None:
|
||||
print("You need to create ~/.config/eoptasks.ini with such a content:\n"
|
||||
"\n"
|
||||
" [config]\n"
|
||||
" servergroups = /home/user/src/puppet/data/servergroups.yaml\n")
|
||||
sys.exit(1)
|
||||
servergroups = yaml.load(open(servergroup))['servergroups']
|
||||
for group in servergroups:
|
||||
for servername in servergroups[group]:
|
||||
servers.append(Server(servername, group))
|
||||
return servers
|
||||
|
||||
servergroups = yaml.load(open(servergroup))['servergroups']
|
||||
for group in servergroups:
|
||||
for servername in servergroups[group]:
|
||||
servers.append(Server(servername, group))
|
||||
def parse_args():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('-l', '--list-servers', action='store_true')
|
||||
parser.add_argument('-k', dest='keywords', type=str)
|
||||
parser.add_argument('cmd', type=str, nargs='?', default=None)
|
||||
args = parser.parse_args()
|
||||
return args
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('-l', '--list-servers', action='store_true')
|
||||
parser.add_argument('-k', dest='keywords', type=str)
|
||||
parser.add_argument('cmd', type=str, nargs='?', default=None)
|
||||
def filter_servers(servers, args):
|
||||
selected_servers = []
|
||||
if args.keywords:
|
||||
for keyword in args.keywords.split(','):
|
||||
keywords = set(keyword.split('/'))
|
||||
selected_servers.extend([
|
||||
x for x in servers
|
||||
if keywords.issubset(x.keywords) and not x in selected_servers])
|
||||
for keyword in args.keywords.split(','):
|
||||
if keyword.startswith('!') or keyword.startswith('-'):
|
||||
selected_servers = [x for x in selected_servers if keyword[1:] not in x.keywords]
|
||||
else:
|
||||
selected_servers = servers
|
||||
return selected_servers
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
selected_servers = []
|
||||
if args.keywords:
|
||||
for keyword in args.keywords.split(','):
|
||||
keywords = set(keyword.split('/'))
|
||||
selected_servers.extend([
|
||||
x for x in servers
|
||||
if keywords.issubset(x.keywords) and not x in selected_servers])
|
||||
for keyword in args.keywords.split(','):
|
||||
if keyword.startswith('!') or keyword.startswith('-'):
|
||||
selected_servers = [x for x in selected_servers if keyword[1:] not in x.keywords]
|
||||
else:
|
||||
selected_servers = servers
|
||||
args = parse_args()
|
||||
|
||||
servers = get_servers()
|
||||
selected_servers = filter_servers(servers, args)
|
||||
|
||||
if args.list_servers:
|
||||
for server in sorted(selected_servers, key=lambda x: x.name):
|
||||
|
@ -100,27 +110,12 @@ if not args.cmd:
|
|||
sys.stderr.write('Missing command\n')
|
||||
sys.exit(1)
|
||||
|
||||
cmd = {
|
||||
'apt.update': 'sudo apt update',
|
||||
'apt.upgrade': 'sudo apt update && sudo apt upgrade -y',
|
||||
'collectstatic': '''sudo -u authentic-multitenant authentic2-multitenant-manage collectstatic --noinput;
|
||||
sudo -u bijoe bijoe-manage collectstatic --noinput;
|
||||
sudo -u chrono chrono-manage collectstatic --noinput;
|
||||
sudo -u combo combo-manage collectstatic --noinput;
|
||||
sudo -u corbo corbo-manage collectstatic --noinput;
|
||||
sudo -u fargo fargo-manage collectstatic --noinput;
|
||||
sudo -u hobo hobo-manage collectstatic --noinput;
|
||||
sudo -u passerelle passerelle-manage collectstatic --noinput;
|
||||
sudo -u wcs wcs-manage collectstatic;
|
||||
/bin/true'''.replace('\n', ''),
|
||||
}.get(args.cmd, args.cmd)
|
||||
def init_tmux_session():
|
||||
tmux_session_name = 's%s' % random.randrange(1000)
|
||||
os.system('tmux new-session -s %s -n 🌑 -d /bin/bash -c "sleep 2h"' % tmux_session_name)
|
||||
return tmux_session_name
|
||||
|
||||
tmux_session_name = 's%s' % random.randrange(1000)
|
||||
os.system('tmux new-session -s %s -n 🌑 -d /bin/bash -c "sleep 2h"' % tmux_session_name)
|
||||
tmux = libtmux.Server()
|
||||
session = tmux.find_where({'session_name': tmux_session_name})
|
||||
status_window = session.attached_window
|
||||
status_window.attached_pane.send_keys('eoptasks\n ', enter=False)
|
||||
tmux_session_name = init_tmux_session()
|
||||
|
||||
pid = os.fork()
|
||||
if pid:
|
||||
|
@ -130,6 +125,27 @@ else:
|
|||
return re.match(r'(.*?)(\d*)$', server_name).group(1).replace(
|
||||
'.rbx.', '.loc.').replace('.gra.', '.loc.').replace('.sbg.', '.loc.')
|
||||
|
||||
tmux = libtmux.Server()
|
||||
session = tmux.find_where({'session_name': tmux_session_name})
|
||||
|
||||
cmd = {
|
||||
'apt.update': 'sudo apt update',
|
||||
'apt.upgrade': 'sudo apt update && sudo apt upgrade -y',
|
||||
'collectstatic': '''sudo -u authentic-multitenant authentic2-multitenant-manage collectstatic --noinput;
|
||||
sudo -u bijoe bijoe-manage collectstatic --noinput;
|
||||
sudo -u chrono chrono-manage collectstatic --noinput;
|
||||
sudo -u combo combo-manage collectstatic --noinput;
|
||||
sudo -u corbo corbo-manage collectstatic --noinput;
|
||||
sudo -u fargo fargo-manage collectstatic --noinput;
|
||||
sudo -u hobo hobo-manage collectstatic --noinput;
|
||||
sudo -u passerelle passerelle-manage collectstatic --noinput;
|
||||
sudo -u wcs wcs-manage collectstatic;
|
||||
/bin/true'''.replace('\n', ''),
|
||||
}.get(args.cmd, args.cmd)
|
||||
|
||||
status_window = session.attached_window
|
||||
status_window.attached_pane.send_keys('eoptasks\n ', enter=False)
|
||||
|
||||
total_number = len(selected_servers)
|
||||
random.shuffle(selected_servers)
|
||||
while selected_servers:
|
||||
|
@ -158,4 +174,10 @@ else:
|
|||
status_window.rename_window('🌒')
|
||||
while len(session.list_windows()) > 1:
|
||||
time.sleep(0.1)
|
||||
status_window.kill_window()
|
||||
try:
|
||||
status_window.kill_window()
|
||||
except libtmux.exc.LibTmuxException:
|
||||
# killing the last window will end the tmux session, and it's not
|
||||
# handled correctly by kill_window as it ends by updating the list
|
||||
# of windows (and hitting the dead tmux).
|
||||
pass
|
||||
|
|
Loading…
Reference in New Issue