Skip to content

Commit c87aaa9

Browse files
committed
[NFV] Added IPV6 scenarios for NFV
Added IPV6 scenarios for IPV6: * OVS DPDK SRIOV with 1 nodeset * OVS DPDK SRIOV with 2 nodesets Fixed some issues found that corrupted yaml files when containing IPV6 addresses
1 parent 5468715 commit c87aaa9

File tree

11 files changed

+466
-10
lines changed

11 files changed

+466
-10
lines changed

roles/ci_gen_kustomize_values/templates/common/network-values/values.yaml.j2

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ data:
1919
node_{{ ns.ocp_index }}:
2020
{% set ns.ocp_index = ns.ocp_index+1 %}
2121
name: {{ cifmw_networking_env_definition.instances[host]['hostname'] }}
22+
node_name: {{ cifmw_networking_env_definition.instances[host]['hostname'] }}.ocp.openstack.lab
2223
{% for network in cifmw_networking_env_definition.instances[host]['networks'].values() %}
2324
{% set ns.interfaces = ns.interfaces |
2425
combine({network.network_name: (network.parent_interface |
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
---
2+
# source: ovs-dpdk-sriov-ipv6-2nodesets/edpm-nodeset-values/values.yaml.j2
3+
{% set instances_names = [] %}
4+
{% set _original_nodeset = (original_content.data | default({})).nodeset | default({}) %}
5+
{% set _original_nodes = _original_nodeset.nodes | default({}) %}
6+
{% set _original_services = _original_nodeset['services'] | default([]) %}
7+
{% if cifmw_baremetal_hosts | default([]) | length > 0 %}
8+
{% for _inst in cifmw_baremetal_hosts.keys() %}
9+
{% if (('label' in cifmw_baremetal_hosts[_inst]) and
10+
(cifmw_baremetal_hosts[_inst]['label'] == 'openstack')) %}
11+
{% set _ = instances_names.append(_inst) %}
12+
{% endif %}
13+
{% endfor %}
14+
{% else %}
15+
# Needed for verification gate
16+
{% set _vm_type = (_original_nodes.keys() | first).split('-')[1] %}
17+
{% for _inst in cifmw_networking_env_definition.instances.keys() %}
18+
{% if _inst.startswith(_vm_type) %}
19+
{% set _ = instances_names.append(_inst) %}
20+
{% endif %}
21+
{% endfor %}
22+
{% endif %}
23+
data:
24+
ssh_keys:
25+
authorized: {{ cifmw_ci_gen_kustomize_values_ssh_authorizedkeys | b64encode }}
26+
private: {{ cifmw_ci_gen_kustomize_values_ssh_private_key | b64encode }}
27+
public: {{ cifmw_ci_gen_kustomize_values_ssh_public_key | b64encode }}
28+
nova:
29+
migration:
30+
ssh_keys:
31+
private: {{ cifmw_ci_gen_kustomize_values_migration_priv_key | b64encode }}
32+
public: {{ cifmw_ci_gen_kustomize_values_migration_pub_key | b64encode }}
33+
nodeset:
34+
ansible:
35+
ansibleVars:
36+
edpm_fips_mode: "{{ 'enabled' if cifmw_fips_enabled|default(false)|bool else 'check' }}"
37+
timesync_ntp_servers:
38+
- hostname: "{{ cifmw_ci_gen_kustomize_values_ntp_srv | default('pool.ntp.org') }}"
39+
{% if cifmw_ci_gen_kustomize_values_sshd_ranges | default([]) | length > 0 %}
40+
edpm_sshd_allowed_ranges:
41+
{% for range in cifmw_ci_gen_kustomize_values_sshd_ranges %}
42+
- "{{ range }}"
43+
{% endfor %}
44+
{% endif %}
45+
nodes:
46+
{% for instance in instances_names %}
47+
edpm-{{ instance }}:
48+
hostName: {{ instance }}
49+
{% endfor %}
50+
51+
{% if ('repo-setup' not in (_original_nodeset['services'] | default([]))) and
52+
('repo-setup' in ci_gen_kustomize_edpm_nodeset_predeployed_services) %}
53+
services:
54+
- "repo-setup"
55+
{% for svc in _original_services %}
56+
- "{{ svc }}"
57+
{% endfor %}
58+
{% endif %}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
---
2+
# source: ovs-dpdk-sriov-ipv6-2nodesets/edpm-nodeset2-values/values.yaml.j2
3+
{% set instances_names = [] %}
4+
{% set _original_nodeset = (original_content.data | default({})).nodeset | default({}) %}
5+
{% set _original_nodes = _original_nodeset.nodes | default({}) %}
6+
{% set _original_services = _original_nodeset['services'] | default([]) %}
7+
{% if cifmw_baremetal_hosts | default([]) | length > 0 %}
8+
{% for _inst in cifmw_baremetal_hosts.keys() %}
9+
{% if (('label' in cifmw_baremetal_hosts[_inst]) and
10+
(cifmw_baremetal_hosts[_inst]['label'] == 'openstack-2')) %}
11+
{% set _ = instances_names.append(_inst) %}
12+
{% endif %}
13+
{% endfor %}
14+
{% else %}
15+
# Needed for verification gate
16+
{% set _vm_type = (_original_nodes.keys() | first).split('-')[1] %}
17+
{% for _inst in cifmw_networking_env_definition.instances.keys() %}
18+
{% if _inst.startswith(_vm_type) %}
19+
{% set _ = instances_names.append(_inst) %}
20+
{% endif %}
21+
{% endfor %}
22+
{% endif %}
23+
data:
24+
ssh_keys:
25+
authorized: {{ cifmw_ci_gen_kustomize_values_ssh_authorizedkeys | b64encode }}
26+
private: {{ cifmw_ci_gen_kustomize_values_ssh_private_key | b64encode }}
27+
public: {{ cifmw_ci_gen_kustomize_values_ssh_public_key | b64encode }}
28+
nova:
29+
migration:
30+
ssh_keys:
31+
private: {{ cifmw_ci_gen_kustomize_values_migration_priv_key | b64encode }}
32+
public: {{ cifmw_ci_gen_kustomize_values_migration_pub_key | b64encode }}
33+
nodeset:
34+
ansible:
35+
ansibleVars:
36+
edpm_fips_mode: "{{ 'enabled' if cifmw_fips_enabled|default(false)|bool else 'check' }}"
37+
timesync_ntp_servers:
38+
- hostname: "{{ cifmw_ci_gen_kustomize_values_ntp_srv | default('pool.ntp.org') }}"
39+
{% if cifmw_ci_gen_kustomize_values_sshd_ranges | default([]) | length > 0 %}
40+
edpm_sshd_allowed_ranges:
41+
{% for range in cifmw_ci_gen_kustomize_values_sshd_ranges %}
42+
- "{{ range }}"
43+
{% endfor %}
44+
{% endif %}
45+
nodes:
46+
{% for instance in instances_names %}
47+
edpm-{{ instance }}:
48+
hostName: {{ instance }}
49+
{% endfor %}
50+
51+
{% if ('repo-setup' not in (_original_nodeset['services'] | default([]))) and
52+
('repo-setup' in ci_gen_kustomize_edpm_nodeset_predeployed_services) %}
53+
services:
54+
- "repo-setup"
55+
{% for svc in _original_services %}
56+
- "{{ svc }}"
57+
{% endfor %}
58+
{% endif %}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
---
2+
# source: ovs-dpdk-sriov-ipv6/edpm-nodeset-values/values.yaml.j2
3+
{% set instances_names = [] %}
4+
{% set _original_nodeset = (original_content.data | default({})).nodeset | default({}) %}
5+
{% set _original_nodes = _original_nodeset.nodes | default({}) %}
6+
{% set _original_services = _original_nodeset['services'] | default([]) %}
7+
{% for _inst in cifmw_baremetal_hosts.keys() %}
8+
{% set _ = instances_names.append(_inst) %}
9+
{% endfor %}
10+
data:
11+
ssh_keys:
12+
authorized: {{ cifmw_ci_gen_kustomize_values_ssh_authorizedkeys | b64encode }}
13+
private: {{ cifmw_ci_gen_kustomize_values_ssh_private_key | b64encode }}
14+
public: {{ cifmw_ci_gen_kustomize_values_ssh_public_key | b64encode }}
15+
nova:
16+
migration:
17+
ssh_keys:
18+
private: {{ cifmw_ci_gen_kustomize_values_migration_priv_key | b64encode }}
19+
public: {{ cifmw_ci_gen_kustomize_values_migration_pub_key | b64encode }}
20+
nodeset:
21+
ansible:
22+
ansibleVars:
23+
edpm_fips_mode: "{{ 'enabled' if cifmw_fips_enabled|default(false)|bool else 'check' }}"
24+
timesync_ntp_servers:
25+
- hostname: "{{ cifmw_ci_gen_kustomize_values_ntp_srv | default('pool.ntp.org') }}"
26+
{% if cifmw_ci_gen_kustomize_values_sshd_ranges | default([]) | length > 0 %}
27+
edpm_sshd_allowed_ranges:
28+
{% for range in cifmw_ci_gen_kustomize_values_sshd_ranges %}
29+
- "{{ range }}"
30+
{% endfor %}
31+
{% endif %}
32+
nodes:
33+
{% for instance in instances_names %}
34+
edpm-{{ instance }}:
35+
hostName: {{ instance }}
36+
{% endfor %}
37+
38+
{% if ('repo-setup' not in (_original_nodeset['services'] | default([]))) and
39+
('repo-setup' in ci_gen_kustomize_edpm_nodeset_predeployed_services) %}
40+
services:
41+
- "repo-setup"
42+
{% for svc in _original_services %}
43+
- "{{ svc }}"
44+
{% endfor %}
45+
{% endif %}

roles/dnsmasq/defaults/main.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,5 @@ cifmw_dnsmasq_listen_addresses: []
2727
cifmw_dnsmasq_enable_dns: false
2828
cifmw_dnsmasq_exclude_lo: false
2929
cifmw_dnsmasq_addresses: []
30+
# Enable ra-names mode for IPv6 DHCP to assign /64 prefix correctly
31+
cifmw_dnsmasq_use_ra_names: false

roles/dnsmasq/templates/network.conf.j2

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@ domain={{ range.domain }},{{ range_v4_allowed }},local
1414
{% endif %}
1515
{% endif %}
1616
{% if range.start_v6 is defined and range.start_v6 -%}
17+
{% if cifmw_dnsmasq_use_ra_names | default(false) | bool -%}
18+
dhcp-range=set:{{ range.label }},{{ range.start_v6 }},ra-names,{{ range.prefix_length_v6 | default('64') }},{{ range.ttl | default('1h') }}
19+
{% else -%}
1720
dhcp-range=set:{{ range.label }},{{ range.start_v6 }},static,{{ range.prefix_length_v6 | default('64') }},{{ range.ttl | default('1h') }}
21+
{% endif -%}
1822
{% if range.domain is defined and range.domain -%}
1923
{% set range_v6_allowed = (range.start_v6 ~ "/" ~ range.prefix_length_v6 | default('64')) |
2024
ansible.utils.ipaddr('range_usable') | replace("-",",") %}

roles/libvirt_manager/tasks/generate_networking_data.yml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -182,12 +182,12 @@
182182
networks:
183183
{{ _lnet_data.name | replace('cifmw_', '') }}:
184184
{% if _lnet_data.ranges[0].start_v4 is defined and _lnet_data.ranges[0].start_v4 %}
185-
{% set net_4 = _lnet_data.ranges[0].start_v4 | ansible.utils.ipsubnet(_lnet_data.ranges[0].prefix_length_v4) %}
186-
network-v4: {{ net_4}}
185+
{%- set net_4 = _lnet_data.ranges[0].start_v4 | ansible.utils.ipsubnet(_lnet_data.ranges[0].prefix_length_v4) %}
186+
network-v4: '{{ net_4 }}'
187187
{% endif %}
188188
{% if _lnet_data.ranges[0].start_v6 is defined and _lnet_data.ranges[0].start_v6 %}
189-
{% set net_6 = _lnet_data.ranges[0].start_v6 | ansible.utils.ipsubnet(_lnet_data.ranges[0].prefix_length_v6) %}
190-
network-v6: {{ net_6 }}
189+
{%- set net_6 = _lnet_data.ranges[0].start_v6 | ansible.utils.ipsubnet(_lnet_data.ranges[0].prefix_length_v6) %}
190+
network-v6: '{{ net_6 }}'
191191
{% endif %}
192192
group-templates:
193193
{% for group in _cifmw_libvirt_manager_layout.vms.keys() if group != 'controller' and
@@ -202,12 +202,12 @@
202202
{% if cifmw_networking_definition['group-templates'][_gr ~ 's']['network-template'] is undefined %}
203203
{% if net_4 is defined %}
204204
range-v4:
205-
start: {{ net_4 | ansible.utils.nthhost(ns.ip_start | int ) }}
205+
start: '{{ net_4 | ansible.utils.nthhost(ns.ip_start | int ) }}'
206206
length: {{ _cifmw_libvirt_manager_layout.vms[group].amount | default(1) }}
207207
{% endif %}
208208
{% if net_6 is defined %}
209209
range-v6:
210-
start: {{ net_6 | ansible.utils.nthhost(ns.ip_start | int) }}
210+
start: '{{ net_6 | ansible.utils.nthhost(ns.ip_start | int) }}'
211211
length: {{ _cifmw_libvirt_manager_layout.vms[group].amount | default(1) }}
212212
{% endif %}
213213
{% set ns.ip_start = ns.ip_start|int + (_cifmw_libvirt_manager_layout.vms[group].amount | default(1) | int ) + 1 %}
@@ -220,12 +220,12 @@
220220
{{ cifmw_libvirt_manager_pub_net }}:
221221
{% if net_4 is defined and cifmw_networking_definition['group-templates']['baremetals']['network-template'] is undefined %}
222222
range-v4:
223-
start: {{ net_4 | ansible.utils.nthhost(ns.ip_start) }}
223+
start: '{{ net_4 | ansible.utils.nthhost(ns.ip_start) }}'
224224
length: {{ cifmw_baremetal_hosts | length }}
225225
{% endif %}
226226
{% if net_6 is defined and cifmw_networking_definition['group-templates']['baremetals']['network-template'] is undefined %}
227227
range-v6:
228-
start: {{ net_6 | ansible.utils.nthhost(ns.ip_start) }}
228+
start: '{{ net_6 | ansible.utils.nthhost(ns.ip_start) }}'
229229
length: {{ cifmw_baremetal_hosts | length }}
230230
{% endif %}
231231
{% endif %}
@@ -235,10 +235,10 @@
235235
networks:
236236
{{ _lnet_data.name | replace('cifmw_', '') }}:
237237
{% if net_4 is defined %}
238-
ip-v4: "{{ net_4 | ansible.utils.nthhost(9) }}"
238+
ip-v4: '{{ net_4 | ansible.utils.nthhost(9) }}'
239239
{% endif %}
240240
{% if net_6 is defined %}
241-
ip-v6: "{{ net_6 | ansible.utils.nthhost(9) }}"
241+
ip-v6: '{{ net_6 | ansible.utils.nthhost(9) }}'
242242
{% endif %}
243243
{% endif %}
244244
block:

roles/nat64_appliance/defaults/main.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ cifmw_nat64_appliance_memory: 2
4040
cifmw_nat64_appliance_cpus: 2
4141
cifmw_nat64_appliance_ssh_pub_keys: []
4242

43+
# Image download configuration
44+
# Set cifmw_nat64_appliance_image_url to download a pre-built image
45+
# instead of building it with DIB (saves ~5 minutes)
46+
cifmw_nat64_appliance_image_url: ""
47+
cifmw_nat64_appliance_image_checksum: "" # Optional: "sha256:xxxxx"
48+
cifmw_nat64_appliance_download_timeout: 600 # 10 minutes
4349

4450
cifmw_nat64_ipv6_prefix: "2620:cf:cf:fc00::/64"
4551
cifmw_nat64_ipv6_tayga_address: "2620:cf:cf:fc00::3"

roles/nat64_appliance/tasks/main.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,19 @@
2929
state: directory
3030
mode: "0755"
3131

32+
- name: Download pre-built NAT64 appliance image
33+
when:
34+
- cifmw_nat64_appliance_image_url | length > 0
35+
ansible.builtin.get_url:
36+
url: "{{ cifmw_nat64_appliance_image_url }}"
37+
dest: "{{ cifmw_nat64_appliance_workdir }}/nat64-appliance.qcow2"
38+
checksum: "{{ cifmw_nat64_appliance_image_checksum | default(omit) }}"
39+
timeout: "{{ cifmw_nat64_appliance_download_timeout }}"
40+
mode: "0644"
41+
3242
- name: Install required RPM packages
43+
when:
44+
- cifmw_nat64_appliance_image_url | length == 0
3345
tags:
3446
- packages
3547
become: true
@@ -42,6 +54,8 @@
4254
state: present
4355

4456
- name: Install diskimage-builder in virtualenv
57+
when:
58+
- cifmw_nat64_appliance_image_url | length == 0
4559
tags:
4660
- packages
4761
ansible.builtin.pip:
@@ -52,6 +66,8 @@
5266
- setuptools
5367

5468
- name: Copy files to cifmw_nat64_appliance_dir
69+
when:
70+
- cifmw_nat64_appliance_image_url | length == 0
5571
ansible.builtin.copy:
5672
src: "{{ item }}"
5773
dest: "{{ cifmw_nat64_appliance_workdir }}/{{ item }}"
@@ -61,12 +77,16 @@
6177
- nat64-appliance.yaml
6278

6379
- name: Clone edpm-image-builder (reset-bls-entries dib element)
80+
when:
81+
- cifmw_nat64_appliance_image_url | length == 0
6482
ansible.builtin.git:
6583
repo: https://github.com/openstack-k8s-operators/edpm-image-builder.git
6684
dest: "{{ cifmw_nat64_appliance_workdir }}/edpm-image-builder"
6785
version: main
6886

6987
- name: Build the nat64-appliance image using DIB
88+
when:
89+
- cifmw_nat64_appliance_image_url | length == 0
7090
become: "{{ cifmw_nat64_appliance_run_dib_as_root | default(false) | bool }}"
7191
environment:
7292
ELEMENTS_PATH: "{{ cifmw_nat64_appliance_workdir }}/elements:{{ cifmw_nat64_appliance_workdir }}/edpm-image-builder/dib/"

0 commit comments

Comments
 (0)