File: //sbin/cl-post-jwt-update
#!/opt/cloudlinux/venv/bin/python3 -bb
import argparse
import subprocess, os
HOOKS_DIR = '/opt/cloudlinux/rhn_hooks/post.d'
def _update_edition_user_file():
"""
Save information about current edition in specific
location available for users
"""
if not os.path.exists('/usr/bin/cldetect') or not os.path.exists('/opt/cloudlinux/'):
return
p = subprocess.Popen(['/usr/bin/cldetect', '--detect-edition'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
if p.returncode == 0:
with open('/opt/cloudlinux/cl_edition.tmp', 'wb') as f:
f.write(stdout)
os.rename('/opt/cloudlinux/cl_edition.tmp', '/opt/cloudlinux/cl_edition')
os.chmod('/opt/cloudlinux/cl_edition', 0o644)
def _trigger_universal_hooks():
"""
Discovers executable files in directory and triggers them all together
Executable files are brought by different rpm packages, depending on which one
requires the action
"""
if not os.path.exists(HOOKS_DIR):
return
hooks = [os.path.join(HOOKS_DIR, f) for f in os.listdir(HOOKS_DIR)
if os.path.isfile(os.path.join(HOOKS_DIR, f))]
for hook in hooks:
process = subprocess.Popen([hook],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
def _run_edition_change_check():
# run interactively
subprocess.run(['cloudlinux-edition-watcher', 'check'])
def main(args):
"""
You add your other actions here, but don't forget to handle errors.
"""
_update_edition_user_file()
if args.allow_transition:
_run_edition_change_check()
_trigger_universal_hooks()
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--allow-transition', action='store_true', default=False)
main(args=parser.parse_args())