Add VolumeAction for parsing POOL_NAME:VOLUME_ID
This commit is contained in:
parent
0ac40ddd4f
commit
b5eb377490
@ -198,6 +198,45 @@ class VmNameAction(QubesAction):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
parser.error('no such domain: {!r}'.format(vm_name))
|
parser.error('no such domain: {!r}'.format(vm_name))
|
||||||
|
|
||||||
|
class VolumeAction(QubesAction):
|
||||||
|
''' Action for argument parser that gets the
|
||||||
|
:py:class:``qubes.storage.Volume`` from a POOL_NAME:VOLUME_ID string.
|
||||||
|
'''
|
||||||
|
# pylint: disable=too-few-public-methods
|
||||||
|
|
||||||
|
def __init__(self, help='A pool & volume id combination',
|
||||||
|
required=True, **kwargs):
|
||||||
|
# pylint: disable=redefined-builtin
|
||||||
|
super(VolumeAction, self).__init__(help=help, required=required,
|
||||||
|
**kwargs)
|
||||||
|
|
||||||
|
def __call__(self, parser, namespace, values, option_string=None):
|
||||||
|
''' Set ``namespace.vmname`` to ``values`` '''
|
||||||
|
setattr(namespace, self.dest, values)
|
||||||
|
|
||||||
|
def parse_qubes_app(self, parser, namespace):
|
||||||
|
''' Acquire the :py:class:``qubes.storage.Volume`` object from
|
||||||
|
``namespace.app``.
|
||||||
|
'''
|
||||||
|
assert hasattr(namespace, 'app')
|
||||||
|
app = namespace.app
|
||||||
|
|
||||||
|
try:
|
||||||
|
pool_name, vid = getattr(namespace, self.dest).split(':')
|
||||||
|
try:
|
||||||
|
pool = app.pools[pool_name]
|
||||||
|
volume = [v for v in pool.volumes if v.vid == vid]
|
||||||
|
assert volume > 1, 'Duplicate vids in pool %s' % pool_name
|
||||||
|
if len(volume) == 0:
|
||||||
|
parser.error_runtime(
|
||||||
|
'no volume with id {!r} pool: {!r}'.format(vid,
|
||||||
|
pool_name))
|
||||||
|
else:
|
||||||
|
setattr(namespace, self.dest, volume[0])
|
||||||
|
except KeyError:
|
||||||
|
parser.error_runtime('no pool {!r}'.format(pool_name))
|
||||||
|
except ValueError:
|
||||||
|
parser.error('expected a pool & volume id combination like foo:bar')
|
||||||
|
|
||||||
class PoolsAction(QubesAction):
|
class PoolsAction(QubesAction):
|
||||||
''' Action for argument parser to gather multiple pools '''
|
''' Action for argument parser to gather multiple pools '''
|
||||||
|
Loading…
Reference in New Issue
Block a user