summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Piper <andy.piper@arcticwolf.com>2021-11-22 10:45:27 -0500
committerAndy Piper <andy.piper@arcticwolf.com>2021-11-22 10:45:27 -0500
commit23b3f3f9c6552b926446ce6d12eea23342261127 (patch)
treefca2743b2b60a7afdbdef6b5fc39a257919e4de2
parent722601adb91a6532f91a7f4074a517c7f6fd6e1c (diff)
downloadvmdb2-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.mdwn24
-rw-r--r--vmdb/plugins/set_part_flag_plugin.py65
-rw-r--r--without-tests1
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` &mdash; REQUIRED; filename of block device containing
+ partition that will have the flag set or cleared.
+
+* `tag` &mdash; REQUIRED; tag of the partition being modified.
+
+* `flag` &mdash; REQUIRED; the name of the flag to be set or cleared
+
+* `state` &mdash; 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