From: Stefan Hanreich <s.hanreich@proxmox.com>
To: Thomas Lamprecht <t.lamprecht@proxmox.com>,
Proxmox VE development discussion <pve-devel@lists.proxmox.com>
Subject: Re: [pve-devel] [PATCH qemu-server 1/1] Add VM hooks for pre/post-migrate on target/source
Date: Tue, 27 Sep 2022 09:40:10 +0200 [thread overview]
Message-ID: <054232e8-9398-224d-c78c-880319c6b64c@proxmox.com> (raw)
In-Reply-To: <c96cd4a7-e35c-ede7-57c8-68e468949233@proxmox.com>
On 9/26/22 17:38, Thomas Lamprecht wrote:
> 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.
Makes sense, I will look into using mtunnel for this! Will also add a
short note to the documentation.
> 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') {
>
next prev parent reply other threads:[~2022-09-27 7:40 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
2022-09-27 7:40 ` Stefan Hanreich [this message]
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=054232e8-9398-224d-c78c-880319c6b64c@proxmox.com \
--to=s.hanreich@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
--cc=t.lamprecht@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