[pve-devel] [PATCH qemu-server] fix #1934: add qemu fw_cfg variables via 'tags'
Fabian Grünbichler
f.gruenbichler at proxmox.com
Mon Sep 2 14:14:48 CEST 2019
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.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
>
>
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
>
>
More information about the pve-devel
mailing list