diff --git a/roles/common/tasks/verify-host.yml b/roles/common/tasks/verify-host.yml new file mode 100644 index 00000000..9d59b7af --- /dev/null +++ b/roles/common/tasks/verify-host.yml @@ -0,0 +1,181 @@ +# Copyright (c) 2026, Itential, Inc +# GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) +--- +# Common host verification tasks +# This task file expects the following variables to be set: +# - component_name: Name of the component being verified (e.g., "Redis", "Platform", "MongoDB") +# - hw_specs_var_name: Name of the hardware specs variable (e.g., "redis_hw_specs", "platform_hw_specs") + +- name: Assert that required platform_release variable is defined + ansible.builtin.assert: + that: platform_release is defined + fail_msg: "platform_release must be defined in the inventory" + +- name: Assert that required env variable is defined + ansible.builtin.assert: + that: env is defined + fail_msg: "platform_release must be defined in the inventory" + +- name: Announce Intention + ansible.builtin.debug: + msg: "Validating {{ env }} host {{ inventory_hostname }} for {{ component_name }} installation..." + +- name: Gather host information + itential.deployer.gather_host_information: + register: host_info + +- name: Extract OS information + ansible.builtin.set_fact: + os: "{{ host_info.os }}" + +# OS and Architecture validation +- name: Check OS compatibility + ansible.builtin.set_fact: + os_valid: >- + {{ + (os.distribution == 'RedHat' and ansible_distribution_major_version in ['8', '9']) or + (os.distribution == 'Rocky' and ansible_distribution_major_version in ['8', '9']) or + (os.distribution == 'OracleLinux' and ansible_distribution_major_version in ['8', '9']) or + (os.distribution == 'Amazon' and ansible_distribution_major_version == '2023') + }} + +- name: Assert that this is a supported OS + ansible.builtin.assert: + that: "{{ os_valid }} == true" + fail_msg: "{{ os.distribution }} {{ os.distribution_version }} is not a supported OS!" + success_msg: "OS validation passed!" + quiet: true + +- name: Check architecture compatibility + ansible.builtin.set_fact: + arch_valid: "{{ os.architecture in ['x86_64', 'aarch64'] }}" + +- name: Assert that this is a supported Architecture + ansible.builtin.assert: + that: "{{ arch_valid }} == true" + fail_msg: "{{ os.architecture }} is not a supported architecture!" + success_msg: "Architecture validation passed!" + quiet: true + +- name: Initialize validation errors list + ansible.builtin.set_fact: + validation_errors: [] + +- name: Get root partition size + ansible.builtin.set_fact: + root_disk_size_gb: "{{ (ansible_mounts | selectattr('mount', 'equalto', '/') | map(attribute='size_total') | first / 1024 / 1024 / 1024) | round(2) }}" + when: ansible_mounts | selectattr('mount', 'equalto', '/') | list | length > 0 + +- name: Validate hardware specs against requirements + ansible.builtin.set_fact: + hardware_validation: + required: + cpu_count: "{{ vars[hw_specs_var_name][env].cpu_count if vars[hw_specs_var_name] != 'none' else 'N/A' }}" + ram_size_gb: "{{ vars[hw_specs_var_name][env].ram_size if vars[hw_specs_var_name] != 'none' else 'N/A' }}" + disk_size_gb: "{{ vars[hw_specs_var_name][env].disk_size if vars[hw_specs_var_name] != 'none' else 'N/A' }}" + actual: + cpu_count: "{{ ansible_processor_vcpus }}" + ram_size_gb: "{{ (ansible_memtotal_mb / 1024) | round(2) }}" + disk_size_gb: "{{ root_disk_size_gb | default('N/A') }}" + validation: + cpu_valid: "{{ (env == 'none') or (ansible_processor_vcpus >= vars[hw_specs_var_name][env].cpu_count) }}" + ram_valid: "{{ (env == 'none') or ((ansible_memtotal_mb / 1024) >= vars[hw_specs_var_name][env].ram_size) }}" + disk_valid: "{{ (env == 'none') or ((root_disk_size_gb | default(0) | float) >= vars[hw_specs_var_name][env].disk_size) }}" + all_valid: "{{ (env == 'none') or ((ansible_processor_vcpus >= vars[hw_specs_var_name][env].cpu_count) and ((ansible_memtotal_mb / 1024) >= vars[hw_specs_var_name][env].ram_size) and ((root_disk_size_gb | default(0) | float) >= vars[hw_specs_var_name][env].disk_size)) }}" + +- name: Validate CPU Count + ansible.builtin.assert: + that: hardware_validation.validation.cpu_valid | bool + fail_msg: "CPU validation failed!" + quiet: true + ignore_errors: true + register: cpu_validation + +- name: Add CPU error to list + ansible.builtin.set_fact: + validation_errors: "{{ validation_errors + ['CPU: ' ~ hardware_validation.required.cpu_count ~ ' required, ' ~ hardware_validation.actual.cpu_count ~ ' found'] }}" + when: cpu_validation is failed + +- name: Validate memory amount + ansible.builtin.assert: + that: hardware_validation.validation.ram_valid | bool + fail_msg: "Memory validation failed!" + quiet: true + ignore_errors: true + register: memory_validation + +- name: Add memory error to list + ansible.builtin.set_fact: + validation_errors: "{{ validation_errors + ['RAM: ' ~ hardware_validation.required.ram_size_gb ~ 'GB required, ' ~ hardware_validation.actual.ram_size_gb ~ 'GB found'] }}" + when: memory_validation is failed + +- name: Validate disk size + ansible.builtin.assert: + that: hardware_validation.validation.disk_valid | bool + fail_msg: "Disk validation failed!" + quiet: true + ignore_errors: true + register: disk_validation + +- name: Add disk error to list + ansible.builtin.set_fact: + validation_errors: "{{ validation_errors + ['Disk: ' ~ hardware_validation.required.disk_size_gb ~ 'GB required, ' ~ hardware_validation.actual.disk_size_gb ~ 'GB found'] }}" + when: disk_validation is failed + +- name: Print host information + ansible.builtin.debug: + msg: "{{ host_info }}" + +# Check for proxy +- name: Check for proxy settings in environment variables + ansible.builtin.shell: set -o pipefail && env | grep -i proxy + register: env_proxy + failed_when: false + changed_when: false + +- name: Check for proxy settings in /etc/environment + ansible.builtin.shell: set -o pipefail && grep -i proxy /etc/environment + register: etc_env_proxy + failed_when: false + changed_when: false + +- name: Check for proxy settings in /etc/profile.d + ansible.builtin.shell: set -o pipefail && grep -ri proxy /etc/profile.d/ + register: profiled_proxy + failed_when: false + changed_when: false + +- name: Display all proxy findings + ansible.builtin.debug: + msg: + - "Environment variables: {{ env_proxy.stdout_lines | default([]) }}" + - "/etc/environment: {{ etc_env_proxy.stdout_lines | default([]) }}" + - "/etc/profile.d: {{ profiled_proxy.stdout_lines | default([]) }}" + +- name: Assert that there are no proxy settings + ansible.builtin.assert: + that: + - env_proxy.stdout_lines | length == 0 + - etc_env_proxy.stdout_lines | length == 0 + - profiled_proxy.stdout_lines | length == 0 + fail_msg: "A Proxy was detected!" + quiet: true + ignore_errors: true + register: proxy_validation + +# Display results +- name: Display failed validation results + ansible.builtin.debug: + msg: "{{ validation_errors }}" + when: cpu_validation is failed or memory_validation is failed or disk_validation is failed + +# Assert that none of the tests failed +- name: Verify that all tests passed + ansible.builtin.assert: + that: + - "cpu_validation is not failed" + - "memory_validation is not failed" + - "disk_validation is not failed" + - "proxy_validation is not failed" + fail_msg: "See above, assertions not passed! ✗" + success_msg: "All assertions passed! ✓" diff --git a/roles/mongodb/tasks/verify-mongodb.yml b/roles/mongodb/tasks/verify-mongodb.yml index 1224a3e0..2c5b1276 100644 --- a/roles/mongodb/tasks/verify-mongodb.yml +++ b/roles/mongodb/tasks/verify-mongodb.yml @@ -2,10 +2,6 @@ # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) --- -- name: Announce Intention - ansible.builtin.debug: - msg: "Validating {{ env }} host {{ inventory_hostname }} for MongoDB installation..." - - name: Load Itential Platform release default variables ansible.builtin.include_vars: file: "{{ item }}" @@ -14,124 +10,12 @@ - "platform-release-{{ platform_release | string | split('.') | first }}.yml" - "platform-release-undefined.yml" -- name: Gather host information - itential.deployer.gather_host_information: - register: host_info - -- name: Extract OS information - ansible.builtin.set_fact: - os: "{{ host_info.os }}" - -# OS and Architecture validation -- name: Check OS compatibility - ansible.builtin.set_fact: - os_valid: >- - {{ - (os.distribution == 'RedHat' and ansible_distribution_major_version in ['8', '9']) or - (os.distribution == 'Rocky' and ansible_distribution_major_version in ['8', '9']) or - (os.distribution == 'OracleLinux' and ansible_distribution_major_version in ['8', '9']) or - (os.distribution == 'Amazon' and ansible_distribution_major_version == '2023') - }} - -- name: Assert that this is a supported OS - ansible.builtin.assert: - that: "{{ os_valid }} == true" - fail_msg: "{{ os.distribution }} {{ os.distribution_version }} is not a supported OS!" - success_msg: "OS validation passed!" - quiet: true - -- name: Check architecture compatibility - ansible.builtin.set_fact: - arch_valid: "{{ os.architecture in ['x86_64', 'aarch64'] }}" - -- name: Assert that this is a supported Architecture - ansible.builtin.assert: - that: "{{ arch_valid }} == true" - fail_msg: "{{ os.architecture }} is not a supported architecture!" - success_msg: "Architecture validation passed!" - quiet: true - -- name: Initialize validation errors list - ansible.builtin.set_fact: - validation_errors: [] - -- name: Get root partition size - ansible.builtin.set_fact: - root_disk_size_gb: "{{ (ansible_mounts | selectattr('mount', 'equalto', '/') | map(attribute='size_total') | first / 1024 / 1024 / 1024) | round(2) }}" - when: ansible_mounts | selectattr('mount', 'equalto', '/') | list | length > 0 - -- name: Validate hardware specs against requirements - ansible.builtin.set_fact: - hardware_validation: - required: - cpu_count: "{{ mongodb_hw_specs[env].cpu_count if mongodb_hw_specs != 'none' else 'N/A' }}" - ram_size_gb: "{{ mongodb_hw_specs[env].ram_size if mongodb_hw_specs != 'none' else 'N/A' }}" - disk_size_gb: "{{ mongodb_hw_specs[env].disk_size if mongodb_hw_specs != 'none' else 'N/A' }}" - actual: - cpu_count: "{{ ansible_processor_vcpus }}" - ram_size_gb: "{{ (ansible_memtotal_mb / 1024) | round(2) }}" - disk_size_gb: "{{ root_disk_size_gb | default('N/A') }}" - validation: - cpu_valid: "{{ (env == 'none') or (ansible_processor_vcpus >= mongodb_hw_specs[env].cpu_count) }}" - ram_valid: "{{ (env == 'none') or ((ansible_memtotal_mb / 1024) >= mongodb_hw_specs[env].ram_size) }}" - disk_valid: "{{ (env == 'none') or ((root_disk_size_gb | default(0) | float) >= mongodb_hw_specs[env].disk_size) }}" - all_valid: "{{ (env == 'none') or ((ansible_processor_vcpus >= mongodb_hw_specs[env].cpu_count) and ((ansible_memtotal_mb / 1024) >= mongodb_hw_specs[env].ram_size) and ((root_disk_size_gb | default(0) | float) >= mongodb_hw_specs[env].disk_size)) }}" - -- name: Validate CPU Count - ansible.builtin.assert: - that: hardware_validation.validation.cpu_valid | bool - fail_msg: "CPU validation failed!" - quiet: true - ignore_errors: true - register: cpu_validation - -- name: Add CPU error to list - ansible.builtin.set_fact: - validation_errors: "{{ validation_errors + ['CPU: ' ~ hardware_validation.required.cpu_count ~ ' required, ' ~ hardware_validation.actual.cpu_count ~ ' found'] }}" - when: cpu_validation is failed - -- name: Validate memory amount - ansible.builtin.assert: - that: hardware_validation.validation.ram_valid | bool - fail_msg: "Memory validation failed!" - quiet: true - ignore_errors: true - register: memory_validation - -- name: Add memory error to list - ansible.builtin.set_fact: - validation_errors: "{{ validation_errors + ['RAM: ' ~ hardware_validation.required.ram_size_gb ~ 'GB required, ' ~ hardware_validation.actual.ram_size_gb ~ 'GB found'] }}" - when: memory_validation is failed - -- name: Validate disk size - ansible.builtin.assert: - that: hardware_validation.validation.disk_valid | bool - fail_msg: "Disk validation failed!" - quiet: true - ignore_errors: true - register: disk_validation - -- name: Add disk error to list - ansible.builtin.set_fact: - validation_errors: "{{ validation_errors + ['Disk: ' ~ hardware_validation.required.disk_size_gb ~ 'GB required, ' ~ hardware_validation.actual.disk_size_gb ~ 'GB found'] }}" - when: disk_validation is failed - -- name: Print host information - ansible.builtin.debug: - msg: "{{ host_info }}" - -# Display results -- name: Display failed validation results - ansible.builtin.debug: - msg: "{{ validation_errors }}" - when: cpu_validation is failed or memory_validation is failed or disk_validation is failed +- name: Verify MongoDB host requirements + ansible.builtin.include_role: + name: common + tasks_from: verify-host + vars: + component_name: "MongoDB" + hw_specs_var_name: "mongodb_hw_specs" -# Assert that none of the tests failed -- name: Verify that all tests passed - ansible.builtin.assert: - that: - - "cpu_validation is not failed" - - "memory_validation is not failed" - - "disk_validation is no failed" - fail_msg: "See above, assertions not passed! ✗" - success_msg: "All assertions passed! ✓" +# mongodb specific verification tasks go here... diff --git a/roles/platform/tasks/verify-platform.yml b/roles/platform/tasks/verify-platform.yml index 5398855d..f9cc35bd 100644 --- a/roles/platform/tasks/verify-platform.yml +++ b/roles/platform/tasks/verify-platform.yml @@ -2,10 +2,6 @@ # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) --- -- name: Announce Intention - ansible.builtin.debug: - msg: "Validating {{ env }} host {{ inventory_hostname }} for Platform installation..." - - name: Load Itential Platform release default variables ansible.builtin.include_vars: file: "{{ item }}" @@ -14,124 +10,12 @@ - "platform-release-{{ platform_release | string | split('.') | first }}.yml" - "platform-release-undefined.yml" -- name: Gather host information - itential.deployer.gather_host_information: - register: host_info - -- name: Extract OS information - ansible.builtin.set_fact: - os: "{{ host_info.os }}" - -# OS and Architecture validation -- name: Check OS compatibility - ansible.builtin.set_fact: - os_valid: >- - {{ - (os.distribution == 'RedHat' and ansible_distribution_major_version in ['8', '9']) or - (os.distribution == 'Rocky' and ansible_distribution_major_version in ['8', '9']) or - (os.distribution == 'OracleLinux' and ansible_distribution_major_version in ['8', '9']) or - (os.distribution == 'Amazon' and ansible_distribution_major_version == '2023') - }} - -- name: Assert that this is a supported OS - ansible.builtin.assert: - that: "{{ os_valid }} == true" - fail_msg: "{{ os.distribution }} {{ os.distribution_version }} is not a supported OS!" - success_msg: "OS validation passed!" - quiet: true - -- name: Check architecture compatibility - ansible.builtin.set_fact: - arch_valid: "{{ os.architecture in ['x86_64', 'aarch64'] }}" - -- name: Assert that this is a supported Architecture - ansible.builtin.assert: - that: "{{ arch_valid }} == true" - fail_msg: "{{ os.architecture }} is not a supported architecture!" - success_msg: "Architecture validation passed!" - quiet: true - -- name: Initialize validation errors list - ansible.builtin.set_fact: - validation_errors: [] - -- name: Get root partition size - ansible.builtin.set_fact: - root_disk_size_gb: "{{ (ansible_mounts | selectattr('mount', 'equalto', '/') | map(attribute='size_total') | first / 1024 / 1024 / 1024) | round(2) }}" - when: ansible_mounts | selectattr('mount', 'equalto', '/') | list | length > 0 - -- name: Validate hardware specs against requirements - ansible.builtin.set_fact: - hardware_validation: - required: - cpu_count: "{{ platform_hw_specs[env].cpu_count if platform_hw_specs != 'none' else 'N/A' }}" - ram_size_gb: "{{ platform_hw_specs[env].ram_size if platform_hw_specs != 'none' else 'N/A' }}" - disk_size_gb: "{{ platform_hw_specs[env].disk_size if platform_hw_specs != 'none' else 'N/A' }}" - actual: - cpu_count: "{{ ansible_processor_vcpus }}" - ram_size_gb: "{{ (ansible_memtotal_mb / 1024) | round(2) }}" - disk_size_gb: "{{ root_disk_size_gb | default('N/A') }}" - validation: - cpu_valid: "{{ (env == 'none') or (ansible_processor_vcpus >= platform_hw_specs[env].cpu_count) }}" - ram_valid: "{{ (env == 'none') or ((ansible_memtotal_mb / 1024) >= platform_hw_specs[env].ram_size) }}" - disk_valid: "{{ (env == 'none') or ((root_disk_size_gb | default(0) | float) >= platform_hw_specs[env].disk_size) }}" - all_valid: "{{ (env == 'none') or ((ansible_processor_vcpus >= platform_hw_specs[env].cpu_count) and ((ansible_memtotal_mb / 1024) >= platform_hw_specs[env].ram_size) and ((root_disk_size_gb | default(0) | float) >= platform_hw_specs[env].disk_size)) }}" - -- name: Validate CPU Count - ansible.builtin.assert: - that: hardware_validation.validation.cpu_valid | bool - fail_msg: "CPU validation failed!" - quiet: true - ignore_errors: true - register: cpu_validation - -- name: Add CPU error to list - ansible.builtin.set_fact: - validation_errors: "{{ validation_errors + ['CPU: ' ~ hardware_validation.required.cpu_count ~ ' required, ' ~ hardware_validation.actual.cpu_count ~ ' found'] }}" - when: cpu_validation is failed - -- name: Validate memory amount - ansible.builtin.assert: - that: hardware_validation.validation.ram_valid | bool - fail_msg: "Memory validation failed!" - quiet: true - ignore_errors: true - register: memory_validation - -- name: Add memory error to list - ansible.builtin.set_fact: - validation_errors: "{{ validation_errors + ['RAM: ' ~ hardware_validation.required.ram_size_gb ~ 'GB required, ' ~ hardware_validation.actual.ram_size_gb ~ 'GB found'] }}" - when: memory_validation is failed - -- name: Validate disk size - ansible.builtin.assert: - that: hardware_validation.validation.disk_valid | bool - fail_msg: "Disk validation failed!" - quiet: true - ignore_errors: true - register: disk_validation - -- name: Add disk error to list - ansible.builtin.set_fact: - validation_errors: "{{ validation_errors + ['Disk: ' ~ hardware_validation.required.disk_size_gb ~ 'GB required, ' ~ hardware_validation.actual.disk_size_gb ~ 'GB found'] }}" - when: disk_validation is failed - -- name: Print host information - ansible.builtin.debug: - msg: "{{ host_info }}" - -# Display results -- name: Display failed validation results - ansible.builtin.debug: - msg: "{{ validation_errors }}" - when: cpu_validation is failed or memory_validation is failed or disk_validation is failed +- name: Verify Platform host requirements + ansible.builtin.include_role: + name: common + tasks_from: verify-host + vars: + component_name: "Platform" + hw_specs_var_name: "platform_hw_specs" -# Assert that none of the tests failed -- name: Verify that all tests passed - ansible.builtin.assert: - that: - - "cpu_validation is not failed" - - "memory_validation is not failed" - - "disk_validation is no failed" - fail_msg: "See above, assertions not passed! ✗" - success_msg: "All assertions passed! ✓" + # platform specific verification tasks go here... diff --git a/roles/redis/tasks/verify-redis.yml b/roles/redis/tasks/verify-redis.yml index 97ec36fb..19cbebdf 100644 --- a/roles/redis/tasks/verify-redis.yml +++ b/roles/redis/tasks/verify-redis.yml @@ -2,10 +2,6 @@ # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) --- -- name: Announce Intention - ansible.builtin.debug: - msg: "Validating {{ env }} host {{ inventory_hostname }} for Redis installation..." - - name: Load Itential Platform release default variables ansible.builtin.include_vars: file: "{{ item }}" @@ -14,124 +10,12 @@ - "platform-release-{{ platform_release | string | split('.') | first }}.yml" - "platform-release-undefined.yml" -- name: Gather host information - itential.deployer.gather_host_information: - register: host_info - -- name: Extract OS information - ansible.builtin.set_fact: - os: "{{ host_info.os }}" - -# OS and Architecture validation -- name: Check OS compatibility - ansible.builtin.set_fact: - os_valid: >- - {{ - (os.distribution == 'RedHat' and ansible_distribution_major_version in ['8', '9']) or - (os.distribution == 'Rocky' and ansible_distribution_major_version in ['8', '9']) or - (os.distribution == 'OracleLinux' and ansible_distribution_major_version in ['8', '9']) or - (os.distribution == 'Amazon' and ansible_distribution_major_version == '2023') - }} - -- name: Assert that this is a supported OS - ansible.builtin.assert: - that: "{{ os_valid }} == true" - fail_msg: "{{ os.distribution }} {{ os.distribution_version }} is not a supported OS!" - success_msg: "OS validation passed!" - quiet: true - -- name: Check architecture compatibility - ansible.builtin.set_fact: - arch_valid: "{{ os.architecture in ['x86_64', 'aarch64'] }}" - -- name: Assert that this is a supported Architecture - ansible.builtin.assert: - that: "{{ arch_valid }} == true" - fail_msg: "{{ os.architecture }} is not a supported architecture!" - success_msg: "Architecture validation passed!" - quiet: true - -- name: Initialize validation errors list - ansible.builtin.set_fact: - validation_errors: [] - -- name: Get root partition size - ansible.builtin.set_fact: - root_disk_size_gb: "{{ (ansible_mounts | selectattr('mount', 'equalto', '/') | map(attribute='size_total') | first / 1024 / 1024 / 1024) | round(2) }}" - when: ansible_mounts | selectattr('mount', 'equalto', '/') | list | length > 0 - -- name: Validate hardware specs against requirements - ansible.builtin.set_fact: - hardware_validation: - required: - cpu_count: "{{ redis_hw_specs[env].cpu_count if redis_hw_specs != 'none' else 'N/A' }}" - ram_size_gb: "{{ redis_hw_specs[env].ram_size if redis_hw_specs != 'none' else 'N/A' }}" - disk_size_gb: "{{ redis_hw_specs[env].disk_size if redis_hw_specs != 'none' else 'N/A' }}" - actual: - cpu_count: "{{ ansible_processor_vcpus }}" - ram_size_gb: "{{ (ansible_memtotal_mb / 1024) | round(2) }}" - disk_size_gb: "{{ root_disk_size_gb | default('N/A') }}" - validation: - cpu_valid: "{{ (env == 'none') or (ansible_processor_vcpus >= redis_hw_specs[env].cpu_count) }}" - ram_valid: "{{ (env == 'none') or ((ansible_memtotal_mb / 1024) >= redis_hw_specs[env].ram_size) }}" - disk_valid: "{{ (env == 'none') or ((root_disk_size_gb | default(0) | float) >= redis_hw_specs[env].disk_size) }}" - all_valid: "{{ (env == 'none') or ((ansible_processor_vcpus >= redis_hw_specs[env].cpu_count) and ((ansible_memtotal_mb / 1024) >= redis_hw_specs[env].ram_size) and ((root_disk_size_gb | default(0) | float) >= redis_hw_specs[env].disk_size)) }}" - -- name: Validate CPU Count - ansible.builtin.assert: - that: hardware_validation.validation.cpu_valid | bool - fail_msg: "CPU validation failed!" - quiet: true - ignore_errors: true - register: cpu_validation - -- name: Add CPU error to list - ansible.builtin.set_fact: - validation_errors: "{{ validation_errors + ['CPU: ' ~ hardware_validation.required.cpu_count ~ ' required, ' ~ hardware_validation.actual.cpu_count ~ ' found'] }}" - when: cpu_validation is failed - -- name: Validate memory amount - ansible.builtin.assert: - that: hardware_validation.validation.ram_valid | bool - fail_msg: "Memory validation failed!" - quiet: true - ignore_errors: true - register: memory_validation - -- name: Add memory error to list - ansible.builtin.set_fact: - validation_errors: "{{ validation_errors + ['RAM: ' ~ hardware_validation.required.ram_size_gb ~ 'GB required, ' ~ hardware_validation.actual.ram_size_gb ~ 'GB found'] }}" - when: memory_validation is failed - -- name: Validate disk size - ansible.builtin.assert: - that: hardware_validation.validation.disk_valid | bool - fail_msg: "Disk validation failed!" - quiet: true - ignore_errors: true - register: disk_validation - -- name: Add disk error to list - ansible.builtin.set_fact: - validation_errors: "{{ validation_errors + ['Disk: ' ~ hardware_validation.required.disk_size_gb ~ 'GB required, ' ~ hardware_validation.actual.disk_size_gb ~ 'GB found'] }}" - when: disk_validation is failed - -- name: Print host information - ansible.builtin.debug: - msg: "{{ host_info }}" - -# Display results -- name: Display failed validation results - ansible.builtin.debug: - msg: "{{ validation_errors }}" - when: cpu_validation is failed or memory_validation is failed or disk_validation is failed +- name: Verify Redis host requirements + ansible.builtin.include_role: + name: common + tasks_from: verify-host + vars: + component_name: "Redis" + hw_specs_var_name: "redis_hw_specs" -# Assert that none of the tests failed -- name: Verify that all tests passed - ansible.builtin.assert: - that: - - "cpu_validation is not failed" - - "memory_validation is not failed" - - "disk_validation is not failed" - fail_msg: "See above, assertions not passed! ✗" - success_msg: "All assertions passed! ✓" +# redis specific verification tasks go here... diff --git a/roles/redis/tasks/verify-sentinel.yml b/roles/redis/tasks/verify-sentinel.yml index 41ef7d95..99cd8b73 100644 --- a/roles/redis/tasks/verify-sentinel.yml +++ b/roles/redis/tasks/verify-sentinel.yml @@ -2,10 +2,6 @@ # GNU General Public License v3.0+ (see LICENSE or https://www.gnu.org/licenses/gpl-3.0.txt) --- -- name: Announce Intention - ansible.builtin.debug: - msg: "Validating {{ env }} host {{ inventory_hostname }} for Redis Sentinel installation..." - - name: Load Itential Platform release default variables ansible.builtin.include_vars: file: "{{ item }}" @@ -14,124 +10,12 @@ - "platform-release-{{ platform_release | string | split('.') | first }}.yml" - "platform-release-undefined.yml" -- name: Gather host information - itential.deployer.gather_host_information: - register: host_info - -- name: Extract OS information - ansible.builtin.set_fact: - os: "{{ host_info.os }}" - -# OS and Architecture validation -- name: Check OS compatibility - ansible.builtin.set_fact: - os_valid: >- - {{ - (os.distribution == 'RedHat' and ansible_distribution_major_version in ['8', '9']) or - (os.distribution == 'Rocky' and ansible_distribution_major_version in ['8', '9']) or - (os.distribution == 'OracleLinux' and ansible_distribution_major_version in ['8', '9']) or - (os.distribution == 'Amazon' and ansible_distribution_major_version == '2023') - }} - -- name: Assert that this is a supported OS - ansible.builtin.assert: - that: "{{ os_valid }} == true" - fail_msg: "{{ os.distribution }} {{ os.distribution_version }} is not a supported OS!" - success_msg: "OS validation passed!" - quiet: true - -- name: Check architecture compatibility - ansible.builtin.set_fact: - arch_valid: "{{ os.architecture in ['x86_64', 'aarch64'] }}" - -- name: Assert that this is a supported Architecture - ansible.builtin.assert: - that: "{{ arch_valid }} == true" - fail_msg: "{{ os.architecture }} is not a supported architecture!" - success_msg: "Architecture validation passed!" - quiet: true - -- name: Initialize validation errors list - ansible.builtin.set_fact: - validation_errors: [] - -- name: Get root partition size - ansible.builtin.set_fact: - root_disk_size_gb: "{{ (ansible_mounts | selectattr('mount', 'equalto', '/') | map(attribute='size_total') | first / 1024 / 1024 / 1024) | round(2) }}" - when: ansible_mounts | selectattr('mount', 'equalto', '/') | list | length > 0 - -- name: Validate hardware specs against requirements - ansible.builtin.set_fact: - hardware_validation: - required: - cpu_count: "{{ redis_hw_specs[env].cpu_count if redis_hw_specs != 'none' else 'N/A' }}" - ram_size_gb: "{{ redis_hw_specs[env].ram_size if redis_hw_specs != 'none' else 'N/A' }}" - disk_size_gb: "{{ redis_hw_specs[env].disk_size if redis_hw_specs != 'none' else 'N/A' }}" - actual: - cpu_count: "{{ ansible_processor_vcpus }}" - ram_size_gb: "{{ (ansible_memtotal_mb / 1024) | round(2) }}" - disk_size_gb: "{{ root_disk_size_gb | default('N/A') }}" - validation: - cpu_valid: "{{ (env == 'none') or (ansible_processor_vcpus >= redis_hw_specs[env].cpu_count) }}" - ram_valid: "{{ (env == 'none') or ((ansible_memtotal_mb / 1024) >= redis_hw_specs[env].ram_size) }}" - disk_valid: "{{ (env == 'none') or ((root_disk_size_gb | default(0) | float) >= redis_hw_specs[env].disk_size) }}" - all_valid: "{{ (env == 'none') or ((ansible_processor_vcpus >= redis_hw_specs[env].cpu_count) and ((ansible_memtotal_mb / 1024) >= redis_hw_specs[env].ram_size) and ((root_disk_size_gb | default(0) | float) >= redis_hw_specs[env].disk_size)) }}" - -- name: Validate CPU Count - ansible.builtin.assert: - that: hardware_validation.validation.cpu_valid | bool - fail_msg: "CPU validation failed!" - quiet: true - ignore_errors: true - register: cpu_validation - -- name: Add CPU error to list - ansible.builtin.set_fact: - validation_errors: "{{ validation_errors + ['CPU: ' ~ hardware_validation.required.cpu_count ~ ' required, ' ~ hardware_validation.actual.cpu_count ~ ' found'] }}" - when: cpu_validation is failed - -- name: Validate memory amount - ansible.builtin.assert: - that: hardware_validation.validation.ram_valid | bool - fail_msg: "Memory validation failed!" - quiet: true - ignore_errors: true - register: memory_validation - -- name: Add memory error to list - ansible.builtin.set_fact: - validation_errors: "{{ validation_errors + ['RAM: ' ~ hardware_validation.required.ram_size_gb ~ 'GB required, ' ~ hardware_validation.actual.ram_size_gb ~ 'GB found'] }}" - when: memory_validation is failed - -- name: Validate disk size - ansible.builtin.assert: - that: hardware_validation.validation.disk_valid | bool - fail_msg: "Disk validation failed!" - quiet: true - ignore_errors: true - register: disk_validation - -- name: Add disk error to list - ansible.builtin.set_fact: - validation_errors: "{{ validation_errors + ['Disk: ' ~ hardware_validation.required.disk_size_gb ~ 'GB required, ' ~ hardware_validation.actual.disk_size_gb ~ 'GB found'] }}" - when: disk_validation is failed - -- name: Print host information - ansible.builtin.debug: - msg: "{{ host_info }}" - -# Display results -- name: Display failed validation results - ansible.builtin.debug: - msg: "{{ validation_errors }}" - when: cpu_validation is failed or memory_validation is failed or disk_validation is failed +- name: Verify Redis Sentinel host requirements + ansible.builtin.include_role: + name: common + tasks_from: verify-host + vars: + component_name: "Redis Sentinel" + hw_specs_var_name: "redis_hw_specs" -# Assert that none of the tests failed -- name: Verify that all tests passed - ansible.builtin.assert: - that: - - "cpu_validation is not failed" - - "memory_validation is not failed" - - "disk_validation is not failed" - fail_msg: "See above, assertions not passed! ✗" - success_msg: "All assertions passed! ✓" +# redis sentinel specific verification tasks go here...