From 79f9262b0a07bf5181af829755af9ddcc000980f Mon Sep 17 00:00:00 2001 From: Jakub Darmach Date: Fri, 16 Jan 2026 15:18:24 +0100 Subject: [PATCH 1/7] Ensure BGP Speakers are created --- roles/os_networks/tasks/networks.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/roles/os_networks/tasks/networks.yml b/roles/os_networks/tasks/networks.yml index b9b45ea..2e1a8d9 100644 --- a/roles/os_networks/tasks/networks.yml +++ b/roles/os_networks/tasks/networks.yml @@ -136,3 +136,19 @@ with_subelements: - "{{ os_networks_security_groups }}" - rules + +- name: Ensure BGP Speakers are created + openstack.cloud.bgp_speaker: + auth_type: "{{ os_networks_auth_type }}" + auth: "{{ os_networks_auth }}" + region_name: "{{ os_networks_region | default(omit) }}" + cacert: "{{ os_networks_cacert | default(omit) }}" + cloud: "{{ os_networks_cloud | default(omit) }}" + interface: "{{ os_networks_interface | default(omit, true) }}" + name: "{{ item.name }}" + local_as: "{{ item.local_as }}" + ip_version: "{{ item.ip_version | default(omit) }}" + advertise_floating_ip_host_routes: "{{ item.advertise_floating_ip_host_routes | default(omit) }}" + advertise_tenant_networks: "{{ item.advertise_tenant_networks | default(omit) }}" + state: "{{ item.state | default(omit) }}" + with_items: "{{ os_networks_bgp_speakers }}" From 9b312996de5879d5981d48fa86c5570a4c13c744 Mon Sep 17 00:00:00 2001 From: Jakub Darmach Date: Fri, 16 Jan 2026 15:18:43 +0100 Subject: [PATCH 2/7] Ensure BGP Peers are created --- roles/os_networks/tasks/networks.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/roles/os_networks/tasks/networks.yml b/roles/os_networks/tasks/networks.yml index 2e1a8d9..510ed68 100644 --- a/roles/os_networks/tasks/networks.yml +++ b/roles/os_networks/tasks/networks.yml @@ -152,3 +152,18 @@ advertise_tenant_networks: "{{ item.advertise_tenant_networks | default(omit) }}" state: "{{ item.state | default(omit) }}" with_items: "{{ os_networks_bgp_speakers }}" + +- name: Ensure BGP Peers are created + openstack.cloud.bgp_peer: + auth_type: "{{ os_networks_auth_type }}" + auth: "{{ os_networks_auth }}" + region_name: "{{ os_networks_region | default(omit) }}" + cacert: "{{ os_networks_cacert | default(omit) }}" + cloud: "{{ os_networks_cloud | default(omit) }}" + interface: "{{ os_networks_interface | default(omit, true) }}" + name: "{{ item.name }}" + remote_as: "{{ item.remote_as }}" + peer_ip: "{{ item.peer_ip }}" + peer_auth_type: "{{ item.peer_auth_type }}" + state: "{{ item.state | default(omit) }}" + with_items: "{{ os_networks_bgp_peers }}" From fc50c72781e71dcf90dae836249225ad0fa2c4a5 Mon Sep 17 00:00:00 2001 From: Jakub Darmach Date: Fri, 16 Jan 2026 15:39:47 +0100 Subject: [PATCH 3/7] Update network role README - Adds BGP speakers parameters description - Adds BGP peers parameters description - Removes trailing whitespace --- roles/os_networks/README.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/roles/os_networks/README.md b/roles/os_networks/README.md index 8ad07e0..193236b 100644 --- a/roles/os_networks/README.md +++ b/roles/os_networks/README.md @@ -87,7 +87,7 @@ dict containing the following items: internal interface. - `network`: Unique name or ID of the external gateway network. - `external_fixed_ips`: Optional list of IP address parameters for the - external gateway network. Each is a dictionary with the subnet name or + external gateway network. Each is a dictionary with the subnet name or subnet ID and the IP address to assign on the subnet. - `project`: Optionally create this router for a project other than the authenticating project. @@ -126,6 +126,24 @@ following items: *NOTE*: RBAC assignments cannot be modified after they are created. +`os_networks_bgp_speakers`: List of BGP speakers to create. +Each item should be a dict containing the following items: +- `name`: Name of the BGP speaker. +- `local_as`: Local autonomous system number (ASN) for the BGP Speaker. +- `ip_version`: Optional IP version for BGP speaker. +- `advertise_floating_ip_host_routes`: Whether to advertise fip host routes. +- `advertise_tenant_networks`: Whether to advertise tenant networks. +- `state`: Optional state of the BGP speaker, default is `present`. + +`os_networks_bgp_peers`: List of BGP peers to create. +Each item should be a dict containing the following items: +- `name`: Name that has to be given to the BGP Peer. +- `peer_ip`: IP address of the BGP peer. +- `remote_as`: Remote autonomous system number (ASN) for the BGP Peer. +- `peer_auth_type`: Authentication type, choices: ['none', 'md5']. +- `password`: Authentication password for the BGP peer when peer_auth_type set. +- `state`: Optional state of the subnet pool, default is `present`. + Dependencies ------------ From e2eb9a0d05dc4e120ee766e488b4670986c0935b Mon Sep 17 00:00:00 2001 From: Jakub Darmach Date: Fri, 16 Jan 2026 15:58:19 +0100 Subject: [PATCH 4/7] Add missing password to BGP peer creation --- roles/os_networks/tasks/networks.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/roles/os_networks/tasks/networks.yml b/roles/os_networks/tasks/networks.yml index 510ed68..14fc8ac 100644 --- a/roles/os_networks/tasks/networks.yml +++ b/roles/os_networks/tasks/networks.yml @@ -165,5 +165,6 @@ remote_as: "{{ item.remote_as }}" peer_ip: "{{ item.peer_ip }}" peer_auth_type: "{{ item.peer_auth_type }}" + password: "{{ item.password | default(omit) }}" state: "{{ item.state | default(omit) }}" with_items: "{{ os_networks_bgp_peers }}" From 618f0170839453f523f24da0056fe7415cd3a46a Mon Sep 17 00:00:00 2001 From: Jakub Darmach Date: Fri, 16 Jan 2026 16:48:32 +0100 Subject: [PATCH 5/7] Cosmetic changes - Updates README - Adds missing defaults to os_networks role --- roles/os_networks/README.md | 6 +++--- roles/os_networks/defaults/main.yml | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/roles/os_networks/README.md b/roles/os_networks/README.md index 193236b..eb833a6 100644 --- a/roles/os_networks/README.md +++ b/roles/os_networks/README.md @@ -137,12 +137,12 @@ Each item should be a dict containing the following items: `os_networks_bgp_peers`: List of BGP peers to create. Each item should be a dict containing the following items: -- `name`: Name that has to be given to the BGP Peer. +- `name`: Name of the BGP Peer. - `peer_ip`: IP address of the BGP peer. - `remote_as`: Remote autonomous system number (ASN) for the BGP Peer. - `peer_auth_type`: Authentication type, choices: ['none', 'md5']. -- `password`: Authentication password for the BGP peer when peer_auth_type set. -- `state`: Optional state of the subnet pool, default is `present`. +- `password`: Password for the BGP peer when `peer_auth_type` is 'md5'. +- `state`: Optional state of the BGP peer, default is `present`. Dependencies ------------ diff --git a/roles/os_networks/defaults/main.yml b/roles/os_networks/defaults/main.yml index 2606e49..a7ae231 100644 --- a/roles/os_networks/defaults/main.yml +++ b/roles/os_networks/defaults/main.yml @@ -101,5 +101,25 @@ os_networks_security_groups: [] # in the designated way. os_networks_rbac: [] +# List of BGP speakers to create. +# Each item should be a dict containing the following items: +# - `name`: Name of the BGP speaker. +# - `local_as`: Local autonomous system number (ASN) for the BGP Speaker. +# - `ip_version`: Optional IP version for BGP speaker. +# - `advertise_floating_ip_host_routes`: Whether to advertise fip host routes. +# - `advertise_tenant_networks`: Whether to advertise tenant networks. +# - `state`: Optional state of the BGP speaker, default is `present`. +os_networks_bgp_speakers: [] + +# List of BGP peers to create. +# Each item should be a dict containing the following items: +# - `name`: Name that has to be given to the BGP Peer. +# - `peer_ip`: IP address of the BGP peer. +# - `remote_as`: Remote autonomous system number (ASN) for the BGP Peer. +# - `peer_auth_type`: Authentication type, choices: ['none', 'md5']. +# - `password`: Authentication password for the BGP peer when peer_auth_type set. +# - `state`: Optional state of the subnet pool, default is `present`. +os_networks_bgp_peers: [] + # Upper constraints file for installation of Python dependencies. os_networks_upper_constraints_file: https://releases.openstack.org/constraints/upper/2025.1 From b65e7a83d441882e3c7d685358311bfbe6966e2f Mon Sep 17 00:00:00 2001 From: Jakub Darmach Date: Fri, 16 Jan 2026 17:04:02 +0100 Subject: [PATCH 6/7] BGP tasks conditional --- roles/os_networks/tasks/networks.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/roles/os_networks/tasks/networks.yml b/roles/os_networks/tasks/networks.yml index 14fc8ac..6b642be 100644 --- a/roles/os_networks/tasks/networks.yml +++ b/roles/os_networks/tasks/networks.yml @@ -152,6 +152,7 @@ advertise_tenant_networks: "{{ item.advertise_tenant_networks | default(omit) }}" state: "{{ item.state | default(omit) }}" with_items: "{{ os_networks_bgp_speakers }}" + when: os_networks_bgp_speakers | default([]) | length > 0 - name: Ensure BGP Peers are created openstack.cloud.bgp_peer: @@ -168,3 +169,4 @@ password: "{{ item.password | default(omit) }}" state: "{{ item.state | default(omit) }}" with_items: "{{ os_networks_bgp_peers }}" + when: os_networks_bgp_peers | default([]) | length > 0 From b9f6214774ea73bb5ff01d7fdc06163fe49c815b Mon Sep 17 00:00:00 2001 From: Jakub Darmach Date: Fri, 16 Jan 2026 17:07:32 +0100 Subject: [PATCH 7/7] Define default for peer_auth_type --- roles/os_networks/tasks/networks.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/os_networks/tasks/networks.yml b/roles/os_networks/tasks/networks.yml index 6b642be..5adc8f4 100644 --- a/roles/os_networks/tasks/networks.yml +++ b/roles/os_networks/tasks/networks.yml @@ -165,7 +165,7 @@ name: "{{ item.name }}" remote_as: "{{ item.remote_as }}" peer_ip: "{{ item.peer_ip }}" - peer_auth_type: "{{ item.peer_auth_type }}" + peer_auth_type: "{{ item.peer_auth_type | default(omit)}}" password: "{{ item.password | default(omit) }}" state: "{{ item.state | default(omit) }}" with_items: "{{ os_networks_bgp_peers }}"