From cf991adad595d04dd238e9ba64f49f0cc93d7fe6 Mon Sep 17 00:00:00 2001 From: catborise Date: Sun, 1 Nov 2026 17:59:39 +0300 Subject: [PATCH] fix(computes): a VM migrates to its host's panel address when it has no migration address Without a migration address libvirt sends a migrating VM to the destination's own host name, which the source host often cannot resolve: a live migration to a host added without one failed ("Unable to resolve address ..."), also when the other host had one. The destination's address on the Computes page, which the panel reaches it at, is now the default; the migration address stays for another network. A host the panel reaches on its loopback keeps libvirt's default. --- README.md | 2 +- .../migrations/0008_migration_address_help.py | 19 +++++++++++++++ computes/models.py | 20 +++++++++------- computes/tests/test_migration_address.py | 12 ++++++++-- instances/tests/test_migrate_job.py | 20 ++++++++++++++++ instances/utils.py | 2 +- locale/tr/LC_MESSAGES/django.mo | Bin 157510 -> 157468 bytes locale/tr/LC_MESSAGES/django.po | 22 ++++++++++-------- 8 files changed, 74 insertions(+), 23 deletions(-) create mode 100644 computes/migrations/0008_migration_address_help.py diff --git a/README.md b/README.md index e7c62e22..8890a49b 100644 --- a/README.md +++ b/README.md @@ -296,7 +296,7 @@ A compute node is a KVM host the panel manages over libvirt. Firewall: the compute's VNC ports (`5900`–`65535`) must accept connections **only** from the panel's IP, never from public networks. -For VM migration between computes, define shared storage as a storage pool on every host (a VM migrates only when its disk, backing and ISO files and block devices are volumes of the destination's pools), and where the hosts cannot resolve each other's names, set each compute's **Migration address** on its edit page. A VM's disks can instead be copied into storage pools of the destination during the migration: after choosing the destination, the **Disks** list shows each disk file and the destination pools that can take it (directory, filesystem and NFS pools; one with a file of the same name refuses the copy), and a disk on storage both hosts share can also stay there. Plain raw or qcow2 disks without a backing file are copied; a shut-off VM is started paused for the copy, its CPUs never run, and is shut off on the destination. A shut-off VM with a TPM (Windows 11) migrates the same way, also without copies: only a running VM's migration carries its TPM state. With **Delete the source files of copied disks** the source files go after the migration, unless another VM or volume uses them. The copy goes through the destination's migration port range (49152-49215 by default), like the memory. +For VM migration between computes, define shared storage as a storage pool on every host (a VM migrates only when its disk, backing and ISO files and block devices are volumes of the destination's pools), and the hosts send a migrating VM to the destination's address on the panel's Computes page; for another network (a dedicated migration network), set the compute's **Migration address** on its edit page. A VM's disks can instead be copied into storage pools of the destination during the migration: after choosing the destination, the **Disks** list shows each disk file and the destination pools that can take it (directory, filesystem and NFS pools; one with a file of the same name refuses the copy), and a disk on storage both hosts share can also stay there. Plain raw or qcow2 disks without a backing file are copied; a shut-off VM is started paused for the copy, its CPUs never run, and is shut off on the destination. A shut-off VM with a TPM (Windows 11) migrates the same way, also without copies: only a running VM's migration carries its TPM state. With **Delete the source files of copied disks** the source files go after the migration, unless another VM or volume uses them. The copy goes through the destination's migration port range (49152-49215 by default), like the memory. If libvirt warns `Host SMBIOS information is not available`, install `dmidecode` (`apt-get`, `dnf` or `zypper install -y dmidecode`) and restart `libvirtd`. diff --git a/computes/migrations/0008_migration_address_help.py b/computes/migrations/0008_migration_address_help.py new file mode 100644 index 00000000..1e0a7215 --- /dev/null +++ b/computes/migrations/0008_migration_address_help.py @@ -0,0 +1,19 @@ +# Generated by Django 5.2.18 on 2026-11-01 14:52 + +import computes.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('computes', '0007_gstfsd_key'), + ] + + operations = [ + migrations.AlterField( + model_name='compute', + name='migration_address', + field=models.CharField(blank=True, default='', help_text='IP address or host name the other hosts send migrating VMs to; empty: the address the panel reaches the host at', max_length=64, validators=[computes.validators.validate_migration_address], verbose_name='migration address'), + ), + ] diff --git a/computes/models.py b/computes/models.py index 91633534..7a078e42 100644 --- a/computes/models.py +++ b/computes/models.py @@ -26,7 +26,7 @@ class Compute(Model): validators=[validate_migration_address], help_text=_( "IP address or host name the other hosts send migrating VMs to; " - "empty: the host's own host name, which they must be able to resolve" + "empty: the address the panel reaches the host at" ), ) gstfsd_key = CharField( @@ -43,16 +43,18 @@ class Compute(Model): @property def migration_uri(self): - """The native migration URI for VMs migrated to this host, or None for - libvirt's default.""" - if not self.migration_address: - return None + """The native migration URI for VMs migrated to this host: its + migration address, or else the address the panel reaches it at, so + that the other hosts need not resolve its own name. None, libvirt's + default (that name), for a host the panel reaches on its loopback.""" + address = self.migration_address or self.hostname try: - if ip_address(self.migration_address).version == 6: - return f"tcp://[{self.migration_address}]" + ip = ip_address(address) except ValueError: - pass - return f"tcp://{self.migration_address}" + ip = None + if not self.migration_address and (address.lower().rstrip(".") == "localhost" or ip and ip.is_loopback): + return None + return f"tcp://[{address}]" if ip and ip.version == 6 else f"tcp://{address}" @cached_property def status(self): diff --git a/computes/tests/test_migration_address.py b/computes/tests/test_migration_address.py index 3cb46450..0427abac 100644 --- a/computes/tests/test_migration_address.py +++ b/computes/tests/test_migration_address.py @@ -26,11 +26,19 @@ class MigrationAddressTests(TestCase): validate_migration_address(value) def test_migration_uri(self): - cases = {"": None, "192.0.2.12": "tcp://192.0.2.12", "kvm102.example.org": "tcp://kvm102.example.org", + cases = {"192.0.2.12": "tcp://192.0.2.12", "kvm102.example.org": "tcp://kvm102.example.org", "2001:db8::12": "tcp://[2001:db8::12]"} for address, uri in cases.items(): with self.subTest(address=address): - self.assertEqual(Compute(migration_address=address).migration_uri, uri) + self.assertEqual(Compute(hostname="192.0.2.40", migration_address=address).migration_uri, uri) + + def test_without_a_migration_address_the_panel_s_address_of_the_host_is_used(self): + # no DNS name of the host's own; a host the panel reaches on its loopback: libvirt's default + cases = {"192.0.2.40": "tcp://192.0.2.40", "kvm103.example.org": "tcp://kvm103.example.org", + "localhost": None, "LOCALHOST": None, "localhost.": None, "127.0.0.1": None} + for hostname, uri in cases.items(): + with self.subTest(hostname=hostname): + self.assertEqual(Compute(hostname=hostname, migration_address="").migration_uri, uri) def test_the_compute_form_saves_it(self): self.client.force_login(get_user_model().objects.create_superuser("ma-admin", "ma@example.com", "pw")) diff --git a/instances/tests/test_migrate_job.py b/instances/tests/test_migrate_job.py index ed4ef8f1..f538c6f4 100644 --- a/instances/tests/test_migrate_job.py +++ b/instances/tests/test_migrate_job.py @@ -169,6 +169,26 @@ class MigrateJobTestCase(TransactionTestCase): get_kind(op.kind).run(op, ctx) self.assertIn("Unable to resolve address 'kvm2.example.com'", public_error_text(raised.exception)) + def test_each_way_goes_to_the_destination_s_migration_address_or_its_panel_address(self): + # one host with a migration address, the other without: no name resolution either way + self.dest.migration_address = "" + self.dest.save() + self.source.migration_address = "198.51.100.50" + self.source.save() + for target, uri, key in ((self.dest, "tcp://192.0.2.51", "key-mig00011"), (self.source, "tcp://198.51.100.50", "key-mig00012")): + with self.subTest(target=target.name): + self.vm.compute = self.source if target == self.dest else self.dest + self.vm.save() + self.client.post(reverse("instances:migrate", args=[self.vm.pk]), + {"compute_id": target.pk, "submission_key": key, "live_migrate": "true"}) + op = Operation.objects.latest("created_at") + ctx = self.start(op) + get_kind(op.kind).precheck(op, ctx) + get_kind(op.kind).run(op, ctx) + self.assertEqual(self.dest_conn.moveto.call_args.kwargs["uri"], uri) + Operation.objects.all().delete() + Claim.objects.all().delete() + def test_cancel_and_progress_ask_the_source_vm(self): op = self.queue(live_migrate="true") with patch("instances.jobs.wvmInstance") as proxy: diff --git a/instances/utils.py b/instances/utils.py index 44371406..e27334c2 100644 --- a/instances/utils.py +++ b/instances/utils.py @@ -340,7 +340,7 @@ def record_migration(instance, new_compute): def migration_target(compute): """The destination for the log: its host name, and the migration address - when one is set and differs.""" + when one is set and differs (else the migration goes to the host name).""" if compute.migration_address not in ("", compute.hostname): return _("%(hostname)s via %(address)s") % {"hostname": compute.hostname, "address": compute.migration_address} return compute.hostname diff --git a/locale/tr/LC_MESSAGES/django.mo b/locale/tr/LC_MESSAGES/django.mo index fdab93881d9e95774bab1b18dabbda8f748c64a0..afad99a47146573f1722fc10e6806e2ae2a59f4f 100644 GIT binary patch delta 23222 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 N^zwer?J4z_|3Bo1J}>|P delta 23264 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 diff --git a/locale/tr/LC_MESSAGES/django.po b/locale/tr/LC_MESSAGES/django.po index 8102ee44..15c6af53 100644 --- a/locale/tr/LC_MESSAGES/django.po +++ b/locale/tr/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-11-01 14:22+0000\n" +"POT-Creation-Date: 2026-11-01 15:30+0000\n" "PO-Revision-Date: 2020-11-04 12:00+0000\n" "Last-Translator: catborise , 2020\n" "Language-Team: Turkish (https://www.transifex.com/catborise/teams/110663/" @@ -1797,10 +1797,8 @@ msgstr "taşıma adresi" #: computes/models.py:28 msgid "" "IP address or host name the other hosts send migrating VMs to; empty: the " -"host's own host name, which they must be able to resolve" -msgstr "" -"Diğer sunucuların taşınan sanal makineleri gönderdiği IP adresi veya sunucu " -"adı; boş: sunucunun kendi adı, diğer sunucular bu adı çözümleyebilmelidir" +"address the panel reaches the host at" +msgstr "Diğer sunucuların taşınan sanal makineleri gönderdiği IP adresi veya ana bilgisayar adı; boş: panelin bu sunucuya ulaştığı adres" #: computes/models.py:33 computes/templates/computes/form.html:34 msgid "gstfsd key" @@ -2816,15 +2814,15 @@ msgstr "Sanal makineyi taşı" msgid "Migrating the VM" msgstr "Sanal makine taşınıyor" -#: instances/jobs.py:927 +#: instances/jobs.py:929 msgid "libvirt is still migrating the VM" msgstr "libvirt sanal makineyi hâlâ taşıyor" -#: instances/jobs.py:968 +#: instances/jobs.py:970 msgid "Move disk" msgstr "Diski taşı" -#: instances/jobs.py:999 +#: instances/jobs.py:1001 msgid "Copying the disk" msgstr "Disk kopyalanıyor" @@ -3909,7 +3907,9 @@ msgstr "" #: instances/templates/instances/destroy_instance_form.html:47 msgid "" "Its TPM state is deleted with it, and the keys in it, such as BitLocker's." -msgstr "TPM durumu da onunla birlikte silinir, içindeki anahtarlar da, örneğin BitLocker'ınkiler." +msgstr "" +"TPM durumu da onunla birlikte silinir, içindeki anahtarlar da, örneğin " +"BitLocker'ınkiler." #: instances/templates/instances/destroy_instance_form.html:50 msgid "This cannot be undone." @@ -5109,7 +5109,9 @@ msgstr "Kaynak sanal makine: %(name)s" msgid "" "The clone gets a new, empty TPM: keys in this VM's TPM, such as BitLocker's, " "do not come along." -msgstr "Klon yeni ve boş bir TPM alır: bu sanal makinenin TPM'indeki anahtarlar, örneğin BitLocker'ınkiler, klona geçmez." +msgstr "" +"Klon yeni ve boş bir TPM alır: bu sanal makinenin TPM'indeki anahtarlar, " +"örneğin BitLocker'ınkiler, klona geçmez." #: instances/templates/instances/settings_tab.html:765 #: instances/templates/instances/settings_tab.html:776