summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--group_vars/all.ymlbin388 -> 443 bytes
-rw-r--r--group_vars/all.yml.example5
-rw-r--r--molecule/default/converge.yml10
-rw-r--r--roles/python/defaults/main.yml3
-rw-r--r--roles/python/meta/argument_specs.yml13
-rw-r--r--roles/python/meta/main.yml19
-rw-r--r--roles/python/tasks/main.yml49
-rw-r--r--site.yml1
8 files changed, 97 insertions, 3 deletions
diff --git a/group_vars/all.yml b/group_vars/all.yml
index 37ec51d3..88aec57b 100644
--- a/group_vars/all.yml
+++ b/group_vars/all.yml
Binary files differ
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
diff --git a/site.yml b/site.yml
index 3bfd0c3f..3321e889 100644
--- a/site.yml
+++ b/site.yml
@@ -27,6 +27,7 @@
- role: "locales"
- role: "timezone"
- role: "homebrew"
+ - role: "python"
- name: "Raspberry Pi configure"
gather_facts: true