Skip to content

Cannot set hostnames as backend-addresses #71

Description

@skatsaounis

Bug Description

The Juju provider allows juju_machines to report their hostname, if wait_for_hostname is set link. This is the only information that someone can get for a Juju machine that runs an application in order to configure HAProxy charm for it.

HAProxy though supports resolvable hostnames as per the documentation link

If that hostname is tried to be added in the ingress-configurator tcp-backend-addresses, then a failure is thrown since it is not validated correctly. Log is attached below.

To Reproduce

# does not work
juju config ingress-configurator tcp-backend-addresses="juju-56c7de-1,juju-56c7de-2,juju-56c7de-3"

# works
juju config ingress-configurator tcp-backend-addresses="10.240.246.4,10.240.246.6,10.240.246.8"

Environment

haproxy 2.8/edge 333
ingress-configurator latest/edge 42
Juju 3.6.14
Juju cloud: LXD

Relevant log output

unit-ingress-configurator-non-tls-1: 10:19:03 INFO unit.ingress-configurator-non-tls/1.juju-log [{'type': 'ip_any_address', 'loc': ('backend_addresses', 0), 'msg': 'value is not a valid IPv4 or IPv6 address', 'input': 'juju-56c7de-1'}, {'type': 'ip_any_address', 'loc': ('backend_addresses', 1), 'msg': 'value is not a valid IPv4 or IPv6 address', 'input': 'juju-56c7de-2'}, {'type': 'ip_any_address', 'loc': ('backend_addresses', 2), 'msg': 'value is not a valid IPv4 or IPv6 address', 'input': 'juju-56c7de-3'}]
unit-ingress-configurator-non-tls-1: 10:19:03 ERROR unit.ingress-configurator-non-tls/1.juju-log Failed to validate haproxy-route-tcp requirements. Invalid config fields: ['backend_addresses-0', 'backend_addresses-1', 'backend_addresses-2']
unit-ingress-configurator-non-tls-1: 10:19:03 ERROR unit.ingress-configurator-non-tls/1.juju-log Error providing haproxy-route-tcp requirements.
Traceback (most recent call last):
  File "/var/lib/juju/agents/unit-ingress-configurator-non-tls-1/charm/src/state/haproxy_route_tcp.py", line 188, in from_charm
    return cls(
           ^^^^
  File "/var/lib/juju/agents/unit-ingress-configurator-non-tls-1/charm/venv/lib/python3.12/site-packages/pydantic/_internal/_dataclasses.py", line 121, in __init__
    s.__pydantic_validator__.validate_python(ArgsKwargs(args, kwargs), self_instance=s)
pydantic_core._pydantic_core.ValidationError: 3 validation errors for HaproxyRouteTcpRequirements
backend_addresses.0
  value is not a valid IPv4 or IPv6 address [type=ip_any_address, input_value='juju-56c7de-1', input_type=str]
backend_addresses.1
  value is not a valid IPv4 or IPv6 address [type=ip_any_address, input_value='juju-56c7de-2', input_type=str]
backend_addresses.2
  value is not a valid IPv4 or IPv6 address [type=ip_any_address, input_value='juju-56c7de-3', input_type=str]

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/var/lib/juju/agents/unit-ingress-configurator-non-tls-1/charm/src/charm.py", line 141, in _provide_haproxy_route_tcp_requirements
    tcp_requirements = HaproxyRouteTcpRequirements.from_charm(self)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/lib/juju/agents/unit-ingress-configurator-non-tls-1/charm/src/state/haproxy_route_tcp.py", line 204, in from_charm
    raise InvalidHaproxyRouteTcpRequirementsError(
state.haproxy_route_tcp.InvalidHaproxyRouteTcpRequirementsError: Invalid haproxy-route-tcp configuration.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/var/lib/juju/agents/unit-ingress-configurator-non-tls-1/charm/src/charm.py", line 114, in _reconcile
    self._provide_haproxy_route_tcp_requirements()
  File "/var/lib/juju/agents/unit-ingress-configurator-non-tls-1/charm/src/charm.py", line 164, in _provide_haproxy_route_tcp_requirements
    raise ProvideHaproxyRouteTcpRequirementsError(
ProvideHaproxyRouteTcpRequirementsError: Failed to provide haproxy-route-tcp requirements.

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Fields

    No fields configured for Feature.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions