[pve-devel] applied: [PATCH qemu-server v2 1/2] Make agent a property string, add fstrim_cloned_disks
Thomas Lamprecht
t.lamprecht at proxmox.com
Thu Aug 2 12:18:44 CEST 2018
Am 08/01/2018 um 08:29 PM schrieb Stoiko Ivanov:
> Signed-off-by: Stoiko Ivanov <s.ivanov at proxmox.com>
applied, but it would be additionally great if the fstrim_cloned_disk
setting would be a 'hot-pluggable' one, i.e., if it could be made on a
running VM without needing to stop/start it. It's only a abstract
setting not affecting the VM hardware layout and I could enable/disable
this just fine if the QGA is already enabled.
> ---
> PVE/API2/Qemu.pm | 3 +--
> PVE/QemuConfig.pm | 2 +-
> PVE/QemuServer.pm | 38 +++++++++++++++++++++++++++++++++-----
> 3 files changed, 35 insertions(+), 8 deletions(-)
>
> diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
> index b3f8134..464ba7f 100644
> --- a/PVE/API2/Qemu.pm
> +++ b/PVE/API2/Qemu.pm
> @@ -1894,8 +1894,7 @@ __PACKAGE__->register_method({
> $status->{ha} = PVE::HA::Config::get_service_status("vm:$param->{vmid}");
>
> $status->{spice} = 1 if PVE::QemuServer::vga_conf_has_spice($conf->{vga});
> -
> - $status->{agent} = 1 if $conf->{agent};
> + $status->{agent} = 1 if (PVE::QemuServer::parse_guest_agent($conf)->{enabled});
>
> return $status;
> }});
> diff --git a/PVE/QemuConfig.pm b/PVE/QemuConfig.pm
> index 9a29b53..b24773c 100644
> --- a/PVE/QemuConfig.pm
> +++ b/PVE/QemuConfig.pm
> @@ -161,7 +161,7 @@ sub __snapshot_check_freeze_needed {
>
> my $running = $class->__snapshot_check_running($vmid);
> if (!$save_vmstate) {
> - return ($running, $running && $config->{agent} && PVE::QemuServer::qga_check_running($vmid));
> + return ($running, $running && PVE::QemuServer::parse_guest_agent($config)->{enabled} && PVE::QemuServer::qga_check_running($vmid));
> } else {
> return ($running, 0);
> }
> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
> index ba09fc3..1c0fba2 100644
> --- a/PVE/QemuServer.pm
> +++ b/PVE/QemuServer.pm
> @@ -200,6 +200,21 @@ my $watchdog_fmt = {
> };
> PVE::JSONSchema::register_format('pve-qm-watchdog', $watchdog_fmt);
>
> +my $agent_fmt = {
> + enabled => {
> + description => "Enable/disable Qemu GuestAgent.",
> + type => 'boolean',
> + default => 0,
> + default_key => 1,
> + },
> + fstrim_cloned_disks => {
> + description => "Run fstrim after cloning/moving a disk.",
> + type => 'boolean',
> + optional => 1,
> + default => 0
> + },
> +};
> +
> my $confdesc = {
> onboot => {
> optional => 1,
> @@ -380,9 +395,9 @@ EODESC
> },
> agent => {
> optional => 1,
> - type => 'boolean',
> - description => "Enable/disable Qemu GuestAgent.",
> - default => 0,
> + description => "Enable/disable Qemu GuestAgent and its properties.",
> + type => 'string',
> + format => $agent_fmt,
> },
> kvm => {
> optional => 1,
> @@ -2211,6 +2226,19 @@ sub parse_watchdog {
> return $res;
> }
>
> +sub parse_guest_agent {
> + my ($value) = @_;
> +
> + return {} if !defined($value->{agent});
> +
> + my $res = eval { PVE::JSONSchema::parse_property_string($agent_fmt, $value->{agent}) };
> + warn $@ if $@;
> +
> + # if the agent is disabled ignore the other potentially set properties
> + return {} if !$res->{enabled};
> + return $res;
> +}
> +
> PVE::JSONSchema::register_format('pve-qm-usb-device', \&verify_usb_device);
> sub verify_usb_device {
> my ($value, $noerr) = @_;
> @@ -3442,7 +3470,7 @@ sub config_to_command {
> #push @$cmd, '-soundhw', 'es1370';
> #push @$cmd, '-soundhw', $soundhw if $soundhw;
>
> - if($conf->{agent}) {
> + if (parse_guest_agent($conf)->{enabled}) {
> my $qgasocket = qmp_socket($vmid, 1);
> my $pciaddr = print_pci_addr("qga0", $bridges);
> push @$devices, '-chardev', "socket,path=$qgasocket,server,nowait,id=qga0";
> @@ -5152,7 +5180,7 @@ sub vm_stop {
>
> eval {
> if ($shutdown) {
> - if (defined($conf) && $conf->{agent}) {
> + if (defined($conf) && parse_guest_agent($conf)->{enabled}) {
> vm_qmp_command($vmid, { execute => "guest-shutdown" }, $nocheck);
> } else {
> vm_qmp_command($vmid, { execute => "system_powerdown" }, $nocheck);
>
More information about the pve-devel
mailing list