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