def _clean_vdev_config(config): ''' Return a simple vdev tree from zpool.status' config section ''' cln_config = OrderedDict() for label, sub_config in config.items(): if label not in ['state', 'read', 'write', 'cksum']: sub_config = _clean_vdev_config(sub_config) if sub_config and isinstance(cln_config, list): cln_config.append(OrderedDict([(label, sub_config)])) elif sub_config and isinstance(cln_config, OrderedDict): cln_config[label] = sub_config elif isinstance(cln_config, list): cln_config.append(label) elif isinstance(cln_config, OrderedDict): new_config = [] for old_label, old_config in cln_config.items(): new_config.append(OrderedDict([(old_label, old_config)])) new_config.append(label) cln_config = new_config else: cln_config = [label] return cln_config
def list_vms(search=None, sort=None, order="uuid,type,ram,state,alias", keyed=True): """ Return a list of VMs search : string vmadm filter property sort : string vmadm sort (-s) property order : string vmadm order (-o) property -- Default: uuid,type,ram,state,alias keyed : boolean specified if the output should be an array (False) or dict (True) For a dict the key is the first item from the order parameter. Note: If key is not unique last vm wins. CLI Example: .. code-block:: bash salt '*' vmadm.list salt '*' vmadm.list order=alias,ram,cpu_cap sort=-ram,-cpu_cap salt '*' vmadm.list search='type=KVM' """ ret = {} # vmadm list [-p] [-H] [-o field,...] [-s field,...] [field=value ...] cmd = "vmadm list -p -H {order} {sort} {search}".format( order="-o {0}".format(order) if order else "", sort="-s {0}".format(sort) if sort else "", search=search if search else "", ) res = __salt__["cmd.run_all"](cmd) retcode = res["retcode"] result = OrderedDict() if keyed else [] if retcode != 0: ret["Error"] = res["stderr"] if "stderr" in res else _exit_status( retcode) return ret fields = order.split(",") for vm in res["stdout"].splitlines(): vm_data = OrderedDict() vm = vm.split(":") if keyed: for field in fields: if fields.index(field) == 0: continue vm_data[field.strip()] = vm[fields.index(field)].strip() result[vm[0]] = vm_data else: if len(vm) > 1: for field in fields: vm_data[field.strip()] = vm[fields.index(field)].strip() else: vm_data = vm[0] result.append(vm_data) return result
def list_vms(search=None, sort=None, order='uuid,type,ram,state,alias', keyed=False): ''' Return a list of VMs search : string Specifies the vmadm filter property sort : string Specifies the vmadm sort (-s) property order : string Specifies the vmadm order (-o) property Default: uuid,type,ram,state,alias keyed : boolean Specified if the output should be an array (False) or dict (True) Dict key is first field from order parameter Note: if key is not unique last vm wins. CLI Example: .. code-block:: bash salt '*' vmadm.list salt '*' vmadm.list order=alias,ram,cpu_cap sort=-ram,-cpu_cap salt '*' vmadm.list search='type=KVM' ''' ret = {} vmadm = _check_vmadm() # vmadm list [-p] [-H] [-o field,...] [-s field,...] [field=value ...] cmd = '{vmadm} list -p -H {order} {sort} {search}'.format( vmadm=vmadm, order='-o {0}'.format(order) if order else '', sort='-s {0}'.format(sort) if sort else '', search=search if search else '' ) res = __salt__['cmd.run_all'](cmd) retcode = res['retcode'] result = OrderedDict() if keyed else [] if retcode != 0: ret['Error'] = res['stderr'] if 'stderr' in res else _exit_status(retcode) return ret fields = order.split(',') for vm in res['stdout'].splitlines(): vm_data = OrderedDict() vm = vm.split(':') if keyed: for field in fields: if fields.index(field) == 0: continue vm_data[field.strip()] = vm[fields.index(field)].strip() result[vm[0]] = vm_data else: if len(vm) > 1: for field in fields: vm_data[field.strip()] = vm[fields.index(field)].strip() else: vm_data = vm[0] result.append(vm_data) return result
def list_vms(search=None, verbose=False): ''' List all vms search : string filter vms, see the execution module verbose : boolean print additional information about the vm CLI Example: .. code-block:: bash salt-run vmadm.list salt-run vmadm.list search='type=KVM' salt-run vmadm.list verbose=True ''' ret = OrderedDict() if verbose else [] client = salt.client.get_local_client(__opts__['conf_file']) try: vmadm_args = {} vmadm_args['order'] = 'uuid,alias,hostname,state,type,cpu_cap,vcpus,ram' if search: vmadm_args['search'] = search for cn in client.cmd_iter('G@virtual:physical and G@os:smartos', 'vmadm.list', kwarg=vmadm_args, expr_form='compound'): if not cn: continue node = next(cn.iterkeys()) if not isinstance(cn[node], dict) or \ 'ret' not in cn[node] or \ not isinstance(cn[node]['ret'], dict): continue for vm in cn[node]['ret'].keys(): vmcfg = cn[node]['ret'][vm] if verbose: ret[vm] = OrderedDict() ret[vm]['hostname'] = vmcfg['hostname'] ret[vm]['alias'] = vmcfg['alias'] ret[vm]['computenode'] = node ret[vm]['state'] = vmcfg['state'] ret[vm]['resources'] = OrderedDict() ret[vm]['resources']['memory'] = vmcfg['ram'] if vmcfg['type'] == 'KVM': ret[vm]['resources']['cpu'] = "{0:.2f}".format(int(vmcfg['vcpus'])) else: if vmcfg['cpu_cap'] != '': ret[vm]['resources']['cpu'] = "{0:.2f}".format(int(vmcfg['cpu_cap'])/100) else: ret.append(vm) except SaltClientError as client_error: return "{0}".format(client_error) if not verbose: ret = sorted(ret) return ret
def list_vms(search=None, sort=None, order='uuid,type,ram,state,alias', keyed=True): ''' Return a list of VMs search : string vmadm filter property sort : string vmadm sort (-s) property order : string vmadm order (-o) property -- Default: uuid,type,ram,state,alias keyed : boolean specified if the output should be an array (False) or dict (True) For a dict the key is the first item from the order parameter. Note: If key is not unique last vm wins. CLI Example: .. code-block:: bash salt '*' vmadm.list salt '*' vmadm.list order=alias,ram,cpu_cap sort=-ram,-cpu_cap salt '*' vmadm.list search='type=KVM' ''' ret = {} vmadm = _check_vmadm() # vmadm list [-p] [-H] [-o field,...] [-s field,...] [field=value ...] cmd = '{vmadm} list -p -H {order} {sort} {search}'.format( vmadm=vmadm, order='-o {0}'.format(order) if order else '', sort='-s {0}'.format(sort) if sort else '', search=search if search else '' ) res = __salt__['cmd.run_all'](cmd) retcode = res['retcode'] result = OrderedDict() if keyed else [] if retcode != 0: ret['Error'] = res['stderr'] if 'stderr' in res else _exit_status(retcode) return ret fields = order.split(',') for vm in res['stdout'].splitlines(): vm_data = OrderedDict() vm = vm.split(':') if keyed: for field in fields: if fields.index(field) == 0: continue vm_data[field.strip()] = vm[fields.index(field)].strip() result[vm[0]] = vm_data else: if len(vm) > 1: for field in fields: vm_data[field.strip()] = vm[fields.index(field)].strip() else: vm_data = vm[0] result.append(vm_data) return result
def list_vms(search=None, verbose=False): ''' List all vms search : string filter vms, see the execution module verbose : boolean print additional information about the vm CLI Example: .. code-block:: bash salt-run vmadm.list salt-run vmadm.list search='type=KVM' salt-run vmadm.list verbose=True ''' ret = OrderedDict() if verbose else [] client = salt.client.get_local_client(__opts__['conf_file']) try: vmadm_args = {} vmadm_args['order'] = 'uuid,alias,hostname,state,type,cpu_cap,vcpus,ram' if search: vmadm_args['search'] = search for cn in client.cmd_iter('G@virtual:physical and G@os:smartos', 'vmadm.list', kwarg=vmadm_args, tgt_type='compound'): if not cn: continue node = next(cn.iterkeys()) if not isinstance(cn[node], dict) or \ 'ret' not in cn[node] or \ not isinstance(cn[node]['ret'], dict): continue for vm in cn[node]['ret'].keys(): vmcfg = cn[node]['ret'][vm] if verbose: ret[vm] = OrderedDict() ret[vm]['hostname'] = vmcfg['hostname'] ret[vm]['alias'] = vmcfg['alias'] ret[vm]['computenode'] = node ret[vm]['state'] = vmcfg['state'] ret[vm]['resources'] = OrderedDict() ret[vm]['resources']['memory'] = vmcfg['ram'] if vmcfg['type'] == 'KVM': ret[vm]['resources']['cpu'] = "{0:.2f}".format(int(vmcfg['vcpus'])) else: if vmcfg['cpu_cap'] != '': ret[vm]['resources']['cpu'] = "{0:.2f}".format(int(vmcfg['cpu_cap'])/100) else: ret.append(vm) except SaltClientError as client_error: return "{0}".format(client_error) if not verbose: ret = sorted(ret) return ret
def list_vms(search=None, verbose=False): """ List all vms search : string filter vms, see the execution module verbose : boolean print additional information about the vm CLI Example: .. code-block:: bash salt-run vmadm.list salt-run vmadm.list search='type=KVM' salt-run vmadm.list verbose=True """ ret = OrderedDict() if verbose else [] client = salt.client.get_local_client(__opts__["conf_file"]) try: vmadm_args = {} vmadm_args[ "order"] = "uuid,alias,hostname,state,type,cpu_cap,vcpus,ram" if search: vmadm_args["search"] = search for cn in client.cmd_iter( "G@virtual:physical and G@os:smartos", "vmadm.list", kwarg=vmadm_args, tgt_type="compound", ): if not cn: continue node = next(iter(cn.keys())) if (not isinstance(cn[node], dict) or "ret" not in cn[node] or not isinstance(cn[node]["ret"], dict)): continue for vm in cn[node]["ret"]: vmcfg = cn[node]["ret"][vm] if verbose: ret[vm] = OrderedDict() ret[vm]["hostname"] = vmcfg["hostname"] ret[vm]["alias"] = vmcfg["alias"] ret[vm]["computenode"] = node ret[vm]["state"] = vmcfg["state"] ret[vm]["resources"] = OrderedDict() ret[vm]["resources"]["memory"] = vmcfg["ram"] if vmcfg["type"] == "KVM": ret[vm]["resources"]["cpu"] = "{:.2f}".format( int(vmcfg["vcpus"])) else: if vmcfg["cpu_cap"] != "": ret[vm]["resources"]["cpu"] = "{:.2f}".format( int(vmcfg["cpu_cap"]) / 100) else: ret.append(vm) except SaltClientError as client_error: return "{}".format(client_error) if not verbose: ret = sorted(ret) return ret