diff --git a/diskimage_builder/block_device/blockdevice.py b/diskimage_builder/block_device/blockdevice.py index 4e404bddf..71ab3604e 100644 --- a/diskimage_builder/block_device/blockdevice.py +++ b/diskimage_builder/block_device/blockdevice.py @@ -172,13 +172,20 @@ class BlockDevice(object): trap - EXIT """ - def _merge_into_config(self): - """Merge old (default) config into new + def _merge_rootfs_params(self): + """Merge rootfs related parameters into configuration + + To maintain compatability with some old block-device + environment variables from before we had a specific + block-device config, disk-image-create provides a "parameters" + file that translates the old bash-environment variables into a + YAML based configuration file (``self.params``). + + Here we merge the values in this parameters file that relate + to the root file-system into the final configuration. We look + for the ``mkfs_root`` node in the new config, and pull the + relevant settings from the parameters into it. - There is the need to be compatible using some old environment - variables. This is done in the way, that if there is no - explicit value given, these values are inserted into the current - configuration. """ for entry in self.config: for k, v in entry.items(): @@ -198,7 +205,18 @@ class BlockDevice(object): if self.params['root-label'] is not None: v['label'] = self.params['root-label'] else: - v['label'] = "cloudimg-rootfs" + # The default label is "cloudimg-rootfs" + # for historical reasons (upstream + # images/EC2 defaults/cloud-init etc). We + # want to remain backwards compatible, but + # unfortunately that's too long for XFS so + # we've decided on 'img-rootfs' in that + # case. Note there's separate checks if + # the label is specified explicitly. + if v.get('type') == 'xfs': + v['label'] = 'img-rootfs' + else: + v['label'] = 'cloudimg-rootfs' def __init__(self, params): """Create BlockDevice object @@ -241,7 +259,7 @@ class BlockDevice(object): logger.debug("Config before merge [%s]", self.config) self.config = config_tree_to_graph(self.config) logger.debug("Config before merge [%s]", self.config) - self._merge_into_config() + self._merge_rootfs_params() logger.debug("Final config [%s]", self.config) # Write the final config with open(self.config_json_file_name, "wt") as fd: @@ -282,18 +300,21 @@ class BlockDevice(object): :param symbol: the symbol to get """ logger.info("Getting value for [%s]", symbol) + if symbol == "root-label": root_mount = self._config_get_mount("/") root_fs = self._config_get_mkfs(root_mount['base']) logger.debug("root-label [%s]", root_fs['label']) print("%s" % root_fs['label']) return 0 + if symbol == "root-fstype": root_mount = self._config_get_mount("/") root_fs = self._config_get_mkfs(root_mount['base']) logger.debug("root-fstype [%s]", root_fs['type']) print("%s" % root_fs['type']) return 0 + if symbol == 'mount-points': mount_points = self._config_get_all_mount_points() # we return the mountpoints joined by a pipe, because it is not diff --git a/diskimage_builder/block_device/level2/mkfs.py b/diskimage_builder/block_device/level2/mkfs.py index 41f458d4d..d213b0c9e 100644 --- a/diskimage_builder/block_device/level2/mkfs.py +++ b/diskimage_builder/block_device/level2/mkfs.py @@ -58,13 +58,6 @@ class FilesystemNode(NodeBase): if self.label is None: self.label = self.name - # Historic reasons - this will hopefully vanish in one of - # the next major releases - if self.label == "cloudimg-rootfs" and self.type == "xfs": - logger.warning("Default label [cloudimg-rootfs] too long for xfs " - "file system - using [img-rootfs] instead") - self.label = "img-rootfs" - # ensure we don't already have a fs with this label ... they # all must be unique. if 'fs_labels' in self.state: diff --git a/releasenotes/notes/incorrect-grub-label-5d2000215c0cc73e.yaml b/releasenotes/notes/incorrect-grub-label-5d2000215c0cc73e.yaml new file mode 100644 index 000000000..ecaaf6ee5 --- /dev/null +++ b/releasenotes/notes/incorrect-grub-label-5d2000215c0cc73e.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + This fixes bug 1742170 where the grub root label is different than the + file system label when booting from a whole disk image.