Repository URL to install this package:
Version:
5.0.6.dev10 ▾
|
import os
import pwd
import sys
import configparser
import subprocess
import fnmatch
from pathlib import Path
from distutils.dir_util import copy_tree
from distutils.sysconfig import (
EXEC_PREFIX,
get_python_lib,
)
import jinja2
from workloadmgr.openstack.common import setup as common_setup
requires = common_setup.parse_requirements()
depend_links = common_setup.parse_dependency_links()
project = 'workloadmgr'
services_dir = '/etc/triliovault-wlm'
config_dir = '/etc/triliovault-wlm'
log_dir = '/var/log/triliovault'
signin_dir = '/var/cache/workloadmgr'
mount_dirs = ['/var/triliovault-mounts', '/var/triliovault']
template_files = {
"wlm-api.service": "templates/wlm-api.service.j2",
"wlm-cron.service": "templates/wlm-cron.service.j2",
"wlm-scheduler.service": "templates/wlm-scheduler.service.j2",
"wlm-workloads.service": "templates/wlm-workloads.service.j2"
}
log_files = ['workloadmgr-api.log',
'workloadmgr-cron.log',
'workloadmgr-scheduler.log',
'workloadmgr-workloads.log'
]
# Gets the user info from the linux passwd db such as u_id, g_id, home dir etc.
# and return the u_id, g_id
def get_user_info(user_name):
try:
user_info = pwd.getpwnam(user_name)
u_id = user_info.pw_uid
g_id = user_info.pw_gid
except KeyError:
u_id = 162 # nova u_id
g_id = 162 # nova g_id
return u_id, g_id
# Recursive search for a file root path
def find(pattern, path):
for root, dirs, files in os.walk(path):
for name in files:
if fnmatch.fnmatch(name, pattern):
return root
# Recursive chown
def _chown(s_dir, u_id, g_id):
os.chown(s_dir, u_id, g_id)
for root, dirs, files in os.walk(s_dir):
for dir in dirs:
os.chown(os.path.join(root, dir), u_id, g_id)
for file in files:
os.chown(os.path.join(root, file), u_id, g_id)
# Set config parameters
def set_config_param(bin_path):
config = configparser.ConfigParser()
config_file = './etc/triliovault-wlm/triliovault-wlm.conf'
config.read(config_file)
config['DEFAULT']['wlm_rootwrap'] = '%s/workloadmgr-rootwrap' % (bin_path)
with open(config_file, 'w') as configfile:
config.write(configfile)
# Build and set guestfs appliance
def build_guestfs(path):
# Build guestfs appliance at desired path
bin_file = 'libguestfs-make-fixed-appliance'
bin_path = find(bin_file, '/usr')
build_cmd = 'sudo %s %s' % (bin_path + os.path.sep + bin_file, path)
subprocess.run(build_cmd.split())
# include the sys dist-package location to the current env
lib_path = find('libguestfsmod*.so', '/usr')
pth_file = get_python_lib() + os.path.sep + 'wlmfs.pth'
with open(pth_file, 'w') as _file:
_file.write("%s\n" % (lib_path))
# Post installation script to minimize manual intervention
def _post_install():
print('POST INSTALLATION')
binary_path = os.path.abspath(os.path.join(sys.executable, os.pardir))
bin_paths = ['%s/bin' % (EXEC_PREFIX),
'%s/local/bin' % (EXEC_PREFIX)]
for path in bin_paths:
if os.path.isfile('%s/workloadmgr-api' % (path)):
binary_path = path
break
config_parameters = {'exec_path': binary_path}
Path(services_dir).mkdir(exist_ok=True)
Path(config_dir).mkdir(exist_ok=True)
u_id, g_id = get_user_info('nova')
print("Creating service files from templates...")
env = jinja2.Environment(
loader=jinja2.FileSystemLoader(searchpath="."),
trim_blocks=True,
autoescape=True,
lstrip_blocks=True)
for serv_file, temp_file in template_files.items():
template = env.get_template(temp_file)
result = template.render(config_parameters)
if result:
with open(os.path.join(services_dir, serv_file), "w") as f:
f.write(result)
print("Setting config parmaters")
set_config_param(binary_path)
print("Copying config files")
copy_tree('./etc/triliovault-wlm', config_dir)
_chown(config_dir, u_id, g_id)
print("Creating log files")
Path(log_dir).mkdir(exist_ok=True)
for log_file in log_files:
Path('%s/%s' % (log_dir, log_file)).touch(exist_ok=True)
_chown(log_dir, u_id, g_id)
print("Creating mount directories")
for mount_dir in mount_dirs:
Path(mount_dir).mkdir(exist_ok=True)
_chown(mount_dir, u_id, g_id)
print("Creating signin directory")
Path(signin_dir).mkdir(exist_ok=True)
_chown(signin_dir, u_id, g_id)
print("POST INSTALLATION DONE")
if __name__ == '__main__':
_post_install()