mirror of
https://github.com/ansible/awx.git
synced 2026-03-28 22:35:08 -02:30
Add state fields to Instance and InstanceLink
Also, listener_port to Instance.
This commit is contained in:
79
awx/main/migrations/0170_node_and_link_state.py
Normal file
79
awx/main/migrations/0170_node_and_link_state.py
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
# Generated by Django 3.2.13 on 2022-08-02 17:53
|
||||||
|
|
||||||
|
import django.core.validators
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
def forwards(apps, schema_editor):
|
||||||
|
# All existing InstanceLink objects need to be in the state
|
||||||
|
# 'Established', which is the default, so nothing needs to be done
|
||||||
|
# for that.
|
||||||
|
|
||||||
|
Instance = apps.get_model('main', 'Instance')
|
||||||
|
for instance in Instance.objects.all():
|
||||||
|
instance.node_state = 'ready' if not instance.errors else 'unavailable'
|
||||||
|
instance.save(update_fields=['node_state'])
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('main', '0169_jt_prompt_everything_on_launch'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='instance',
|
||||||
|
name='listener_port',
|
||||||
|
field=models.PositiveIntegerField(
|
||||||
|
blank=True,
|
||||||
|
default=27199,
|
||||||
|
help_text='Port that Receptor will listen for incoming connections on.',
|
||||||
|
validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(65535)],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='instance',
|
||||||
|
name='node_state',
|
||||||
|
field=models.CharField(
|
||||||
|
choices=[
|
||||||
|
('provisioning', 'Provisioning'),
|
||||||
|
('provision-fail', 'Provisioning Failure'),
|
||||||
|
('installed', 'Installed'),
|
||||||
|
('ready', 'Ready'),
|
||||||
|
('unavailable', 'Unavailable'),
|
||||||
|
('deprovisioning', 'De-provisioning'),
|
||||||
|
('deprovision-fail', 'De-provisioning Failure'),
|
||||||
|
],
|
||||||
|
default='ready',
|
||||||
|
help_text='Indicates the current life cycle stage of this instance.',
|
||||||
|
max_length=16,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='instancelink',
|
||||||
|
name='link_state',
|
||||||
|
field=models.CharField(
|
||||||
|
choices=[('adding', 'Adding'), ('established', 'Established'), ('removing', 'Removing')],
|
||||||
|
default='established',
|
||||||
|
help_text='Indicates the current life cycle stage of this peer link.',
|
||||||
|
max_length=16,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='instance',
|
||||||
|
name='node_type',
|
||||||
|
field=models.CharField(
|
||||||
|
choices=[
|
||||||
|
('control', 'Control plane node'),
|
||||||
|
('execution', 'Execution plane node'),
|
||||||
|
('hybrid', 'Controller and execution'),
|
||||||
|
('hop', 'Message-passing node, no execution capability'),
|
||||||
|
],
|
||||||
|
default='hybrid',
|
||||||
|
help_text='Role that this node plays in the mesh.',
|
||||||
|
max_length=16,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.RunPython(forwards, reverse_code=migrations.RunPython.noop),
|
||||||
|
]
|
||||||
@@ -5,7 +5,7 @@ from decimal import Decimal
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from django.core.validators import MinValueValidator
|
from django.core.validators import MinValueValidator, MaxValueValidator
|
||||||
from django.db import models, connection
|
from django.db import models, connection
|
||||||
from django.db.models.signals import post_save, post_delete
|
from django.db.models.signals import post_save, post_delete
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
@@ -59,6 +59,15 @@ class InstanceLink(BaseModel):
|
|||||||
source = models.ForeignKey('Instance', on_delete=models.CASCADE, related_name='+')
|
source = models.ForeignKey('Instance', on_delete=models.CASCADE, related_name='+')
|
||||||
target = models.ForeignKey('Instance', on_delete=models.CASCADE, related_name='reverse_peers')
|
target = models.ForeignKey('Instance', on_delete=models.CASCADE, related_name='reverse_peers')
|
||||||
|
|
||||||
|
class States(models.TextChoices):
|
||||||
|
ADDING = 'adding', _('Adding')
|
||||||
|
ESTABLISHED = 'established', _('Established')
|
||||||
|
REMOVING = 'removing', _('Removing')
|
||||||
|
|
||||||
|
link_state = models.CharField(
|
||||||
|
choices=States.choices, default=States.ESTABLISHED, max_length=16, help_text=_("Indicates the current life cycle stage of this peer link.")
|
||||||
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ('source', 'target')
|
unique_together = ('source', 'target')
|
||||||
|
|
||||||
@@ -127,13 +136,33 @@ class Instance(HasPolicyEditsMixin, BaseModel):
|
|||||||
default=0,
|
default=0,
|
||||||
editable=False,
|
editable=False,
|
||||||
)
|
)
|
||||||
NODE_TYPE_CHOICES = [
|
|
||||||
("control", "Control plane node"),
|
class Types(models.TextChoices):
|
||||||
("execution", "Execution plane node"),
|
CONTROL = 'control', _("Control plane node")
|
||||||
("hybrid", "Controller and execution"),
|
EXECUTION = 'execution', _("Execution plane node")
|
||||||
("hop", "Message-passing node, no execution capability"),
|
HYBRID = 'hybrid', _("Controller and execution")
|
||||||
]
|
HOP = 'hop', _("Message-passing node, no execution capability")
|
||||||
node_type = models.CharField(default='hybrid', choices=NODE_TYPE_CHOICES, max_length=16)
|
|
||||||
|
node_type = models.CharField(default=Types.HYBRID, choices=Types.choices, max_length=16, help_text=_("Role that this node plays in the mesh."))
|
||||||
|
|
||||||
|
class States(models.TextChoices):
|
||||||
|
PROVISIONING = 'provisioning', _('Provisioning')
|
||||||
|
PROVISION_FAIL = 'provision-fail', _('Provisioning Failure')
|
||||||
|
INSTALLED = 'installed', _('Installed')
|
||||||
|
READY = 'ready', _('Ready')
|
||||||
|
UNAVAILABLE = 'unavailable', _('Unavailable')
|
||||||
|
DEPROVISIONING = 'deprovisioning', _('De-provisioning')
|
||||||
|
DEPROVISION_FAIL = 'deprovision-fail', _('De-provisioning Failure')
|
||||||
|
|
||||||
|
node_state = models.CharField(
|
||||||
|
choices=States.choices, default=States.READY, max_length=16, help_text=_("Indicates the current life cycle stage of this instance.")
|
||||||
|
)
|
||||||
|
listener_port = models.PositiveIntegerField(
|
||||||
|
blank=True,
|
||||||
|
default=27199,
|
||||||
|
validators=[MinValueValidator(1), MaxValueValidator(65535)],
|
||||||
|
help_text=_("Port that Receptor will listen for incoming connections on."),
|
||||||
|
)
|
||||||
|
|
||||||
peers = models.ManyToManyField('self', symmetrical=False, through=InstanceLink, through_fields=('source', 'target'))
|
peers = models.ManyToManyField('self', symmetrical=False, through=InstanceLink, through_fields=('source', 'target'))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user