def do_host_lvg_delete(cc, args): """Delete a Local Volume Group.""" # Get the ihost object ihost = ihost_utils._find_ihost(cc, args.hostnameorid) ilvg = ilvg_utils._find_ilvg(cc, ihost, args.lvm_vg_name) try: cc.ilvg.delete(ilvg.uuid) except exc.HTTPNotFound: raise exc.CommandError('Local Volume Group delete failed: host %s: ' 'lvg %s' % (args.hostnameorid, args.lvm_vg_name))
def do_host_lvg_modify(cc, args): """Modify the attributes of a Local Volume Group.""" # Get all the fields from the command arguments field_list = [ 'hostnameorid', 'lvgnameoruuid', 'instance_backing', 'concurrent_disk_operations', 'lvm_type' ] fields = dict((k, v) for (k, v) in vars(args).items() if k in field_list and not (v is None)) all_caps_list = [ 'instance_backing', 'concurrent_disk_operations', 'lvm_type' ] integer_fields = ['concurrent_disk_operations'] requested_caps_dict = {} for cap in all_caps_list: if cap in fields: try: if cap in integer_fields: requested_caps_dict[cap] = int(fields[cap]) else: requested_caps_dict[cap] = fields[cap] except ValueError: raise exc.CommandError('{0} value {1} is invalid'.format( cap, fields[cap])) # Get the ihost object ihost = ihost_utils._find_ihost(cc, args.hostnameorid) # Get the volume group lvg = ilvg_utils._find_ilvg(cc, ihost, args.lvgnameoruuid) # format the arguments patch = [] patch.append({ 'path': '/capabilities', 'value': jsonutils.dumps(requested_caps_dict), 'op': 'replace' }) # Update the volume group attributes try: ilvg = cc.ilvg.update(lvg.uuid, patch) except exc.HTTPNotFound: raise exc.CommandError("ERROR: Local Volume Group update failed: " "host %s volume group %s : update %s" % (args.hostnameorid, args.lvgnameoruuid, patch)) _print_ilvg_show(ilvg)
def do_host_pv_add(cc, args): """Add a Physical Volume.""" field_list = ['disk_or_part_uuid'] ihost = ihost_utils._find_ihost(cc, args.hostnameorid) ilvg = ilvg_utils._find_ilvg(cc, ihost, args.lvgname) fields = {} user_specified_fields = dict((k, v) for (k, v) in vars(args).items() if k in field_list and not (v is None)) fields.update(user_specified_fields) fields['ihost_uuid'] = ihost.uuid fields['ilvg_uuid'] = ilvg.uuid idisk = idisk_utils._find_disk(cc, ihost, args.device_name_path_uuid) if idisk: fields['disk_or_part_uuid'] = idisk.uuid fields['pv_type'] = 'disk' else: partition = partition_utils._find_partition(cc, ihost, args.device_name_path_uuid) if partition: fields['disk_or_part_uuid'] = partition.uuid fields['pv_type'] = 'partition' if not idisk and not partition: raise exc.CommandError("No disk or partition found on host \'%s\' " "by device path or uuid %s" % (ihost.hostname, args.device_name_path_uuid)) try: ipv = cc.ipv.create(**fields) except exc.HTTPNotFound: raise exc.CommandError("Physical volume creation failed: host %s: " "fields %s" % (args.hostnameorid, fields)) suuid = getattr(ipv, 'uuid', '') try: ipv = cc.ipv.get(suuid) except exc.HTTPNotFound: raise exc.CommandError("Created physical volume UUID not found: " "%s" % suuid) _print_ipv_show(ipv)
def do_host_lvg_show(cc, args): """Show Local Volume Group attributes.""" ihost = ihost_utils._find_ihost(cc, args.hostnameorid) ilvg = ilvg_utils._find_ilvg(cc, ihost, args.lvgnameoruuid) _print_ilvg_show(ilvg)