From 7443c053f4cf0e014df86cd428b4d8754fe5c10f Mon Sep 17 00:00:00 2001 From: Roger Luethi Date: Sat, 17 Oct 2026 09:40:11 +0200 Subject: [PATCH 1/2] interfaces: Mark the ceph-ansible keys as such 099-interfaces.yml sets monitor_interface and radosgw_interface for every host, under a header that only says they come from ceph-ansible. On a cephadm deployment they look like the knobs that place the monitors and RGW daemons, but no cephadm play reads them: - cephadm-bootstrap.yml and cephadm-hosts.yml take each host's address from monitor_address, falling back to the default IPv4 address; - cephadm-rgw.yml fails when an RGW host has no radosgw_address, and its message says radosgw_interface is not supported, because resolving an interface name needs facts the play does not gather. The keys stay: OSISM 11 still manages existing ceph-ansible clusters (the reef and squid ceph-ansible images, --ceph-backend), which read them. Add a comment saying that only ceph-ansible reads them and what the cephadm plays use instead. Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Roger Luethi --- all/099-interfaces.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/all/099-interfaces.yml b/all/099-interfaces.yml index 65390f6..62e64d4 100644 --- a/all/099-interfaces.yml +++ b/all/099-interfaces.yml @@ -40,6 +40,8 @@ cilium_iface: "{{ k3s_interface }}" kube_vip_iface: "{{ k3s_interface }}" # default interfaces as defined in ceph-ansible +# Read by ceph-ansible only. The cephadm plays never read them; they take +# monitor_address and radosgw_address instead. monitor_interface: "{{ network_interface }}" radosgw_interface: "{{ network_interface }}" From fd0d3b8f5f1d34a9e28c7f24d19544689162098b Mon Sep 17 00:00:00 2001 From: Roger Luethi Date: Sat, 17 Oct 2026 09:40:32 +0200 Subject: [PATCH 2/2] interfaces: Quote the loopback0 fallback console_interface, hosts_interface, management_interface and k3s_interface fall back to loopback0 when internal_interface is unset: internal_interface|default(loopback0) Unquoted, loopback0 is a variable name, and no such variable exists. With internal_interface unset the expression is an undefined-variable error ("'loopback0' is undefined") instead of the intended fallback. The form dates from 8dda210 (2021, then default(eth0)) and was carried through 410dff3, 0ce1810 and 8772eb3 (eth0 -> loopback0); the string was always the intent, matching network_interface's own default. Quote it. Hosts that set internal_interface render as before. Hosts that do not now get loopback0, the interface OSISM uses for network_interface, which is right on routed (BGP-to-host) hosts. cilium_iface and kube_vip_iface follow k3s_interface. On a host without a loopback0 interface the consumers (the hosts role and the manager's *_host addresses in defaults/manager/000-defaults.yml, which look up ansible_) still fail, now at the fact lookup. Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Roger Luethi --- all/099-interfaces.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/all/099-interfaces.yml b/all/099-interfaces.yml index 62e64d4..4c858d9 100644 --- a/all/099-interfaces.yml +++ b/all/099-interfaces.yml @@ -29,13 +29,13 @@ tunnel_address_family: "{{ network_address_family }}" # default interfaces as used in OSISM playbooks + roles -console_interface: "{{ internal_interface|default(loopback0) }}" -hosts_interface: "{{ internal_interface|default(loopback0) }}" -management_interface: "{{ internal_interface|default(loopback0) }}" +console_interface: "{{ internal_interface|default('loopback0') }}" +hosts_interface: "{{ internal_interface|default('loopback0') }}" +management_interface: "{{ internal_interface|default('loopback0') }}" # default interfaces as defined in k3s-ansible -k3s_interface: "{{ internal_interface|default(loopback0) }}" +k3s_interface: "{{ internal_interface|default('loopback0') }}" cilium_iface: "{{ k3s_interface }}" kube_vip_iface: "{{ k3s_interface }}"