Refactor block_device: isolate the getval call
Add a new getval call that allows to retrieve values from the block device. Also isolating the block device information into a 'blockdev' dictionary entry, to better return it with the getval command. This is a refactor from the original code at I3600c6a3d663c697b59d91bd3fbb5e408af345e4. Change-Id: I93d33669a3a0ae644eab9f9b955bb5a9470cadeb Co-Authored-By: Andreas Florath <andreas@florath.net>
This commit is contained in:
parent
803d40b0c6
commit
943f1ccf04
@ -40,6 +40,10 @@ class BlockDevice(object):
|
||||
call it is possible to e.g. query information from the (partially
|
||||
automatic generated) internal state like root-label.
|
||||
|
||||
cmd_getval: retrieve information about the (internal) block device
|
||||
state like the block image device (for bootloader) or the
|
||||
root-label (for writing fstab).
|
||||
|
||||
cmd_create: creates all the different aspects of the block
|
||||
device. When this call is successful, the complete block level
|
||||
device is set up, filesystems are created and are mounted at
|
||||
@ -209,6 +213,28 @@ class BlockDevice(object):
|
||||
logger.info("Wrote final block device config to [%s]"
|
||||
% self.config_json_file_name)
|
||||
|
||||
def cmd_getval(self):
|
||||
"""Retrieve value from block device level
|
||||
|
||||
This is needed for backward compatibility (non python) access
|
||||
to (internal) configuration.
|
||||
"""
|
||||
symbol = self.args.symbol
|
||||
logger.info("Getting value for [%s]" % symbol)
|
||||
if symbol == 'image-block-partition':
|
||||
# If there is no partition needed, pass back directly the
|
||||
# image.
|
||||
if 'root' in self.state['blockdev']:
|
||||
print("%s" % self.state['blockdev']['root']['device'])
|
||||
else:
|
||||
print("%s" % self.state['blockdev']['image0']['device'])
|
||||
return 0
|
||||
if symbol == 'image-path':
|
||||
print("%s" % self.state['blockdev']['image0']['image'])
|
||||
return 0
|
||||
logger.error("Invalid symbol [%s] for getval" % symbol)
|
||||
return 1
|
||||
|
||||
def cmd_create(self):
|
||||
"""Creates the block device"""
|
||||
|
||||
@ -226,15 +252,6 @@ class BlockDevice(object):
|
||||
rollback_cb()
|
||||
sys.exit(1)
|
||||
|
||||
# To be compatible with the current implementation, echo the
|
||||
# result to stdout.
|
||||
# If there is no partition needed, pass back directly the
|
||||
# image.
|
||||
if 'root' in result:
|
||||
print("%s" % result['root']['device'])
|
||||
else:
|
||||
print("%s" % result['image0']['device'])
|
||||
|
||||
self.write_state(result)
|
||||
|
||||
logger.info("create() finished")
|
||||
@ -250,10 +267,6 @@ class BlockDevice(object):
|
||||
for node in reverse_order:
|
||||
node.umount(self.state)
|
||||
|
||||
# To be compatible with the current implementation, echo the
|
||||
# result to stdout.
|
||||
print("%s" % self.state['image0']['image'])
|
||||
|
||||
return 0
|
||||
|
||||
def cmd_cleanup(self):
|
||||
|
@ -111,17 +111,20 @@ class LocalLoop(NodePluginBase):
|
||||
block_device = self._loopdev_attach(self.filename)
|
||||
rollback.append(lambda: self._loopdev_detach(block_device))
|
||||
|
||||
result[self.name] = {"device": block_device,
|
||||
if 'blockdev' not in result:
|
||||
result['blockdev'] = {}
|
||||
|
||||
result['blockdev'][self.name] = {"device": block_device,
|
||||
"image": self.filename}
|
||||
logger.debug("Created loop name [%s] device [%s] image [%s]"
|
||||
% (self.name, block_device, self.filename))
|
||||
return
|
||||
|
||||
def umount(self, state):
|
||||
self._loopdev_detach(state[self.name]['device'])
|
||||
self._loopdev_detach(state['blockdev'][self.name]['device'])
|
||||
|
||||
def cleanup(self, state):
|
||||
pass
|
||||
|
||||
def delete(self, state):
|
||||
self._image_delete(state[self.name]['image'])
|
||||
self._image_delete(state['blockdev'][self.name]['image'])
|
||||
|
@ -198,8 +198,8 @@ class Partitioning(PluginBase):
|
||||
self._exec_sudo(["kpartx", "-avs", device_path])
|
||||
|
||||
def create(self, result, rollback):
|
||||
image_path = result[self.base]['image']
|
||||
device_path = result[self.base]['device']
|
||||
image_path = result['blockdev'][self.base]['image']
|
||||
device_path = result['blockdev'][self.base]['device']
|
||||
logger.info("Creating partition on [%s] [%s]" %
|
||||
(self.base, image_path))
|
||||
|
||||
@ -229,7 +229,8 @@ class Partitioning(PluginBase):
|
||||
logger.debug("Create partition [%s] [%d]" %
|
||||
(part_name, part_no))
|
||||
partition_device_name = device_path + "p%d" % part_no
|
||||
result[part_name] = {'device': partition_device_name}
|
||||
result['blockdev'][part_name] \
|
||||
= {'device': partition_device_name}
|
||||
partition_devices.add(partition_device_name)
|
||||
|
||||
self.already_created = True
|
||||
|
@ -419,18 +419,23 @@ fi
|
||||
DIB_BLOCK_DEVICE_SCRIPT=$(which dib-block-device)
|
||||
|
||||
if [ -z ${IMAGE_BLOCK_DEVICE} ] ; then
|
||||
# For compatibily reasons in addition to the YAML configuration
|
||||
# For compatibility reasons in addition to the YAML configuration
|
||||
# there is the need to handle the old environment variables.
|
||||
echo "image-size: ${DIB_IMAGE_SIZE}KiB" >> ${DIB_BLOCK_DEVICE_PARAMS_YAML}
|
||||
|
||||
# After changeing the parameters, there is the need to
|
||||
# After changing the parameters, there is the need to
|
||||
# re-run dib-block-device init because some value might
|
||||
# change based on the new set parameters.
|
||||
dib-block-device --phase=init \
|
||||
--params="${DIB_BLOCK_DEVICE_PARAMS_YAML}"
|
||||
|
||||
# values to dib-block-device: using the YAML config and
|
||||
IMAGE_BLOCK_DEVICE=$(dib-block-device --phase=create \
|
||||
dib-block-device --phase=create \
|
||||
--params="${DIB_BLOCK_DEVICE_PARAMS_YAML}"
|
||||
|
||||
# It's called 'DEVICE' but it's the partition.
|
||||
IMAGE_BLOCK_DEVICE=$(dib-block-device \
|
||||
--phase=getval --symbol=image-block-partition \
|
||||
--params="${DIB_BLOCK_DEVICE_PARAMS_YAML}")
|
||||
fi
|
||||
export IMAGE_BLOCK_DEVICE
|
||||
@ -496,10 +501,13 @@ fi
|
||||
# space before converting the image to some other format.
|
||||
export EXTRA_UNMOUNT=""
|
||||
unmount_image
|
||||
TMP_IMAGE_PATH=$(dib-block-device --phase=umount \
|
||||
TMP_IMAGE_PATH=$(dib-block-device --phase=getval --symbol=image-path \
|
||||
--params="${DIB_BLOCK_DEVICE_PARAMS_YAML}")
|
||||
export TMP_IMAGE_PATH
|
||||
|
||||
dib-block-device --phase=umount \
|
||||
--params="${DIB_BLOCK_DEVICE_PARAMS_YAML}"
|
||||
|
||||
dib-block-device --phase=cleanup \
|
||||
--params="${DIB_BLOCK_DEVICE_PARAMS_YAML}"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user