ansible_image_validation/validation-playbooks/per-vm-validation.yaml (128 lines of code) (raw):

### # This Playbook runs validations which are specific to a VM and # doesn't depend on which region the VM is deployed in. ### --- - name: Set image properties set_fact: err_folder: /tmp/err admin_user: "{{ lookup('env', 'ADMIN_USER_NAME') }}" #TODO : commenting for now, as this check if failing for rhel7 # - name: Check if Grubenv file is symlink # shell: | # if [[ -L "/boot/grub2/grubenv" ]]; then # echo "Grubenv file is symlink" >> {{err_folder}}/err_msgs.log # fi # ignore_errors: yes - name: Compare RHEL version with the expected RHEL version in the pipeline lineinfile: path: "{{err_folder}}/err_msgs.log" line: "RHEL version mismatch: Expected RHEL version: {{rhel_version}}, current RHEL version: {{ansible_distribution_version}} " create: yes state: present when: "ansible_distribution_version != rhel_version" - name: Check number of users on the machine shell: getent passwd {1000..60000} | grep -v {{ admin_user }} | wc -l register: users_on_machine ignore_errors: yes - name: Execute command to list packages shell: | package_list=$( rpm -qa --qf ' "%{NAME}": { "version": " %{VERSION}", "release": "%{RELEASE}" \},' ) package_list=${package_list%,} package_json="{ $package_list }" echo $package_json | jq -r . register: package_list_output - name: Set package facts set_fact: ansible_facts: packages: "{{ package_list_output.stdout | from_json }}" - name: Check if cloud-init is installed lineinfile: path: "{{err_folder}}/err_msgs.log" line: "'cloud-init' not found" create: yes state: present when: "'cloud-init' not in ansible_facts.packages" - name: Write to error msg if repolist failed lineinfile: path: "{{err_folder}}/err_msgs.log" line: "Additional users found on the machines" create: yes state: present when: users_on_machine.stdout_lines[0] != '0' - name: check if ADE validation is valid for this vm include_tasks: validation-playbooks/ade_packages_validation.yaml ignore_errors: yes when: ansible_os_family == "RedHat" and (ansible_distribution_major_version == '8' or ansible_distribution_major_version == '7') and (repo_type == 'base' or repo_type =='beta') - name: Check if blacklisted drivers are blacklisted by modprobe service include_tasks: validation-playbooks/blacklisted_drivers_validation.yaml ignore_errors: yes when: ansible_os_family == "RedHat" - name: Check if the initramfs file is present stat: path=/boot/initramfs-{{ ansible_facts.kernel }}.img register: initramfs_present when: isCVM is false - name: "Write to error msg if initramfs files are not present" lineinfile: path: "{{err_folder}}/err_msgs.log" line: "\n boot validation failed since initramfs file is not present." create: yes state: present when: isCVM is false and initramfs_present.stat.exists == false - name: Check for NVME/PCI Drivers in image when: isCVM is false and initramfs_present.stat.exists == true block: - name: Check if the nvme driver is present in all images shell: lsinitrd /boot/initramfs-{{ ansible_facts.kernel }}.img | grep nvme register: check_nvme_allimages - debug: var: check_nvme_allimages - name: "Write to error msg if some drivers are not present" lineinfile: path: "{{err_folder}}/err_msgs.log" line: "\n NVME validation failed since nvme driver is not present. " create: yes state: present when: ("nvme" not in check_nvme_allimages.stdout) - name: Check if the pci driver is present in all images shell: lsinitrd /boot/initramfs-{{ ansible_facts.kernel }}.img | grep pci register: check_pci_allimages - debug: var: check_pci_allimages - name: "Write to error msg if some drivers are not present" lineinfile: path: "{{err_folder}}/err_msgs.log" line: "\n NVME validation failed since pci driver is not present. " create: yes state: present when: ("pci" not in check_pci_allimages.stdout) - name: Check for Rhui client package in the image block: - name: Execute command to list packages shell: | package_list=$( rpm -qa --qf ' "%{NAME}": { "version": " %{VERSION}", "release": "%{RELEASE}" \},' ) package_list=${package_list%,} package_json="{ $package_list }" echo $package_json | jq -r . register: package_list_output - name: Set package facts set_fact: ansible_facts: packages: "{{ package_list_output.stdout | from_json }}" - name: Check for rhui package details set_fact: rhui_package: "{{ ansible_facts.packages | dict2items | selectattr('key', 'match', 'rhui-azure-rhel') }}" - name: Check for rhui package count set_fact: rhui_package_count : "{{ rhui_package | count }}" - name: Check for rhui package details debug: var: "{{ item }}" with_items: - rhui_package - rhui_package_count - name: Log error in case rhui package isn't installed lineinfile: path: "{{err_folder}}/err_msgs.log" line: "Rhui Client package is not installed in the image" create: yes state: present when: rhui_package_count == "0" and offer_type !='byol' - name: Set the variable if rhui client package is found set_fact: is_rhui_package_present : true when: rhui_package_count != "0" - name: Check the repo-validation of RHEL Image according to the offertype and client package present in it. include_tasks: validation-playbooks/repo-validation-check.yaml ignore_errors: yes - name: Check for the Accelerated Networking in Rhel 9 Images. when: isCVM is false and ansible_distribution_major_version == '9' block: - name: Check if the unmanaged devices are present network config of all Rhel 9 Images shell: NetworkManager --print-config register: check_network_config - debug: var: check_network_config - name: "Write to error msg if unmanaged drivers are not present" lineinfile: path: "{{err_folder}}/err_msgs.log" line: "\n Accelerated Networking Validation failed since unmanaged drivers are not present." create: yes state: present when: ("unmanaged-devices=driver:mlx4_core;driver:mlx5_core" not in check_network_config.stdout_lines) - name: Check if the accelerated networking config file is present in all Rhel 9 Images stat: path: /etc/NetworkManager/conf.d/99-azure-unmanaged-devices.conf register: check_99_azure_unmanaged_devices_config_file - debug: var: check_99_azure_unmanaged_devices_config_file - name: "Write to error msg if the file is not present" lineinfile: path: "./err_msgs.log" line: "\n Accelerated Networking Validation failed since unmanaged config file is not present. " when: not check_99_azure_unmanaged_devices_config_file.stat.exists