Björn Tillenius has proposed merging ~bjornt/maas:move-metadataserver-script-models into maas:master with ~bjornt/maas:move-metadataserver-node-models as a prerequisite.
Commit message: Move Script metadataserver models to maasserver. Requested reviews: MAAS Maintainers (maas-maintainers) For more details, see: https://code.launchpad.net/~bjornt/maas/+git/maas/+merge/441920 -- Your team MAAS Committers is subscribed to branch maas:master.
diff --git a/src/maasserver/api/commissioning_scripts.py b/src/maasserver/api/commissioning_scripts.py index 477b688..bf1e6e6 100644 --- a/src/maasserver/api/commissioning_scripts.py +++ b/src/maasserver/api/commissioning_scripts.py @@ -18,9 +18,9 @@ from maasserver.audit import create_audit_event from maasserver.enum import ENDPOINT from maasserver.exceptions import MAASAPIValidationError from maasserver.forms.script import ScriptForm +from maasserver.models import Script from metadataserver.enum import SCRIPT_TYPE from metadataserver.fields import Bin -from metadataserver.models import Script from provisioningserver.events import EVENT_TYPES diff --git a/src/maasserver/api/nodedevices.py b/src/maasserver/api/nodedevices.py index 354150a..f3243f7 100644 --- a/src/maasserver/api/nodedevices.py +++ b/src/maasserver/api/nodedevices.py @@ -11,8 +11,8 @@ from maasserver.api.utils import get_optional_param from maasserver.exceptions import MAASAPIValidationError from maasserver.models import Node, NodeDevice from maasserver.models.nodedevice import translate_bus +from maasserver.models.script import translate_hardware_type from maasserver.permissions import NodePermission -from metadataserver.models.script import translate_hardware_type class NodeDevicesHandler(OperationsHandler): diff --git a/src/maasserver/api/nodes.py b/src/maasserver/api/nodes.py index 41eeeab..4294776 100644 --- a/src/maasserver/api/nodes.py +++ b/src/maasserver/api/nodes.py @@ -46,6 +46,7 @@ from maasserver.forms import BulkNodeSetZoneForm from maasserver.forms.ephemeral import TestForm from maasserver.models import Filesystem, Interface, Node, OwnerData from maasserver.models.nodeprobeddetails import get_single_probed_details +from maasserver.models.scriptset import get_status_from_qs from maasserver.node_constraint_filter_forms import ReadNodesForm from maasserver.permissions import NodePermission from maasserver.utils.forms import compose_invalid_choice_text @@ -56,7 +57,6 @@ from metadataserver.enum import ( SCRIPT_STATUS, SCRIPT_STATUS_CHOICES, ) -from metadataserver.models.scriptset import get_status_from_qs NODES_SELECT_RELATED = ( "bmc", diff --git a/src/maasserver/api/results.py b/src/maasserver/api/results.py index 4b16445..424d7a9 100644 --- a/src/maasserver/api/results.py +++ b/src/maasserver/api/results.py @@ -11,10 +11,9 @@ from formencode.validators import Int from maasserver.api.support import OperationsHandler from maasserver.api.utils import get_optional_list, get_optional_param -from maasserver.models import Node +from maasserver.models import Node, ScriptResult from maasserver.permissions import NodePermission from metadataserver.enum import SCRIPT_STATUS -from metadataserver.models import ScriptResult class NodeResultsHandler(OperationsHandler): diff --git a/src/maasserver/api/scriptresults.py b/src/maasserver/api/scriptresults.py index 8ca1855..6051a56 100644 --- a/src/maasserver/api/scriptresults.py +++ b/src/maasserver/api/scriptresults.py @@ -22,11 +22,10 @@ from piston3.utils import rc from maasserver.api.support import admin_method, operation, OperationsHandler from maasserver.api.utils import get_optional_param from maasserver.exceptions import MAASAPIValidationError -from maasserver.models import Node +from maasserver.models import Node, ScriptSet +from maasserver.models.script import translate_hardware_type +from maasserver.models.scriptset import translate_result_type from maasserver.permissions import NodePermission -from metadataserver.models import ScriptSet -from metadataserver.models.script import translate_hardware_type -from metadataserver.models.scriptset import translate_result_type def fmt_time(dt): diff --git a/src/maasserver/api/scripts.py b/src/maasserver/api/scripts.py index 40b2221..6f3f2ea 100644 --- a/src/maasserver/api/scripts.py +++ b/src/maasserver/api/scripts.py @@ -19,8 +19,8 @@ from maasserver.audit import create_audit_event from maasserver.enum import ENDPOINT from maasserver.exceptions import MAASAPIValidationError from maasserver.forms.script import ScriptForm -from metadataserver.models import Script -from metadataserver.models.script import ( +from maasserver.models import Script +from maasserver.models.script import ( translate_hardware_type, translate_script_type, ) diff --git a/src/maasserver/api/tests/test_commissioning.py b/src/maasserver/api/tests/test_commissioning.py index d413ddc..6b4903c 100644 --- a/src/maasserver/api/tests/test_commissioning.py +++ b/src/maasserver/api/tests/test_commissioning.py @@ -12,7 +12,7 @@ import random from django.urls import reverse from piston3.utils import rc -from maasserver.models import Event +from maasserver.models import Event, Script from maasserver.testing.api import APITestCase from maasserver.testing.factory import factory from maasserver.testing.matchers import HasStatusCode @@ -24,7 +24,6 @@ from metadataserver.enum import ( SCRIPT_TYPE, ) from metadataserver.fields import Bin -from metadataserver.models import Script from provisioningserver.events import AUDIT diff --git a/src/maasserver/api/tests/test_machines.py b/src/maasserver/api/tests/test_machines.py index 821a2ce..0104f68 100644 --- a/src/maasserver/api/tests/test_machines.py +++ b/src/maasserver/api/tests/test_machines.py @@ -26,6 +26,7 @@ import maasserver.forms as forms_module from maasserver.forms.pods import ComposeMachineForm, ComposeMachineForPodsForm from maasserver.models import Config, Domain, Machine, Node from maasserver.models import node as node_module +from maasserver.models import ScriptSet from maasserver.models.node import RELEASABLE_STATUSES from maasserver.node_constraint_filter_forms import AcquireNodeForm from maasserver.rpc.testing.fixtures import MockLiveRegionToClusterRPCFixture @@ -50,7 +51,6 @@ from maastesting.matchers import ( from maastesting.testcase import MAASTestCase from maastesting.twisted import always_succeed_with from metadataserver.enum import SCRIPT_TYPE -from metadataserver.models import ScriptSet from provisioningserver.rpc import cluster as cluster_module from provisioningserver.utils.enum import map_enum diff --git a/src/maasserver/api/tests/test_node.py b/src/maasserver/api/tests/test_node.py index 519a583..652eeec 100644 --- a/src/maasserver/api/tests/test_node.py +++ b/src/maasserver/api/tests/test_node.py @@ -16,6 +16,7 @@ from maasserver.enum import NODE_STATUS, NODE_STATUS_CHOICES, POWER_STATE from maasserver.models import Config, Node from maasserver.models import node as node_module from maasserver.models import NodeKey +from maasserver.models.scriptset import get_status_from_qs from maasserver.testing.api import APITestCase from maasserver.testing.architecture import make_usable_architecture from maasserver.testing.factory import factory @@ -35,7 +36,6 @@ from metadataserver.enum import ( SCRIPT_STATUS_CHOICES, SCRIPT_TYPE, ) -from metadataserver.models.scriptset import get_status_from_qs from metadataserver.nodeinituser import get_node_init_user from provisioningserver.refresh.node_info_scripts import ( LLDP_OUTPUT_NAME, diff --git a/src/maasserver/api/tests/test_scripts.py b/src/maasserver/api/tests/test_scripts.py index 5b39fe3..f381e3c 100644 --- a/src/maasserver/api/tests/test_scripts.py +++ b/src/maasserver/api/tests/test_scripts.py @@ -13,7 +13,7 @@ import random from django.urls import reverse from testtools.matchers import ContainsAll -from maasserver.models import Event, VersionedTextFile +from maasserver.models import Event, Script, VersionedTextFile from maasserver.testing.api import APITestCase from maasserver.testing.factory import factory from maasserver.testing.matchers import HasStatusCode @@ -24,7 +24,6 @@ from metadataserver.enum import ( SCRIPT_PARALLEL_CHOICES, SCRIPT_TYPE_CHOICES, ) -from metadataserver.models import Script from provisioningserver.events import AUDIT diff --git a/src/maasserver/forms/__init__.py b/src/maasserver/forms/__init__.py index e87279e..040ad5b 100644 --- a/src/maasserver/forms/__init__.py +++ b/src/maasserver/forms/__init__.py @@ -959,8 +959,7 @@ class MachineForm(NodeForm): self.data["enable_hw_sync"] = enable_hw_sync def save(self, *args, **kwargs): - # Prevent circular imports - from metadataserver.models import ScriptSet + from maasserver.models import ScriptSet # LP:1807991 - If requested when creating a new Machine, set the status # to COMMISSIONING when the object is created. @@ -1207,8 +1206,7 @@ class AdminMachineForm(MachineForm, AdminNodeForm, WithPowerTypeMixin): def _setup_deployed_machine(self, machine): """Configure the Machine before it has been saved.""" - from maasserver.models import NodeKey - from metadataserver.models.scriptset import ScriptSet + from maasserver.models import NodeKey, ScriptSet machine.update_status(NODE_STATUS.DEPLOYED, validate_transition=False) machine.owner = self.request.user diff --git a/src/maasserver/forms/ephemeral.py b/src/maasserver/forms/ephemeral.py index 893ef37..16c165a 100644 --- a/src/maasserver/forms/ephemeral.py +++ b/src/maasserver/forms/ephemeral.py @@ -19,10 +19,10 @@ from django.forms import ( from django.http import QueryDict from maasserver.enum import NODE_STATUS +from maasserver.models import Script from maasserver.node_action import get_node_action from maasserver.utils.forms import set_form_error from metadataserver.enum import SCRIPT_TYPE -from metadataserver.models import Script class TestForm(Form): diff --git a/src/maasserver/forms/script.py b/src/maasserver/forms/script.py index e23b6ed..4e5d689 100644 --- a/src/maasserver/forms/script.py +++ b/src/maasserver/forms/script.py @@ -25,14 +25,14 @@ from maasserver.audit import create_audit_event from maasserver.enum import ENDPOINT from maasserver.fields import VersionedTextFileField from maasserver.forms.parameters import ParametersForm -from maasserver.utils.forms import set_form_error -from metadataserver.enum import HARDWARE_TYPE, SCRIPT_PARALLEL, SCRIPT_TYPE -from metadataserver.models import Script -from metadataserver.models.script import ( +from maasserver.models import Script +from maasserver.models.script import ( translate_hardware_type, translate_script_parallel, translate_script_type, ) +from maasserver.utils.forms import set_form_error +from metadataserver.enum import HARDWARE_TYPE, SCRIPT_PARALLEL, SCRIPT_TYPE from provisioningserver.events import EVENT_TYPES diff --git a/src/maasserver/forms/tests/test_script.py b/src/maasserver/forms/tests/test_script.py index 852a5e8..67cf1e0 100644 --- a/src/maasserver/forms/tests/test_script.py +++ b/src/maasserver/forms/tests/test_script.py @@ -17,7 +17,7 @@ from maasserver.forms.script import ( ScriptForm, TestingScriptForm, ) -from maasserver.models import Event, VersionedTextFile +from maasserver.models import Event, Script, VersionedTextFile from maasserver.testing.factory import factory from maasserver.testing.testcase import MAASServerTestCase from metadataserver.enum import ( @@ -28,7 +28,6 @@ from metadataserver.enum import ( SCRIPT_TYPE, SCRIPT_TYPE_CHOICES, ) -from metadataserver.models import Script from provisioningserver.events import AUDIT diff --git a/src/maasserver/migrations/maasserver/0297_move_metadata_script_models.py b/src/maasserver/migrations/maasserver/0297_move_metadata_script_models.py new file mode 100644 index 0000000..41a312d --- /dev/null +++ b/src/maasserver/migrations/maasserver/0297_move_metadata_script_models.py @@ -0,0 +1,394 @@ +# Generated by Django 3.2.12 on 2022-11-18 13:05 + +import datetime + +import django.contrib.postgres.fields +from django.db import migrations, models +import django.db.models.deletion + +import maasserver.fields +import maasserver.models.cleansave +import metadataserver.fields + + +class Migration(migrations.Migration): + dependencies = [ + ("maasserver", "0296_move_metadata_node_models"), + ("metadataserver", "0036_move_metadata_script_models"), + ] + + operations = [ + migrations.SeparateDatabaseAndState( + state_operations=[ + migrations.CreateModel( + name="Script", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("created", models.DateTimeField(editable=False)), + ("updated", models.DateTimeField(editable=False)), + ( + "name", + models.CharField(max_length=255, unique=True), + ), + ( + "title", + models.CharField(blank=True, max_length=255), + ), + ("description", models.TextField(blank=True)), + ( + "tags", + django.contrib.postgres.fields.ArrayField( + base_field=models.TextField(), + blank=True, + default=list, + null=True, + size=None, + ), + ), + ( + "script_type", + models.IntegerField( + choices=[ + (0, "Commissioning script"), + (2, "Testing script"), + ], + default=2, + ), + ), + ( + "hardware_type", + models.IntegerField( + choices=[ + (0, "Node"), + (1, "CPU"), + (2, "Memory"), + (3, "Storage"), + (4, "Network"), + (5, "GPU"), + ], + default=0, + ), + ), + ( + "parallel", + models.IntegerField( + choices=[ + (0, "Disabled"), + ( + 1, + "Run along other instances of this script", + ), + (2, "Run along any other script."), + ], + default=0, + ), + ), + ( + "results", + models.JSONField(blank=True, default=dict), + ), + ( + "parameters", + models.JSONField(blank=True, default=dict), + ), + ( + "packages", + models.JSONField(blank=True, default=dict), + ), + ( + "timeout", + models.DurationField( + default=datetime.timedelta(0) + ), + ), + ("destructive", models.BooleanField(default=False)), + ("default", models.BooleanField(default=False)), + ( + "for_hardware", + django.contrib.postgres.fields.ArrayField( + base_field=models.CharField(max_length=255), + blank=True, + default=list, + size=None, + ), + ), + ("may_reboot", models.BooleanField(default=False)), + ("recommission", models.BooleanField(default=False)), + ( + "apply_configured_networking", + models.BooleanField(default=False), + ), + ( + "script", + models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + to="maasserver.versionedtextfile", + ), + ), + ], + options={ + "abstract": False, + }, + bases=( + maasserver.models.cleansave.CleanSave, + models.Model, + ), + ), + migrations.CreateModel( + name="ScriptSet", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "last_ping", + models.DateTimeField(blank=True, null=True), + ), + ( + "result_type", + models.IntegerField( + choices=[ + (0, "Commissioning"), + (1, "Installation"), + (2, "Testing"), + ], + default=0, + editable=False, + ), + ), + ( + "power_state_before_transition", + models.CharField( + choices=[ + ("on", "On"), + ("off", "Off"), + ("unknown", "Unknown"), + ("error", "Error"), + ], + default="unknown", + editable=False, + max_length=10, + ), + ), + ( + "tags", + django.contrib.postgres.fields.ArrayField( + base_field=models.TextField(), + blank=True, + default=list, + null=True, + size=None, + ), + ), + ( + "node", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="maasserver.node", + ), + ), + ], + bases=( + maasserver.models.cleansave.CleanSave, + models.Model, + ), + ), + migrations.CreateModel( + name="ScriptResult", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("created", models.DateTimeField(editable=False)), + ("updated", models.DateTimeField(editable=False)), + ( + "parameters", + models.JSONField(blank=True, default=dict), + ), + ( + "status", + models.IntegerField( + choices=[ + (0, "Pending"), + (1, "Running"), + (2, "Passed"), + (3, "Failed"), + (4, "Timed out"), + (5, "Aborted"), + (6, "Degraded"), + (7, "Installing dependencies"), + (8, "Failed installing dependencies"), + (9, "Skipped"), + ( + 10, + "Applying custom network configuration", + ), + ( + 11, + "Failed to apply custom network configuration", + ), + ], + default=0, + ), + ), + ( + "exit_status", + models.IntegerField(blank=True, null=True), + ), + ( + "script_name", + models.CharField( + editable=False, max_length=255, null=True + ), + ), + ( + "output", + metadataserver.fields.BinaryField( + blank=True, default=b"", max_length=1048576 + ), + ), + ( + "stdout", + metadataserver.fields.BinaryField( + blank=True, default=b"", max_length=1048576 + ), + ), + ( + "stderr", + metadataserver.fields.BinaryField( + blank=True, default=b"", max_length=1048576 + ), + ), + ( + "result", + metadataserver.fields.BinaryField( + blank=True, default=b"", max_length=1048576 + ), + ), + ( + "started", + models.DateTimeField( + blank=True, editable=False, null=True + ), + ), + ( + "ended", + models.DateTimeField( + blank=True, editable=False, null=True + ), + ), + ("suppressed", models.BooleanField(default=False)), + ( + "interface", + models.ForeignKey( + blank=True, + editable=False, + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="maasserver.interface", + ), + ), + ( + "physical_blockdevice", + models.ForeignKey( + blank=True, + editable=False, + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="maasserver.physicalblockdevice", + ), + ), + ( + "script", + models.ForeignKey( + blank=True, + editable=False, + null=True, + on_delete=django.db.models.deletion.CASCADE, + to="maasserver.script", + ), + ), + ( + "script_set", + models.ForeignKey( + editable=False, + on_delete=django.db.models.deletion.CASCADE, + to="maasserver.scriptset", + ), + ), + ( + "script_version", + models.ForeignKey( + blank=True, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="maasserver.versionedtextfile", + ), + ), + ], + options={ + "abstract": False, + }, + bases=( + maasserver.models.cleansave.CleanSave, + models.Model, + ), + ), + migrations.AlterField( + model_name="node", + name="current_commissioning_script_set", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="+", + to="maasserver.scriptset", + ), + ), + migrations.AlterField( + model_name="node", + name="current_installation_script_set", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="+", + to="maasserver.scriptset", + ), + ), + migrations.AlterField( + model_name="node", + name="current_testing_script_set", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="+", + to="maasserver.scriptset", + ), + ), + ], + database_operations=[], + ), + ] diff --git a/src/maasserver/models/__init__.py b/src/maasserver/models/__init__.py index 1327639..786d4c7 100644 --- a/src/maasserver/models/__init__.py +++ b/src/maasserver/models/__init__.py @@ -76,6 +76,9 @@ __all__ = [ "RegionRackRPCConnection", "ResourcePool", "RootKey", + "Script", + "ScriptResult", + "ScriptSet", "Service", "signals", "Space", @@ -189,6 +192,9 @@ from maasserver.models.regioncontrollerprocessendpoint import ( from maasserver.models.regionrackrpcconnection import RegionRackRPCConnection from maasserver.models.resourcepool import ResourcePool from maasserver.models.rootkey import RootKey +from maasserver.models.script import Script +from maasserver.models.scriptresult import ScriptResult +from maasserver.models.scriptset import ScriptSet from maasserver.models.secret import Secret, VaultSecret from maasserver.models.service import Service from maasserver.models.space import Space diff --git a/src/maasserver/models/bmc.py b/src/maasserver/models/bmc.py index f1c8356..b317f34 100644 --- a/src/maasserver/models/bmc.py +++ b/src/maasserver/models/bmc.py @@ -1691,7 +1691,7 @@ class Pod(BMC): if node.is_device: update["node_type"] = NODE_TYPE.MACHINE if not node.current_commissioning_script_set: - from metadataserver.models import ScriptSet + from maasserver.models import ScriptSet # ScriptResults will be created on upload. update[ diff --git a/src/maasserver/models/node.py b/src/maasserver/models/node.py index ea6b233..2e5c84a 100644 --- a/src/maasserver/models/node.py +++ b/src/maasserver/models/node.py @@ -764,8 +764,7 @@ class RegionControllerManager(ControllerManager): # A region needs to have a commissioning_script_set available to # allow commissioning data to be sent on start. if node.current_commissioning_script_set is None: - # Avoid circular dependencies - from metadataserver.models import ScriptSet + from maasserver.models import ScriptSet script_set = ScriptSet.objects.create_commissioning_script_set( node @@ -1221,7 +1220,7 @@ class Node(CleanSave, TimestampedModel): # The ScriptSet for the currently running, or last run, commissioning # ScriptSet. current_commissioning_script_set = ForeignKey( - "metadataserver.ScriptSet", + "maasserver.ScriptSet", blank=True, null=True, on_delete=SET_NULL, @@ -1230,7 +1229,7 @@ class Node(CleanSave, TimestampedModel): # The ScriptSet for the currently running, or last run, installation. current_installation_script_set = ForeignKey( - "metadataserver.ScriptSet", + "maasserver.ScriptSet", blank=True, null=True, on_delete=SET_NULL, @@ -1239,7 +1238,7 @@ class Node(CleanSave, TimestampedModel): # The ScriptSet for the currently running, or last run, test ScriptSet. current_testing_script_set = ForeignKey( - "metadataserver.ScriptSet", + "maasserver.ScriptSet", blank=True, null=True, on_delete=SET_NULL, @@ -1758,9 +1757,8 @@ class Node(CleanSave, TimestampedModel): def _start_deployment(self): """Mark a node as being deployed.""" - # Avoid circular dependencies from maasserver.models.event import Event - from metadataserver.models import ScriptSet + from maasserver.models.scriptset import ScriptSet if not self.on_network(): raise ValidationError( @@ -2227,8 +2225,7 @@ class Node(CleanSave, TimestampedModel): @classmethod @transactional def _abort_all_tests(self, script_set_id): - # Avoid circular imports. - from metadataserver.models import ScriptSet + from maasserver.models import ScriptSet try: script_set = ScriptSet.objects.get(id=script_set_id) @@ -2259,9 +2256,8 @@ class Node(CleanSave, TimestampedModel): registered as a post-commit hook; it should not be added a second time. """ - # Avoid circular imports. from maasserver.models.event import Event - from metadataserver.models import ScriptSet + from maasserver.models.scriptset import ScriptSet # Only commission if power type is configured. if self.power_type == "": @@ -2468,9 +2464,8 @@ class Node(CleanSave, TimestampedModel): self, user, enable_ssh=False, testing_scripts=None, script_input=None ): """Run tests on a node.""" - # Avoid circular imports. from maasserver.models.event import Event - from metadataserver.models import ScriptSet + from maasserver.models.scriptset import ScriptSet if not user.has_perm(NodePermission.edit, self): # You can't enter test mode on a node you don't own, @@ -3884,8 +3879,7 @@ class Node(CleanSave, TimestampedModel): user, event_type, action="mark_failed", comment=comment ) - # Avoid circular dependencies - from metadataserver.models import ScriptResult + from maasserver.models import ScriptResult qs = ScriptResult.objects.filter( script_set__in=[ @@ -3974,7 +3968,7 @@ class Node(CleanSave, TimestampedModel): self.save() def get_latest_failed_testing_script_results(self) -> List[int]: - from metadataserver.models import ScriptResult + from maasserver.models import ScriptResult script_results = ( ScriptResult.objects.filter( @@ -5792,8 +5786,7 @@ class Node(CleanSave, TimestampedModel): elif self.status in COMMISSIONING_LIKE_STATUSES: if old_status is None: old_status = self.status - # Avoid circular dependencies - from metadataserver.models import ScriptResult + from maasserver.models import ScriptResult # Claim AUTO IP addresses if a script will be running in the # ephemeral environment which needs network configuration applied. @@ -6311,8 +6304,7 @@ class Node(CleanSave, TimestampedModel): @property def get_latest_script_results(self): """Returns a QuerySet of the latest results from all runs.""" - # Avoid circular dependencies - from metadataserver.models import ScriptResult + from maasserver.models import ScriptResult qs = ScriptResult.objects.filter(script_set__node_id=self.id) qs = qs.select_related("script_set", "script") diff --git a/src/maasserver/models/nodeprobeddetails.py b/src/maasserver/models/nodeprobeddetails.py index 461faf3..0495d74 100644 --- a/src/maasserver/models/nodeprobeddetails.py +++ b/src/maasserver/models/nodeprobeddetails.py @@ -74,8 +74,8 @@ def get_probed_details(nodes): script_set.node_id, script_result.script_name, script_result.stdout FROM - metadataserver_scriptresult AS script_result, - metadataserver_scriptset AS script_set, + maasserver_scriptresult AS script_result, + maasserver_scriptset AS script_set, maasserver_node AS node WHERE script_set.node_id IN %s AND diff --git a/src/metadataserver/models/script.py b/src/maasserver/models/script.py similarity index 100% rename from src/metadataserver/models/script.py rename to src/maasserver/models/script.py diff --git a/src/metadataserver/models/scriptresult.py b/src/maasserver/models/scriptresult.py similarity index 99% rename from src/metadataserver/models/scriptresult.py rename to src/maasserver/models/scriptresult.py index 5b1ffa3..cdd89f3 100644 --- a/src/metadataserver/models/scriptresult.py +++ b/src/maasserver/models/scriptresult.py @@ -22,6 +22,8 @@ from maasserver.models.cleansave import CleanSave from maasserver.models.event import Event from maasserver.models.interface import Interface from maasserver.models.physicalblockdevice import PhysicalBlockDevice +from maasserver.models.script import Script +from maasserver.models.scriptset import ScriptSet from maasserver.models.timestampedmodel import now, TimestampedModel from maasserver.models.versionedtextfile import VersionedTextFile from metadataserver import logger @@ -34,8 +36,6 @@ from metadataserver.enum import ( SCRIPT_TYPE, ) from metadataserver.fields import Bin, BinaryField -from metadataserver.models.script import Script -from metadataserver.models.scriptset import ScriptSet from provisioningserver.events import EVENT_TYPES diff --git a/src/metadataserver/models/scriptset.py b/src/maasserver/models/scriptset.py similarity index 90% rename from src/metadataserver/models/scriptset.py rename to src/maasserver/models/scriptset.py index 590f1f8..3ac3940 100644 --- a/src/metadataserver/models/scriptset.py +++ b/src/maasserver/models/scriptset.py @@ -27,7 +27,7 @@ from django.db.models.query import QuerySet from maasserver.enum import POWER_STATE, POWER_STATE_CHOICES from maasserver.exceptions import NoScriptsFound from maasserver.forms.parameters import ParametersForm -from maasserver.models import Config, Event +from maasserver.models import Config, Event, Script from maasserver.models.cleansave import CleanSave from maasserver.preseed import CURTIN_INSTALL_LOG from metadataserver import logger @@ -42,7 +42,6 @@ from metadataserver.enum import ( SCRIPT_STATUS_RUNNING_OR_PENDING, SCRIPT_TYPE, ) -from metadataserver.models.script import Script from provisioningserver.events import EVENT_TYPES @@ -210,7 +209,7 @@ class ScriptSetManager(Manager): def create_installation_script_set(self, node): """Create a new installation ScriptSet with a ScriptResult.""" # Avoid circular dependencies. - from metadataserver.models import ScriptResult + from maasserver.models import ScriptResult script_set = self.create( node=node, @@ -302,8 +301,7 @@ class ScriptSetManager(Manager): raise def _clean_old(self, node, result_type, new_script_set): - # Avoid circular dependencies. - from metadataserver.models import ScriptResult + from maasserver.models import ScriptResult config_var = { RESULT_TYPE.COMMISSIONING: "max_node_commissioning_results", @@ -572,8 +570,7 @@ class ScriptSet(CleanSave, Model): storage parameter. Used after commissioning has completed when there are tests to be run. """ - # Avoid circular dependencies. - from metadataserver.models import ScriptResult + from maasserver.models import ScriptResult regenerate_scripts = {} for script_result in ( diff --git a/src/maasserver/models/signals/scriptresult.py b/src/maasserver/models/signals/scriptresult.py index 1e29d7e..24bee48 100644 --- a/src/maasserver/models/signals/scriptresult.py +++ b/src/maasserver/models/signals/scriptresult.py @@ -4,7 +4,7 @@ """Emit ScriptResult status transition event.""" -from maasserver.models import Event +from maasserver.models import Event, ScriptResult from maasserver.preseed import CURTIN_INSTALL_LOG from maasserver.utils.signals import SignalsManager from metadataserver.enum import ( @@ -14,7 +14,6 @@ from metadataserver.enum import ( SCRIPT_STATUS_FAILED, SCRIPT_STATUS_RUNNING, ) -from metadataserver.models.scriptresult import ScriptResult from provisioningserver.events import EVENT_TYPES signals = SignalsManager() diff --git a/src/maasserver/models/tests/test_node.py b/src/maasserver/models/tests/test_node.py index 04890bf..4eb10d4 100644 --- a/src/maasserver/models/tests/test_node.py +++ b/src/maasserver/models/tests/test_node.py @@ -101,6 +101,8 @@ from maasserver.models import ( RegionController, RegionRackRPCConnection, ResourcePool, + ScriptResult, + ScriptSet, Service, StaticIPAddress, Subnet, @@ -183,7 +185,6 @@ from metadataserver.enum import ( SCRIPT_STATUS_RUNNING_OR_PENDING, SCRIPT_TYPE, ) -from metadataserver.models import ScriptResult, ScriptSet from provisioningserver.drivers.pod import Capabilities, DiscoveredPodHints from provisioningserver.drivers.power.ipmi import IPMI_BOOT_TYPE from provisioningserver.drivers.power.registry import PowerDriverRegistry diff --git a/src/metadataserver/models/tests/test_script.py b/src/maasserver/models/tests/test_script.py similarity index 94% rename from src/metadataserver/models/tests/test_script.py rename to src/maasserver/models/tests/test_script.py index a4fa24b..93c5218 100644 --- a/src/metadataserver/models/tests/test_script.py +++ b/src/maasserver/models/tests/test_script.py @@ -7,7 +7,12 @@ import random from django.core.exceptions import ValidationError -from maasserver.models import VersionedTextFile +from maasserver.models import Script, VersionedTextFile +from maasserver.models.script import ( + translate_hardware_type, + translate_script_parallel, + translate_script_type, +) from maasserver.testing.factory import factory from maasserver.testing.testcase import MAASServerTestCase from maasserver.utils.orm import reload_object @@ -17,12 +22,6 @@ from metadataserver.enum import ( SCRIPT_PARALLEL, SCRIPT_TYPE, ) -from metadataserver.models import Script -from metadataserver.models.script import ( - translate_hardware_type, - translate_script_parallel, - translate_script_type, -) class TestTranslateScriptType(MAASServerTestCase): diff --git a/src/metadataserver/models/tests/test_scriptresult.py b/src/maasserver/models/tests/test_scriptresult.py similarity index 95% rename from src/metadataserver/models/tests/test_scriptresult.py rename to src/maasserver/models/tests/test_scriptresult.py index 7675ace..d4d9ef1 100644 --- a/src/metadataserver/models/tests/test_scriptresult.py +++ b/src/maasserver/models/tests/test_scriptresult.py @@ -10,7 +10,8 @@ from django.core.exceptions import ValidationError import yaml from maasserver.enum import NODE_STATUS -from maasserver.models import Event, EventType +from maasserver.models import Event, EventType, ScriptResult +from maasserver.models import scriptresult as scriptresult_module from maasserver.testing.factory import factory from maasserver.testing.testcase import MAASServerTestCase from maasserver.utils.orm import reload_object @@ -24,8 +25,6 @@ from metadataserver.enum import ( SCRIPT_STATUS_RUNNING_OR_PENDING, SCRIPT_TYPE, ) -from metadataserver.models import ScriptResult -from metadataserver.models import scriptresult as scriptresult_module from provisioningserver.events import EVENT_TYPES diff --git a/src/metadataserver/models/tests/test_scriptset.py b/src/maasserver/models/tests/test_scriptset.py similarity index 96% rename from src/metadataserver/models/tests/test_scriptset.py rename to src/maasserver/models/tests/test_scriptset.py index 9ca7554..08017d2 100644 --- a/src/metadataserver/models/tests/test_scriptset.py +++ b/src/maasserver/models/tests/test_scriptset.py @@ -12,7 +12,17 @@ from django.db.models import Q from maasserver.enum import NODE_STATUS, NODE_TYPE from maasserver.exceptions import NoScriptsFound -from maasserver.models import Config, Event, EventType, Node +from maasserver.models import ( + Config, + Event, + EventType, + Node, + Script, + ScriptResult, + ScriptSet, +) +from maasserver.models import scriptset as scriptset_module +from maasserver.models.scriptset import translate_result_type from maasserver.preseed import CURTIN_INSTALL_LOG from maasserver.testing.factory import factory from maasserver.testing.testcase import MAASServerTestCase @@ -25,9 +35,6 @@ from metadataserver.enum import ( SCRIPT_STATUS_RUNNING_OR_PENDING, SCRIPT_TYPE, ) -from metadataserver.models import Script, ScriptResult, ScriptSet -from metadataserver.models import scriptset as scriptset_module -from metadataserver.models.scriptset import translate_result_type from provisioningserver.events import EVENT_TYPES from provisioningserver.refresh.node_info_scripts import NODE_INFO_SCRIPTS diff --git a/src/maasserver/node_action.py b/src/maasserver/node_action.py index e35a09b..e9f836d 100644 --- a/src/maasserver/node_action.py +++ b/src/maasserver/node_action.py @@ -41,6 +41,7 @@ from maasserver.exceptions import ( from maasserver.forms.clone import CloneForm from maasserver.models import Config, ResourcePool, Zone from maasserver.models.bootresource import LINUX_OSYSTEMS +from maasserver.models.scriptresult import ScriptResult from maasserver.node_status import is_failed_status, NON_MONITORED_STATUSES from maasserver.permissions import NodePermission from maasserver.preseed import get_base_osystem_series, get_curtin_config @@ -50,7 +51,6 @@ from maasserver.utils.osystems import ( validate_osystem_and_distro_series, ) from metadataserver.enum import SCRIPT_STATUS -from metadataserver.models.scriptresult import ScriptResult from provisioningserver.events import EVENT_TYPES from provisioningserver.rpc.exceptions import ( NoConnectionsAvailable, diff --git a/src/maasserver/rpc/rackcontrollers.py b/src/maasserver/rpc/rackcontrollers.py index 24e4153..bfd12b0 100644 --- a/src/maasserver/rpc/rackcontrollers.py +++ b/src/maasserver/rpc/rackcontrollers.py @@ -23,12 +23,12 @@ from maasserver.models import ( NodeGroupToRackController, RackController, RegionController, + ScriptSet, StaticIPAddress, ) from maasserver.models.timestampedmodel import now from maasserver.utils import synchronised from maasserver.utils.orm import transactional, with_connection -from metadataserver.models import ScriptSet from provisioningserver.logger import get_maas_logger from provisioningserver.rpc.exceptions import NoSuchNode, NoSuchScope from provisioningserver.utils.deb import DebVersionsInfo diff --git a/src/maasserver/status_monitor.py b/src/maasserver/status_monitor.py index 5211991..9a3147d 100644 --- a/src/maasserver/status_monitor.py +++ b/src/maasserver/status_monitor.py @@ -10,6 +10,7 @@ from django.db.models import Prefetch from twisted.application.internet import TimerService from maasserver.enum import NODE_STATUS, NODE_STATUS_CHOICES_DICT +from maasserver.models import Script, ScriptResult, ScriptSet from maasserver.models.config import Config from maasserver.models.node import Node from maasserver.models.timestampedmodel import now @@ -17,7 +18,6 @@ from maasserver.node_status import get_node_timeout, MONITORED_STATUSES from maasserver.utils.orm import transactional from maasserver.utils.threads import deferToDatabase from metadataserver.enum import SCRIPT_STATUS -from metadataserver.models import Script, ScriptResult, ScriptSet from provisioningserver.logger import get_maas_logger from provisioningserver.refresh.node_info_scripts import NODE_INFO_SCRIPTS from provisioningserver.utils.twisted import synchronous diff --git a/src/maasserver/testing/factory.py b/src/maasserver/testing/factory.py index e78b84b..8446d70 100644 --- a/src/maasserver/testing/factory.py +++ b/src/maasserver/testing/factory.py @@ -90,6 +90,9 @@ from maasserver.models import ( RegionRackRPCConnection, ResourcePool, RootKey, + Script, + ScriptResult, + ScriptSet, Service, Space, SSHKey, @@ -139,7 +142,6 @@ from metadataserver.enum import ( SCRIPT_TYPE_CHOICES, ) from metadataserver.fields import Bin -from metadataserver.models import Script, ScriptResult, ScriptSet from provisioningserver.boot import BootMethodRegistry from provisioningserver.drivers.osystem import OperatingSystemRegistry from provisioningserver.security import to_hex diff --git a/src/maasserver/testing/sampledata/script.py b/src/maasserver/testing/sampledata/script.py index 5b0908f..aa677f6 100644 --- a/src/maasserver/testing/sampledata/script.py +++ b/src/maasserver/testing/sampledata/script.py @@ -1,5 +1,5 @@ from maasserver.enum import NODE_STATUS -from metadataserver.models import ScriptSet +from maasserver.models import ScriptSet from provisioningserver.refresh.node_info_scripts import ( COMMISSIONING_OUTPUT_NAME, ) diff --git a/src/maasserver/tests/test_node_action.py b/src/maasserver/tests/test_node_action.py index f0d7a1a..4593e3b 100644 --- a/src/maasserver/tests/test_node_action.py +++ b/src/maasserver/tests/test_node_action.py @@ -25,7 +25,13 @@ from maasserver.enum import ( POWER_STATE, ) from maasserver.exceptions import NodeActionError -from maasserver.models import Config, Event, signals, StaticIPAddress +from maasserver.models import ( + Config, + Event, + ScriptSet, + signals, + StaticIPAddress, +) from maasserver.models.signals.testing import SignalsDisabled import maasserver.node_action as node_action_module from maasserver.node_action import ( @@ -77,7 +83,6 @@ from metadataserver.enum import ( SCRIPT_STATUS_FAILED, SCRIPT_TYPE, ) -from metadataserver.models import ScriptSet from provisioningserver.events import AUDIT from provisioningserver.utils.shell import ExternalProcessError diff --git a/src/maasserver/tests/test_stats.py b/src/maasserver/tests/test_stats.py index 7a33d87..204938f 100644 --- a/src/maasserver/tests/test_stats.py +++ b/src/maasserver/tests/test_stats.py @@ -27,6 +27,8 @@ from maasserver.models import ( Fabric, Machine, OwnerData, + ScriptResult, + ScriptSet, Space, Subnet, VLAN, @@ -61,8 +63,6 @@ from maastesting.testcase import MAASTestCase from maastesting.twisted import extract_result from metadataserver.builtin_scripts import load_builtin_scripts from metadataserver.enum import RESULT_TYPE, SCRIPT_STATUS -from metadataserver.models.scriptresult import ScriptResult -from metadataserver.models.scriptset import ScriptSet from provisioningserver.drivers.pod import DiscoveredPod from provisioningserver.refresh.node_info_scripts import ( COMMISSIONING_OUTPUT_NAME, diff --git a/src/maasserver/tests/test_storage_layouts.py b/src/maasserver/tests/test_storage_layouts.py index a088b49..0fd7a94 100644 --- a/src/maasserver/tests/test_storage_layouts.py +++ b/src/maasserver/tests/test_storage_layouts.py @@ -21,6 +21,7 @@ from maasserver.models.partitiontable import ( PARTITION_TABLE_EXTRA_SPACE, PREP_PARTITION_SIZE, ) +from maasserver.models.scriptset import ScriptSet from maasserver.storage_layouts import ( BcacheStorageLayout, BlankStorageLayout, @@ -49,7 +50,6 @@ from maasserver.utils.converters import round_size_to_nearest_block from maastesting.matchers import MockCalledOnceWith from metadataserver.builtin_scripts.tests import test_hooks from metadataserver.enum import SCRIPT_TYPE -from metadataserver.models import ScriptSet from provisioningserver.refresh.node_info_scripts import ( COMMISSIONING_OUTPUT_NAME, ) diff --git a/src/maasserver/triggers/testing.py b/src/maasserver/triggers/testing.py index 3e6fa68..4a89313 100644 --- a/src/maasserver/triggers/testing.py +++ b/src/maasserver/triggers/testing.py @@ -11,6 +11,7 @@ from twisted.internet.defer import DeferredQueue, inlineCallbacks, returnValue from maasserver.enum import INTERFACE_TYPE, NODE_TYPE from maasserver.listener import PostgresListenerService +from maasserver.models import Script, ScriptSet from maasserver.models.blockdevice import BlockDevice from maasserver.models.bmc import BMC, Pod from maasserver.models.cacheset import CacheSet @@ -56,7 +57,6 @@ from maasserver.triggers import register_trigger from maasserver.utils.orm import reload_object, transactional from maasserver.utils.threads import deferToDatabase from maastesting.crochet import wait_for -from metadataserver.models import Script, ScriptSet wait_for_reactor = wait_for() diff --git a/src/maasserver/triggers/tests/test_init.py b/src/maasserver/triggers/tests/test_init.py index 73bfcde..9e614b5 100644 --- a/src/maasserver/triggers/tests/test_init.py +++ b/src/maasserver/triggers/tests/test_init.py @@ -190,17 +190,17 @@ class TestTriggersUsed(MAASServerTestCase): "iprange_iprange_subnet_insert_notify", "iprange_iprange_subnet_update_notify", "iprange_iprange_update_notify", - "metadataserver_script_script_create_notify", - "metadataserver_script_script_delete_notify", - "metadataserver_script_script_update_notify", - "metadataserver_scriptresult_nd_scriptresult_link_notify", - "metadataserver_scriptresult_nd_scriptresult_unlink_notify", - "metadataserver_scriptresult_nd_scriptresult_update_notify", - "metadataserver_scriptresult_scriptresult_create_notify", - "metadataserver_scriptresult_scriptresult_delete_notify", - "metadataserver_scriptresult_scriptresult_update_notify", - "metadataserver_scriptset_nd_scriptset_link_notify", - "metadataserver_scriptset_nd_scriptset_unlink_notify", + "script_script_create_notify", + "script_script_delete_notify", + "script_script_update_notify", + "scriptresult_nd_scriptresult_link_notify", + "scriptresult_nd_scriptresult_unlink_notify", + "scriptresult_nd_scriptresult_update_notify", + "scriptresult_scriptresult_create_notify", + "scriptresult_scriptresult_delete_notify", + "scriptresult_scriptresult_update_notify", + "scriptset_nd_scriptset_link_notify", + "scriptset_nd_scriptset_unlink_notify", "neighbour_neighbour_create_notify", "neighbour_neighbour_delete_notify", "neighbour_neighbour_update_notify", diff --git a/src/maasserver/triggers/tests/test_websocket_listener.py b/src/maasserver/triggers/tests/test_websocket_listener.py index 90ea0a7..23a8a20 100644 --- a/src/maasserver/triggers/tests/test_websocket_listener.py +++ b/src/maasserver/triggers/tests/test_websocket_listener.py @@ -1461,7 +1461,7 @@ class TestScriptSetListener( MAASTransactionServerTestCase, TransactionalHelpersMixin ): """End-to-end test of both the listeners code and the triggers on - metadataserver_scriptset table that notifies its node.""" + maasserver_scriptset table that notifies its node.""" scenarios = ( ( @@ -1538,7 +1538,7 @@ class TestDeviceWithParentScriptSetListener( MAASTransactionServerTestCase, TransactionalHelpersMixin ): """End-to-end test of both the listeners code and the triggers on - metadataserver_scriptset table that notifies its node.""" + maasserver_scriptset table that notifies its node.""" @wait_for_reactor @inlineCallbacks @@ -1580,7 +1580,7 @@ class TestNDScriptResultListener( MAASTransactionServerTestCase, TransactionalHelpersMixin ): """End-to-end test of both the listeners code and the triggers on - metadataserver_scriptresult table that notifies its node.""" + maasserver_scriptresult table that notifies its node.""" scenarios = ( ( @@ -1684,7 +1684,7 @@ class TestScriptResultListener( MAASTransactionServerTestCase, TransactionalHelpersMixin ): """End-to-end test of both the listers code and the triggers on - the metadataserver_Scriptresult table that notifies the node-results + the maasserver_scriptresult table that notifies the node-results websocket.""" @wait_for_reactor diff --git a/src/maasserver/triggers/websocket.py b/src/maasserver/triggers/websocket.py index 08acb6a..43c6dc2 100644 --- a/src/maasserver/triggers/websocket.py +++ b/src/maasserver/triggers/websocket.py @@ -1572,7 +1572,7 @@ def render_script_result_notify(proc_name, script_set_id): system_id, node_type INTO node FROM maasserver_node AS nodet, - metadataserver_scriptset AS scriptset + maasserver_scriptset AS scriptset WHERE scriptset.id = {script_set_id} AND scriptset.node_id = nodet.id; @@ -2384,10 +2384,10 @@ def register_websocket_triggers(): ) ) register_trigger( - "metadataserver_scriptset", "nd_scriptset_link_notify", "insert" + "maasserver_scriptset", "nd_scriptset_link_notify", "insert" ) register_trigger( - "metadataserver_scriptset", "nd_scriptset_unlink_notify", "delete" + "maasserver_scriptset", "nd_scriptset_unlink_notify", "delete" ) # ScriptResult triggers to the node for the nodes-listing page. @@ -2407,15 +2407,15 @@ def register_websocket_triggers(): ) ) register_trigger( - "metadataserver_scriptresult", "nd_scriptresult_link_notify", "insert" + "maasserver_scriptresult", "nd_scriptresult_link_notify", "insert" ) register_trigger( - "metadataserver_scriptresult", + "maasserver_scriptresult", "nd_scriptresult_update_notify", "update", ) register_trigger( - "metadataserver_scriptresult", + "maasserver_scriptresult", "nd_scriptresult_unlink_notify", "delete", ) @@ -2436,7 +2436,7 @@ def register_websocket_triggers(): "scriptresult_delete_notify", "scriptresult_delete", "OLD.id" ) ) - register_triggers("metadataserver_scriptresult", "scriptresult") + register_triggers("maasserver_scriptresult", "scriptresult") # Interface address table, update to linked node. register_procedure( @@ -2886,7 +2886,7 @@ def register_websocket_triggers(): "script_delete_notify", "script_delete", "OLD.id" ) ) - register_triggers("metadataserver_script", "script") + register_triggers("maasserver_script", "script") # NodeDevice table register_procedure( diff --git a/src/maasserver/websockets/handlers/node.py b/src/maasserver/websockets/handlers/node.py index 5fa038d..486c497 100644 --- a/src/maasserver/websockets/handlers/node.py +++ b/src/maasserver/websockets/handlers/node.py @@ -52,6 +52,7 @@ from maasserver.models import ( Partition, PhysicalBlockDevice, ResourcePool, + ScriptResult, Space, StaticIPAddress, Subnet, @@ -63,6 +64,7 @@ from maasserver.models import ( Zone, ) from maasserver.models.nodeprobeddetails import script_output_nsmap +from maasserver.models.scriptset import get_status_from_qs from maasserver.node_action import compile_node_actions from maasserver.node_constraint_filter_forms import ( FreeTextFilterNodeForm, @@ -92,8 +94,6 @@ from metadataserver.enum import ( SCRIPT_STATUS, SCRIPT_STATUS_FAILED, ) -from metadataserver.models.scriptresult import ScriptResult -from metadataserver.models.scriptset import get_status_from_qs from provisioningserver.refresh.node_info_scripts import ( LIST_MODALIASES_OUTPUT_NAME, ) diff --git a/src/maasserver/websockets/handlers/node_result.py b/src/maasserver/websockets/handlers/node_result.py index 86b2dcc..2d76811 100644 --- a/src/maasserver/websockets/handlers/node_result.py +++ b/src/maasserver/websockets/handlers/node_result.py @@ -8,7 +8,7 @@ from operator import attrgetter from django.core.exceptions import ValidationError -from maasserver.models.node import Node +from maasserver.models import Node, ScriptResult from maasserver.websockets.base import ( dehydrate_datetime, HandlerDoesNotExistError, @@ -18,7 +18,6 @@ from maasserver.websockets.handlers.timestampedmodel import ( TimestampedModelHandler, ) from metadataserver.enum import HARDWARE_TYPE -from metadataserver.models import ScriptResult class NodeResultHandler(TimestampedModelHandler): diff --git a/src/maasserver/websockets/handlers/script.py b/src/maasserver/websockets/handlers/script.py index c46a4f9..219c4b1 100644 --- a/src/maasserver/websockets/handlers/script.py +++ b/src/maasserver/websockets/handlers/script.py @@ -4,6 +4,7 @@ """The Script handler for the WebSocket connection.""" +from maasserver.models import Script from maasserver.permissions import NodePermission from maasserver.websockets.base import ( HandlerDoesNotExistError, @@ -12,7 +13,6 @@ from maasserver.websockets.base import ( from maasserver.websockets.handlers.timestampedmodel import ( TimestampedModelHandler, ) -from metadataserver.models import Script class ScriptHandler(TimestampedModelHandler): diff --git a/src/maasserver/websockets/handlers/tests/test_machine.py b/src/maasserver/websockets/handlers/tests/test_machine.py index 5ea2e31..b5ab34c 100644 --- a/src/maasserver/websockets/handlers/tests/test_machine.py +++ b/src/maasserver/websockets/handlers/tests/test_machine.py @@ -76,6 +76,7 @@ from maasserver.models.partition import ( MIN_PARTITION_SIZE, PARTITION_ALIGNMENT_SIZE, ) +from maasserver.models.scriptset import get_status_from_qs import maasserver.node_action as node_action_module from maasserver.node_action import compile_node_actions from maasserver.permissions import NodePermission @@ -133,7 +134,6 @@ from metadataserver.enum import ( SCRIPT_STATUS_FAILED, SCRIPT_TYPE, ) -from metadataserver.models.scriptset import get_status_from_qs from provisioningserver.refresh.node_info_scripts import ( LIST_MODALIASES_OUTPUT_NAME, LLDP_OUTPUT_NAME, diff --git a/src/metadataserver/api.py b/src/metadataserver/api.py index faf237c..2ba1601 100644 --- a/src/metadataserver/api.py +++ b/src/metadataserver/api.py @@ -62,6 +62,9 @@ from maasserver.models import ( NodeKey, NodeMetadata, NodeUserData, + Script, + ScriptResult, + ScriptSet, SSHKey, SSLKey, ) @@ -90,7 +93,6 @@ from metadataserver.enum import ( SIGNAL_STATUS, SIGNAL_STATUS_CHOICES, ) -from metadataserver.models import Script, ScriptResult, ScriptSet from metadataserver.user_data import ( generate_user_data_for_poweroff, generate_user_data_for_status, diff --git a/src/metadataserver/builtin_scripts/__init__.py b/src/metadataserver/builtin_scripts/__init__.py index 32e302a..57ab6d1 100644 --- a/src/metadataserver/builtin_scripts/__init__.py +++ b/src/metadataserver/builtin_scripts/__init__.py @@ -14,7 +14,7 @@ from zope.interface.verify import verifyObject from maasserver.forms.script import ScriptForm from maasserver.models.controllerinfo import get_maas_version -from metadataserver.models import Script +from maasserver.models.script import Script from provisioningserver.refresh.node_info_scripts import ( BMC_DETECTION, COMMISSIONING_OUTPUT_NAME, diff --git a/src/metadataserver/builtin_scripts/tests/test_builtin_scripts.py b/src/metadataserver/builtin_scripts/tests/test_builtin_scripts.py index f32b21f..9490c3d 100644 --- a/src/metadataserver/builtin_scripts/tests/test_builtin_scripts.py +++ b/src/metadataserver/builtin_scripts/tests/test_builtin_scripts.py @@ -8,7 +8,7 @@ import random from testtools.matchers import ContainsAll -from maasserver.models import ControllerInfo, VersionedTextFile +from maasserver.models import ControllerInfo, Script, VersionedTextFile from maasserver.testing.factory import factory from maasserver.testing.testcase import MAASServerTestCase from maasserver.utils.orm import reload_object @@ -17,7 +17,6 @@ from metadataserver.builtin_scripts import ( load_builtin_scripts, ) from metadataserver.enum import SCRIPT_TYPE_CHOICES -from metadataserver.models import Script from provisioningserver.refresh.node_info_scripts import NODE_INFO_SCRIPTS diff --git a/src/metadataserver/builtin_scripts/tests/test_hooks.py b/src/metadataserver/builtin_scripts/tests/test_hooks.py index 0b77357..d790987 100644 --- a/src/metadataserver/builtin_scripts/tests/test_hooks.py +++ b/src/metadataserver/builtin_scripts/tests/test_hooks.py @@ -25,6 +25,7 @@ from maasserver.models import ( NodeMetadata, NUMANode, PhysicalInterface, + ScriptSet, Tag, VLAN, ) @@ -69,7 +70,6 @@ from metadataserver.enum import ( HARDWARE_TYPE, SCRIPT_TYPE, ) -from metadataserver.models import ScriptSet from provisioningserver.events import EVENT_DETAILS, EVENT_TYPES from provisioningserver.refresh.node_info_scripts import ( KERNEL_CMDLINE_OUTPUT_NAME, diff --git a/src/metadataserver/migrations/0036_move_metadata_script_models.py b/src/metadataserver/migrations/0036_move_metadata_script_models.py new file mode 100644 index 0000000..0cb1abb --- /dev/null +++ b/src/metadataserver/migrations/0036_move_metadata_script_models.py @@ -0,0 +1,60 @@ +# Generated by Django 3.2.12 on 2022-11-18 13:05 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("metadataserver", "0035_move_metadata_node_models"), + ] + + operations = [ + migrations.SeparateDatabaseAndState( + state_operations=[ + migrations.RemoveField( + model_name="scriptresult", + name="interface", + ), + migrations.RemoveField( + model_name="scriptresult", + name="physical_blockdevice", + ), + migrations.RemoveField( + model_name="scriptresult", + name="script", + ), + migrations.RemoveField( + model_name="scriptresult", + name="script_set", + ), + migrations.RemoveField( + model_name="scriptresult", + name="script_version", + ), + migrations.RemoveField( + model_name="scriptset", + name="node", + ), + migrations.DeleteModel( + name="Script", + ), + migrations.DeleteModel( + name="ScriptResult", + ), + migrations.DeleteModel( + name="ScriptSet", + ), + ], + database_operations=[ + migrations.AlterModelTable( + name="Script", table="maasserver_script" + ), + migrations.AlterModelTable( + name="ScriptResult", table="maasserver_scriptresult" + ), + migrations.AlterModelTable( + name="ScriptSet", table="maasserver_scriptset" + ), + ], + ), + ] diff --git a/src/metadataserver/models/__init__.py b/src/metadataserver/models/__init__.py index 7e863ff..0a22a92 100644 --- a/src/metadataserver/models/__init__.py +++ b/src/metadataserver/models/__init__.py @@ -4,8 +4,4 @@ """Model export and helpers for metadataserver. """ -__all__ = ["Script", "ScriptResult", "ScriptSet"] - -from metadataserver.models.script import Script -from metadataserver.models.scriptresult import ScriptResult -from metadataserver.models.scriptset import ScriptSet +__all__ = [] diff --git a/src/metadataserver/tests/test_api.py b/src/metadataserver/tests/test_api.py index dcff7ac..fea95f5 100644 --- a/src/metadataserver/tests/test_api.py +++ b/src/metadataserver/tests/test_api.py @@ -44,6 +44,8 @@ from maasserver.models import ( NodeKey, NodeMetadata, NodeUserData, + Script, + ScriptSet, SSHKey, VersionedTextFile, ) @@ -92,7 +94,6 @@ from metadataserver.enum import ( SIGNAL_STATUS, SIGNAL_STATUS_CHOICES, ) -from metadataserver.models import Script, ScriptSet from metadataserver.nodeinituser import get_node_init_user from provisioningserver.events import ( EVENT_DETAILS,
-- Mailing list: https://launchpad.net/~sts-sponsors Post to : sts-sponsors@lists.launchpad.net Unsubscribe : https://launchpad.net/~sts-sponsors More help : https://help.launchpad.net/ListHelp