On August 23, 2019 2:03 pm, Dominik Csapak wrote: > this add the 'tags' property to vms, which has the format:
why 'tags'? seems rather generic for what it does ;) > > 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 if we introduce this, wouldn't it also make sense to allow to pass in snippet files via this interface (via file=$path instead of string=$value)? > > 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.csa...@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 > > > _______________________________________________ > pve-devel mailing list > pve-devel@pve.proxmox.com > https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel > > _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel