--- - name: "STRESS-SETUP: Install Python Dependencies" hosts: all gather_facts: yes vars_files: - "group_vars/all/vault.yml" pre_tasks: - name: Set inventory_env fact ansible.builtin.set_fact: inventory_env: "{{ inventory_file | basename | splitext | first | replace('inventory.', '') }}" - name: Load environment-specific variables ansible.builtin.include_vars: "{{ item }}" with_fileglob: - "group_vars/all/generated_vars{{ '.' + inventory_env if inventory_env else '' }}.yml" - name: Ensure python3-pip is installed block: - name: Install prerequisites for managing repositories ansible.builtin.apt: name: software-properties-common state: present update_cache: yes - name: Ensure universe repository is enabled ansible.builtin.apt_repository: repo: "deb http://archive.ubuntu.com/ubuntu {{ ansible_lsb.codename }} universe" state: present update_cache: yes - name: Install python3-pip ansible.builtin.apt: name: python3-pip state: present become: yes tasks: - name: Define base directory for node ansible.builtin.set_fact: base_dir: "{{ airflow_master_dir if inventory_hostname in groups['master'] else airflow_worker_dir }}" - name: Attempt to install required Python packages from requirements.txt ansible.builtin.pip: requirements: "{{ base_dir }}/ytops_client/requirements.txt" extra_args: "--ignore-installed" become: yes register: pip_reqs_result failed_when: false - name: Retry installing requirements with break-system-packages ansible.builtin.pip: requirements: "{{ base_dir }}/ytops_client/requirements.txt" extra_args: "--ignore-installed" become: yes environment: PIP_BREAK_SYSTEM_PACKAGES: "1" register: pip_reqs_result_retry when: pip_reqs_result.failed and 'externally-managed-environment' in pip_reqs_result.msg - name: Fail if requirements installation did not succeed ansible.builtin.fail: msg: "Failed to install requirements after retry. Last error: {{ pip_reqs_result_retry.msg | default(pip_reqs_result.msg) }}" when: > pip_reqs_result.failed and (pip_reqs_result_retry is not defined or pip_reqs_result_retry.failed) - name: Attempt to explicitly install the thrift package ansible.builtin.pip: name: thrift extra_args: "--ignore-installed" become: yes register: pip_thrift_result failed_when: false - name: Retry installing thrift with break-system-packages ansible.builtin.pip: name: thrift extra_args: "--ignore-installed" become: yes environment: PIP_BREAK_SYSTEM_PACKAGES: "1" register: pip_thrift_result_retry when: pip_thrift_result.failed and 'externally-managed-environment' in pip_thrift_result.msg - name: Fail if thrift installation did not succeed ansible.builtin.fail: msg: "Failed to install thrift after retry. Last error: {{ pip_thrift_result_retry.msg | default(pip_thrift_result.msg) }}" when: > pip_thrift_result.failed and (pip_thrift_result_retry is not defined or pip_thrift_result_retry.failed)