diff options
author | Andy Piper <andy.piper@arcticwolf.com> | 2021-11-22 10:45:27 -0500 |
---|---|---|
committer | Andy Piper <andy.piper@arcticwolf.com> | 2021-11-22 10:45:27 -0500 |
commit | 23b3f3f9c6552b926446ce6d12eea23342261127 (patch) | |
tree | fca2743b2b60a7afdbdef6b5fc39a257919e4de2 | |
parent | 722601adb91a6532f91a7f4074a517c7f6fd6e1c (diff) | |
download | vmdb2-23b3f3f9c6552b926446ce6d12eea23342261127.tar.gz |
Add set_part_flag_plugin.py
This enables things like setting the `bios_grub` flag on a partition.
It seemed simpler to create a plugin to set these flags than to
overload the pupose of the mkpart_plugin.
-rw-r--r-- | vmdb/plugins/set_part_flag_plugin.mdwn | 24 | ||||
-rw-r--r-- | vmdb/plugins/set_part_flag_plugin.py | 65 | ||||
-rw-r--r-- | without-tests | 1 |
3 files changed, 90 insertions, 0 deletions
diff --git a/vmdb/plugins/set_part_flag_plugin.mdwn b/vmdb/plugins/set_part_flag_plugin.mdwn new file mode 100644 index 0000000..0b6dce2 --- /dev/null +++ b/vmdb/plugins/set_part_flag_plugin.mdwn @@ -0,0 +1,24 @@ +Step: set_part_flag +----------------------------------------------------------------------------- + +Create a partition. + +Step keys: + +* `set_part_flag` — REQUIRED; filename of block device containing + partition that will have the flag set or cleared. + +* `tag` — REQUIRED; tag of the partition being modified. + +* `flag` — REQUIRED; the name of the flag to be set or cleared + +* `state` — OPTIONAL; the flag state: "enabled" or "disabled". Defaults + to "enabled". + +Example (in the .vmdb file): + + - set_part_flag: "{{ output }}" + tag: rootfs + start: 0% + flag: bios_grub + state: enabled diff --git a/vmdb/plugins/set_part_flag_plugin.py b/vmdb/plugins/set_part_flag_plugin.py new file mode 100644 index 0000000..7fdc16d --- /dev/null +++ b/vmdb/plugins/set_part_flag_plugin.py @@ -0,0 +1,65 @@ +# Copyright 2017 Lars Wirzenius +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# =*= License: GPL-3+ =*= + + +import os + +import vmdb + + +class SetPartFlagPlugin(vmdb.Plugin): + def enable(self): + self.app.step_runners.add(SetPartFlagStepRunner()) + + +class SetPartFlagStepRunner(vmdb.StepRunnerInterface): + def get_key_spec(self): + return { + "set_part_flag": str, + "tag": str, + "flag": str, + "state": "enabled" + } + + def run(self, values, settings, state): + device = values["set_part_flag"] + tag = values["tag"] + flag = values["flag"] + flag_state = values["state"] + + if flag_state == "enabled": + flag_state = "on" + elif flag_state == "disabled": + flag_state = "off" + else: + raise SetPartFlagError('state must be "enabled" or "disabled"') + + tags_list = state.tags.get_tags() + try: + partition_number = tags_list.index(tag) + 1 + except IndexError: + raise SetPartFlagError(f"Didn't find tag {tag} in {tags_list}") + + device = os.path.realpath(device) + vmdb.runcmd([ + "parted", "-s", device, "--", "set", + str(partition_number), flag, flag_state + ]) + + +class SetPartFlagError(Exception): + pass diff --git a/without-tests b/without-tests index 50cdad4..978ec61 100644 --- a/without-tests +++ b/without-tests @@ -25,6 +25,7 @@ vmdb/plugins/mount_plugin.py vmdb/plugins/qemudebootstrap_plugin.py vmdb/plugins/resize_plugin.py vmdb/plugins/shell_plugin.py +vmdb/plugins/set_part_flag_plugin.py vmdb/plugins/unpack_rootfs_plugin.py vmdb/plugins/vgcreate_plugin.py vmdb/plugins/virtualfs_plugin.py |