def is_netdata_installed(session, args): with OperationLocker(): try: run_command(['service', 'netdata', 'status']) return json.dumps(True) except Exception: return json.dumps(False)
def install_netdata(session, args): api_key = args['api_key'] destination = args['destination'] with OperationLocker(): install_package('netdata') with open("/etc/netdata/stream.conf", "w") as conf_file: conf_file.write( netdata_streaming_content.format(destination, api_key)) run_command(['service', 'netdata', 'restart']) return json.dumps(True)
def check_raid_pool(session, args): device = '/dev/md127' with OperationLocker(): result = run_command(['mdadm', '--detail', device]) lines = [line.strip() for line in result['stdout'].splitlines()] lines = [line for line in lines if len(line) > 0] # remove first line ('/dev/md127:') lines = lines[1:] # look for the line 'Number Major Minor RaidDevice State' footer_index = next(i for i, line in enumerate(lines) if line.startswith('Number')) # '1 8 16 1 active sync /dev/sdb' -> ["1", "8", "16", "1", "active sync", "/dev/sdb"] volumes = [[ field.strip() for field in line.split(' ') if len(field.strip()) > 0 ] for line in lines[footer_index + 1:]] # 'Version : 1.0' -> {"Version": "1.0"} lines = dict([[element.strip() for element in line.split(' : ', 1)] for line in lines[0:footer_index]]) return json.dumps({'raid': lines, 'volumes': volumes})
def list_block_devices(session, args): result = run_command(["lsblk", "-P", "-b", "-o", "NAME,KNAME,PKNAME,SIZE,TYPE,RO,MOUNTPOINT"]) output_string = result["stdout"].decode("utf-8").strip() results = list() blockdevices = dict() for output in output_string.split("\n"): output_dict = dict(re.findall(r'(\S+)=(".*?"|\S+)', output)) output_dict = {key.lower(): output_dict[key].strip('"') for key in output_dict} kname = output_dict["kname"] pkname = output_dict["pkname"] if pkname != "": parent = blockdevices[pkname] if "children" not in parent: parent["children"] = list() parent["children"].append(output_dict) else: results.append(output_dict) blockdevices[kname] = output_dict return json.dumps({'blockdevices': results})
def list_zfs_pools(session, args): try: command = ['zfs', 'get', '-H', 'all'] _LOGGER.info('executing command {}...'.format(command)) result = run_command(command) lines = result['stdout'].splitlines() res = {} def set_entry(pool, key, value): if pool in res: res.get(pool)[key] = value else: res[pool] = {key: value} for line in lines: split_line = line.split('\t') set_entry(split_line[0], split_line[1], split_line[2]) return json.dumps(res) except OSError as e: if e.errno == errno.ENOENT: return json.dumps({}) else: raise
def update(session, args): repos = build_repo_list(args.get('repos')) task = None res = None error = None try: host = session.xenapi.session.get_this_host(session.handle) host_name = session.xenapi.host.get_name_label(host) host_uuid = session.xenapi.host.get_uuid(host) task = session.xenapi.task.create('Update host %s (%s)' % (host_name, host_uuid), '') packages = args.get('packages') command = ['yum', 'update', '--disablerepo="*"', '--enablerepo=' + ','.join(repos), '-y'] if packages: command.append(packages) res = run_command(command) session.xenapi.task.set_status(task, 'success') except Exception as e: error = e finally: if task: session.xenapi.task.destroy(task) if error: raise error return json.dumps(res)
def get_hyperthreading(session, args): result = run_command(['xl', 'info', 'threads_per_core']) _LOGGER.info(result) lines = result['stdout'].splitlines() return json.dumps(int(lines[0]) > 1)