Skip to content

Commit 82b1ab0

Browse files
mnietojiclaude
andcommitted
[multiple] Co-locate provisionserver with metal3 to prevent DHCP failures
When metal3-dnsmasq pod restarts during a node's DHCP lease renewal on the provisioning network (172.23.0.0/24), NetworkManager fails to renew and sets ipv4.method=disabled. NMState operator then preserves this disabled state, causing permanent loss of provisioning network connectivity on that node. The issue occurs when OpenStackProvisionServer and metal3 pods run on different nodes. If metal3 restarts while a node is attempting DHCP renewal, the temporary unavailability of metal3-dnsmasq causes the renewal to fail. Solution: Automatically detect the node running metal3 pod (via k8s-app=metal3 label) and configure provisionServerNodeSelector in baremetalSetTemplate to schedule OpenStackProvisionServer on the same node. This ensures provisioning network connectivity is maintained because metal3-static-ip-manager maintains a static IP (172.23.0.3) on the metal3 node regardless of dnsmasq restarts. Signed-off-by: Miguel Angel Nieto Jimenez <mnietoji@redhat.com> Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent d93ea23 commit 82b1ab0

8 files changed

Lines changed: 69 additions & 0 deletions

File tree

roles/ci_gen_kustomize_values/templates/nfv-ovs-dpdk-sriov-hci/edpm-nodeset-values/values.yaml.j2

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,9 @@ data:
4343
- "{{ svc }}"
4444
{% endfor %}
4545
{% endif %}
46+
{% if cifmw_baremetal_hosts is defined and
47+
cifmw_kustomize_deploy_metal3_node is defined %}
48+
baremetalSetTemplate:
49+
provisionServerNodeSelector:
50+
kubernetes.io/hostname: "{{ cifmw_kustomize_deploy_metal3_node }}"
51+
{% endif %}

roles/ci_gen_kustomize_values/templates/ovs-dpdk-sriov-2nodesets/edpm-nodeset-values/values.yaml.j2

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,9 @@ data:
5656
- "{{ svc }}"
5757
{% endfor %}
5858
{% endif %}
59+
{% if cifmw_baremetal_hosts is defined and
60+
cifmw_kustomize_deploy_metal3_node is defined %}
61+
baremetalSetTemplate:
62+
provisionServerNodeSelector:
63+
kubernetes.io/hostname: "{{ cifmw_kustomize_deploy_metal3_node }}"
64+
{% endif %}

roles/ci_gen_kustomize_values/templates/ovs-dpdk-sriov-ipv6-2nodesets/edpm-nodeset-values/values.yaml.j2

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,9 @@ data:
5656
- "{{ svc }}"
5757
{% endfor %}
5858
{% endif %}
59+
{% if cifmw_baremetal_hosts is defined and
60+
cifmw_kustomize_deploy_metal3_node is defined %}
61+
baremetalSetTemplate:
62+
provisionServerNodeSelector:
63+
kubernetes.io/hostname: "{{ cifmw_kustomize_deploy_metal3_node }}"
64+
{% endif %}

roles/ci_gen_kustomize_values/templates/ovs-dpdk-sriov-ipv6/edpm-nodeset-values/values.yaml.j2

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,9 @@ data:
4343
- "{{ svc }}"
4444
{% endfor %}
4545
{% endif %}
46+
{% if cifmw_baremetal_hosts is defined and
47+
cifmw_kustomize_deploy_metal3_node is defined %}
48+
baremetalSetTemplate:
49+
provisionServerNodeSelector:
50+
kubernetes.io/hostname: "{{ cifmw_kustomize_deploy_metal3_node }}"
51+
{% endif %}

roles/ci_gen_kustomize_values/templates/ovs-dpdk-sriov/edpm-nodeset-values/values.yaml.j2

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,9 @@ data:
4343
- "{{ svc }}"
4444
{% endfor %}
4545
{% endif %}
46+
{% if cifmw_baremetal_hosts is defined and
47+
cifmw_kustomize_deploy_metal3_node is defined %}
48+
baremetalSetTemplate:
49+
provisionServerNodeSelector:
50+
kubernetes.io/hostname: "{{ cifmw_kustomize_deploy_metal3_node }}"
51+
{% endif %}

roles/ci_gen_kustomize_values/templates/ovs-dpdk/edpm-nodeset-values/values.yaml.j2

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,9 @@ data:
4242
- "{{ svc }}"
4343
{% endfor %}
4444
{% endif %}
45+
{% if cifmw_baremetal_hosts is defined and
46+
cifmw_kustomize_deploy_metal3_node is defined %}
47+
baremetalSetTemplate:
48+
provisionServerNodeSelector:
49+
kubernetes.io/hostname: "{{ cifmw_kustomize_deploy_metal3_node }}"
50+
{% endif %}

roles/ci_gen_kustomize_values/templates/sriov/edpm-nodeset-values/values.yaml.j2

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,9 @@ data:
4242
- "{{ svc }}"
4343
{% endfor %}
4444
{% endif %}
45+
{% if cifmw_baremetal_hosts is defined and
46+
cifmw_kustomize_deploy_metal3_node is defined %}
47+
baremetalSetTemplate:
48+
provisionServerNodeSelector:
49+
kubernetes.io/hostname: "{{ cifmw_kustomize_deploy_metal3_node }}"
50+
{% endif %}

roles/kustomize_deploy/tasks/execute_step.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,33 @@
126126
ansible.builtin.include_role:
127127
name: run_hook
128128

129+
- name: Detect metal3 pod node for baremetal nodeset provisioning
130+
when:
131+
- stage.name is defined
132+
- stage.name is match('edpm-nodeset.*')
133+
block:
134+
- name: Get metal3 pod information
135+
kubernetes.core.k8s_info:
136+
kubeconfig: "{{ cifmw_openshift_kubeconfig }}"
137+
kind: Pod
138+
namespace: openshift-machine-api
139+
label_selectors:
140+
- k8s-app=metal3
141+
register: _cifmw_kustomize_deploy_metal3_pod_info
142+
143+
- name: Set metal3 node for provisionserver nodeSelector
144+
ansible.builtin.set_fact:
145+
cifmw_kustomize_deploy_metal3_node: "{{ _cifmw_kustomize_deploy_metal3_pod_info.resources[0].spec.nodeName }}"
146+
cacheable: false
147+
when:
148+
- _cifmw_kustomize_deploy_metal3_pod_info.resources is defined
149+
- _cifmw_kustomize_deploy_metal3_pod_info.resources | length > 0
150+
151+
- name: Log metal3 node location
152+
ansible.builtin.debug:
153+
msg: "Metal3 pod is running on {{ cifmw_kustomize_deploy_metal3_node }}, provisionserver will be co-located there"
154+
when: cifmw_kustomize_deploy_metal3_node is defined
155+
129156
- name: "Generate values.yaml for {{ stage.path }}"
130157
when:
131158
- _val.src_file is defined

0 commit comments

Comments
 (0)