← Back to team overview

sts-sponsors team mailing list archive

[Merge] ~ack/maas:vmhost-select-non-doscivered-ip into maas:master

 

Alberto Donato has proposed merging ~ack/maas:vmhost-select-non-doscivered-ip into maas:master.

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



Requested reviews:
  MAAS Maintainers (maas-maintainers)

For more details, see:
https://code.launchpad.net/~ack/maas/+git/maas/+merge/436764
-- 
Your team MAAS Maintainers is requested to review the proposed merge of ~ack/maas:vmhost-select-non-doscivered-ip into maas:master.
diff --git a/src/metadataserver/api_twisted.py b/src/metadataserver/api_twisted.py
index 950b53d..e52aa4d 100644
--- a/src/metadataserver/api_twisted.py
+++ b/src/metadataserver/api_twisted.py
@@ -16,7 +16,7 @@ from twisted.web.resource import Resource
 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.enum import IPADDRESS_TYPE, NODE_STATUS, NODE_TYPE
 from maasserver.forms.pods import PodForm
 from maasserver.models import Interface, Node, StaticIPAddress
 from maasserver.preseed import CURTIN_INSTALL_LOG
@@ -287,6 +287,7 @@ def _get_ip_address_for_vmhost(node):
 
     ip = (
         StaticIPAddress.objects.exclude(ip__isnull=True)
+        .exclude(alloc_type=IPADDRESS_TYPE.DISCOVERED)
         .filter(interface__in=interface_ids)
         .values_list("ip", flat=True)
         .first()
diff --git a/src/metadataserver/tests/test_api_twisted.py b/src/metadataserver/tests/test_api_twisted.py
index d3aa366..3fef142 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_pick_right_address_with_discovered(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