sts-sponsors team mailing list archive
-
sts-sponsors team
-
Mailing list archive
-
Message #03374
[Merge] ~troyanov/maas:create-pod into maas:master
Anton Troyanov has proposed merging ~troyanov/maas:create-pod into maas:master.
Commit message:
feat(vault): add create_pod method to create Pods
Requested reviews:
MAAS Maintainers (maas-maintainers)
For more details, see:
https://code.launchpad.net/~troyanov/maas/+git/maas/+merge/433361
--
Your team MAAS Maintainers is requested to review the proposed merge of ~troyanov/maas:create-pod into maas:master.
diff --git a/src/maasserver/models/bmc.py b/src/maasserver/models/bmc.py
index a01fbb9..ada0eeb 100644
--- a/src/maasserver/models/bmc.py
+++ b/src/maasserver/models/bmc.py
@@ -729,6 +729,26 @@ class PodManager(BaseBMCManager):
raise PermissionDenied()
+def create_pod(**kwargs):
+ power_type = kwargs.get("power_type", None)
+ power_parameters = kwargs.get("power_parameters", {})
+
+ power_parameters, secrets = sanitise_power_parameters(
+ power_type, power_parameters
+ )
+ kwargs["power_parameters"] = power_parameters
+
+ pod = Pod.objects.create(**kwargs)
+
+ if secrets:
+ from maasserver.secrets import SecretManager
+
+ SecretManager().set_composite_secret(
+ "power-parameters", secrets, obj=pod.as_bmc()
+ )
+ return pod
+
+
class Pod(BMC):
"""A `Pod` represents a `BMC` that controls multiple machines."""
@@ -1599,8 +1619,9 @@ class Pod(BMC):
if not self.default_storage_pool and possible_default:
self.default_storage_pool = possible_default
if upgrade_default_pool is not None:
- self.power_parameters = self.get_power_parameters().copy()
- self.power_parameters.pop("default_storage_pool", None)
+ power_parameters = self.get_power_parameters().copy()
+ power_parameters.pop("default_storage_pool", None)
+ self.set_power_parameters(power_parameters)
self.save()
elif self.default_storage_pool in storage_pools_by_id.values():
self.default_storage_pool = possible_default
@@ -1629,7 +1650,7 @@ class Pod(BMC):
# so changing the value of the dict doesn't cause it to be updated.
power_params = pod_power_parameters.copy()
del power_params["password"]
- self.power_parameters = power_params
+ self.set_power_parameters(power_params)
self.version = discovered_pod.version
self.architectures = discovered_pod.architectures
if not self.name or cluster is not None and discovered_pod.name:
diff --git a/src/maasserver/models/tests/test_bmc.py b/src/maasserver/models/tests/test_bmc.py
index b766810..47300fd 100644
--- a/src/maasserver/models/tests/test_bmc.py
+++ b/src/maasserver/models/tests/test_bmc.py
@@ -917,7 +917,7 @@ class TestPod(MAASServerTestCase, PodTestMixin):
pod2 = Pod(
power_type="lxd",
name=pod1.name,
- power_parameters={"project": pod1.power_parameters["project"]},
+ power_parameters={"project": pod1.get_power_parameters()["project"]},
)
self.assertRaises(IntegrityError, pod2.sync, discovered_pod, user)
diff --git a/src/maasserver/vmhost.py b/src/maasserver/vmhost.py
index 05af032..9ab7d9d 100644
--- a/src/maasserver/vmhost.py
+++ b/src/maasserver/vmhost.py
@@ -18,6 +18,7 @@ from maasserver.models import (
Tag,
VMCluster,
)
+from maasserver.models.bmc import create_pod
from maasserver.rpc import getClientFromIdentifiers
from maasserver.utils import absolute_reverse
from maasserver.utils.orm import post_commit_do, transactional
@@ -194,7 +195,7 @@ def _get_or_create_clustered_host(
hints__cluster=cluster,
)
except Pod.DoesNotExist:
- host = Pod.objects.create(
+ host = create_pod(
name=discovered_vmhost.name,
architectures=discovered_vmhost.architectures,
capabilities=discovered_vmhost.capabilities,
Follow ups