[pve-devel] [PATCH qemu-server] fix #1934: add qemu fw_cfg variables via 'tags'
Dominik Csapak
d.csapak at proxmox.com
Fri Aug 23 14:03:57 CEST 2019
this add the 'tags' property to vms, which has the format:
key=value(;key=value)*
each value will be set as
-fw_cfg 'name=opt/com.proxmox/$key,string=$value'
(qemu recommends using a unique rfqdn)
this way, users can tag the vm with that information available inside
e.g. under linux the value can be read under
/sys/firmware/qemu_fw_cfg/by_name/opt/com.proxmox./$key/raw
see the file docs/specs/fw_cfg.txt in the qemu repository for more
details
maybe we can also use this in the future to show/set in the gui
e.g. some grouping/ordering etc.
Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
PVE/QemuServer.pm | 37 +++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index 9f5bf56..d55a1ae 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -232,6 +232,29 @@ my $watchdog_fmt = {
};
PVE::JSONSchema::register_format('pve-qm-watchdog', $watchdog_fmt);
+PVE::JSONSchema::register_format('pve-qm-tags', \&verify_tag_format);
+sub verify_tag_format {
+ my ($tagstring, $noerr) = @_;
+
+ if (!$tagstring) {
+ return '';
+ }
+
+ # forbid all characters not in range 0x20-0x7E
+ for my $tag (split(';', $tagstring)) {
+ my ($key, $value) = ($tag =~ m/^(.*)=(.*)$/);
+ if ($key =~ m/[\x00-\x1F\x7F-\xFF]/) {
+ die "invalid character in tag key\n" if !$noerr;
+ return undef;
+ }
+ if ($value =~ m/[\x00-\x1F\x7F-\xFF]/) {
+ die "invalid character in tag value\n" if !$noerr;
+ return undef;
+ }
+ }
+
+ return $tagstring;
+}
my $agent_fmt = {
enabled => {
description => "Enable/disable Qemu GuestAgent.",
@@ -672,6 +695,13 @@ EODESCR
description => "Configure a audio device, useful in combination with QXL/Spice.",
optional => 1
},
+ tags => {
+ description => "Specify key/value pairs to be added to qemu fw_cfg.",
+ type => 'string',
+ maxLength => 4096,
+ format => 'pve-qm-tags',
+ optional => 1,
+ },
};
my $cicustom_fmt = {
@@ -4152,6 +4182,13 @@ sub config_to_command {
push @$cmd, '-loadstate', $statepath;
}
+ if ($conf->{tags}) {
+ for my $tag (split(';', $conf->{tags})) {
+ my ($key, $value) = ($tag =~ m/^(.*)=(.*)$/);
+ push @$cmd, '-fw_cfg', "name=opt/com.proxmox/$key,string=$value";
+ }
+ }
+
# add custom args
if ($conf->{args}) {
my $aa = PVE::Tools::split_args($conf->{args});
--
2.20.1
More information about the pve-devel
mailing list