Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 18 additions & 8 deletions roles/adoption_osp_deploy/tasks/config_files.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,18 @@
register: _original_config_download
delegate_to: "localhost"

- name: Reset facts
ansible.builtin.set_fact:
_tripleo_nodes: []
_hostname_map: {}
_deployedserverport_map: {}
_nodeport_map: {}
_ctlplanenet_attributes: {}

- name: Generate config download file
vars:
_ctlplane_net: "{{ cifmw_networking_env_definition.networks.ctlplane }}"
_ctlplane_net1: "{{ cifmw_networking_env_definition.networks['ctlplane'] }}"
_ctlplane_net: "{{ cifmw_networking_env_definition.networks[_stack.ctlplanenet|default('ctlplane')] }}"
_hostname_map_translation: >-
{{
cifmw_adoption_osp_deploy_scenario.hostname_groups_map |
Expand Down Expand Up @@ -77,13 +86,13 @@
dns_version: dns_v6
gw_version: gw_v6
prefix_length_version: prefix_length_v6
when: cifmw_networking_env_definition.networks.ctlplane.network_v6 is defined
when: cifmw_networking_env_definition.networks[_stack.ctlplanenet|default('ctlplane')].network_v6 is defined

- name: Generate DeployedServerPortMap field
vars:
_node_instance_net: "{{ cifmw_networking_env_definition.instances[node] }}"
_key_name: "{{ node }}-ctlplane"
_ctlplane_ip: "{{ _node_instance_net.networks.ctlplane[ip_version|default('ip_v4')] }}"
_ctlplane_ip: "{{ _node_instance_net.networks[_stack.ctlplanenet|default('ctlplane')][ip_version|default('ip_v4')] }}"
_server_port: >-
{%- set port = {_key_name: {}} -%}
{%- set _ = port[_key_name].update({
Expand Down Expand Up @@ -115,7 +124,8 @@
{%- set nodeport = {node: {}} -%}
{% for network, net_info in _node_instance_net.networks.items() if network != 'ocpbm' %}
{%- set subnet = cifmw_networking_env_definition.networks[network][network_version|default("network_v4")] -%}
{%- set network_name = network.replace('storagemgmt', 'storage_mgmt') -%}
{%- set network_name = cifmw_adoption_osp_deploy_scenario.network_tripleo_network_map[network] | default(network) -%}
{%- set network_name = network_name.replace('storagemgmt', 'storage_mgmt') -%}
{%- set network_name = network_name.replace('internalapi', 'internal_api') -%}
{%- set _ = nodeport[node].update(
{
Expand Down Expand Up @@ -144,18 +154,18 @@
_cloud_domain: "{{ cifmw_adoption_osp_deploy_scenario.cloud_domain }}"
_dns_server: >-
{{
(_ctlplane_net[dns_version|default("dns_v4")] | length > 0) |
ternary(_ctlplane_net[dns_version|default("dns_v4")], _ctlplane_net[gw_version|default("gw_v4")])
(_ctlplane_net1[dns_version|default("dns_v4")] | length > 0) |
ternary(_ctlplane_net1[dns_version|default("dns_v4")], _ctlplane_net1[gw_version|default("gw_v4")])
}}
ansible.builtin.set_fact:
_ctlplanenet_attributes:
network:
dns_domain: "{{ _cloud_domain }}"
mtu: "{{ _ctlplane_net.mtu }}"
mtu: "{{ _ctlplane_net1.mtu }}"
subnets:
ctlplane-subnet:
dns_nameservers: "{{ _dns_server }}"
gateway_ip: "{{ _ctlplane_net[gw_version|default('gw_v4')] }}"
gateway_ip: "{{ _ctlplane_net1[gw_version|default('gw_v4')] }}"

- name: Create new config download file
vars:
Expand Down
91 changes: 86 additions & 5 deletions roles/adoption_osp_deploy/tasks/prepare_overcloud.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,51 @@
- user_id
- user_dir

- name: Reset facts
ansible.builtin.set_fact:
_tripleo_nodes_stack: {}

- name: Prepare enviornment for 17.1 overcloud deployment
vars:
_overcloud_name: >-
{{
_stack.stackname |
default('overcloud')
}}
_hostname_map_translation: >-
{{
cifmw_adoption_osp_deploy_scenario.hostname_groups_map |
ansible.utils.keep_keys(target=_stack.stack_nodes)
}}
_network_data_file: >-
{{
[cifmw_adoption_source_scenario_path,
_stack.network_data_file
] | path_join
}}
_network_data_file_dest: >-
{{
[ansible_user_dir,
'network_data_' ~ _overcloud_name ~'.yaml'
] | path_join
}}
_network_data_extension: "{{ _network_data_file | splitext | last }}"
_vips_data_file: >-
{{
[cifmw_adoption_source_scenario_path,
_stack.vips_data_file
] | path_join
}}
_vips_data_file_dest: >-
{{
[ansible_user_dir,
'vips_data_' ~ _overcloud_name ~ '.yaml'
] | path_join
}}
_source_cmd: "source {{ ansible_user_dir }}/stackrc"
_network_provision_output: "network_provision_{{ _overcloud_name }}_out.yaml"
_vips_provision_output: "vips_provision_{{ _overcloud_name }}_out.yaml"
_ctlplane: "{{ _stack.ctlplanenet|default('ctlplane') }}"
block:
- name: Gather stack nodes and facts
ansible.builtin.include_tasks: gather_stack_nodes.yml
Expand Down Expand Up @@ -51,6 +95,43 @@
apply:
delegate_to: "{{ cifmw_target_host | default('localhost') }}"

- name: Configure NetworkManager to not override /etc/resolv.conf
become: true
delegate_to: "{{ overcloud_vm }}"
community.general.ini_file:
path: "/etc/NetworkManager/NetworkManager.conf"
option: dns
section: main
value: none
mode: "0644"
loop: "{{ _tripleo_nodes_stack[_overcloud_name] }}"
loop_control:
loop_var: overcloud_vm

- name: Restart NetworkManager to ensure we apply new configuration
become: true
delegate_to: "{{ overcloud_vm }}"
ansible.builtin.service:
name: NetworkManager
state: restarted
loop: "{{ _tripleo_nodes_stack[_overcloud_name] }}"
loop_control:
loop_var: overcloud_vm

- name: Inject custom nameservers in /etc/resolv.conf
become: true
delegate_to: "{{ overcloud_vm }}"
vars:
_ctlplane_net: "{{ cifmw_networking_env_definition.networks[_ctlplane] }}"
_dns_server: "{{ _ctlplane_net[dns_version|default('dns_v4')] }}"
ansible.builtin.template:
src: "resolv.conf.j2"
dest: "/etc/resolv.conf"
mode: "0644"
loop: "{{ _tripleo_nodes_stack[_overcloud_name] }}"
loop_control:
loop_var: overcloud_vm

- name: Ensure needed logins
ansible.builtin.include_tasks: login_registries.yml
args:
Expand Down Expand Up @@ -171,12 +252,12 @@
delegate_to: "{{ overcloud_vm }}"
vars:
_node_net: "{{ cifmw_networking_env_definition.instances[overcloud_vm] }}"
_ctlplane_ip: "{{ _node_net.networks.ctlplane[ip_version|default('ip_v4')] }}"
_ctlplane_net: "{{ cifmw_networking_env_definition.networks.ctlplane }}"
_dns_server: "{{ _ctlplane_net.[dns_version|default('dns_v4')] }}"
_ctlplane_ip: "{{ _node_net.networks[_ctlplane][ip_version|default('ip_v4')] }}"
_ctlplane_net: "{{ cifmw_networking_env_definition.networks[_ctlplane] }}"
_dns_server: "{{ _ctlplane_net[dns_version|default('dns_v4')] }}"
_gateway_ip: "{{ _ctlplane_net[gw_version|default('gw_v4')] }}"
_interface_mtu: "{{ _node_net.networks.ctlplane.mtu }}"
_ctlplane_cidr: "{{ _node_net.networks.ctlplane[prefix_length_version|default('prefix_length_v4')] }}"
_interface_mtu: "{{ _node_net.networks[_ctlplane].mtu }}"
_ctlplane_cidr: "{{ _node_net.networks[_ctlplane][prefix_length_version|default('prefix_length_v4')] }}"
ansible.builtin.template:
src: "os_net_config_overcloud.yml.j2"
dest: /etc/os-net-config/tripleo_config.yaml
Expand Down
168 changes: 132 additions & 36 deletions roles/adoption_osp_deploy/templates/adoption_vars.yaml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,31 @@ source_mariadb_ip: {{ _controller_1_internalapi_ip }}
source_ovndb_ip: {{ _controller_1_internalapi_ip }}
edpm_node_hostname: {{ _compute_1_name }}.{{ cifmw_adoption_osp_deploy_scenario.cloud_domain }}
edpm_node_ip: {{ _compute_1_ip }}

{% if _vm_groups['osp-computes'] | default([]) | length > 0 %}
edpm_computes: |
{% for compute in _vm_groups['osp-computes'] %}
{% set node_nets = cifmw_networking_env_definition.instances[compute] %}
["{{ compute }}.{{ cifmw_adoption_osp_deploy_scenario.cloud_domain }}"]="{{ node_nets.networks.ctlplane[ip_version|default('ip_v4')] }}"
{% endfor %}
{% endif %}

{% if _vm_groups['osp-dcn1-compute-az1s'] | default([]) | length > 0 %}
edpm_computes_dcn1: |
{% for compute in _vm_groups['osp-dcn1-compute-az1s'] %}
{% set node_nets = cifmw_networking_env_definition.instances[compute] %}
["{{ compute }}.{{ cifmw_adoption_osp_deploy_scenario.cloud_domain }}"]="{{ node_nets.networks.ctlplanedcn1[ip_version|default('ip_v4')] }}"
{% endfor %}
{% endif %}

{% if _vm_groups['osp-dcn2-compute-az2s'] | default([]) | length > 0 %}
edpm_computes_dcn2: |
{% for compute in _vm_groups['osp-dcn2-compute-az2s'] %}
{% set node_nets = cifmw_networking_env_definition.instances[compute] %}
["{{ compute }}.{{ cifmw_adoption_osp_deploy_scenario.cloud_domain }}"]="{{ node_nets.networks.ctlplanedcn2[ip_version|default('ip_v4')] }}"
{% endfor %}
{% endif %}

{% if _vm_groups['osp-networkers'] | default([]) | length > 0 %}
edpm_networkers: |
{% for networker in _vm_groups['osp-networkers'] | default([]) %}
Expand Down Expand Up @@ -51,50 +76,93 @@ source_galera_members: |
{% endfor %}
{%+ endif +%}

{% if _vm_groups['osp-computes'] | default([]) | length > 0 %}
edpm_nodes:
{% for stack in _stack_names %}
{% if stack == 'overcloud' %}
{% set cell = _default_cell_name %}
{% set prefix = '' %}
{% else %}
{% set cell = stack %}
{% set prefix = stack ~ '-' %}
{% endif %}
{% if _vm_groups[prefix ~ 'osp-computes'] | default([]) | length > 0 %}
{{ cell }}:
{% for compute in _vm_groups[prefix ~ 'osp-computes'] %}
{% set node_nets = cifmw_networking_env_definition.instances[compute] %}
{{ compute }}:
hostName: {{ compute }}.{{ cifmw_adoption_osp_deploy_scenario.cloud_domain }}
ansible:
ansibleHost: {{ node_nets.networks.ctlplane[ip_version|default('ip_v4')] }}
networks:
{% for net in node_nets.networks.keys() if net not in cifmw_adoption_osp_deploy_adoption_vars_exclude_nets %}
- fixedIP: {{ node_nets.networks[net][ip_version|default('ip_v4')] }}
name: {{ net }}
subnetName: subnet1
{% if net == 'ctlplane' %}
defaultRoute: true
{% endif %}
{% endfor %}
{% for compute in _vm_groups['osp-computes'] %}
{% set node_nets = cifmw_networking_env_definition.instances[compute] %}
{{ compute }}:
hostName: {{ compute }}.{{ cifmw_adoption_osp_deploy_scenario.cloud_domain }}
{% for net in node_nets.networks.keys() if cifmw_adoption_osp_deploy_scenario.network_tripleo_network_map[net]|default(net) == "ctlplane" %}
ansible:
ansibleHost: {{ node_nets.networks[net][ip_version|default('ip_v4')] }}
{% endfor %}
networks:
{% for net in node_nets.networks.keys() if net not in cifmw_adoption_osp_deploy_adoption_vars_exclude_nets %}
{% set net_name = cifmw_adoption_osp_deploy_scenario.network_tripleo_network_map[net]|default(net) %}
- fixedIP: {{ node_nets.networks[net][ip_version|default('ip_v4')] }}
name: {{ net_name }}
subnetName: {{ "subnet1" if net_name == net else net}}
{% if net_name == 'ctlplane' %}
defaultRoute: true
{% endif %}
{% endfor %}
{% endfor %}
{% endif %}

{% if _vm_groups['osp-dcn1-compute-az1s'] | default([]) | length > 0 %}
edpm_nodes_dcn1:
{% for compute in _vm_groups['osp-dcn1-compute-az1s'] %}
{% set node_nets = cifmw_networking_env_definition.instances[compute] %}
{{ compute }}:
hostName: {{ compute }}.{{ cifmw_adoption_osp_deploy_scenario.cloud_domain }}
{% for net in node_nets.networks.keys() if cifmw_adoption_osp_deploy_scenario.network_tripleo_network_map[net]|default(net) == "ctlplane" %}
ansible:
ansibleHost: {{ node_nets.networks[net][ip_version|default('ip_v4')] }}
{% endfor %}
networks:
{% for net in node_nets.networks.keys() if net not in cifmw_adoption_osp_deploy_adoption_vars_exclude_nets %}
{% set net_name = cifmw_adoption_osp_deploy_scenario.network_tripleo_network_map[net]|default(net) %}
- fixedIP: {{ node_nets.networks[net][ip_version|default('ip_v4')] }}
name: {{ net_name }}
subnetName: {{ "subnet1" if net_name == net else net}}
{% if net_name == 'ctlplane' %}
defaultRoute: true
{% endif %}
{% endfor %}
{% endfor %}
{%+ endif +%}
{% endfor %}
{% endif %}

{% if _vm_groups['osp-dcn2-compute-az2s'] | default([]) | length > 0 %}
edpm_nodes_dcn2:
{% for compute in _vm_groups['osp-dcn2-compute-az2s'] %}
{% set node_nets = cifmw_networking_env_definition.instances[compute] %}
{{ compute }}:
hostName: {{ compute }}.{{ cifmw_adoption_osp_deploy_scenario.cloud_domain }}
{% for net in node_nets.networks.keys() if cifmw_adoption_osp_deploy_scenario.network_tripleo_network_map[net]|default(net) == "ctlplane" %}
ansible:
ansibleHost: {{ node_nets.networks[net][ip_version|default('ip_v4')] }}
{% endfor %}
networks:
{% for net in node_nets.networks.keys() if net not in cifmw_adoption_osp_deploy_adoption_vars_exclude_nets %}
{% set net_name = cifmw_adoption_osp_deploy_scenario.network_tripleo_network_map[net]|default(net) %}
- fixedIP: {{ node_nets.networks[net][ip_version|default('ip_v4')] }}
name: {{ net_name }}
subnetName: {{ "subnet1" if net_name == net else net}}
{% if net_name == 'ctlplane' %}
defaultRoute: true
{% endif %}
{% endfor %}
{% endfor %}
{% endif %}


edpm_nodes_networker:
{% if _vm_groups['osp-networkers'] | default([]) | length > 0 %}
{% for networker in _vm_groups['osp-networkers'] | default([]) %}
{% set node_nets = cifmw_networking_env_definition.instances[networker] %}
{{ networker }}:
hostName: {{ networker }}.{{ cifmw_adoption_osp_deploy_scenario.cloud_domain }}
{% for net in node_nets.networks.keys() if cifmw_adoption_osp_deploy_scenario.network_tripleo_network_map[net]|default(net) == "ctlplane" %}
ansible:
ansibleHost: {{ node_nets.networks.ctlplane[ip_version|default('ip_v4')] }}
ansibleHost: {{ node_nets.networks[net][ip_version|default('ip_v4')] }}
{% endfor %}
networks:
{% for net in node_nets.networks.keys() if net not in cifmw_adoption_osp_deploy_adoption_vars_exclude_nets %}
{% set net_name = cifmw_adoption_osp_deploy_scenario.network_tripleo_network_map[net]|default(net) %}
- fixedIP: {{ node_nets.networks[net][ip_version|default('ip_v4')] }}
name: {{ net }}
subnetName: subnet1
{% if net == 'ctlplane' %}
name: {{ net_name }}
subnetName: {{ "subnet1" if net_name == net else net}}
{% if net_name == 'ctlplane' %}
defaultRoute: true
{% endif %}
{% endfor %}
Expand All @@ -104,20 +172,48 @@ edpm_nodes_networker:
{% set node_nets = cifmw_networking_env_definition.instances[controller] %}
{{ controller }}:
hostName: {{ controller }}.{{ cifmw_adoption_osp_deploy_scenario.cloud_domain }}
{% for net in node_nets.networks.keys() if cifmw_adoption_osp_deploy_scenario.network_tripleo_network_map[net]|default(net) == "ctlplane" %}
ansible:
ansibleHost: {{ node_nets.networks.ctlplane[ip_version|default('ip_v4')] }}
ansibleHost: {{ node_nets.networks[net][ip_version|default('ip_v4')] }}
{% endfor %}
networks:
{% for net in node_nets.networks.keys() if net not in cifmw_adoption_osp_deploy_adoption_vars_exclude_nets %}
{% set net_name = cifmw_adoption_osp_deploy_scenario.network_tripleo_network_map[net]|default(net) %}
- fixedIP: {{ node_nets.networks[net][ip_version|default('ip_v4')] }}
name: {{ net }}
subnetName: subnet1
{% if net == 'ctlplane' %}
name: {{ net_name }}
subnetName: {{ "subnet1" if net_name == net else net}}
{% if net_name == 'ctlplane' %}
defaultRoute: true
{% endif %}
{% endfor %}
{% endfor %}


upstream_dns: {{ cifmw_networking_env_definition.networks.ctlplane[dns_version|default('dns_v4')] | first }}
os_cloud_name: {{ _stack_names[0] }}
os_cloud_name: {{ cifmw_adoption_osp_deploy_scenario.stacks[0].stackname }}
standalone_ip: {{ _undercloud_ip }}

# DCN network routes extracted from TripleO scenario
{% set _dcn1_stack = cifmw_adoption_osp_deploy_scenario.stacks | selectattr('stackname', 'equalto', 'dcn1') | first | default({}) %}
{% if _dcn1_stack.network_routes is defined %}
edpm_dcn1_routes:
Copy link
Contributor

@evallesp evallesp Dec 18, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[related to first commit]
(blocking) suggestion: I see here a good candidate for a refactor:

{% for site in ['dcn1', 'dcn2'] %}
{% set _stack = cifmw_adoption_osp_deploy_scenario.stacks | selectattr('stackname', 'equalto', site) | first | default({}) %}
{% if _stack.network_routes is defined %}
edpm_{{ site }}_routes:
  {% for subnet_name, routes in _stack.network_routes.items() %}
  {{ subnet_name }}:
    {% for route in routes %}
    - destination: {{ route.ip_netmask }}
      nexthop: {{ route.next_hop }}
    {% endfor %}
  {% endfor %}
{% endif %}
{% endfor %}

{% for subnet_name, routes in _dcn1_stack.network_routes.items() %}
{{ subnet_name }}:
{% for route in routes %}
- destination: {{ route.ip_netmask }}
nexthop: {{ route.next_hop }}
{% endfor %}
{% endfor %}
{% endif %}

{% set _dcn2_stack = cifmw_adoption_osp_deploy_scenario.stacks | selectattr('stackname', 'equalto', 'dcn2') | first | default({}) %}
{% if _dcn2_stack.network_routes is defined %}
edpm_dcn2_routes:
{% for subnet_name, routes in _dcn2_stack.network_routes.items() %}
{{ subnet_name }}:
{% for route in routes %}
- destination: {{ route.ip_netmask }}
nexthop: {{ route.next_hop }}
{% endfor %}
{% endfor %}
{% endif %}
Loading
Loading