]> git.proxmox.com Git - pve-container.git/commitdiff
vm_create|restore: create ips in ipam
authorAlexandre Derumier <aderumier@odiso.com>
Fri, 17 Nov 2023 11:40:07 +0000 (12:40 +0100)
committerWolfgang Bumiller <w.bumiller@proxmox.com>
Tue, 21 Nov 2023 08:26:03 +0000 (09:26 +0100)
also delete ips on create failure

Co-Authored-by: Stefan Hanreich <s.hanreich@proxmox.com>
Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
src/PVE/API2/LXC.pm
src/PVE/LXC.pm

index 883910550cceae9e881403d44571d13ad3f1f173..e15de28ee3e4eac8f2cb30d5c91521ec699e796f 100644 (file)
@@ -475,9 +475,11 @@ __PACKAGE__->register_method({
                    if ($restore) {
                        print "merging backed-up and given configuration..\n";
                        PVE::LXC::Create::restore_configuration($vmid, $storage_cfg, $archive, $rootdir, $conf, !$is_root, $unique, $skip_fw_config_restore);
+                       PVE::LXC::create_ifaces_ipams_ips($conf, $vmid) if $unique;
                        my $lxc_setup = PVE::LXC::Setup->new($conf, $rootdir);
                        $lxc_setup->template_fixup($conf);
                    } else {
+                       PVE::LXC::create_ifaces_ipams_ips($conf, $vmid);
                        my $lxc_setup = PVE::LXC::Setup->new($conf, $rootdir); # detect OS
                        PVE::LXC::Config->write_config($vmid, $conf); # safe config (after OS detection)
                        $lxc_setup->post_create_hook($password, $ssh_keys);
@@ -503,6 +505,8 @@ __PACKAGE__->register_method({
                PVE::LXC::Config->write_config($vmid, $conf);
            };
            if (my $err = $@) {
+               eval { PVE::LXC::delete_ifaces_ipams_ips($conf, $vmid) };
+               warn $@ if $@;
                PVE::LXC::destroy_disks($storage_cfg, $vollist);
                if ($destroy_config_on_error) {
                    eval { PVE::LXC::Config->destroy_config($vmid) };
index 4472e0fe5ea03128a6f99368d8a7c111655b6a8e..2dad83dd27fce0d3faab1eb7328a2c2a5da806bb 100644 (file)
@@ -2758,6 +2758,19 @@ sub thaw($) {
     }
 }
 
+sub create_ifaces_ipams_ips {
+    my ($conf, $vmid) = @_;
+
+    return if !$have_sdn;
+
+    for my $opt (keys %$conf) {
+       next if $opt !~ m/^net(\d+)$/;
+       my $net = PVE::QemuServer::parse_net($conf->{$opt});
+       next if $net->{type} ne 'veth';
+        PVE::Network::SDN::Vnets::add_next_free_cidr($net->{bridge}, $conf->{hostname}, $net->{hwaddr}, $vmid, undef, 1);
+    }
+}
+
 sub delete_ifaces_ipams_ips {
     my ($conf, $vmid) = @_;