Skip to content

Commit 2fc519d

Browse files
mnietojiclaude
andcommitted
[ci_gen_kustomize_values] 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. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> Signed-off-by: Miguel Angel Nieto Jimenez <mnietoji@redhat.com>
1 parent b5f7545 commit 2fc519d

8 files changed

Lines changed: 64 additions & 0 deletions

File tree

roles/ci_gen_kustomize_values/tasks/main.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,28 @@
1414
# License for the specific language governing permissions and limitations
1515
# under the License.
1616

17+
- name: Detect metal3 node for baremetal nodeset provisioning
18+
when:
19+
- cifmw_ci_gen_kustomize_values_src_file is defined
20+
- cifmw_ci_gen_kustomize_values_src_file is match('.*/edpm/nodeset.*')
21+
block:
22+
- name: Get metal3 pod information
23+
kubernetes.core.k8s_info:
24+
kubeconfig: "{{ cifmw_openshift_kubeconfig }}"
25+
kind: Pod
26+
namespace: openshift-machine-api
27+
label_selectors:
28+
- k8s-app=metal3
29+
register: _cifmw_kustomize_deploy_metal3_pod_info
30+
31+
- name: Set metal3 node for provisionserver nodeSelector
32+
ansible.builtin.set_fact:
33+
cifmw_kustomize_deploy_metal3_node: "{{ _cifmw_kustomize_deploy_metal3_pod_info.resources[0].spec.nodeName }}"
34+
cacheable: true
35+
when:
36+
- _cifmw_kustomize_deploy_metal3_pod_info.resources is defined
37+
- _cifmw_kustomize_deploy_metal3_pod_info.resources | length > 0
38+
1739
- name: Generate snippets files
1840
ansible.builtin.include_tasks: generate_snippets.yml
1941

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_kustomize_deploy_metal3_node is defined %}
47+
baremetalSetTemplate:
48+
{{ ((original_content.data | default({})).baremetalSetTemplate | default({})) | to_nice_yaml(indent=2) | indent(4, first=true) }}
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_kustomize_deploy_metal3_node is defined %}
60+
baremetalSetTemplate:
61+
{{ ((original_content.data | default({})).baremetalSetTemplate | default({})) | to_nice_yaml(indent=2) | indent(4, first=true) }}
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_kustomize_deploy_metal3_node is defined %}
60+
baremetalSetTemplate:
61+
{{ ((original_content.data | default({})).baremetalSetTemplate | default({})) | to_nice_yaml(indent=2) | indent(4, first=true) }}
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_kustomize_deploy_metal3_node is defined %}
47+
baremetalSetTemplate:
48+
{{ ((original_content.data | default({})).baremetalSetTemplate | default({})) | to_nice_yaml(indent=2) | indent(4, first=true) }}
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_kustomize_deploy_metal3_node is defined %}
47+
baremetalSetTemplate:
48+
{{ ((original_content.data | default({})).baremetalSetTemplate | default({})) | to_nice_yaml(indent=2) | indent(4, first=true) }}
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_kustomize_deploy_metal3_node is defined %}
46+
baremetalSetTemplate:
47+
{{ ((original_content.data | default({})).baremetalSetTemplate | default({})) | to_nice_yaml(indent=2) | indent(4, first=true) }}
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_kustomize_deploy_metal3_node is defined %}
46+
baremetalSetTemplate:
47+
{{ ((original_content.data | default({})).baremetalSetTemplate | default({})) | to_nice_yaml(indent=2) | indent(4, first=true) }}
48+
provisionServerNodeSelector:
49+
kubernetes.io/hostname: "{{ cifmw_kustomize_deploy_metal3_node }}"
50+
{% endif %}

0 commit comments

Comments
 (0)