Add peers_from_control_nodes to ReceptorAddress

- write_receptor_config peers to ReceptorAddress entries
that have peers_from_control_nodes enabled

- peers_from_control_nodes and listener_port removed from Instance model

- peers_from_control_nodes added to ReceptorAddress model

- ReceptorAddress is now unique by address and protocol combination

- Write receptor config task is dispatched upon ReceptorAddress creation
or deletion, and when control node is first created

- InstanceLinkSerializer adds a target_address field and has logic
to grab the instance hostname associated with the peered ReceptorAddress

Signed-off-by: Seth Foster <fosterbseth@gmail.com>
This commit is contained in:
Seth Foster
2023-10-11 13:21:35 -04:00
committed by Seth Foster
parent 5cb3d3b078
commit c32f234ebb
10 changed files with 162 additions and 164 deletions

View File

@@ -0,0 +1,59 @@
# Generated by Django 4.2.5 on 2023-10-10 00:26
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('main', '0187_hop_nodes'),
]
operations = [
migrations.CreateModel(
name='ReceptorAddress',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('address', models.CharField(max_length=255)),
('port', models.IntegerField()),
('protocol', models.CharField(max_length=10)),
('websocket_path', models.CharField(blank=True, default='', max_length=255)),
('is_internal', models.BooleanField(default=False)),
('peers_from_control_nodes', models.BooleanField(default=False)),
],
),
migrations.RemoveConstraint(
model_name='instancelink',
name='source_and_target_can_not_be_equal',
),
migrations.AlterUniqueTogether(
name='instancelink',
unique_together=set(),
),
migrations.AlterField(
model_name='instancelink',
name='source',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='main.instance'),
),
migrations.AddField(
model_name='receptoraddress',
name='instance',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='receptor_addresses', to='main.instance'),
),
migrations.AlterField(
model_name='instance',
name='peers',
field=models.ManyToManyField(related_name='peers_from', through='main.InstanceLink', to='main.receptoraddress'),
),
migrations.AlterField(
model_name='instancelink',
name='target',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='main.receptoraddress'),
),
migrations.AddConstraint(
model_name='receptoraddress',
constraint=models.UniqueConstraint(
fields=('address', 'protocol'), name='unique_receptor_address', violation_error_message='Receptor address + protocol must be unique.'
),
),
]

View File

@@ -1,43 +0,0 @@
# Generated by Django 4.2.5 on 2023-10-04 06:51
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('main', '0187_hop_nodes'),
]
operations = [
migrations.CreateModel(
name='ReceptorAddress',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('address', models.CharField(max_length=255)),
('port', models.IntegerField(null=True)),
('protocol', models.CharField(max_length=10)),
('websocket_path', models.CharField(blank=True, default='', max_length=255)),
('is_internal', models.BooleanField(default=False)),
('instance', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='receptor_addresses', to='main.instance')),
],
),
migrations.AddConstraint(
model_name='receptoraddress',
constraint=models.UniqueConstraint(
condition=models.Q(('port', None)),
fields=('address', 'protocol', 'websocket_path'),
name='unique_receptor_address_no_port',
violation_error_message='Receptor address must be unique.',
),
),
migrations.AddConstraint(
model_name='receptoraddress',
constraint=models.UniqueConstraint(
condition=models.Q(('port', None), _negated=True),
fields=('address', 'port', 'protocol', 'websocket_path'),
name='unique_receptor_address_with_port',
violation_error_message='Receptor address must be unique.',
),
),
]