diff --git a/awx/api/serializers.py b/awx/api/serializers.py index 25018d7cb0..d298549050 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -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): diff --git a/awx/api/templates/instance_install_bundle/group_vars/all.yml b/awx/api/templates/instance_install_bundle/group_vars/all.yml index cb31889c6f..f94bb5b04d 100644 --- a/awx/api/templates/instance_install_bundle/group_vars/all.yml +++ b/awx/api/templates/instance_install_bundle/group_vars/all.yml @@ -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 %} diff --git a/awx/main/management/commands/host_metric.py b/awx/main/management/commands/host_metric.py index c0862ea1a3..b778545148 100644 --- a/awx/main/management/commands/host_metric.py +++ b/awx/main/management/commands/host_metric.py @@ -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] ) diff --git a/awx/main/migrations/0185_hop_nodes.py b/awx/main/migrations/0185_hop_nodes.py index 153dd6a41a..b944fe4738 100644 --- a/awx/main/migrations/0185_hop_nodes.py +++ b/awx/main/migrations/0185_hop_nodes.py @@ -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)], + ), + ), ] diff --git a/awx/main/models/ha.py b/awx/main/models/ha.py index 13137e85a8..78f782edd3 100644 --- a/awx/main/models/ha.py +++ b/awx/main/models/ha.py @@ -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."), )