diff options
| -rw-r--r-- | group_vars/all.yml | bin | 388 -> 443 bytes | |||
| -rw-r--r-- | group_vars/all.yml.example | 5 | ||||
| -rw-r--r-- | molecule/default/converge.yml | 10 | ||||
| -rw-r--r-- | roles/python/defaults/main.yml | 3 | ||||
| -rw-r--r-- | roles/python/meta/argument_specs.yml | 13 | ||||
| -rw-r--r-- | roles/python/meta/main.yml | 19 | ||||
| -rw-r--r-- | roles/python/tasks/main.yml | 49 | ||||
| -rw-r--r-- | site.yml | 1 |
8 files changed, 97 insertions, 3 deletions
diff --git a/group_vars/all.yml b/group_vars/all.yml Binary files differindex 37ec51d3..88aec57b 100644 --- a/group_vars/all.yml +++ b/group_vars/all.yml diff --git a/group_vars/all.yml.example b/group_vars/all.yml.example index 504c9ba3..f7802c0d 100644 --- a/group_vars/all.yml.example +++ b/group_vars/all.yml.example @@ -28,3 +28,8 @@ password_policy_minclass: 4 password_policy_maxrepeat: 3 password_policy_maxclassrepeat: 0 password_policy_gecoscheck: 0 + +python_global_version: "system" +python_versions: + - "3.11" + - "3.13" diff --git a/molecule/default/converge.yml b/molecule/default/converge.yml index 2bc1759b..b83ecfe6 100644 --- a/molecule/default/converge.yml +++ b/molecule/default/converge.yml @@ -12,6 +12,12 @@ locales: - "en_US.UTF-8 UTF-8" timezone: "GMT" + python_global_version: "3.13" + python_versions: + - "3.13" + - "3.12" + pihole_interface: "eth0" + pihole_domain: "pi.hole" roles: - role: network - role: user @@ -20,10 +26,8 @@ - role: locales - role: timezone - role: homebrew + - role: python - role: pihole - vars: - pihole_interface: "eth0" - pihole_domain: "pi.hole" when: - lookup('ansible.builtin.env', 'MOLECULE_DISTRO') == 'ubuntu' or lookup('ansible.builtin.env', 'MOLECULE_DISTRO') == 'raspberrypi' diff --git a/roles/python/defaults/main.yml b/roles/python/defaults/main.yml new file mode 100644 index 00000000..b9639318 --- /dev/null +++ b/roles/python/defaults/main.yml @@ -0,0 +1,3 @@ +--- +python_global_version: "system" +python_versions: [] diff --git a/roles/python/meta/argument_specs.yml b/roles/python/meta/argument_specs.yml new file mode 100644 index 00000000..ef13b7c8 --- /dev/null +++ b/roles/python/meta/argument_specs.yml @@ -0,0 +1,13 @@ +--- +argument_specs: + main: + options: + python_global_version: + type: "str" + description: "The pyenv python global version to use, default: system" + default: "system" + python_versions: + type: "list" + description: "The python versions to install" + elements: "str" + default: [] diff --git a/roles/python/meta/main.yml b/roles/python/meta/main.yml new file mode 100644 index 00000000..bf7913e2 --- /dev/null +++ b/roles/python/meta/main.yml @@ -0,0 +1,19 @@ +--- +dependencies: + - role: "homebrew" +galaxy_info: + author: "a14m" + description: "Install pyenv, pipx and python (versions) on Linux distributions" + company: "kartoffeln.work GmbH." + license: "MIT" + min_ansible_version: "2.18" + platforms: + - name: "ArchLinux" + versions: + - "all" + - name: "Ubuntu" + versions: + - "noble" + - name: "Debian" + versions: + - "bookworm" diff --git a/roles/python/tasks/main.yml b/roles/python/tasks/main.yml new file mode 100644 index 00000000..ea78bed0 --- /dev/null +++ b/roles/python/tasks/main.yml @@ -0,0 +1,49 @@ +--- +- name: "Install pyenv and pipx" + community.general.homebrew: + name: + - "pyenv" + - "pipx" + state: "present" + +- name: "Add pyenv to shell profile" + ansible.builtin.blockinfile: + path: "{{ ansible_env.HOME }}/.bashrc" + state: "present" + prepend_newline: true + append_newline: true + marker: "# ==== {mark} ANSIBLE PYENV CONFIG" + block: | + if command -v pyenv 1>/dev/null 2>&1; then + export PYENV_ROOT="$HOME/.pyenv" + export PATH="$PYENV_ROOT/bin:$PATH" + eval "$(pyenv init - bash)" + fi + +- name: "Add pipx to shell profile" + ansible.builtin.blockinfile: + path: "{{ ansible_env.HOME }}/.bashrc" + state: "present" + prepend_newline: true + append_newline: true + marker: "# ==== {mark} ANSIBLE PIPX CONFIG" + block: | + if command -v pipx 1>/dev/null 2>&1; then + export PATH="$PATH:$HOME/.local/bin" + fi + +- name: "Install python versions" + ansible.builtin.command: + cmd: "pyenv install {{ item }}" + args: + creates: "{{ ansible_env.HOME }}/.pyenv/versions/{{ item }}*/bin/python" + environment: + PATH: "/home/linuxbrew/.linuxbrew/bin:{{ ansible_env.PATH }}" + with_items: "{{ python_versions | default([]) }}" + +- name: "Set global python version" + ansible.builtin.command: + cmd: "pyenv global {{ python_global_version }}" + environment: + PATH: "/home/linuxbrew/.linuxbrew/bin:{{ ansible_env.PATH }}" + changed_when: false @@ -27,6 +27,7 @@ - role: "locales" - role: "timezone" - role: "homebrew" + - role: "python" - name: "Raspberry Pi configure" gather_facts: true |
