← Back to team overview

sts-sponsors team mailing list archive

[Merge] ~bjornt/maas:bug-2009805-3.3 into maas:3.3

 

Björn Tillenius has proposed merging ~bjornt/maas:bug-2009805-3.3 into maas:3.3.

Commit message:
Bug #2009805: machine deploy install_kvm=True fails

exclude discovered IPs when selecting which to use for VM hosts deploys

(cherry picked from commit 91442ef7aecbcd2caf345b8abad579876f5d9448)



Requested reviews:
  MAAS Maintainers (maas-maintainers)
Related bugs:
  Bug #2009805 in MAAS: "[3.3.1 rc] machine deploy install_kvm=True fails"
  https://bugs.launchpad.net/maas/+bug/2009805

For more details, see:
https://code.launchpad.net/~bjornt/maas/+git/maas/+merge/438762
-- 
Your team MAAS Maintainers is requested to review the proposed merge of ~bjornt/maas:bug-2009805-3.3 into maas:3.3.
diff --git a/src/metadataserver/api_twisted.py b/src/metadataserver/api_twisted.py
index 950b53d..3b26dac 100644
--- a/src/metadataserver/api_twisted.py
+++ b/src/metadataserver/api_twisted.py
@@ -18,7 +18,7 @@ from twisted.web.server import NOT_DONE_YET
 from maasserver.api.utils import extract_oauth_key_from_auth_header
 from maasserver.enum import NODE_STATUS, NODE_TYPE
 from maasserver.forms.pods import PodForm
-from maasserver.models import Interface, Node, StaticIPAddress
+from maasserver.models import Interface, Node
 from maasserver.preseed import CURTIN_INSTALL_LOG
 from maasserver.secrets import SecretManager
 from maasserver.utils.orm import (
@@ -285,12 +285,9 @@ def _get_ip_address_for_vmhost(node):
         )
         interface_ids |= new_ids
 
-    ip = (
-        StaticIPAddress.objects.exclude(ip__isnull=True)
-        .filter(interface__in=interface_ids)
-        .values_list("ip", flat=True)
-        .first()
-    )
+    ip = node.ip_addresses(
+        ifaces=Interface.objects.filter(id__in=interface_ids)
+    )[0]
     if ":" in ip:
         ip = f"[{ip}]"
     return ip
diff --git a/src/metadataserver/tests/test_api_twisted.py b/src/metadataserver/tests/test_api_twisted.py
index d3aa366..e84c837 100644
--- a/src/metadataserver/tests/test_api_twisted.py
+++ b/src/metadataserver/tests/test_api_twisted.py
@@ -18,7 +18,7 @@ from twisted.internet.defer import inlineCallbacks, succeed
 from twisted.web.server import NOT_DONE_YET
 from twisted.web.test.requesthelper import DummyRequest
 
-from maasserver.enum import INTERFACE_TYPE, NODE_STATUS
+from maasserver.enum import INTERFACE_TYPE, IPADDRESS_TYPE, NODE_STATUS
 from maasserver.models import Event, Pod
 from maasserver.models.signals.testing import SignalsDisabled
 from maasserver.models.timestampedmodel import now
@@ -1241,6 +1241,42 @@ class TestCreateVMHostForDeployment(MAASServerTestCase):
             )
         )
 
+    def test_creates_vmhost_prefer_not_discovered_addresses(self):
+        user = factory.make_User()
+        node = factory.make_Node_with_Interface_on_Subnet(
+            owner=user,
+            status=NODE_STATUS.DEPLOYING,
+            agent_name="maas-kvm-pod",
+            install_kvm=True,
+            register_vmhost=True,
+        )
+        factory.make_StaticIPAddress(
+            interface=node.boot_interface,
+            alloc_type=IPADDRESS_TYPE.DISCOVERED,
+        )
+        ip = factory.make_StaticIPAddress(
+            interface=node.boot_interface,
+            alloc_type=IPADDRESS_TYPE.AUTO,
+        )
+        secret_manager = SecretManager()
+        secret_manager.set_composite_secret(
+            "deploy-metadata",
+            {
+                "virsh-password": "xyz123",
+            },
+            obj=node,
+        )
+        _create_vmhost_for_deployment(node)
+        vmhost = Pod.objects.get(power_type="virsh")
+        self.assertEqual(node.status, NODE_STATUS.DEPLOYED)
+        addr = ip.ip
+        if IPAddress(addr).version == 6:
+            addr = f"[{addr}]"
+        self.assertEqual(
+            vmhost.power_parameters.get("power_address"),
+            f"qemu+ssh://virsh@{addr}/system",
+        )
+
     def test_creates_vmhost_pick_right_interface_address(self):
         user = factory.make_User()
         node = factory.make_Node_with_Interface_on_Subnet(

Follow ups