118 lines
3.9 KiB
YAML
118 lines
3.9 KiB
YAML
---
|
|
- name: Bootstrap remote ansible environment
|
|
hosts: all
|
|
tags:
|
|
- always
|
|
vars:
|
|
# Set this fact to allow the bootstrap play to run using the native system python
|
|
# interpreter. A variable defined here is only in scope while this specific play
|
|
# is being run; once this play is done this value is dropped and the default value
|
|
# (which is actually set in the inventory file to the interpreter created by this
|
|
# play) will be used.
|
|
ansible_python_interpreter: /usr/bin/python3
|
|
tasks:
|
|
- name: Determine runtime settings
|
|
set_fact:
|
|
_runtime_clean: "{{ true if (clean | bool) else false }}"
|
|
_runtime_update: "{{ true if (update | bool) else false }}"
|
|
_runtime_update_state: "{{ 'latest' if (update | bool) else 'present' }}"
|
|
|
|
- name: Clean bootstrap virtualenv
|
|
when: _runtime_clean
|
|
become: true
|
|
file:
|
|
path: "{{ omni_ansible_venv }}"
|
|
state: absent
|
|
|
|
- name: Create bootstrap virtualenv directory
|
|
become: true
|
|
file:
|
|
path: "{{ omni_ansible_venv }}"
|
|
state: directory
|
|
owner: "{{ ansible_user }}"
|
|
group: "{{ ansible_user }}"
|
|
mode: 0755
|
|
|
|
- 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
|
|
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') }}"
|
|
mode: 0644
|
|
|
|
- name: Install remote requirements
|
|
pip:
|
|
executable: "{{ omni_ansible_venv }}/bin/pip"
|
|
requirements: "{{ omni_ansible_venv }}/req.txt"
|
|
state: present
|
|
|
|
- name: Install CentOS 8 python bindings
|
|
when: ansible_distribution == "CentOS" and ansible_distribution_major_version == "8"
|
|
become: true
|
|
dnf:
|
|
state: "{{ _runtime_update_state }}"
|
|
name:
|
|
- python3-libselinux
|
|
- python3-policycoreutils
|
|
- python3-firewall
|
|
|
|
- name: Install CentOS 7 python bindings
|
|
when: ansible_distribution == "CentOS" and ansible_distribution_major_version == "7"
|
|
become: true
|
|
yum:
|
|
state: "{{ _runtime_update_state }}"
|
|
name:
|
|
- libselinux-python
|
|
- policycoreutils-python
|
|
- python-firewall
|
|
|
|
- name: Install Fedora python bindings
|
|
when: ansible_distribution == "Fedora"
|
|
become: true
|
|
dnf:
|
|
state: "{{ _runtime_update_state }}"
|
|
name:
|
|
- libselinux-python
|
|
- policycoreutils-python
|
|
- python3-firewall
|
|
|
|
|
|
- name: Check meta environment
|
|
hosts: all
|
|
tags:
|
|
- always
|
|
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"
|