--- - name: Bootstrap remote ansible environment hosts: all gather_facts: false become: true tags: - always - meta vars: ansible_python_interpreter: /usr/bin/python3 tasks: - name: Clean bootstrap virtualenv when: omni_force_reinstall is defined file: path: "{{ omni_ansible_venv }}" state: absent - name: Create bootstrap virtualenv command: cmd: "{{ ansible_python_interpreter }} -m venv {{ omni_ansible_venv }} --system-site-packages" creates: "{{ omni_ansible_venv }}/bin/python" - name: Generate remote requirements file locally become: false delegate_to: 127.0.0.1 command: cmd: poetry export --format requirements.txt changed_when: false register: _poetry_requirements - name: Copy remote requirements file blockinfile: path: "{{ omni_ansible_venv }}/req.txt" create: true block: "{{ _poetry_requirements.stdout_lines | join('\n') }}" - name: Install remote requirements pip: executable: "{{ omni_ansible_venv }}/bin/pip" requirements: "{{ omni_ansible_venv }}/req.txt" state: present - name: Assign ownership of the virtualenv to ansible file: path: "{{ omni_ansible_venv }}" state: directory owner: ansible group: ansible recurse: true follow: false - name: Check meta environment hosts: all tags: - always - meta tasks: - name: Check required operating system when: omni_os is defined assert: that: - omni_os.name == ansible_distribution | lower - omni_os.version_major == ansible_distribution_major_version fail_msg: "Remote is running OS '{{ ansible_distribution }} {{ ansible_distribution_major_version }}', expected '{{ omni_os.name }} {{ omni_os.version_major }}'" success_msg: "Remote is running expected OS '{{ ansible_distribution }} {{ ansible_distribution_major_version }}'" - name: Check required interpreter settings assert: that: - ansible_python_interpreter.startswith(omni_ansible_venv) is true fail_msg: "Interpreter '{{ ansible_python_interpreter }}' is not in the expected venv '{{ omni_ansible_venv }}'" success_msg: "Interpreter '{{ ansible_python_interpreter }}' is in the expected venv"