CI/kubevirt: allow every vars in kubevirt template to be overriden

The current templating of kubevirt VirtualMachine relies on global
ansible variables, except for the group the nodes are meant to be in.

In order to have more flexibility (in particular, mixed OS cluster for
instances), expect now an abitrary  dict to be passed to the template ;
this allows to embed directly in the nodes definition any variable used
by the template.
This commit is contained in:
Max Gautier
2025-03-06 17:34:47 +01:00
parent 119fa5b0c0
commit a8d494fb95
3 changed files with 21 additions and 24 deletions

View File

@@ -3,11 +3,8 @@
include_vars: "../files/{{ ci_job_name }}.yml" include_vars: "../files/{{ ci_job_name }}.yml"
- name: Start vms for CI job - name: Start vms for CI job
vars:
tvars:
kubespray_groups: "{{ item }}"
kubernetes.core.k8s: kubernetes.core.k8s:
definition: "{{ lookup('template', 'vm.yml.j2', template_vars=tvars) }}" definition: "{{ lookup('template', 'vm.yml.j2', template_vars=item) }}"
loop: "{{ scenarios[mode | d('default')] }}" loop: "{{ scenarios[mode | d('default')] }}"
- name: Wait for vms to have IP addresses - name: Wait for vms to have IP addresses

View File

@@ -6,7 +6,7 @@ metadata:
namespace: {{ pod_namespace }} namespace: {{ pod_namespace }}
annotations: annotations:
kubespray.com/ci.template-path: "tests/cloud_playbooks/roles/packet-ci/templates/vm.yml.j2" kubespray.com/ci.template-path: "tests/cloud_playbooks/roles/packet-ci/templates/vm.yml.j2"
ansible_groups: "{{ kubespray_groups | join(',') }}" ansible_groups: "{{ node_groups | join(',') }}"
# This does not use a dns prefix because dots are hard to escape with map(attribute=) in Jinja # This does not use a dns prefix because dots are hard to escape with map(attribute=) in Jinja
labels: labels:
kubevirt.io/os: {{ cloud_image }} kubevirt.io/os: {{ cloud_image }}

View File

@@ -2,31 +2,31 @@
# This is a list of nodes with groups for each scenario/cluster layouts # This is a list of nodes with groups for each scenario/cluster layouts
scenarios: scenarios:
separate: separate:
- ['kube_control_plane'] - node_groups: ['kube_control_plane']
- ['kube_node'] - node_groups: ['kube_node']
- ['etcd'] - node_groups: ['etcd']
ha: ha:
- ['kube_control_plane', 'etcd'] - node_groups: ['kube_control_plane', 'etcd']
- ['kube_control_plane', 'etcd'] - node_groups: ['kube_control_plane', 'etcd']
- ['kube_node', 'etcd'] - node_groups: ['kube_node', 'etcd']
default: default:
- ['kube_control_plane', 'etcd'] - node_groups: ['kube_control_plane', 'etcd']
- ['kube_node'] - node_groups: ['kube_node']
all-in-one: all-in-one:
- ['kube_control_plane', 'etcd', 'kube_node'] - node_groups: ['kube_control_plane', 'etcd', 'kube_node']
ha-recover: ha-recover:
- ['kube_control_plane', 'etcd'] - node_groups: ['kube_control_plane', 'etcd']
- ['kube_control_plane', 'etcd', 'broken_kube_control_plane', 'broken_etcd'] - node_groups: ['kube_control_plane', 'etcd', 'broken_kube_control_plane', 'broken_etcd']
- ['kube_node', 'etcd'] - node_groups: ['kube_node', 'etcd']
ha-recover-noquorum: ha-recover-noquorum:
- ['kube_control_plane', 'etcd', 'broken_kube_control_plane', 'broken_etcd'] - node_groups: ['kube_control_plane', 'etcd', 'broken_kube_control_plane', 'broken_etcd']
- ['kube_control_plane', 'etcd', 'broken_kube_control_plane', 'broken_etcd'] - node_groups: ['kube_control_plane', 'etcd', 'broken_kube_control_plane', 'broken_etcd']
- ['kube_node', 'etcd'] - node_groups: ['kube_node', 'etcd']
node-etcd-client: node-etcd-client:
- ['kube_node', 'kube_control_plane', 'etcd'] - node_groups: ['kube_node', 'kube_control_plane', 'etcd']
- ['kube_node', 'etcd'] - node_groups: ['kube_node', 'etcd']
- ['kube_node', 'etcd'] - node_groups: ['kube_node', 'etcd']
- ['kube_node'] - node_groups: ['kube_node']
# Get pod metadata / CI vars from environment # Get pod metadata / CI vars from environment