1
0
mirror of https://github.com/altlinux/gpupdate.git synced 2025-03-16 18:50:26 +03:00
gpupdate/gpoa/scripts_runner

125 lines
4.3 KiB
Plaintext
Raw Permalink Normal View History

#!/usr/bin/python3
#
# GPOA - GPO Applier for Linux
#
2022-06-03 16:23:13 +04:00
# Copyright (C) 2019-2022 BaseALT Ltd.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import subprocess
import argparse
import os
from pathlib import Path
class Scripts_runner:
'''
A class for an object that iterates over directories with scripts
in the desired sequence and launches them
'''
def __init__(self, work_mode = None, user_name = None, action = None):
self.dir_scripts_machine = '/var/cache/gpupdate_scripts_cache/machine/'
self.dir_scripts_users = '/var/cache/gpupdate_scripts_cache/users/'
self.user_name = user_name
self.list_with_all_commands = list()
2022-06-03 16:23:13 +04:00
stack_dir = None
if work_mode and work_mode.upper() == 'MACHINE':
2022-06-03 16:23:13 +04:00
stack_dir = self.machine_runner_fill()
elif work_mode and work_mode.upper() == 'USER':
2022-06-03 16:23:13 +04:00
stack_dir = self.user_runner_fill()
else:
print('Invalid arguments entered')
return
if action:
self.action = action.upper()
else:
print('Action needed')
return
2022-06-03 16:23:13 +04:00
self.find_action(stack_dir)
for it_cmd in self.list_with_all_commands:
print(self.run_cmd_subprocess(it_cmd))
def user_runner_fill(self):
2022-06-03 16:23:13 +04:00
return self.get_stack_dir(self.dir_scripts_users + self.user_name)
def machine_runner_fill(self):
2022-06-03 16:23:13 +04:00
return self.get_stack_dir(self.dir_scripts_machine)
2022-06-03 16:23:13 +04:00
def get_stack_dir(self, path_dir):
stack_dir = list()
try:
dir_script = Path(path_dir)
for it_dir in dir_script.iterdir():
2022-06-03 16:23:13 +04:00
stack_dir.append(str(it_dir))
return stack_dir
except Exception as exc:
print(exc)
return None
2022-06-03 16:23:13 +04:00
def find_action(self, stack_dir):
if not stack_dir:
return
list_tmp = list()
while stack_dir:
path_turn = stack_dir.pop()
basename = os.path.basename(path_turn)
if basename == self.action:
2022-06-03 16:23:13 +04:00
list_tmp = self.get_stack_dir(path_turn)
if list_tmp:
self.fill_list_cmd(list_tmp)
2022-06-03 16:23:13 +04:00
def fill_list_cmd(self, list_tmp):
2022-06-03 16:23:13 +04:00
list_tmp = sorted(list_tmp)
for file_in_task_dir in list_tmp:
suffix = os.path.basename(file_in_task_dir)[-4:]
if suffix == '.arg':
try:
arg = self.read_args(file_in_task_dir)
2022-06-03 16:23:13 +04:00
for it_arg in arg.split():
self.list_with_all_commands[-1].append(it_arg)
except Exception as exc:
2022-06-03 16:23:13 +04:00
print('Argument read for {}: {}'.format(self.list_with_all_commands.pop(), exc))
else:
cmd = list()
cmd.append(file_in_task_dir)
2022-06-03 16:23:13 +04:00
self.list_with_all_commands.append(cmd)
def read_args(self, path):
with open(path + '/arg') as f:
args = f.readlines()
2022-06-03 16:23:13 +04:00
return args[0]
def run_cmd_subprocess(self, cmd):
try:
subprocess.Popen(cmd)
return 'Script run: {}'.format(cmd)
except Exception as exc:
return exc
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Scripts runner')
parser.add_argument('--mode', type = str, help = 'MACHINE or USER', nargs = '?', default = None)
parser.add_argument('--user', type = str, help = 'User name ', nargs = '?', default = None)
parser.add_argument('--action', type = str, help = 'MACHINE : [STARTUP or SHUTDOWN], USER : [LOGON or LOGOFF]', nargs = '?', default = None)
args = parser.parse_args()
try:
Scripts_runner(args.mode, args.user, args.action)
except Exception as exc:
2022-06-03 16:23:13 +04:00
print(exc)