From be77f1240fb3c843f99eb01d96fb56f35dd1b55f Mon Sep 17 00:00:00 2001 From: Sebastian Jug Date: Tue, 8 Sep 2026 11:47:27 -0400 Subject: [PATCH] USHIFT-7443: modernize Ansible task syntax Normalize module names, task names, key ordering, Jinja spacing and YAML formatting across the deployment automation. Promote the cleaned lint families to errors while retaining the remaining behavioral warnings and exempting shared variables from role-specific naming prefixes. Preserve existing reboot notifications through handler listener aliases and retain workload QPS values in task names. Retry released-package installation twice at ten-second intervals so transient download failures can recover while persistent failures still stop the run. Signed-off-by: Sebastian Jug --- .ansible-lint | 9 +- .../add-kubelet-logging/files/metrics-sa.yaml | 66 +-- .../roles/add-kubelet-logging/tasks/main.yml | 8 +- ansible/roles/common/tasks/boot.yml | 72 ++-- ansible/roles/common/tasks/disk.yml | 18 +- ansible/roles/common/tasks/nodename.yml | 6 +- ansible/roles/common/tasks/results-dir.yml | 18 +- .../configure-firewall/defaults/main.yml | 1 - .../roles/configure-firewall/tasks/main.yml | 19 +- .../files/metrics-sa.yaml | 66 +-- .../create-service-account/tasks/main.yml | 12 +- ansible/roles/create-vm/handlers/main.yml | 7 +- ansible/roles/create-vm/tasks/main.yml | 25 +- ansible/roles/fetch-kubeconfig/tasks/main.yml | 10 +- .../defaults/main.yml | 1 + .../install-logging-exporters/tasks/main.yml | 13 +- ansible/roles/install-logging/tasks/main.yml | 15 +- .../roles/install-microshift/tasks/main.yml | 128 +++--- ansible/roles/manage-repos/defaults/main.yml | 14 +- .../manage-repos/tasks/create-mirrors.yaml | 3 +- ansible/roles/manage-repos/tasks/main.yml | 384 +++++++++--------- .../manage-repos/tasks/probe-mirror.yaml | 1 + ansible/roles/microshift-start/tasks/main.yml | 167 ++++---- .../roles/nvidia-gpu-setup/defaults/main.yml | 6 +- ansible/roles/nvidia-gpu-setup/tasks/main.yml | 34 +- .../roles/nvidia-gpu-test/defaults/main.yml | 6 +- ansible/roles/nvidia-gpu-test/tasks/main.yml | 44 +- .../quick-microshift-boot/tasks/main.yml | 4 +- .../roles/run-workloads/tasks/kube-burner.yml | 14 +- ansible/roles/run-workloads/tasks/main.yml | 65 +-- .../roles/setup-localhost/defaults/main.yml | 4 +- ansible/roles/setup-localhost/tasks/main.yml | 14 +- .../setup-microshift-host/defaults/main.yml | 2 +- .../setup-microshift-host/handlers/main.yml | 7 +- .../setup-microshift-host/tasks/main.yml | 38 +- .../setup-microshift-host/tasks/storage.yml | 8 +- ansible/setup-node.yml | 20 +- ansible/vars/all.yml | 3 +- ansible/vars/microshift_versions.yml | 2 +- 39 files changed, 673 insertions(+), 661 deletions(-) diff --git a/.ansible-lint b/.ansible-lint index 5b8b2adf80..1888aa68d1 100644 --- a/.ansible-lint +++ b/.ansible-lint @@ -8,23 +8,20 @@ exclude_paths: # Existing roles use hyphenated names throughout the repository. Keep that # convention out of scope for this lint cleanup. +# Shared task files also publish variables consumed across roles, so enforcing +# role-specific prefixes would require behavioral variable renames. skip_list: - role-name + - var-naming[no-role-prefix] # These rule families are promoted to fatal errors as the follow-up cleanup # changes land. New findings in a warned family remain warnings until then. warn_list: - command-instead-of-module - - fqcn - ignore-errors - - jinja - - key-order - latest - - name - no-changed-when - no-handler - package-latest - risky-file-permissions - risky-shell-pipe - - var-naming - - yaml diff --git a/ansible/roles/add-kubelet-logging/files/metrics-sa.yaml b/ansible/roles/add-kubelet-logging/files/metrics-sa.yaml index df53304eae..9cc18effdd 100644 --- a/ansible/roles/add-kubelet-logging/files/metrics-sa.yaml +++ b/ansible/roles/add-kubelet-logging/files/metrics-sa.yaml @@ -16,15 +16,15 @@ metadata: rbac.authorization.k8s.io/aggregate-to-view: "true" name: system:aggregated-metrics-reader rules: -- apiGroups: - - metrics.k8s.io - resources: - - pods - - nodes - verbs: - - get - - list - - watch + - apiGroups: + - metrics.k8s.io + resources: + - pods + - nodes + verbs: + - get + - list + - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -33,21 +33,21 @@ metadata: k8s-app: metrics-server name: system:metrics-server rules: -- apiGroups: - - "" - resources: - - nodes/metrics - verbs: - - get -- apiGroups: - - "" - resources: - - pods - - nodes - verbs: - - get - - list - - watch + - apiGroups: + - "" + resources: + - nodes/metrics + verbs: + - get + - apiGroups: + - "" + resources: + - pods + - nodes + verbs: + - get + - list + - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -61,9 +61,9 @@ roleRef: kind: Role name: extension-apiserver-authentication-reader subjects: -- kind: ServiceAccount - name: metrics-server - namespace: kube-system + - kind: ServiceAccount + name: metrics-server + namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -76,9 +76,9 @@ roleRef: kind: ClusterRole name: system:auth-delegator subjects: -- kind: ServiceAccount - name: metrics-server - namespace: kube-system + - kind: ServiceAccount + name: metrics-server + namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -91,6 +91,6 @@ roleRef: kind: ClusterRole name: system:metrics-server subjects: -- kind: ServiceAccount - name: metrics-server - namespace: kube-system + - kind: ServiceAccount + name: metrics-server + namespace: kube-system diff --git a/ansible/roles/add-kubelet-logging/tasks/main.yml b/ansible/roles/add-kubelet-logging/tasks/main.yml index 179d838f11..f566b587f2 100644 --- a/ansible/roles/add-kubelet-logging/tasks/main.yml +++ b/ansible/roles/add-kubelet-logging/tasks/main.yml @@ -49,7 +49,7 @@ ansible.builtin.copy: content: "{{ bearer_token_slurp.content | b64decode }}" dest: "{{ kubelet_auth_token_file }}" - mode: '0644' + mode: "0644" setype: container_file_t register: prometheus_token_install no_log: true @@ -78,7 +78,7 @@ ansible.builtin.file: path: "{{ kubelet_auth_token_file }}" state: file - mode: '0644' + mode: "0644" setype: container_file_t register: prometheus_token_permissions @@ -88,7 +88,7 @@ ansible.builtin.template: src: kubelet.yml.j2 dest: "{{ prometheus_kubelet_scrape_config }}" - mode: '0644' + mode: "0644" setype: container_file_t backup: true register: prometheus_kubelet_config_template @@ -111,7 +111,7 @@ src: "{{ prometheus_kubelet_config_template.backup_file }}" dest: "{{ prometheus_kubelet_scrape_config }}" remote_src: true - mode: '0644' + mode: "0644" setype: container_file_t when: - prometheus_kubelet_config_template is defined diff --git a/ansible/roles/common/tasks/boot.yml b/ansible/roles/common/tasks/boot.yml index 114a821c21..5508705e06 100644 --- a/ansible/roles/common/tasks/boot.yml +++ b/ansible/roles/common/tasks/boot.yml @@ -3,61 +3,61 @@ # Include shared microshift version configuration - name: Include shared microshift version configuration - include_vars: + ansible.builtin.include_vars: file: "{{ playbook_dir }}/vars/microshift_versions.yml" -- name: initialize results directory - include_tasks: roles/common/tasks/results-dir.yml +- name: Initialize results directory + ansible.builtin.include_tasks: roles/common/tasks/results-dir.yml -- block: - - name: find microshift cleanup script - ansible.builtin.find: - paths: /usr/bin - patterns: - - '.*microshift.*cleanup.*' - - '.*cleanup.*microshift.*' - use_regex: yes - register: find_cleanup - - - name: set microshift_cleanup_bin variable - set_fact: - microshift_cleanup_bin: "{{ find_cleanup.files[0].path if find_cleanup.files }}" - - - name: cleanup microshift data - become: true - ansible.builtin.shell: echo 1 | {{ microshift_cleanup_bin }} --all +- name: Clean up MicroShift data when requested when: cleanup_microshift | default('false') | bool + block: + - name: Find microshift cleanup script + ansible.builtin.find: + paths: /usr/bin + patterns: + - ".*microshift.*cleanup.*" + - ".*cleanup.*microshift.*" + use_regex: true + register: find_cleanup + + - name: Set microshift_cleanup_bin variable + ansible.builtin.set_fact: + microshift_cleanup_bin: "{{ find_cleanup.files[0].path if find_cleanup.files }}" -- block: - - name: reboot machine - become: true - ansible.builtin.reboot: - reboot_timeout: 600 - - - name: Pause for 60 seconds for steady state post reboot - ansible.builtin.pause: - seconds: 60 + - name: Cleanup microshift data + become: true + ansible.builtin.shell: echo 1 | {{ microshift_cleanup_bin }} --all +- name: Reboot when requested when: reboot | default('false') | bool + block: + - name: Reboot machine + become: true + ansible.builtin.reboot: + reboot_timeout: 600 + - name: Pause for 60 seconds for steady state post reboot + ansible.builtin.pause: + seconds: 60 - name: Normalize microshift version for pod counts - set_fact: + ansible.builtin.set_fact: microshift_version_clean: "{{ microshift_version | regex_replace('^latest-', '') }}" - name: Extract major version for pod counts - set_fact: + ansible.builtin.set_fact: microshift_major_version: "{{ microshift_version_clean.split('.')[:2] | join('.') }}" - name: Validate that version exists in config - fail: + ansible.builtin.fail: msg: "Error: MicroShift version {{ microshift_major_version }} not found in microshift_versions dictionary. Please update vars/microshift_versions.yml." when: microshift_major_version not in microshift_versions - name: Set expected pod counts - set_fact: + ansible.builtin.set_fact: expected_pods: "{{ microshift_versions[microshift_major_version].expected_pods }}" all_pods: "{{ microshift_versions[microshift_major_version].all_pods }}" -- name: run the microshift boot script +- name: Run the microshift boot script ansible.builtin.script: cmd: > ready.sh @@ -65,11 +65,11 @@ {{ all_pods }} register: script_output -- name: display script output +- name: Display script output ansible.builtin.debug: var: script_output.stdout -- name: save microshift boot info to local file +- name: Save microshift boot info to local file ansible.builtin.copy: content: "{{ script_output.stdout }}" dest: "{{ results_dir }}/{{ boot_output_filename | default('boot_quick.txt') }}" diff --git a/ansible/roles/common/tasks/disk.yml b/ansible/roles/common/tasks/disk.yml index fbd898d1b2..cd5e8b4f80 100644 --- a/ansible/roles/common/tasks/disk.yml +++ b/ansible/roles/common/tasks/disk.yml @@ -1,27 +1,27 @@ -- name: initialize results directory - include_tasks: roles/common/tasks/results-dir.yml +--- +- name: Initialize results directory + ansible.builtin.include_tasks: roles/common/tasks/results-dir.yml -- name: disk space block +- name: Disk space block block: - - name: find disk usage - become: yes + - name: Find disk usage + become: true ansible.builtin.shell: cmd: du -BM -t 1M --max-depth=1 {{ item }} | sort -rh register: disk_usage - - name: print disk_usage var + - name: Print disk_usage var ansible.builtin.debug: var: disk_usage.stdout_lines - name: Add disk info to local file - lineinfile: + ansible.builtin.lineinfile: path: "{{ results_dir }}/{{ filename }}" line: "{{ disk_item }}" - create: yes + create: true delegate_to: localhost with_items: - "{{ item }}:" - "{{ disk_usage.stdout_lines }}" loop_control: loop_var: disk_item - diff --git a/ansible/roles/common/tasks/nodename.yml b/ansible/roles/common/tasks/nodename.yml index 2a9dcdddaf..38ce3fbc51 100644 --- a/ansible/roles/common/tasks/nodename.yml +++ b/ansible/roles/common/tasks/nodename.yml @@ -14,7 +14,7 @@ # to ansible_facts.hostname even when an override is configured. - name: Resolve kubernetes nodename - become: yes + become: true block: - name: Find microshift config drop-ins ansible.builtin.find: @@ -55,6 +55,4 @@ - name: Set kubernetes_nodename fact ansible.builtin.set_fact: - kubernetes_nodename: "{{ ((_microshift_hostname_override | length > 0) - | ternary(_microshift_hostname_override, ansible_facts.hostname)) - | lower }}" + kubernetes_nodename: "{{ ((_microshift_hostname_override | length > 0) | ternary(_microshift_hostname_override, ansible_facts.hostname)) | lower }}" diff --git a/ansible/roles/common/tasks/results-dir.yml b/ansible/roles/common/tasks/results-dir.yml index ebde29da38..ecffffe69a 100644 --- a/ansible/roles/common/tasks/results-dir.yml +++ b/ansible/roles/common/tasks/results-dir.yml @@ -3,42 +3,42 @@ # Creates: results/{{ microshift_version }}/{{ timestamp }}/ # Updates: results/{{ microshift_version }}/latest -> {{ timestamp }}/ -- name: set results base directory +- name: Set results base directory ansible.builtin.set_fact: results_base_dir: "{{ results_base_dir | default(playbook_dir + '/results') }}" when: results_base_dir is not defined -- name: set results timestamp +- name: Set results timestamp ansible.builtin.set_fact: results_timestamp: "{{ results_timestamp | default(lookup('pipe', 'date +%Y-%m-%d_%H-%M-%S')) }}" when: results_timestamp is not defined -- name: set results directory with version +- name: Set results directory with version ansible.builtin.set_fact: results_dir: "{{ results_base_dir }}/{{ microshift_version }}/{{ results_timestamp }}" when: results_dir is not defined -- name: ensure results directory exists on localhost +- name: Ensure results directory exists on localhost ansible.builtin.file: path: "{{ results_dir }}" state: directory - mode: '0755' + mode: "0755" delegate_to: localhost -- name: update latest symlink +- name: Update latest symlink ansible.builtin.file: src: "{{ results_dir | basename }}" dest: "{{ results_dir | dirname }}/latest" state: link - force: yes + force: true delegate_to: localhost when: results_latest_src is not defined -- name: set results latest source +- name: Set results latest source ansible.builtin.set_fact: results_latest_src: "{{ results_dir }}" when: results_latest_src is not defined -- name: display results directory +- name: Display results directory ansible.builtin.debug: msg: "Results will be saved to: {{ results_dir }}" diff --git a/ansible/roles/configure-firewall/defaults/main.yml b/ansible/roles/configure-firewall/defaults/main.yml index b4437ad1ba..bccd433213 100644 --- a/ansible/roles/configure-firewall/defaults/main.yml +++ b/ansible/roles/configure-firewall/defaults/main.yml @@ -27,4 +27,3 @@ firewall_trusted_cidr: - 10.42.0.0/16 - 169.254.169.1/32 - fd01::/48 - diff --git a/ansible/roles/configure-firewall/tasks/main.yml b/ansible/roles/configure-firewall/tasks/main.yml index 158642f612..1ba8174c4e 100644 --- a/ansible/roles/configure-firewall/tasks/main.yml +++ b/ansible/roles/configure-firewall/tasks/main.yml @@ -1,30 +1,29 @@ --- # configure-firewall tasks -- name: permit traffic in trusted zone from CIDR +- name: Permit traffic in trusted zone from CIDR ansible.posix.firewalld: source: "{{ item }}" state: enabled - immediate: yes - permanent: yes + immediate: true + permanent: true zone: trusted with_items: "{{ firewall_trusted_cidr }}" -- name: permit traffic in public zone for services +- name: Permit traffic in public zone for services ansible.posix.firewalld: service: "{{ item }}" state: enabled - immediate: yes - permanent: yes + immediate: true + permanent: true zone: public with_items: "{{ firewall_services }}" -- name: permit traffic in public zone for ports +- name: Permit traffic in public zone for ports ansible.posix.firewalld: port: "{{ item }}" state: enabled - immediate: yes - permanent: yes + immediate: true + permanent: true zone: public with_items: "{{ firewall_ports }}" - diff --git a/ansible/roles/create-service-account/files/metrics-sa.yaml b/ansible/roles/create-service-account/files/metrics-sa.yaml index df53304eae..9cc18effdd 100644 --- a/ansible/roles/create-service-account/files/metrics-sa.yaml +++ b/ansible/roles/create-service-account/files/metrics-sa.yaml @@ -16,15 +16,15 @@ metadata: rbac.authorization.k8s.io/aggregate-to-view: "true" name: system:aggregated-metrics-reader rules: -- apiGroups: - - metrics.k8s.io - resources: - - pods - - nodes - verbs: - - get - - list - - watch + - apiGroups: + - metrics.k8s.io + resources: + - pods + - nodes + verbs: + - get + - list + - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -33,21 +33,21 @@ metadata: k8s-app: metrics-server name: system:metrics-server rules: -- apiGroups: - - "" - resources: - - nodes/metrics - verbs: - - get -- apiGroups: - - "" - resources: - - pods - - nodes - verbs: - - get - - list - - watch + - apiGroups: + - "" + resources: + - nodes/metrics + verbs: + - get + - apiGroups: + - "" + resources: + - pods + - nodes + verbs: + - get + - list + - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding @@ -61,9 +61,9 @@ roleRef: kind: Role name: extension-apiserver-authentication-reader subjects: -- kind: ServiceAccount - name: metrics-server - namespace: kube-system + - kind: ServiceAccount + name: metrics-server + namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -76,9 +76,9 @@ roleRef: kind: ClusterRole name: system:auth-delegator subjects: -- kind: ServiceAccount - name: metrics-server - namespace: kube-system + - kind: ServiceAccount + name: metrics-server + namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -91,6 +91,6 @@ roleRef: kind: ClusterRole name: system:metrics-server subjects: -- kind: ServiceAccount - name: metrics-server - namespace: kube-system + - kind: ServiceAccount + name: metrics-server + namespace: kube-system diff --git a/ansible/roles/create-service-account/tasks/main.yml b/ansible/roles/create-service-account/tasks/main.yml index fc16148a3c..c7793b44b8 100644 --- a/ansible/roles/create-service-account/tasks/main.yml +++ b/ansible/roles/create-service-account/tasks/main.yml @@ -1,28 +1,28 @@ --- # create-service-account tasks -- name: copy metrics service account yaml +- name: Copy metrics service account yaml ansible.builtin.copy: src: metrics-sa.yaml dest: metrics-sa.yaml -- name: create service account for metrics gathering from kubelet +- name: Create service account for metrics gathering from kubelet ansible.builtin.command: oc apply -f metrics-sa.yaml -- name: create token for service account +- name: Create token for service account ansible.builtin.command: oc create token metrics-server -n kube-system --duration 720h register: token no_log: true -- name: remove metrics service account yaml +- name: Remove metrics service account yaml ansible.builtin.file: path: metrics-sa.yaml state: absent -- name: save sa-token to disk +- name: Save sa-token to disk ansible.builtin.copy: content: "{{ token.stdout }}" dest: "{{ sa_token_file }}" - mode: '0600' + mode: "0600" delegate_to: localhost no_log: true diff --git a/ansible/roles/create-vm/handlers/main.yml b/ansible/roles/create-vm/handlers/main.yml index 151352b8c7..dbddd526f7 100644 --- a/ansible/roles/create-vm/handlers/main.yml +++ b/ansible/roles/create-vm/handlers/main.yml @@ -1,6 +1,5 @@ --- - -- name: reboot machine - reboot: +- name: Reboot machine + listen: reboot machine + ansible.builtin.reboot: reboot_timeout: 600 - diff --git a/ansible/roles/create-vm/tasks/main.yml b/ansible/roles/create-vm/tasks/main.yml index f6e7e966b6..9f36c27bc0 100644 --- a/ansible/roles/create-vm/tasks/main.yml +++ b/ansible/roles/create-vm/tasks/main.yml @@ -1,37 +1,42 @@ --- # create-vm tasks -- name: list all VMs +- name: List all VMs community.libvirt.virt: command: list_vms register: all_vms -- name: destroy target VM if present +- name: Destroy target VM if present community.libvirt.virt: name: "{{ vm_name }}" state: destroyed when: vm_name in (all_vms.list_vms | default([])) -- name: undefine target VM if present +- name: Undefine target VM if present community.libvirt.virt: name: "{{ vm_name }}" command: undefine when: vm_name in (all_vms.list_vms | default([])) -- name: find create-vm.sh +- name: Find create-vm.sh ansible.builtin.find: paths: "{{ playbook_dir | dirname }}" patterns: "create-vm.sh" file_type: file - recurse: yes + recurse: true register: sh_search_result -- set_fact: +- name: Set create-vm script candidates + ansible.builtin.set_fact: script_path: '{{ sh_search_result.files | selectattr("path", "search", "devenv") }}' -- set_fact: +- name: Set create-vm script path + ansible.builtin.set_fact: create_vm_path: "{{ script_path[0].path }}" -- name: run create-vm shell script - ansible.builtin.script: - cmd: "{{ create_vm_path }} {{ vm_name }} {{ vm_disk_dir }} {{ iso_file }} {{ num_cpu }} {{ ram_size }} {{ disk_size }} {{ swap_size }} {{ data_volume_size }}" +- name: Run create-vm shell script + ansible.builtin.script: + cmd: >- + {{ create_vm_path }} {{ vm_name }} {{ vm_disk_dir }} {{ iso_file }} + {{ num_cpu }} {{ ram_size }} {{ disk_size }} {{ swap_size }} + {{ data_volume_size }} diff --git a/ansible/roles/fetch-kubeconfig/tasks/main.yml b/ansible/roles/fetch-kubeconfig/tasks/main.yml index d80ac2c9e0..612d770be7 100644 --- a/ansible/roles/fetch-kubeconfig/tasks/main.yml +++ b/ansible/roles/fetch-kubeconfig/tasks/main.yml @@ -19,12 +19,12 @@ when: not kubeconfig_directory_check.stat.exists - name: Fetch remote kubeconfig to a host-specific file (always overwrites) - become: yes + become: true ansible.builtin.fetch: src: "{{ kubeconfig_remote_file }}" dest: "{{ kubeconfig_dest_file }}" - flat: yes - force: yes + flat: true + force: true - name: Check if a default kubeconfig file exists on local machine ansible.builtin.stat: @@ -37,7 +37,7 @@ src: "{{ kubeconfig_dest_file }}" dest: "{{ kubeconfig_local_file }}" state: link - force: yes + force: true delegate_to: localhost when: not kubeconfig_local_file_check.stat.exists or (kubeconfig_local_file_check.stat.islnk | default(false)) @@ -70,7 +70,7 @@ msg: | Failed to connect to MicroShift cluster! Error: {{ oc_test.stderr | default('Unknown error') }} - + Please check: 1. Port 6443 is accessible from this host (firewall/iptables rules) 2. MicroShift service is running on the remote host diff --git a/ansible/roles/install-logging-exporters/defaults/main.yml b/ansible/roles/install-logging-exporters/defaults/main.yml index 023ad05ce4..4fafe956d3 100644 --- a/ansible/roles/install-logging-exporters/defaults/main.yml +++ b/ansible/roles/install-logging-exporters/defaults/main.yml @@ -1,3 +1,4 @@ +--- process_exporter_url: https://github.com/ncabatoff/process-exporter/releases/download/v0.8.7/process-exporter_0.8.7_linux_amd64.rpm prometheus_services: diff --git a/ansible/roles/install-logging-exporters/tasks/main.yml b/ansible/roles/install-logging-exporters/tasks/main.yml index ffa6ce1b11..c0f1c30ca8 100644 --- a/ansible/roles/install-logging-exporters/tasks/main.yml +++ b/ansible/roles/install-logging-exporters/tasks/main.yml @@ -1,19 +1,20 @@ -- name: install node-exporter +--- +- name: Install node-exporter ansible.builtin.dnf: name: - - node-exporter + - node-exporter state: present -- name: install process-exporter +- name: Install process-exporter ansible.builtin.dnf: name: "{{ process_exporter_url }}" disable_gpg_check: true state: present -- name: start and enable prometheus exporter services +- name: Start and enable prometheus exporter services ansible.builtin.systemd: name: "{{ item }}" - daemon_reload: yes + daemon_reload: true state: started - enabled: yes + enabled: true with_items: "{{ prometheus_services }}" diff --git a/ansible/roles/install-logging/tasks/main.yml b/ansible/roles/install-logging/tasks/main.yml index c78f3cfa87..203376ada5 100644 --- a/ansible/roles/install-logging/tasks/main.yml +++ b/ansible/roles/install-logging/tasks/main.yml @@ -214,7 +214,7 @@ ansible.builtin.file: path: "{{ item }}" state: directory - mode: '0755' + mode: "0755" loop: - "{{ prometheus_config_dir }}" - "{{ prometheus_scrape_config_dir }}" @@ -248,7 +248,7 @@ ansible.builtin.template: src: exporters.yml.j2 dest: "{{ prometheus_exporter_scrape_config }}" - mode: '0644' + mode: "0644" setype: container_file_t backup: true register: prometheus_exporter_config_template @@ -257,7 +257,7 @@ ansible.builtin.template: src: prometheus.yml.j2 dest: "{{ prometheus_config_dir }}/prometheus.yml" - mode: '0644' + mode: "0644" setype: container_file_t backup: true register: prometheus_config_template @@ -284,7 +284,7 @@ src: "{{ prometheus_exporter_config_template.backup_file }}" dest: "{{ prometheus_exporter_scrape_config }}" remote_src: true - mode: '0644' + mode: "0644" setype: container_file_t when: - prometheus_exporter_config_template is defined @@ -304,7 +304,7 @@ src: "{{ prometheus_config_template.backup_file }}" dest: "{{ prometheus_config_dir }}/prometheus.yml" remote_src: true - mode: '0644' + mode: "0644" setype: container_file_t when: - prometheus_config_template is defined @@ -331,7 +331,7 @@ ansible.builtin.template: src: prometheus.container.j2 dest: "{{ prometheus_quadlet_file }}" - mode: '0644' + mode: "0644" register: prometheus_quadlet_template - name: Reset failed Prometheus user unit state @@ -369,8 +369,7 @@ or prometheus_exporter_config_template.changed or prometheus_quadlet_template.changed ) | ternary('restarted', 'started') }} - environment: - "{{ prometheus_systemd_environment }}" + environment: "{{ prometheus_systemd_environment }}" - name: Verify Prometheus readiness block: diff --git a/ansible/roles/install-microshift/tasks/main.yml b/ansible/roles/install-microshift/tasks/main.yml index eb2ac3cd0d..88b36e51de 100644 --- a/ansible/roles/install-microshift/tasks/main.yml +++ b/ansible/roles/install-microshift/tasks/main.yml @@ -1,61 +1,64 @@ --- # install-microshift tasks -- name: check if microshift is installed +- name: Check if microshift is installed ansible.builtin.command: rpm -q microshift register: microshift_installed ignore_errors: true changed_when: false -- name: cleanup and uninstall existing microshift +- name: Cleanup and uninstall existing microshift + when: microshift_installed.rc == 0 block: - - name: stop microshift service - become: yes + - name: Stop microshift service + become: true ansible.builtin.systemd: name: microshift state: stopped ignore_errors: true - - name: find microshift cleanup script + - name: Find microshift cleanup script ansible.builtin.find: paths: /usr/bin patterns: - - '.*microshift.*cleanup.*' - - '.*cleanup.*microshift.*' - use_regex: yes + - ".*microshift.*cleanup.*" + - ".*cleanup.*microshift.*" + use_regex: true register: find_cleanup - - name: cleanup microshift data - become: yes + - name: Cleanup microshift data + become: true ansible.builtin.shell: echo 1 | {{ find_cleanup.files[0].path }} --all when: find_cleanup.files | length > 0 - - name: uninstall microshift packages and dependencies - become: yes + - name: Uninstall microshift packages and dependencies + become: true ansible.builtin.dnf: name: - microshift* - autoremove: yes + autoremove: true state: absent - when: microshift_installed.rc == 0 -- name: record initial disk space +- name: Record initial disk space vars: filename: disk0.txt - include_tasks: roles/common/tasks/disk.yml + ansible.builtin.include_tasks: roles/common/tasks/disk.yml loop: "{{ du_dirs }}" -- name: build & install microshift RPMs on RHEL +- name: Build & install microshift RPMs on RHEL + when: + - ansible_facts.distribution == "RedHat" + - build_microshift | bool block: - - name: install cri-o - become: yes + - name: Install cri-o + become: true ansible.builtin.dnf: name: - cri-o - cri-tools state: present - - name: ensure microshift git checkout + - name: Ensure microshift git checkout ansible.builtin.git: repo: "{{ microshift_repo }}" dest: "{{ microshift_dir }}" @@ -63,116 +66,117 @@ refspec: "{{ microshift_git_refspec | default(omit, true) }}" when: not microshift_source_dir - - name: make clean + - name: Make clean ansible.builtin.command: make clean args: chdir: "{{ microshift_build_dir }}" - - name: make rpm + - name: Make rpm ansible.builtin.command: make rpm args: chdir: "{{ microshift_build_dir }}" - - name: find built RPMs + - name: Find built RPMs ansible.builtin.find: paths: "{{ microshift_build_dir }}" - patterns: '*.rpm' - recurse: yes + patterns: "*.rpm" + recurse: true register: microshift_find - - name: make list of built RPM paths + - name: Make list of built RPM paths ansible.builtin.set_fact: - microshift_rpms: "{{ microshift_rpms + [ item.path ] }}" + microshift_rpms: "{{ microshift_rpms + [item.path] }}" with_items: "{{ microshift_find.files }}" - - name: install microshift RPMs - become: yes + - name: Install microshift RPMs + become: true ansible.builtin.dnf: name: "{{ microshift_rpms }}" state: present - disable_gpg_check: yes + disable_gpg_check: true + +- name: Install microshift package on RHEL when: - ansible_facts.distribution == "RedHat" - - build_microshift | bool - -- name: install microshift package on RHEL + - not (build_microshift | bool) block: - - name: install microshift package - become: yes + - name: Install microshift package + become: true ansible.builtin.dnf: name: microshift state: present - disable_gpg_check: yes + disable_gpg_check: true + register: microshift_package_install + until: microshift_package_install is succeeded + retries: 2 + delay: 10 + +- name: Build & install etcd when: - - ansible_facts.distribution == "RedHat" + - build_etcd_binary | bool - not (build_microshift | bool) - -- name: build & install etcd block: - - name: clone etcd git repo + - name: Clone etcd git repo ansible.builtin.git: repo: "{{ etcd_repo }}" dest: "{{ etcd_dir }}" - - name: make etcd binary + - name: Make etcd binary ansible.builtin.command: make args: chdir: "{{ etcd_dir }}" - - name: install etcd binary - become: yes + - name: Install etcd binary + become: true ansible.builtin.copy: src: "{{ etcd_dir }}/bin/etcd" dest: "/usr/bin/etcd" - remote_src: yes - mode: '0755' + remote_src: true + mode: "0755" - - name: copy etcd systemd unit to node - become: yes + - name: Copy etcd systemd unit to node + become: true ansible.builtin.copy: src: etcd.service dest: /usr/lib/systemd/system/etcd.service owner: root group: root - mode: '0664' + mode: "0664" - - name: start etcd service - become: yes + - name: Start etcd service + become: true ansible.builtin.systemd: - daemon_reload: yes + daemon_reload: true state: started name: etcd - when: - - build_etcd_binary | bool - - not (build_microshift | bool) -- name: check if pull-secret is present +- name: Check if pull-secret is present ansible.builtin.stat: path: /etc/crio/openshift-pull-secret register: pull_secret -- name: copy pull-secret to node - become: yes +- name: Copy pull-secret to node + become: true ansible.builtin.copy: src: pull-secret.txt dest: /etc/crio/openshift-pull-secret owner: root group: root - mode: '0600' + mode: "0600" no_log: true when: not pull_secret.stat.exists -- name: check if crio metrics config is present +- name: Check if crio metrics config is present ansible.builtin.stat: path: "{{ crio_metrics_path }}" register: crio_metrics -- name: enable crio metrics - become: yes +- name: Enable crio metrics + become: true ansible.builtin.copy: src: "{{ crio_metrics_conf }}" dest: "{{ crio_metrics_path }}" owner: root group: root - mode: '0644' + mode: "0644" when: not crio_metrics.stat.exists diff --git a/ansible/roles/manage-repos/defaults/main.yml b/ansible/roles/manage-repos/defaults/main.yml index fec983fffb..2709dc6945 100644 --- a/ansible/roles/manage-repos/defaults/main.yml +++ b/ansible/roles/manage-repos/defaults/main.yml @@ -7,19 +7,21 @@ ocp_major_version: "{{ microshift_version_clean.split('.')[0] }}" ocp_version: "{{ ocp_major_version }}.{{ microshift_version_clean.split('.')[1] }}" microshift_base_url: "{{ 'ocp-dev-preview' if 'ec' in microshift_version else 'ocp' }}" microshift_mirror_repos: - - repo_name: 'microshift-{{ ocp_version }}-for-rhel-{{ ansible_facts.distribution_major_version }}-mirrorbeta-{{ ansible_facts.architecture }}-rpms' - repo_description: 'MicroShift {{ ocp_version }} RPMs for RHEL {{ ansible_facts.distribution_major_version }}' - repo_url: "https://mirror.openshift.com/pub/openshift-v4/{{ ansible_facts.architecture }}/microshift/{{ microshift_base_url }}/{{ microshift_version }}/el9/os/" + - repo_name: "microshift-{{ ocp_version }}-for-rhel-{{ ansible_facts.distribution_major_version }}-mirrorbeta-{{ ansible_facts.architecture }}-rpms" + repo_description: "MicroShift {{ ocp_version }} RPMs for RHEL {{ ansible_facts.distribution_major_version }}" + repo_url: "https://mirror.openshift.com/pub/openshift-v4/\ + {{ ansible_facts.architecture }}/microshift/{{ microshift_base_url }}/\ + {{ microshift_version }}/el9/os/" microshift_deps_repos: - - repo_name: 'microshift-{{ ocp_version }}-deps-for-rhel-{{ ansible_facts.distribution_major_version }}-mirrorbeta-{{ ansible_facts.architecture }}-rpms' - repo_description: 'MicroShift {{ ocp_version }} dependencies for RHEL {{ ansible_facts.distribution_major_version }}' + - repo_name: "microshift-{{ ocp_version }}-deps-for-rhel-{{ ansible_facts.distribution_major_version }}-mirrorbeta-{{ ansible_facts.architecture }}-rpms" + repo_description: "MicroShift {{ ocp_version }} dependencies for RHEL {{ ansible_facts.distribution_major_version }}" repo_url: >- {{ 'https://mirror.openshift.com/pub/openshift-v' ~ ocp_major_version ~ '/' ~ ansible_facts.architecture ~ '/dependencies/rpms/' ~ ocp_version ~ '-el9-beta/' }} repo_list: "{{ microshift_mirror_repos + microshift_deps_repos }}" -rhel_beta: '' +rhel_beta: "" rhel_base_repos: - rhel-{{ ansible_facts.distribution_major_version }}-for-{{ ansible_facts.architecture }}-baseos-{{ rhel_beta }}rpms - rhel-{{ ansible_facts.distribution_major_version }}-for-{{ ansible_facts.architecture }}-appstream-{{ rhel_beta }}rpms diff --git a/ansible/roles/manage-repos/tasks/create-mirrors.yaml b/ansible/roles/manage-repos/tasks/create-mirrors.yaml index d8e8531ded..0fc0d30844 100644 --- a/ansible/roles/manage-repos/tasks/create-mirrors.yaml +++ b/ansible/roles/manage-repos/tasks/create-mirrors.yaml @@ -1,8 +1,9 @@ +--- - name: Install repository mirror ansible.builtin.template: src: ocpbeta.repo.j2 dest: "/etc/yum.repos.d/{{ item.repo_name }}.repo" - mode: '0644' + mode: "0644" register: microshift_mirror_repo - name: Clean stale metadata for updated repository diff --git a/ansible/roles/manage-repos/tasks/main.yml b/ansible/roles/manage-repos/tasks/main.yml index 07ad4f03b6..4a67ecbbe6 100644 --- a/ansible/roles/manage-repos/tasks/main.yml +++ b/ansible/roles/manage-repos/tasks/main.yml @@ -2,210 +2,210 @@ # manage-repos tasks - name: RHEL tasks + when: ansible_facts.distribution == "RedHat" block: - - name: subscription-manager tasks - block: - - name: Check if we have subscription-manager installed - ansible.builtin.command: which subscription-manager - register: sm_present - ignore_errors: true - - - name: Install subscription-manager - ansible.builtin.dnf: - name: - - subscription-manager - when: sm_present.rc != 0 - - - name: Register host with subscription manager - community.general.redhat_subscription: - state: present - username: "{{ rhel_username }}" - password: "{{ rhel_password }}" - no_log: true - - - name: Enable repo management from subscription-manager - ansible.builtin.command: subscription-manager config --rhsm.manage_repos=1 - when: manage_subscription | bool - - - name: Slurp redhat-release - ansible.builtin.slurp: - src: /etc/redhat-release - register: redhat_release_slurp - - - name: Set beta release of RHEL - ansible.builtin.set_fact: - rhel_beta: beta- - when: "'Beta' in (redhat_release_slurp['content'] | b64decode)" - - - name: Set microshift_prerelease if microshift_version is a prerelease - ansible.builtin.set_fact: - microshift_prerelease: "{{ 'rc' in microshift_version or 'ec' in microshift_version or 'latest' in microshift_version }}" - - - name: Enable required RHEL package repos for microshift - community.general.rhsm_repository: - name: "{{ rhel_base_repos }}" - - - name: Provision dependency repos for source builds - when: build_microshift | bool - block: - - name: Enable OpenShift repo for source-build dependencies - community.general.rhsm_repository: - name: "{{ rhel_ocp_repos }}" - register: microshift_source_rhsm_repo - when: not (microshift_prerelease | bool) - - - name: Check OpenShift repo provides source-build dependencies + - name: Subscription-manager tasks + when: manage_subscription | bool + block: + - name: Check if we have subscription-manager installed + ansible.builtin.command: which subscription-manager + register: sm_present + ignore_errors: true + + - name: Install subscription-manager + ansible.builtin.dnf: + name: + - subscription-manager + when: sm_present.rc != 0 + + - name: Register host with subscription manager + community.general.redhat_subscription: + state: present + username: "{{ rhel_username }}" + password: "{{ rhel_password }}" + no_log: true + + - name: Enable repo management from subscription-manager + ansible.builtin.command: subscription-manager config --rhsm.manage_repos=1 + + - name: Slurp redhat-release + ansible.builtin.slurp: + src: /etc/redhat-release + register: redhat_release_slurp + + - name: Set beta release of RHEL + ansible.builtin.set_fact: + rhel_beta: beta- + when: "'Beta' in (redhat_release_slurp['content'] | b64decode)" + + - name: Set microshift_prerelease if microshift_version is a prerelease + ansible.builtin.set_fact: + microshift_prerelease: "{{ 'rc' in microshift_version or 'ec' in microshift_version or 'latest' in microshift_version }}" + + - name: Enable required RHEL package repos for microshift + community.general.rhsm_repository: + name: "{{ rhel_base_repos }}" + + - name: Provision dependency repos for source builds + when: build_microshift | bool + block: + - name: Enable OpenShift repo for source-build dependencies + community.general.rhsm_repository: + name: "{{ rhel_ocp_repos }}" + register: microshift_source_rhsm_repo + when: not (microshift_prerelease | bool) + + - name: Check OpenShift repo provides source-build dependencies # This matches scripts/get-latest-rhocp-repo.sh: repository routing # checks package presence, while RPM installation enforces compatibility. - ansible.builtin.command: - argv: - - dnf - - --refresh - - repository-packages - - --showduplicates - - "--disablerepo=*" - - "--enablerepo={{ item }}" - - "{{ item }}" - - info - - cri-o - loop: "{{ rhel_ocp_repos }}" - register: microshift_source_rhsm_probe - changed_when: false - when: not (microshift_prerelease | bool) - rescue: - - name: Disable unusable OpenShift repo for source-build dependencies - community.general.rhsm_repository: - name: "{{ rhel_ocp_repos }}" - state: disabled - when: - - microshift_source_rhsm_repo is defined - - not ((microshift_source_rhsm_repo.failed | default(false)) | bool) - - - name: Check fallback dependency mirror for source builds - block: - - name: Probe fallback dependency mirror for source builds - ansible.builtin.include_tasks: probe-mirror.yaml - loop: "{{ microshift_deps_repos }}" - loop_control: - label: "{{ item.repo_name }}" - vars: - repository_probe_package: cri-o - rescue: - - name: Report unavailable source-build dependency repositories - ansible.builtin.fail: - msg: >- - Neither the entitled OpenShift repositories - ({{ rhel_ocp_repos | join(', ') }}) nor the dependency mirrors - ({{ microshift_deps_repos | map(attribute='repo_url') | join(', ') }}) - provide cri-o for MicroShift {{ ocp_version }}. - - - name: Install fallback dependency mirror for source builds - ansible.builtin.include_tasks: create-mirrors.yaml - loop: "{{ microshift_deps_repos }}" - loop_control: - label: "{{ item.repo_name }}" - - - name: Remove fallback dependency mirrors after OpenShift repo recovers - ansible.builtin.file: - path: "/etc/yum.repos.d/{{ item.repo_name }}.repo" - state: absent - loop: "{{ microshift_deps_repos }}" - loop_control: - label: "{{ item.repo_name }}" - register: microshift_removed_fallback_repos - when: - - build_microshift | bool - - not (microshift_prerelease | bool) - - microshift_source_rhsm_probe is defined - - not ((microshift_source_rhsm_probe.failed | default(true)) | bool) - - - name: Clean metadata after removing fallback dependency mirrors - ansible.builtin.command: - argv: - - dnf - - clean - - metadata - changed_when: true - when: - - build_microshift | bool - - not (microshift_prerelease | bool) - - microshift_source_rhsm_probe is defined - - not ((microshift_source_rhsm_probe.failed | default(true)) | bool) - - microshift_removed_fallback_repos is defined - - (microshift_removed_fallback_repos.changed | default(false)) | bool - - - name: Check dependency mirror for prerelease source builds - when: - - build_microshift | bool - - microshift_prerelease | bool - block: - - name: Probe dependency mirror for prerelease source builds - ansible.builtin.include_tasks: probe-mirror.yaml - loop: "{{ microshift_deps_repos }}" - loop_control: - label: "{{ item.repo_name }}" - vars: - repository_probe_package: cri-o - rescue: - - name: Report unavailable prerelease dependency mirrors - ansible.builtin.fail: - msg: >- - The dependency mirrors - ({{ microshift_deps_repos | map(attribute='repo_url') | join(', ') }}) - do not provide cri-o for MicroShift {{ ocp_version }}. - - - name: Create dependency mirror for prerelease source builds - ansible.builtin.include_tasks: create-mirrors.yaml - loop: "{{ microshift_deps_repos }}" - loop_control: - label: "{{ item.repo_name }}" - when: - - build_microshift | bool - - microshift_prerelease | bool - - - name: Check microshift prerelease mirrors - ansible.builtin.include_tasks: probe-mirror.yaml - loop: "{{ repo_list }}" - loop_control: - label: "{{ item.repo_name }}" - when: - - microshift_prerelease | bool - - not (build_microshift | bool) - - - name: Create microshift prerelease mirrors - ansible.builtin.include_tasks: create-mirrors.yaml - loop: "{{ repo_list }}" - loop_control: - label: "{{ item.repo_name }}" - when: - - microshift_prerelease | bool - - not (build_microshift | bool) - - - name: Enable OpenShift repo for released microshift - community.general.rhsm_repository: - name: "{{ rhel_ocp_repos }}" - when: - - not (microshift_prerelease | bool) - - not (build_microshift | bool) - - - name: Install EPEL repo - ansible.builtin.dnf: - name: "https://dl.fedoraproject.org/pub/epel/epel-release-latest-{{ ansible_facts.distribution_major_version }}.noarch.rpm" - disablerepo: "*" - disable_gpg_check: true - state: present - when: ansible_facts.distribution == "RedHat" + ansible.builtin.command: + argv: + - dnf + - --refresh + - repository-packages + - --showduplicates + - "--disablerepo=*" + - "--enablerepo={{ item }}" + - "{{ item }}" + - info + - cri-o + loop: "{{ rhel_ocp_repos }}" + register: microshift_source_rhsm_probe + changed_when: false + when: not (microshift_prerelease | bool) + rescue: + - name: Disable unusable OpenShift repo for source-build dependencies + community.general.rhsm_repository: + name: "{{ rhel_ocp_repos }}" + state: disabled + when: + - microshift_source_rhsm_repo is defined + - not ((microshift_source_rhsm_repo.failed | default(false)) | bool) + + - name: Check fallback dependency mirror for source builds + block: + - name: Probe fallback dependency mirror for source builds + ansible.builtin.include_tasks: probe-mirror.yaml + loop: "{{ microshift_deps_repos }}" + loop_control: + label: "{{ item.repo_name }}" + vars: + repository_probe_package: cri-o + rescue: + - name: Report unavailable source-build dependency repositories + ansible.builtin.fail: + msg: >- + Neither the entitled OpenShift repositories + ({{ rhel_ocp_repos | join(', ') }}) nor the dependency mirrors + ({{ microshift_deps_repos | map(attribute='repo_url') | join(', ') }}) + provide cri-o for MicroShift {{ ocp_version }}. + + - name: Install fallback dependency mirror for source builds + ansible.builtin.include_tasks: create-mirrors.yaml + loop: "{{ microshift_deps_repos }}" + loop_control: + label: "{{ item.repo_name }}" + + - name: Remove fallback dependency mirrors after OpenShift repo recovers + ansible.builtin.file: + path: "/etc/yum.repos.d/{{ item.repo_name }}.repo" + state: absent + loop: "{{ microshift_deps_repos }}" + loop_control: + label: "{{ item.repo_name }}" + register: microshift_removed_fallback_repos + when: + - build_microshift | bool + - not (microshift_prerelease | bool) + - microshift_source_rhsm_probe is defined + - not ((microshift_source_rhsm_probe.failed | default(true)) | bool) + + - name: Clean metadata after removing fallback dependency mirrors + ansible.builtin.command: + argv: + - dnf + - clean + - metadata + changed_when: true + when: + - build_microshift | bool + - not (microshift_prerelease | bool) + - microshift_source_rhsm_probe is defined + - not ((microshift_source_rhsm_probe.failed | default(true)) | bool) + - microshift_removed_fallback_repos is defined + - (microshift_removed_fallback_repos.changed | default(false)) | bool + + - name: Check dependency mirror for prerelease source builds + when: + - build_microshift | bool + - microshift_prerelease | bool + block: + - name: Probe dependency mirror for prerelease source builds + ansible.builtin.include_tasks: probe-mirror.yaml + loop: "{{ microshift_deps_repos }}" + loop_control: + label: "{{ item.repo_name }}" + vars: + repository_probe_package: cri-o + rescue: + - name: Report unavailable prerelease dependency mirrors + ansible.builtin.fail: + msg: >- + The dependency mirrors + ({{ microshift_deps_repos | map(attribute='repo_url') | join(', ') }}) + do not provide cri-o for MicroShift {{ ocp_version }}. + + - name: Create dependency mirror for prerelease source builds + ansible.builtin.include_tasks: create-mirrors.yaml + loop: "{{ microshift_deps_repos }}" + loop_control: + label: "{{ item.repo_name }}" + when: + - build_microshift | bool + - microshift_prerelease | bool + + - name: Check microshift prerelease mirrors + ansible.builtin.include_tasks: probe-mirror.yaml + loop: "{{ repo_list }}" + loop_control: + label: "{{ item.repo_name }}" + when: + - microshift_prerelease | bool + - not (build_microshift | bool) + + - name: Create microshift prerelease mirrors + ansible.builtin.include_tasks: create-mirrors.yaml + loop: "{{ repo_list }}" + loop_control: + label: "{{ item.repo_name }}" + when: + - microshift_prerelease | bool + - not (build_microshift | bool) + + - name: Enable OpenShift repo for released microshift + community.general.rhsm_repository: + name: "{{ rhel_ocp_repos }}" + when: + - not (microshift_prerelease | bool) + - not (build_microshift | bool) + + - name: Install EPEL repo + ansible.builtin.dnf: + name: "https://dl.fedoraproject.org/pub/epel/epel-release-latest-{{ ansible_facts.distribution_major_version }}.noarch.rpm" + disablerepo: "*" + disable_gpg_check: true + state: present - name: Gather the package facts ansible.builtin.package_facts: manager: auto -- name: pbench-agent is installed +- name: Pbench-agent is installed ansible.builtin.set_fact: pbench_installed: true when: "'pbench-agent' in ansible_facts.packages" -- name: pbench-agent is not installed +- name: Pbench-agent is not installed ansible.builtin.set_fact: pbench_installed: false when: "'pbench-agent' not in ansible_facts.packages" diff --git a/ansible/roles/manage-repos/tasks/probe-mirror.yaml b/ansible/roles/manage-repos/tasks/probe-mirror.yaml index a639f1f76f..0b0affc1fb 100644 --- a/ansible/roles/manage-repos/tasks/probe-mirror.yaml +++ b/ansible/roles/manage-repos/tasks/probe-mirror.yaml @@ -1,3 +1,4 @@ +--- - name: Check repository mirror is available ansible.builtin.uri: url: "{{ item.repo_url }}" diff --git a/ansible/roles/microshift-start/tasks/main.yml b/ansible/roles/microshift-start/tasks/main.yml index 622ba4af82..a891f2603f 100644 --- a/ansible/roles/microshift-start/tasks/main.yml +++ b/ansible/roles/microshift-start/tasks/main.yml @@ -1,150 +1,151 @@ --- # microshift-start tasks -- name: resolve kubernetes nodename - include_tasks: roles/common/tasks/nodename.yml +- name: Resolve kubernetes nodename + ansible.builtin.include_tasks: roles/common/tasks/nodename.yml -- name: check if microshift has run +- name: Check if microshift has run ansible.builtin.shell: systemctl show -p ActiveEnterTimestampMonotonic microshift | awk -F"=" '{print $2}' register: microshift_active ignore_errors: true -- block: - - name: find microshift cleanup script - ansible.builtin.find: - paths: /usr/bin - patterns: - - '.*microshift.*cleanup.*' - - '.*cleanup.*microshift.*' - use_regex: yes - register: find_cleanup - - - name: set microshift_cleanup_bin variable - set_fact: - microshift_cleanup_bin: "{{ find_cleanup.files[0].path if find_cleanup.files }}" - - - name: cleanup microshift data - become: yes - ansible.builtin.shell: echo 1 | {{ microshift_cleanup_bin }} --all +- name: Clean up existing MicroShift data when: - cleanup_microshift | default('true') | bool - microshift_active.stdout | int != 0 - -- name: disable microshift service - become: yes + block: + - name: Find microshift cleanup script + ansible.builtin.find: + paths: /usr/bin + patterns: + - ".*microshift.*cleanup.*" + - ".*cleanup.*microshift.*" + use_regex: true + register: find_cleanup + + - name: Set microshift_cleanup_bin variable + ansible.builtin.set_fact: + microshift_cleanup_bin: "{{ find_cleanup.files[0].path if find_cleanup.files }}" + + - name: Cleanup microshift data + become: true + ansible.builtin.shell: echo 1 | {{ microshift_cleanup_bin }} --all + +- name: Disable microshift service + become: true ansible.builtin.systemd: name: microshift state: stopped - enabled: no + enabled: false -- name: create .kube home dir +- name: Create .kube home dir ansible.builtin.file: path: ~/.kube/ state: directory -- name: reboot machine - become: yes +- name: Reboot machine + become: true ansible.builtin.reboot: reboot_timeout: 600 -- name: initialize results directory - include_tasks: roles/common/tasks/results-dir.yml +- name: Initialize results directory + ansible.builtin.include_tasks: roles/common/tasks/results-dir.yml -- name: record post-install disk utilization +- name: Record post-install disk utilization vars: filename: disk1.txt - include_tasks: roles/common/tasks/disk.yml + ansible.builtin.include_tasks: roles/common/tasks/disk.yml loop: "{{ du_dirs }}" - name: Pause for 60 seconds for steady state post reboot ansible.builtin.pause: seconds: 60 -- name: pbench recording start - become: yes +- name: Pbench recording start + become: true + when: install_pbench | bool + environment: + PBENCH_TOOL_DATA_SINK: localhost:8081 block: - - name: source pbench-agent & register-tool-set - ansible.builtin.shell: source /etc/profile.d/pbench-agent.sh && pbench-register-tool-set + - name: Source pbench-agent & register-tool-set + ansible.builtin.shell: source /etc/profile.d/pbench-agent.sh && pbench-register-tool-set - - name: set new pidstat interval - ansible.builtin.shell: source /etc/profile.d/pbench-agent.sh && pbench-register-tool --name=pidstat -- --interval={{ sample_interval }} + - name: Set new pidstat interval + ansible.builtin.shell: source /etc/profile.d/pbench-agent.sh && pbench-register-tool --name=pidstat -- --interval={{ sample_interval }} - - name: start pbench-user-benchmark recording - ansible.builtin.shell: source /etc/profile.d/pbench-agent.sh && pbench-user-benchmark --config=microshift -- sleep {{ pbench_record_duration }} - async: "{{ pbench_record_duration|int * 2 }}" - poll: 0 - register: pbench_user_benchmark_result + - name: Start pbench-user-benchmark recording + ansible.builtin.shell: source /etc/profile.d/pbench-agent.sh && pbench-user-benchmark --config=microshift -- sleep {{ pbench_record_duration }} + async: "{{ pbench_record_duration | int * 2 }}" + poll: 0 + register: pbench_user_benchmark_result - - name: Pause for 60 seconds to gather steady state for pbench tool recording - ansible.builtin.pause: - seconds: 60 - when: install_pbench | bool - environment: - PBENCH_TOOL_DATA_SINK: localhost:8081 + - name: Pause for 60 seconds to gather steady state for pbench tool recording + ansible.builtin.pause: + seconds: 60 -- name: record network measurement start epoch +- name: Record network measurement start epoch ansible.builtin.command: date +%s register: network_start_epoch -- name: measure microshift service boot time - include_tasks: roles/common/tasks/boot.yml +- name: Measure microshift service boot time + ansible.builtin.include_tasks: roles/common/tasks/boot.yml vars: boot_output_filename: "boot0.txt" cleanup_microshift: false reboot: false -- name: create service account task(s) - include_tasks: roles/create-service-account/tasks/main.yml +- name: Create service account task(s) + ansible.builtin.include_tasks: roles/create-service-account/tasks/main.yml -- name: finish pbench capture - become: yes - block: - - name: check on pbench-user-benchmark status - ansible.builtin.async_status: - jid: "{{ pbench_user_benchmark_result.ansible_job_id }}" - register: job_result - until: job_result.finished - retries: 240 - delay: 15 - - - name: source pbench-agent & move results - ansible.builtin.shell: source /etc/profile.d/pbench-agent.sh && pbench-move-results - ignore_errors: yes +- name: Finish pbench capture + become: true when: install_pbench | bool environment: PBENCH_USER: microshift - -- name: record fully running disk utilization + block: + - name: Check on pbench-user-benchmark status + ansible.builtin.async_status: + jid: "{{ pbench_user_benchmark_result.ansible_job_id }}" + register: job_result + until: job_result.finished + retries: 240 + delay: 15 + + - name: Source pbench-agent & move results + ansible.builtin.shell: source /etc/profile.d/pbench-agent.sh && pbench-move-results + ignore_errors: true + +- name: Record fully running disk utilization vars: filename: disk2.txt - include_tasks: roles/common/tasks/disk.yml + ansible.builtin.include_tasks: roles/common/tasks/disk.yml loop: "{{ du_dirs }}" -- name: capture container image sizes +- name: Capture container image sizes block: - - name: copy crio-df script to remote host - become: yes + - name: Copy crio-df script to remote host + become: true ansible.builtin.copy: src: roles/common/tasks/files/crio-df.py dest: /tmp/crio-df.py - mode: '0755' + mode: "0755" - - name: run crio-df script - become: yes + - name: Run crio-df script + become: true ansible.builtin.command: python3 /tmp/crio-df.py -v register: crio_df - - name: save container image sizes to results + - name: Save container image sizes to results ansible.builtin.copy: content: "{{ crio_df.stdout }}" dest: "{{ results_dir }}/images.txt" delegate_to: localhost -- name: record network measurement end epoch +- name: Record network measurement end epoch ansible.builtin.command: date +%s register: network_end_epoch -- name: resolve prometheus network query settings +- name: Resolve prometheus network query settings ansible.builtin.set_fact: prom_network_endpoint: >- {{ @@ -166,9 +167,10 @@ prom_network_instance: "{{ kubernetes_nodename }}" when: prometheus_logging | bool -- name: query prometheus for network transfer +- name: Query prometheus for network transfer + when: prometheus_logging | bool block: - - name: run prometheus network query + - name: Run prometheus network query ansible.builtin.command: > python3 roles/common/tasks/files/prom-network-query.py --prometheus {{ prom_network_endpoint }} @@ -179,9 +181,8 @@ register: prom_network delegate_to: localhost - - name: save network data to results + - name: Save network data to results ansible.builtin.copy: content: "{{ prom_network.stdout }}" dest: "{{ results_dir }}/network.txt" delegate_to: localhost - when: prometheus_logging | bool diff --git a/ansible/roles/nvidia-gpu-setup/defaults/main.yml b/ansible/roles/nvidia-gpu-setup/defaults/main.yml index 0e059a5e2e..21110a84c9 100644 --- a/ansible/roles/nvidia-gpu-setup/defaults/main.yml +++ b/ansible/roles/nvidia-gpu-setup/defaults/main.yml @@ -19,7 +19,9 @@ container_toolkit_repo_url: "https://nvidia.github.io/libnvidia-container/stable # Device plugin configuration (from official NVIDIA docs) # Using GitHub repo as GitLab repo is archived -device_plugin_manifest_url: "https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/refs/heads/main/deployments/static/nvidia-device-plugin-privileged-with-service-account.yml" +device_plugin_manifest_url: "https://raw.githubusercontent.com/NVIDIA/\ + k8s-device-plugin/refs/heads/main/deployments/static/\ + nvidia-device-plugin-privileged-with-service-account.yml" # Use manifests.d with a subdirectory as per MicroShift documentation device_plugin_manifest_dir: "/etc/microshift/manifests.d/nvidia-gpu" device_plugin_manifest_file: "{{ device_plugin_manifest_dir }}/nvidia-device-plugin.yml" @@ -44,4 +46,4 @@ selinux_booleans: persistent: true # Validation settings -validate_gpu: true \ No newline at end of file +validate_gpu: true diff --git a/ansible/roles/nvidia-gpu-setup/tasks/main.yml b/ansible/roles/nvidia-gpu-setup/tasks/main.yml index 95781781e5..fee5dac052 100644 --- a/ansible/roles/nvidia-gpu-setup/tasks/main.yml +++ b/ansible/roles/nvidia-gpu-setup/tasks/main.yml @@ -26,7 +26,7 @@ ansible.builtin.get_url: url: "{{ cuda_repo_url }}" dest: /etc/yum.repos.d/cuda-rhel{{ rhel_version }}.repo - mode: '0644' + mode: "0644" - name: Check latest available NVIDIA driver version when: nvidia_driver_version in ["latest", "latest-dkms", "open-dkms"] @@ -75,7 +75,7 @@ ansible.builtin.dnf: name: "libnvidia-nscq-{{ nvidia_driver_version }}" state: present - when: + when: - "'dkms' not in nvidia_driver_version" - "'open' not in nvidia_driver_version" @@ -86,7 +86,7 @@ blacklist nouveau options nouveau modeset=0 dest: /etc/modprobe.d/nouveau-blacklist.conf - mode: '0644' + mode: "0644" register: nouveau_blacklist - name: Rebuild initramfs @@ -106,7 +106,7 @@ ansible.builtin.get_url: url: "{{ container_toolkit_repo_url }}" dest: /etc/yum.repos.d/libnvidia-container.repo - mode: '0644' + mode: "0644" - name: Install NVIDIA Container Toolkit packages ansible.builtin.dnf: @@ -140,7 +140,7 @@ allow container_t xserver_misc_device_t:chr_file map; dest: "{{ selinux_temp_dir.path }}/nvidia-container-microshift.te" - mode: '0644' + mode: "0644" register: selinux_policy_file - name: Compile SELinux policy module @@ -163,7 +163,7 @@ ansible.builtin.file: path: /var/run/cdi state: directory - mode: '0755' + mode: "0755" - name: Generate CDI specification for NVIDIA GPUs ansible.builtin.command: nvidia-ctk cdi generate --output=/var/run/cdi/nvidia.yaml @@ -180,15 +180,15 @@ - name: Set CDI mode in nvidia-container-runtime config ansible.builtin.lineinfile: path: /etc/nvidia-container-runtime/config.toml - regexp: '^mode = ' + regexp: "^mode = " line: 'mode = "cdi"' state: present - backup: yes - + backup: true + - name: Set runtimes in nvidia-container-runtime config ansible.builtin.lineinfile: path: /etc/nvidia-container-runtime/config.toml - regexp: '^runtimes = ' + regexp: "^runtimes = " line: 'runtimes = ["crun", "docker-runc", "runc"]' state: present @@ -198,13 +198,13 @@ ansible.builtin.file: path: "{{ device_plugin_manifest_dir }}" state: directory - mode: '0755' + mode: "0755" - name: Download NVIDIA Device Plugin manifest ansible.builtin.get_url: url: "{{ device_plugin_manifest_url }}" dest: "{{ device_plugin_manifest_file }}" - mode: '0644' + mode: "0644" - name: Get latest NVIDIA Device Plugin version ansible.builtin.uri: @@ -218,7 +218,7 @@ - name: Display detected versions ansible.builtin.debug: - msg: + msg: - "Latest Device Plugin version: {{ latest_release.json.tag_name | default('unknown') }}" - "Updating manifest to use this version..." when: latest_release.json.tag_name is defined @@ -226,7 +226,7 @@ - name: Update Device Plugin manifest with latest version ansible.builtin.replace: path: "{{ device_plugin_manifest_file }}" - regexp: 'image: nvcr.io/nvidia/k8s-device-plugin:v[0-9]+\.[0-9]+\.[0-9]+' + regexp: "image: nvcr.io/nvidia/k8s-device-plugin:v[0-9]+\\.[0-9]+\\.[0-9]+" replace: "image: nvcr.io/nvidia/k8s-device-plugin:{{ latest_release.json.tag_name }}" when: latest_release.json.tag_name is defined @@ -239,7 +239,7 @@ resources: - nvidia-device-plugin.yml dest: "{{ device_plugin_manifest_dir }}/kustomization.yaml" - mode: '0644' + mode: "0644" - name: Restart CRI-O to apply NVIDIA configuration ansible.builtin.systemd: @@ -368,10 +368,10 @@ always: - name: Ensure no orphaned NVIDIA temp files remain ansible.builtin.find: - paths: + paths: - /tmp - /var/tmp - patterns: + patterns: - "nvidia-*.te" - "nvidia-*.mod" - "nvidia-*.pp" diff --git a/ansible/roles/nvidia-gpu-test/defaults/main.yml b/ansible/roles/nvidia-gpu-test/defaults/main.yml index 03e30d31d9..926fba150d 100644 --- a/ansible/roles/nvidia-gpu-test/defaults/main.yml +++ b/ansible/roles/nvidia-gpu-test/defaults/main.yml @@ -15,8 +15,8 @@ cuda_base_image: "nvcr.io/nvidia/cuda:12.8.1-base-ubi9" cuda_sample_image: "nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0-ubi8" # Cleanup settings -gpu_test_cleanup: true # Set to false to keep test resources for debugging +gpu_test_cleanup: true # Set to false to keep test resources for debugging # Logging settings -gpu_test_save_logs: true # Save test logs to files -gpu_test_logs_dir: "./gpu-test-logs" # Directory to save test logs \ No newline at end of file +gpu_test_save_logs: true # Save test logs to files +gpu_test_logs_dir: "./gpu-test-logs" # Directory to save test logs diff --git a/ansible/roles/nvidia-gpu-test/tasks/main.yml b/ansible/roles/nvidia-gpu-test/tasks/main.yml index e18ff6321e..52b5a4a99b 100644 --- a/ansible/roles/nvidia-gpu-test/tasks/main.yml +++ b/ansible/roles/nvidia-gpu-test/tasks/main.yml @@ -21,9 +21,9 @@ ansible.builtin.template: src: gpu-test-workload.yaml.j2 dest: /tmp/gpu-test-workload-dynamic.yaml - mode: '0644' + mode: "0644" delegate_to: localhost - become: no + become: false - name: Apply GPU test workload ansible.builtin.shell: | @@ -32,7 +32,7 @@ args: executable: /bin/bash delegate_to: localhost - become: no + become: false register: gpu_workload_deploy - name: Wait for GPU test pods to complete @@ -42,7 +42,7 @@ args: executable: /bin/bash delegate_to: localhost - become: no + become: false register: gpu_test_status until: gpu_test_status.stdout_lines | length >= 2 retries: "{{ gpu_test_retries }}" @@ -53,7 +53,7 @@ ansible.builtin.shell: | oc logs -n {{ gpu_test_namespace }} nvidia-smi-all-gpus delegate_to: localhost - become: no + become: false register: pod_nvidia_smi_logs changed_when: false @@ -85,7 +85,7 @@ exit 1 fi delegate_to: localhost - become: no + become: false register: gpu_comparison changed_when: false @@ -97,7 +97,7 @@ ansible.builtin.shell: | oc logs -n {{ gpu_test_namespace }} cuda-vector-add delegate_to: localhost - become: no + become: false register: cuda_vector_add_logs changed_when: false @@ -118,7 +118,7 @@ Host GPUs Detected: {{ gpu_count.stdout | trim }} Pod GPUs Visible: {{ pod_nvidia_smi_logs.stdout | regex_findall('^\| +[0-9]+ +', multiline=True) | length }} GPU Visibility: {{ 'PASSED - All GPUs visible in pod' if gpu_comparison.rc == 0 else 'FAILED - GPU count mismatch' }} - + nvidia-smi Status: {{ 'PASSED' if pod_nvidia_smi_logs.rc == 0 else 'FAILED' }} cuda-vector-add Status: {{ 'PASSED' if 'Test PASSED' in cuda_vector_add_logs.stdout else 'FAILED' }} CUDA Test Result: {{ 'Success' if 'Test PASSED' in cuda_vector_add_logs.stdout else 'Failed' }} @@ -130,33 +130,33 @@ ansible.builtin.file: path: "{{ gpu_test_logs_dir | default('./gpu-test-logs') }}" state: directory - mode: '0755' + mode: "0755" delegate_to: localhost - become: no + become: false - name: Save host nvidia-smi output to file ansible.builtin.copy: content: "{{ host_nvidia_smi.stdout }}" dest: "{{ gpu_test_logs_dir | default('./gpu-test-logs') }}/host-nvidia-smi-{{ ansible_facts.date_time.epoch }}.log" - mode: '0644' + mode: "0644" delegate_to: localhost - become: no + become: false - name: Save pod nvidia-smi output to file ansible.builtin.copy: content: "{{ pod_nvidia_smi_logs.stdout }}" dest: "{{ gpu_test_logs_dir | default('./gpu-test-logs') }}/pod-nvidia-smi-{{ ansible_facts.date_time.epoch }}.log" - mode: '0644' + mode: "0644" delegate_to: localhost - become: no + become: false - name: Save cuda-vector-add output to file ansible.builtin.copy: content: "{{ cuda_vector_add_logs.stdout }}" dest: "{{ gpu_test_logs_dir | default('./gpu-test-logs') }}/cuda-vector-add-{{ ansible_facts.date_time.epoch }}.log" - mode: '0644' + mode: "0644" delegate_to: localhost - become: no + become: false - name: Save test summary to file ansible.builtin.copy: @@ -171,9 +171,9 @@ cuda-vector-add Status: {{ 'PASSED' if 'Test PASSED' in cuda_vector_add_logs.stdout else 'FAILED' }} CUDA Test Result: {{ 'Success' if 'Test PASSED' in cuda_vector_add_logs.stdout else 'Failed' }} dest: "{{ gpu_test_logs_dir | default('./gpu-test-logs') }}/test-summary-{{ ansible_facts.date_time.epoch }}.log" - mode: '0644' + mode: "0644" delegate_to: localhost - become: no + become: false - name: Inform about saved logs ansible.builtin.debug: @@ -188,7 +188,7 @@ args: executable: /bin/bash delegate_to: localhost - become: no + become: false register: successful_pods changed_when: false @@ -206,7 +206,7 @@ ansible.builtin.shell: | oc delete namespace {{ gpu_test_namespace }} --ignore-not-found=true delegate_to: localhost - become: no + become: false register: cleanup_result changed_when: "'deleted' in cleanup_result.stdout" @@ -214,7 +214,7 @@ ansible.builtin.shell: | oc get namespace {{ gpu_test_namespace }} --no-headers 2>/dev/null || echo "deleted" delegate_to: localhost - become: no + become: false register: namespace_check until: namespace_check.stdout == "deleted" retries: 30 @@ -224,4 +224,4 @@ - name: Inform about keeping test resources ansible.builtin.debug: msg: "GPU test resources kept in namespace {{ gpu_test_namespace }} for debugging" - when: not (gpu_test_cleanup | bool) \ No newline at end of file + when: not (gpu_test_cleanup | bool) diff --git a/ansible/roles/quick-microshift-boot/tasks/main.yml b/ansible/roles/quick-microshift-boot/tasks/main.yml index 7a51aab296..c5dee77114 100644 --- a/ansible/roles/quick-microshift-boot/tasks/main.yml +++ b/ansible/roles/quick-microshift-boot/tasks/main.yml @@ -1,5 +1,5 @@ --- # quick-microshift-boot tasks - measures warm boot time -- name: measure microshift service boot time - include_tasks: roles/common/tasks/boot.yml +- name: Measure microshift service boot time + ansible.builtin.include_tasks: roles/common/tasks/boot.yml diff --git a/ansible/roles/run-workloads/tasks/kube-burner.yml b/ansible/roles/run-workloads/tasks/kube-burner.yml index a008c276ca..36ab88fddd 100644 --- a/ansible/roles/run-workloads/tasks/kube-burner.yml +++ b/ansible/roles/run-workloads/tasks/kube-burner.yml @@ -1,7 +1,7 @@ --- # kube-burner tasks -- name: "run kube-burner workload {{ kube_burner_workload.name }} with QPS={{ kube_burner_workload.qps }}" +- name: "Run kube-burner workload {{ kube_burner_workload.name ~ ' QPS=' ~ kube_burner_workload.qps }}" ansible.builtin.command: cmd: ./run.sh chdir: "{{ e2e_path }}/workloads/kube-burner" @@ -12,23 +12,25 @@ QPS: "{{ kube_burner_workload.qps }}" WORKLOAD: "{{ kube_burner_workload.name }}" -- name: "log workload execution details" +- name: "Log workload execution details" ansible.builtin.debug: msg: "Completed {{ kube_burner_workload.name }} with QPS={{ kube_burner_workload.qps }}, BURST={{ kube_burner_workload.burst }}" -- ansible.builtin.pause: +- name: Pause before deleting workload namespaces + ansible.builtin.pause: seconds: "{{ pre_delete_pause_duration }}" -- name: cleanup previous workload namespace +- name: Cleanup previous workload namespace kubernetes.core.k8s: api_version: v1 kind: Namespace state: absent - label_selectors: "{{ delete_label_selectors }}" + label_selectors: "{{ delete_label_selectors }}" delete_options: gracePeriodSeconds: "{{ delete_grace_period }}" wait: true wait_timeout: "{{ delete_wait_timeout }}" -- ansible.builtin.pause: +- name: Pause after running workload + ansible.builtin.pause: seconds: "{{ post_run_pause_duration }}" diff --git a/ansible/roles/run-workloads/tasks/main.yml b/ansible/roles/run-workloads/tasks/main.yml index e6a1796d6b..ec8339f7bc 100644 --- a/ansible/roles/run-workloads/tasks/main.yml +++ b/ansible/roles/run-workloads/tasks/main.yml @@ -1,7 +1,7 @@ --- # run-workloads tasks -- name: iterate over user paths and find those containing 'local' && not 'usr' +- name: Iterate over user paths and find those containing 'local' && not 'usr' ansible.builtin.set_fact: local_paths: "{{ local_paths + [item] }}" when: @@ -9,57 +9,58 @@ - "'usr' not in item" with_items: "{{ lookup('env', 'PATH').split(':') | unique }}" -- name: display local paths that match filters +- name: Display local paths that match filters ansible.builtin.debug: msg: "{{ local_paths }}" -- name: set variable local_bin_path +- name: Set variable local_bin_path ansible.builtin.set_fact: local_bin_path: "{{ local_paths[0] }}" -- name: clone e2e-benchmarking repository +- name: Clone e2e-benchmarking repository ansible.builtin.git: repo: "{{ e2e_repo }}" dest: "{{ e2e_path }}" - update: no + update: false -- name: check if we have kube-burner installed +- name: Check if we have kube-burner installed ansible.builtin.command: which kube-burner register: which_kube_burner ignore_errors: true changed_when: false -- block: - - name: download kube-burner tarball - ansible.builtin.get_url: - url: "{{ kube_burner_url }}" - dest: "{{ local_tarball_path }}" - mode: '0755' +- name: Install kube-burner when missing + when: which_kube_burner.rc != 0 + block: + - name: Download kube-burner tarball + ansible.builtin.get_url: + url: "{{ kube_burner_url }}" + dest: "{{ local_tarball_path }}" + mode: "0755" - - name: check if local bin directory exists - ansible.builtin.stat: - path: "{{ local_bin_path }}" - register: local_bin_directory_check + - name: Check if local bin directory exists + ansible.builtin.stat: + path: "{{ local_bin_path }}" + register: local_bin_directory_check - - name: create local bin directory if missing - ansible.builtin.file: - path: "{{ local_bin_path }}" - state: directory - when: not local_bin_directory_check.stat.exists + - name: Create local bin directory if missing + ansible.builtin.file: + path: "{{ local_bin_path }}" + state: directory + when: not local_bin_directory_check.stat.exists - - name: extract kube-burner files - ansible.builtin.unarchive: - src: "{{ local_tarball_path }}" - dest: "{{ local_bin_path }}" + - name: Extract kube-burner files + ansible.builtin.unarchive: + src: "{{ local_tarball_path }}" + dest: "{{ local_bin_path }}" - - name: remove downloaded tarball - ansible.builtin.file: - path: "{{ local_tarball_path }}" - state: absent - when: which_kube_burner.rc != 0 + - name: Remove downloaded tarball + ansible.builtin.file: + path: "{{ local_tarball_path }}" + state: absent -- name: iterate over kube-burner workloads +- name: Iterate over kube-burner workloads vars: kube_burner_workload: "{{ item }}" - include_tasks: kube-burner.yml + ansible.builtin.include_tasks: kube-burner.yml loop: "{{ workloads_to_run }}" diff --git a/ansible/roles/setup-localhost/defaults/main.yml b/ansible/roles/setup-localhost/defaults/main.yml index c95fb5bb76..22a93a79bd 100644 --- a/ansible/roles/setup-localhost/defaults/main.yml +++ b/ansible/roles/setup-localhost/defaults/main.yml @@ -2,8 +2,8 @@ # setup-localhost defaults known_hosts: - - '^localhost' - - '^microshift-' + - "^localhost" + - "^microshift-" local_packages: - rpm: python3-kubernetes pip: kubernetes diff --git a/ansible/roles/setup-localhost/tasks/main.yml b/ansible/roles/setup-localhost/tasks/main.yml index d5b4756059..7cbd1d15e2 100644 --- a/ansible/roles/setup-localhost/tasks/main.yml +++ b/ansible/roles/setup-localhost/tasks/main.yml @@ -2,14 +2,14 @@ # setup-localhost tasks # -- name: cleanup existing known_hosts entries +- name: Cleanup existing known_hosts entries ansible.builtin.lineinfile: path: ~/.ssh/known_hosts state: absent regexp: "{{ item }}" loop: "{{ known_hosts }}" -- name: wait 300 seconds for port 22 to become open and contain "OpenSSH" +- name: Wait 300 seconds for port 22 to become open and contain "OpenSSH" ansible.builtin.wait_for: port: 22 host: "{{ item }}" @@ -17,7 +17,7 @@ with_inventory_hostnames: - all -- name: write the new ssh fingerprint to known hosts +- name: Write the new ssh fingerprint to known hosts ansible.builtin.shell: "ssh-keyscan {{ item }} >> ~/.ssh/known_hosts" with_inventory_hostnames: - all @@ -27,18 +27,18 @@ with_inventory_hostnames: - microshift -- name: check if python packages are installed via pip +- name: Check if python packages are installed via pip ansible.builtin.command: "pip3 show {{ item.pip }}" register: pip_check ignore_errors: true changed_when: false loop: "{{ local_packages }}" -- name: build list of packages not installed via pip +- name: Build list of packages not installed via pip ansible.builtin.set_fact: packages_to_install: "{{ pip_check.results | selectattr('rc', 'ne', 0) | map(attribute='item.rpm') | list }}" -- name: install local ansible prereq packages +- name: Install local ansible prereq packages ansible.builtin.dnf: name: "{{ packages_to_install }}" state: present @@ -46,4 +46,4 @@ when: - packages_to_install | length > 0 - (ansible_facts.distribution == "CentOS") or (ansible_facts.distribution == "RedHat") or (ansible_facts.distribution == "Fedora") - become: yes + become: true diff --git a/ansible/roles/setup-microshift-host/defaults/main.yml b/ansible/roles/setup-microshift-host/defaults/main.yml index a46d7239c8..eb7ac538c6 100644 --- a/ansible/roles/setup-microshift-host/defaults/main.yml +++ b/ansible/roles/setup-microshift-host/defaults/main.yml @@ -25,7 +25,7 @@ install_packages: - python3-firewall - perf - rpm-build - - selinux-policy-devel + - selinux-policy-devel - tar - vnstat diff --git a/ansible/roles/setup-microshift-host/handlers/main.yml b/ansible/roles/setup-microshift-host/handlers/main.yml index 151352b8c7..dbddd526f7 100644 --- a/ansible/roles/setup-microshift-host/handlers/main.yml +++ b/ansible/roles/setup-microshift-host/handlers/main.yml @@ -1,6 +1,5 @@ --- - -- name: reboot machine - reboot: +- name: Reboot machine + listen: reboot machine + ansible.builtin.reboot: reboot_timeout: 600 - diff --git a/ansible/roles/setup-microshift-host/tasks/main.yml b/ansible/roles/setup-microshift-host/tasks/main.yml index 83566f45a9..8f38ad243a 100644 --- a/ansible/roles/setup-microshift-host/tasks/main.yml +++ b/ansible/roles/setup-microshift-host/tasks/main.yml @@ -1,60 +1,60 @@ --- # setup-microshift-host tasks -- name: install firewalld & packages +- name: Install firewalld & packages ansible.builtin.dnf: name: "{{ install_packages }}" state: present update_cache: true -- name: determine system architecture +- name: Determine system architecture ansible.builtin.set_fact: go_arch: amd64 when: ansible_facts['architecture'] == "x86_64" -- name: create target directory for go version +- name: Create target directory for go version ansible.builtin.file: path: "{{ go_install_dir }}" state: directory -- name: download & extract newer version of golang +- name: Download & extract newer version of golang ansible.builtin.unarchive: src: https://go.dev/dl/go{{ go_version }}.linux-{{ go_arch }}.tar.gz dest: "{{ go_install_dir }}" - remote_src: yes + remote_src: true extra_opts: - "--strip-components=1" -- name: create symbolic links +- name: Create symbolic links ansible.builtin.file: src: "{{ go_install_dir }}/bin/{{ item }}" dest: "/usr/local/bin/{{ item }}" state: link with_items: "{{ go_files }}" -- name: unmask firewalld if masked +- name: Unmask firewalld if masked ansible.builtin.systemd: name: firewalld - masked: no + masked: false -- name: start and enable firewalld +- name: Start and enable firewalld ansible.builtin.systemd: name: firewalld state: started - enabled: yes + enabled: true -- name: check if rhel vg exists +- name: Check if rhel vg exists ansible.builtin.command: vgdisplay -s {{ vg_name }} register: rhel_vg_present ignore_errors: true -- name: check if lvm disk exists +- name: Check if lvm disk exists ansible.builtin.stat: path: "{{ lvm_disk }}" register: lvm_disk_stat when: rhel_vg_present.rc != 0 -- name: create a volume group on top of secondary disk for topolvm +- name: Create a volume group on top of secondary disk for topolvm community.general.lvg: vg: "{{ vg_name }}" pvs: "{{ lvm_disk }}" @@ -62,7 +62,7 @@ - rhel_vg_present.rc != 0 - lvm_disk_stat.stat.exists -- name: notify about missing lvm disk +- name: Notify about missing lvm disk ansible.builtin.debug: msg: "LVM disk {{ lvm_disk }} not found, skipping TopoLVM volume group creation" when: @@ -77,25 +77,25 @@ failed_when: false - name: Configure TopoLVM storage - include_tasks: storage.yml + ansible.builtin.include_tasks: storage.yml when: - vg_name != default_vg_name - vg_exists.rc == 0 -- name: pin RHEL version to prevent upgrading beyond supported release +- name: Pin RHEL version to prevent upgrading beyond supported release become: true ansible.builtin.copy: content: "{{ rhel_target_version }}" dest: /etc/dnf/vars/releasever - mode: '0644' + mode: "0644" when: rhel_target_version is defined -- name: upgrade all packages +- name: Upgrade all packages ansible.builtin.dnf: name: "*" state: latest nobest: true notify: reboot machine -- name: flush handlers +- name: Flush handlers ansible.builtin.meta: flush_handlers diff --git a/ansible/roles/setup-microshift-host/tasks/storage.yml b/ansible/roles/setup-microshift-host/tasks/storage.yml index 866cd7ffb4..991d8b8c2a 100644 --- a/ansible/roles/setup-microshift-host/tasks/storage.yml +++ b/ansible/roles/setup-microshift-host/tasks/storage.yml @@ -9,7 +9,7 @@ state: directory owner: root group: root - mode: '0755' + mode: "0755" - name: Deploy lvmd.yaml configuration ansible.builtin.template: @@ -17,7 +17,7 @@ dest: /etc/microshift/lvmd.yaml owner: root group: root - mode: '0644' - backup: yes + mode: "0644" + backup: true vars: - topolvm_vg: "{{ vg_name }}" \ No newline at end of file + topolvm_vg: "{{ vg_name }}" diff --git a/ansible/setup-node.yml b/ansible/setup-node.yml index 216b2cbf38..133ca0da8b 100644 --- a/ansible/setup-node.yml +++ b/ansible/setup-node.yml @@ -8,11 +8,11 @@ - name: Create vm and set up localhost hosts: localhost - become: no + become: false vars: ansible_connection: local vars_files: - - vars/all.yml + - vars/all.yml roles: - role: create-vm when: (create_devenv | bool) @@ -20,7 +20,7 @@ - name: Entitle host and manage repos hosts: microshift - become: yes + become: true vars_files: - vars/all.yml roles: @@ -29,7 +29,7 @@ - name: Install packages, configure services & firewall hosts: microshift - become: yes + become: true vars_files: - vars/all.yml roles: @@ -53,13 +53,13 @@ vars_files: - vars/all.yml tasks: - - name: resolve kubernetes nodename - include_tasks: roles/common/tasks/nodename.yml + - name: Resolve kubernetes nodename + ansible.builtin.include_tasks: roles/common/tasks/nodename.yml - name: Set up logging node hosts: logging vars_files: - - vars/all.yml + - vars/all.yml roles: - role: install-logging when: (prometheus_logging | bool) @@ -89,7 +89,7 @@ - name: Setup NVIDIA GPU support hosts: microshift - become: yes + become: true vars_files: - vars/all.yml roles: @@ -105,7 +105,7 @@ - name: Deploy GPU test workload hosts: microshift - become: yes + become: true vars_files: - vars/all.yml roles: @@ -114,7 +114,7 @@ - name: Run performance workloads hosts: localhost - become: no + become: false vars: ansible_connection: local vars_files: diff --git a/ansible/vars/all.yml b/ansible/vars/all.yml index 8718888165..9d59071ed0 100644 --- a/ansible/vars/all.yml +++ b/ansible/vars/all.yml @@ -1,6 +1,7 @@ +--- # General setup create_devenv: false -prometheus_logging: "{{ prometheus_logging_arg | default('true') }}" +prometheus_logging: "{{ prometheus_logging_arg | default('true') }}" # Results directory for performance metrics output results_base_dir: "{{ playbook_dir }}/results" diff --git a/ansible/vars/microshift_versions.yml b/ansible/vars/microshift_versions.yml index 983f97e943..c250b19ee0 100644 --- a/ansible/vars/microshift_versions.yml +++ b/ansible/vars/microshift_versions.yml @@ -14,7 +14,7 @@ microshift_versions: all_pods: 10 "4.18": expected_pods: 6 - all_pods: 9 + all_pods: 9 "4.19": expected_pods: 6 all_pods: 9