[hop_node] Validate listener_port is defined for peers (#14056)

add peer listener_port validation and update install bundle if listener_port is defined or not defined.
This commit is contained in:
Jake Jackson 2023-06-12 15:52:10 -04:00 committed by Seth Foster
parent 148111a072
commit 40fca6db57
5 changed files with 26 additions and 10 deletions

View File

@ -5486,6 +5486,7 @@ class InstanceSerializer(BaseSerializer):
raise serializers.ValidationError("Can only create instances on Kubernetes or OpenShift.")
node_type = get_field_from_model_or_attrs("node_type")
peers_from_control_nodes = get_field_from_model_or_attrs("peers_from_control_nodes")
listener_port = get_field_from_model_or_attrs("listener_port")
if peers_from_control_nodes and node_type not in (Instance.Types.EXECUTION, Instance.Types.HOP):
raise serializers.ValidationError("peers_from_control_nodes can only be enabled for execution or hop nodes.")
@ -5496,6 +5497,12 @@ class InstanceSerializer(BaseSerializer):
"Setting peers manually for control nodes is not allowed. Enable peers_from_control_nodes on the hop and execution nodes instead."
)
if peers_from_control_nodes and listener_port is None:
raise serializers.ValidationError(_("Field listener_port must be a valid integer when peers_from_control_nodes is enabled."))
for peer in attrs.get('peers', []):
if peer.listener_port is None:
raise serializers.ValidationError(_("Field listener_port must be set on peer ") + peer.hostname + ".")
return super().validate(attrs)
def validate_node_type(self, value):

View File

@ -15,8 +15,12 @@ custom_tls_certfile: receptor/tls/receptor.crt
custom_tls_keyfile: receptor/tls/receptor.key
custom_ca_certfile: receptor/tls/ca/mesh-CA.crt
receptor_protocol: 'tcp'
{% if instance.listener_port %}
receptor_listener: true
receptor_port: {{ instance.listener_port }}
{% else %}
receptor_listener: false
{% endif %}
{% if peers %}
receptor_peers:
{% for peer in peers %}

View File

@ -35,15 +35,7 @@ class Command(BaseCommand):
def host_metric_summary_monthly_queryset(self, result, offset=0, limit=BATCHED_FETCH_COUNT):
list_of_queryset = list(
result.values(
'id',
'date',
'license_consumed',
'license_capacity',
'hosts_added',
'hosts_deleted',
'indirectly_managed_hosts',
).order_by(
result.values('id', 'date', 'license_consumed', 'license_capacity', 'hosts_added', 'hosts_deleted', 'indirectly_managed_hosts',).order_by(
'date'
)[offset : offset + limit]
)

View File

@ -1,5 +1,6 @@
# Generated by Django 4.2 on 2023-05-17 18:31
import django.core.validators
from django.db import migrations, models
@ -32,4 +33,15 @@ class Migration(migrations.Migration):
model_name='instancelink',
constraint=models.CheckConstraint(check=models.Q(('source', models.F('target')), _negated=True), name='source_and_target_can_not_be_equal'),
),
migrations.AlterField(
model_name='instance',
name='listener_port',
field=models.PositiveIntegerField(
blank=True,
default=None,
help_text='Port that Receptor will listen for incoming connections on.',
null=True,
validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(65535)],
),
),
]

View File

@ -178,7 +178,8 @@ class Instance(HasPolicyEditsMixin, BaseModel):
)
listener_port = models.PositiveIntegerField(
blank=True,
default=27199,
null=True,
default=None,
validators=[MinValueValidator(1), MaxValueValidator(65535)],
help_text=_("Port that Receptor will listen for incoming connections on."),
)