For why `bind_ip` doesn't get set initially, is it possible that the initial configuration writing can happen before the interfaces are set up? The function that gets the health_manager_bind_ip can return None if an exception happens when retrieving the interface for all interfaces, or if no interfaces are found: https://opendev.org/openstack/charm-octavia/src/commit/975502813f51f022887508e7d2c5840308c198d8/src/lib/charm/openstack/octavia.py#L111-L115 This kind of race condition would explain why bind_ip is not set on deployment, but then becomes set when triggering a config change later (and thus reevaluation of this function).
It totally makes sense btw for the lb to display as offline while still working in this case - if the health manager is defaulting to listening on 127.0.0.1, where it cannot be accessed by whatever is checking the health. So the missing `bind_ip` is definitely related at least.
> if we should just set `bind_ip` to '::'
Two questions about this:
- will this introduce a security issue? Is it ok for the health manager to be listening on all interfaces?
- Do we want to always use this interface, or only use this as a fallback if health_manager_bind_ip() fails to get the interfaces?
For why `bind_ip` doesn't get set initially, is it possible that the initial configuration writing can happen before the interfaces are set up? The function that gets the health_ manager_ bind_ip can return None if an exception happens when retrieving the interface for all interfaces, or if no interfaces are found: /opendev. org/openstack/ charm-octavia/ src/commit/ 975502813f51f02 2887508e7d2c584 0308c198d8/ src/lib/ charm/openstack /octavia. py#L111- L115 This kind of race condition would explain why bind_ip is not set on deployment, but then becomes set when triggering a config change later (and thus reevaluation of this function).
https:/
It totally makes sense btw for the lb to display as offline while still working in this case - if the health manager is defaulting to listening on 127.0.0.1, where it cannot be accessed by whatever is checking the health. So the missing `bind_ip` is definitely related at least.
> if we should just set `bind_ip` to '::'
Two questions about this:
- will this introduce a security issue? Is it ok for the health manager to be listening on all interfaces?
- Do we want to always use this interface, or only use this as a fallback if health_ manager_ bind_ip( ) fails to get the interfaces?