From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 02FF3706D9 for ; Thu, 24 Jun 2021 15:35:07 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id EEEBEC2B6 for ; Thu, 24 Jun 2021 15:35:01 +0200 (CEST) Received: from kvmformation3.odiso.net (globalOdiso.M6Lille.odiso.net [89.248.211.242]) by firstgate.proxmox.com (Proxmox) with ESMTP id 1F6BBC26C for ; Thu, 24 Jun 2021 15:34:43 +0200 (CEST) Received: by kvmformation3.odiso.net (Postfix, from userid 0) id 7745BDE288; Thu, 24 Jun 2021 15:34:26 +0200 (CEST) From: Alexandre Derumier To: pve-devel@lists.proxmox.com Date: Thu, 24 Jun 2021 15:34:22 +0200 Message-Id: <20210624133425.3624704-5-aderumier@odiso.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210624133425.3624704-1-aderumier@odiso.com> References: <20210624133425.3624704-1-aderumier@odiso.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 1.444 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% HEADER_FROM_DIFFERENT_DOMAINS 0.25 From and EnvelopeFrom 2nd level mail domains are different KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KHOP_HELO_FCRDNS 0.399 Relay HELO differs from its IP's reverse DNS NO_DNS_FOR_FROM 0.001 Envelope sender has no MX or A DNS records T_SPF_HELO_TEMPERROR 0.01 SPF: test of HELO record failed (temperror) T_SPF_TEMPERROR 0.01 SPF: test of record failed (temperror) Subject: [pve-devel] [PATCH qemu-server 4/7] add vmconfig_update_net_ip on device hotplug X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 24 Jun 2021 13:35:07 -0000 Signed-off-by: Alexandre Derumier --- PVE/QemuServer.pm | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 8d1f177..d1507d6 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -4709,6 +4709,8 @@ sub vmconfig_hotplug_pending { # some changes can be done without hotplug vmconfig_update_net($storecfg, $conf, $hotplug_features->{network}, $vmid, $opt, $value, $arch, $machine_type); + + vmconfig_update_net_ip($conf, $vmid, $1); } elsif (is_valid_drivename($opt)) { die "skip\n" if $opt eq 'efidisk0'; # some changes can be done without hotplug @@ -4820,6 +4822,10 @@ sub vmconfig_apply_pending { if (defined($conf->{$opt}) && is_valid_drivename($opt)) { vmconfig_register_unused_drive($storecfg, $vmid, $conf, parse_drive($opt, $conf->{$opt})) } + + if($opt =~ m/net(\d+)$/) { + vmconfig_update_net_ip($conf, $vmid, $1); + } }; if (my $err = $@) { $add_apply_error->($opt, $err); @@ -4832,6 +4838,32 @@ sub vmconfig_apply_pending { PVE::QemuConfig->write_config($vmid, $conf); } +sub vmconfig_update_net_ip { + my ($conf, $vmid, $id) = @_; + + my $netid = "net$id"; + my $ipconfigid = "ipconfig$id"; + my $net = PVE::QemuServer::parse_net($conf->{pending}->{$netid}); + my $oldnet = PVE::QemuServer::parse_net($conf->{$netid}) if $conf->{$netid}; + my $hostname = $conf->{name}; + my $oldhostname = "pending.".$hostname; + + PVE::QemuServer::Ipam::update_net_ip($net, $net, $hostname, $oldhostname, "vm:$vmid net:$netid"); + eval { + PVE::QemuServer::Ipam::delete_net_ip($hostname, $oldnet, undef, "vm:$vmid net:$netid") if $oldnet; + }; + + #set ip info as pending in cloud-init config + my $ipconfig = {}; + $ipconfig->{ip} = $net->{ip} if $net->{ip}; + $ipconfig->{ip6} = $net->{ip6} if $net->{ip6}; + $ipconfig->{gw} = $net->{gw} if $net->{gw}; + $ipconfig->{gw6} = $net->{gw6} if $net->{gw6}; + my $value = PVE::QemuServer::print_ipconfig($ipconfig); + $conf->{pending}->{$ipconfigid} = $value; + +} + sub vmconfig_update_net { my ($storecfg, $conf, $hotplug, $vmid, $opt, $value, $arch, $machine_type) = @_; -- 2.20.1