public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Thomas Lamprecht <t.lamprecht@proxmox.com>
To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>,
	Stefan Hanreich <s.hanreich@proxmox.com>
Subject: Re: [pve-devel] [PATCH qemu-server 1/1] Add VM hooks for pre/post-migrate on target/source
Date: Mon, 26 Sep 2022 17:38:50 +0200	[thread overview]
Message-ID: <c96cd4a7-e35c-ede7-57c8-68e468949233@proxmox.com> (raw)
In-Reply-To: <20220922141321.1510795-5-s.hanreich@proxmox.com>

I don't like that there's no commit message (the cover letter is more for general/meta
info, it doesn't gets into git after all, would require doing pull requests which we
(currently) don't do in most cases).

Besides that I'd rather avoid extending SSH usage further, a long term goal is to
allow user running PVE clusters with all its features without any SSH connection
required. For VM migration we already got the mtunnel which can be used for such
control stuff; otherwise one can get an API client instead, but there we'd need to
make some sort of execution path part of the public API, can be fine; as the CLI
really isn't /that/ different from the API in publicity/stableness regard (if its
there it will be used, a description comment is a very weak gate), so I'd find a
fully internal handling (i.e., neither CLI nor API exposure) nicer, mtunnel should
make that relatively simple, for CTs one may need to add a similar mechanism.

Also, this requires the script to be available on all notes, the docs should reflect
that.

Am 22/09/2022 um 16:13 schrieb Stefan Hanreich:
> Signed-off-by: Stefan Hanreich <s.hanreich@proxmox.com>
> ---
>  PVE/CLI/qm.pm                         | 50 +++++++++++++++++++++++++++
>  PVE/QemuMigrate.pm                    | 23 ++++++++++++
>  test/MigrationTest/QemuMigrateMock.pm |  4 +++
>  3 files changed, 77 insertions(+)
> 
> diff --git a/PVE/CLI/qm.pm b/PVE/CLI/qm.pm
> index 6a2e161..4161e6e 100755
> --- a/PVE/CLI/qm.pm
> +++ b/PVE/CLI/qm.pm
> @@ -838,6 +838,54 @@ __PACKAGE__->register_method({
>  	return;
>      }});
>  
> +__PACKAGE__->register_method ({
> +    name => 'pre_migrate',
> +    path => 'pre_migrate',
> +    method => 'POST',
> +    description => "Run pre-migrate hook for VM <vmid> - do not use manually.",
> +    parameters => {
> +	additionalProperties => 0,
> +	properties => {
> +	    vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid }),
> +	    'source-node' => get_standard_option('pve-node'),
> +	},
> +    },
> +    returns => { type => 'null'},
> +    code => sub {
> +	my ($param) = @_;
> +
> +	my $vmid = $param->{vmid};
> +	my $source_node = $param->{'source-node'};
> +	my $conf = PVE::QemuConfig->load_config($vmid, $source_node);
> +
> +	PVE::GuestHelpers::exec_hookscript($conf, $vmid, "pre-migrate-target", 1);
> +
> +	return;
> +    }});
> +
> +__PACKAGE__->register_method ({
> +    name => 'post_migrate',
> +    path => 'post_migrate',
> +    method => 'POST',
> +    description => "Run post-migrate hook for VM <vmid> - do not use manually.",
> +    parameters => {
> +	additionalProperties => 0,
> +	properties => {
> +	    vmid => get_standard_option('pve-vmid', { completion => \&PVE::QemuServer::complete_vmid }),
> +	},
> +    },
> +    returns => { type => 'null'},
> +    code => sub {
> +	my ($param) = @_;
> +
> +	my $vmid = $param->{vmid};
> +	my $conf = PVE::QemuConfig->load_config($vmid);
> +
> +	PVE::GuestHelpers::exec_hookscript($conf, $vmid, "post-migrate-target");
> +
> +	return;
> +    }});
> +
>  my $print_agent_result = sub {
>      my ($data) = @_;
>  
> @@ -988,6 +1036,8 @@ our $cmddef = {
>  	    }],
>      },
>  
> +    'pre-migrate' => [ __PACKAGE__, 'pre_migrate', ['vmid', 'source-node']],
> +    'post-migrate' => [ __PACKAGE__, 'post_migrate', ['vmid']],
>  };
>  
>  1;
> diff --git a/PVE/QemuMigrate.pm b/PVE/QemuMigrate.pm
> index d52dc8d..b113dec 100644
> --- a/PVE/QemuMigrate.pm
> +++ b/PVE/QemuMigrate.pm
> @@ -1284,4 +1284,27 @@ sub round_powerof2 {
>      return 2 << int(log($_[0]-1)/log(2));
>  }
>  
> +sub pre_migration_hooks {
> +    my ($self, $vmid) = @_;
> +
> +    PVE::GuestHelpers::exec_hookscript($self->{vmconf}, $vmid, 'pre-migrate-source', 1);
> +
> +    my $node = PVE::INotify::nodename();
> +    my $cmd = [ @{$self->{rem_ssh}}, "qm", "pre-migrate", $vmid, $node ];
> +
> +    eval { $self->cmd($cmd); };
> +    die "$@\n" if $@;
> +}
> +
> +sub post_migration_hooks {
> +    my ($self, $vmid) = @_;
> +
> +    PVE::GuestHelpers::exec_hookscript($self->{vmconf}, $vmid, 'post-migrate-source');
> +
> +    my $cmd = [ @{$self->{rem_ssh}}, "qm", "post-migrate", $vmid ];
> +
> +    eval { $self->cmd($cmd); };
> +    die "$@\n" if $@;
> +}
> +
>  1;
> diff --git a/test/MigrationTest/QemuMigrateMock.pm b/test/MigrationTest/QemuMigrateMock.pm
> index f2c0281..461b390 100644
> --- a/test/MigrationTest/QemuMigrateMock.pm
> +++ b/test/MigrationTest/QemuMigrateMock.pm
> @@ -298,6 +298,10 @@ $MigrationTest::Shared::tools_module->mock(
>  			return 0;
>  		    } elsif ($cmd eq 'stop') {
>  			return 0;
> +		    } elsif ($cmd eq 'pre-migrate') {
> +			return 0;
> +		    } elsif ($cmd eq 'post-migrate') {
> +			return 0;
>  		    }
>  		    die "run_command (mocked) ssh qm command - implement me: ${cmd_msg}";
>  		} elsif ($cmd eq 'pvesm') {





  reply	other threads:[~2022-09-26 15:38 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-22 14:13 [pve-devel] [PATCH pve-container/qemu-server/pve-guest-common/pve-docs 0/1] Add pre/post-migrate hooks Stefan Hanreich
2022-09-22 14:13 ` [pve-devel] [PATCH pve-guest-common 1/1] Add abstract methods for " Stefan Hanreich
2022-09-26 15:27   ` Thomas Lamprecht
2022-09-27  7:40     ` Stefan Hanreich
2022-09-27  8:05       ` Thomas Lamprecht
2022-09-22 14:13 ` [pve-devel] [PATCH pve-container 1/1] Add CT hooks for pre/post-migrate on target/source Stefan Hanreich
2022-09-22 14:13 ` [pve-devel] [PATCH pve-docs 1/1] Add pre/post-migrate events for target and source to example hookscript Stefan Hanreich
2022-09-22 14:13 ` [pve-devel] [PATCH qemu-server 1/1] Add VM hooks for pre/post-migrate on target/source Stefan Hanreich
2022-09-26 15:38   ` Thomas Lamprecht [this message]
2022-09-27  7:40     ` Stefan Hanreich
2022-09-26 15:51 ` [pve-devel] [PATCH pve-container/qemu-server/pve-guest-common/pve-docs 0/1] Add pre/post-migrate hooks Thomas Lamprecht
2022-09-27  7:40   ` Stefan Hanreich
2022-09-27  7:47     ` Thomas Lamprecht

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c96cd4a7-e35c-ede7-57c8-68e468949233@proxmox.com \
    --to=t.lamprecht@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    --cc=s.hanreich@proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal