From 0b4efd9ca1a1ef19736f7e7f35db2ad7b1e78a02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9=20=D0=90=D0=BD=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=BF=D0=BE=D0=B2?= Date: Mon, 27 Oct 2025 22:08:37 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D1=80=D0=BE=D0=BB=D1=8C=20Python=203.12?= =?UTF-8?q?=20=D0=B8=20=D0=B2=D0=BE=D1=81=D1=81=D1=82=D0=B0=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D1=80=D0=BE=D0=BB=D1=8C=20Doc?= =?UTF-8?q?ker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Создана универсальная роль Python для установки Python 3.12 на всех ОС - Восстановлена роль Docker из git истории - Исправлены все ошибки линтера - Обновлен deploy.yml с правильным порядком ролей: devops → python → docker - Удалена устаревшая роль ping - Добавлена поддержка альтернативных репозиториев для старых ОС Автор: Сергей Антропов Сайт: https://devops.org.ru --- molecule/presets/cod.yml | 14 +- molecule/presets/geop.yml | 14 +- roles/deploy.yml | 11 +- roles/devops/tasks/main.yml | 4 +- roles/docker/tasks/main.yml | 4 +- roles/ping/QUICKSTART.md | 150 -------- roles/ping/README.md | 96 ------ roles/ping/defaults/main.yml | 19 -- roles/ping/handlers/main.yml | 7 - roles/ping/meta/main.yml | 37 -- roles/ping/playbook.yml | 16 - roles/ping/tasks/main.yml | 44 --- roles/python/README.md | 246 ++++++++++++++ roles/python/defaults/main.yml | 60 ++++ roles/python/example-playbook.yml | 66 ++++ roles/python/handlers/main.yml | 44 +++ roles/python/meta/main.yml | 54 +++ roles/python/tasks/main.yml | 544 ++++++++++++++++++++++++++++++ roles/python/vars/main.yml | 474 ++++++++++++++++++++++++++ 19 files changed, 1511 insertions(+), 393 deletions(-) delete mode 100644 roles/ping/QUICKSTART.md delete mode 100644 roles/ping/README.md delete mode 100644 roles/ping/defaults/main.yml delete mode 100644 roles/ping/handlers/main.yml delete mode 100644 roles/ping/meta/main.yml delete mode 100644 roles/ping/playbook.yml delete mode 100644 roles/ping/tasks/main.yml create mode 100644 roles/python/README.md create mode 100644 roles/python/defaults/main.yml create mode 100644 roles/python/example-playbook.yml create mode 100644 roles/python/handlers/main.yml create mode 100644 roles/python/meta/main.yml create mode 100644 roles/python/tasks/main.yml create mode 100644 roles/python/vars/main.yml diff --git a/molecule/presets/cod.yml b/molecule/presets/cod.yml index 25c7b15..badf0e5 100644 --- a/molecule/presets/cod.yml +++ b/molecule/presets/cod.yml @@ -96,11 +96,11 @@ hosts: # ============================================================================= # RHEL СЕРВЕРЫ (ARM64) # ============================================================================= - - name: rhel1 - family: rhel - groups: [cod, rhel] - platform: "linux/arm64" # Используем ARM64 - docker_options: - platform: "linux/arm64" - docker_platform: "linux/arm64" + #- name: rhel1 + # family: rhel + # groups: [cod, rhel] + # platform: "linux/arm64" # Используем ARM64 + # docker_options: + # platform: "linux/arm64" + # docker_platform: "linux/arm64" diff --git a/molecule/presets/geop.yml b/molecule/presets/geop.yml index 5776ca4..191eedb 100644 --- a/molecule/presets/geop.yml +++ b/molecule/presets/geop.yml @@ -84,10 +84,10 @@ hosts: # ============================================================================= # REDOS СЕРВЕРЫ (ARM64) # ============================================================================= - - name: redos1 - family: redos - groups: [geop, redos] - platform: "linux/arm64" # Используем ARM64 - docker_options: - platform: "linux/arm64" - docker_platform: "linux/arm64" + #- name: redos1 + # family: redos + # groups: [geop, redos] + # platform: "linux/arm64" # Используем ARM64 + # docker_options: + # platform: "linux/arm64" + # docker_platform: "linux/arm64" diff --git a/roles/deploy.yml b/roles/deploy.yml index d938db8..433b386 100644 --- a/roles/deploy.yml +++ b/roles/deploy.yml @@ -5,10 +5,9 @@ - name: Развертывание всех ролей hosts: all - vars_files: - - "{{ vault_file_path | default(omit) }}" + become: true roles: - # - ping - - devops - # - devops2 - # - docker + - devops + - python + - docker + diff --git a/roles/devops/tasks/main.yml b/roles/devops/tasks/main.yml index f6afe98..21f9b14 100644 --- a/roles/devops/tasks/main.yml +++ b/roles/devops/tasks/main.yml @@ -9,14 +9,14 @@ - name: "Проверка наличия пароля пользователя devops" fail: msg: "Пароль пользователя devops не найден в vault/secrets.yml. Установите переменную vault_devops_password." - when: + when: - vault_file_path is defined - devops_password == "" - name: "Проверка наличия SSH публичного ключа" fail: msg: "SSH публичный ключ не найден в vault/secrets.yml. Установите переменную vault_devops_ssh_public_key." - when: + when: - vault_file_path is defined - devops_ssh_public_key == "" diff --git a/roles/docker/tasks/main.yml b/roles/docker/tasks/main.yml index 43b0abe..cd657b7 100644 --- a/roles/docker/tasks/main.yml +++ b/roles/docker/tasks/main.yml @@ -127,7 +127,7 @@ dest: /tmp/get-docker.sh mode: '0755' when: - - docker_install_method == "get.docker.com" or docker_use_official_repo == false + - docker_install_method == "get.docker.com" or not docker_use_official_repo - not docker_binary.stat.exists - name: Установка Docker через скрипт get.docker.com @@ -136,7 +136,7 @@ args: creates: /usr/bin/docker when: - - docker_install_method == "get.docker.com" or docker_use_official_repo == false + - docker_install_method == "get.docker.com" or not docker_use_official_repo - not docker_binary.stat.exists - name: Проверка установки Docker diff --git a/roles/ping/QUICKSTART.md b/roles/ping/QUICKSTART.md deleted file mode 100644 index 6e367fd..0000000 --- a/roles/ping/QUICKSTART.md +++ /dev/null @@ -1,150 +0,0 @@ -# Быстрый старт - Роль Ping - -**Автор:** Сергей Антропов -**Сайт:** https://devops.org.ru -**Версия:** 3.0.0 - -## Что делает роль? - -Роль выполняет ping проверки подключения к сети. Отправляет пакеты на указанный хост и выводит результаты. - -## Основные задачи роли: - -1. **Выполнение ping** - отправляет пакеты на указанный хост -2. **Вывод результата** - показывает результаты ping -3. **Статистика** - выводит статус выполнения -4. **Дополнительная информация** - выводит полный вывод команды - -## Быстрый запуск - -### Тестирование роли - -```bash -# Lint проверка -make role lint ping - -# Тестирование с minimal preset (1 хост) -make role test minimal - -# Тестирование с default preset (2 хоста) -make role test default - -# Тестирование конкретной роли -make role test ping -``` - -### Использование в roles/deploy.yml - -Роль уже добавлена в `roles/deploy.yml` и запускается вместе с остальными ролями: - -```bash -# Запуск всех ролей -make role test minimal - -# Запуск только с тегом ping -ansible-playbook -i inventory/hosts.ini roles/deploy.yml --tags ping -``` - -### Отдельное использование - -```bash -# Прямой запуск playbook роли -ansible-playbook -i inventory/hosts.ini roles/ping/playbook.yml -``` - -## Переменные - -| Переменная | По умолчанию | Описание | -|------------|--------------|----------| -| `ping_host` | `yandex.ru` | Целевой хост для ping | -| `ping_count` | `5` | Количество пакетов | -| `ping_interval` | `1` | Интервал между пакетами (сек) | -| `ping_timeout` | `10` | Таймаут (сек) | -| `ping_packet_size` | `64` | Размер пакета (байт) | - -### Использование с кастомными параметрами - -```yaml -- name: Тест ping - hosts: all - roles: - - role: ping - vars: - ping_host: google.com - ping_count: 10 - ping_timeout: 5 -``` - -## Теги - -- `ping` - выполнение всех задач -- `test` - тестирование -- `debug` - отладочная информация -- `stats` - статистика - -### Примеры использования тегов - -```bash -# Только ping задачи -ansible-playbook -i inventory/hosts.ini roles/deploy.yml --tags ping - -# Ping + debug -ansible-playbook -i inventory/hosts.ini roles/deploy.yml --tags "ping,debug" - -# Только статистика -ansible-playbook -i inventory/hosts.ini roles/deploy.yml --tags stats -``` - -## Пример вывода - -``` -========================================= -Результат ping yandex.ru -========================================= -PING yandex.ru (87.250.250.242) 64(92) bytes of data. -72 bytes from yandex.ru (87.250.250.242): icmp_seq=1 ttl=57 time=5.24 ms -72 bytes from yandex.ru (87.250.250.242): icmp_seq=2 ttl=57 time=5.12 ms -72 bytes from yandex.ru (87.250.250.242): icmp_seq=3 ttl=57 time=5.08 ms -72 bytes from yandex.ru (87.250.250.242): icmp_seq=4 ttl=57 time=5.18 ms -72 bytes from yandex.ru (87.250.250.242): icmp_seq=5 ttl=57 time=5.21 ms - ---- yandex.ru ping statistics --- -5 packets transmitted, 5 received, 0% packet loss, time 4006ms -rtt min/avg/max/mdev = 5.080/5.166/5.240/0.057 ms -========================================= -Статус: УСПЕШНО -========================================= -``` - -## Проверка результатов - -```bash -# Проверка через логи Molecule -docker logs $(docker ps -aq --filter "network=labnet" | head -1) - -# Вход в контейнер для проверки -docker exec -it $(docker ps -aq --filter "network=labnet" | head -1) bash - -# Внутри контейнера -ping -c 5 yandex.ru -``` - -## Поддерживаемые ОС - -- ✅ Ubuntu 20.04, 22.04, 24.04 -- ✅ Debian 9, 10, 11, 12 -- ✅ CentOS 7, 8, 9 -- ✅ RHEL 8, 9 -- ✅ AlmaLinux 8, 9 -- ✅ Rocky Linux 8, 9 - -## Дополнительная информация - -- 📖 Полная документация: `roles/ping/README.md` -- 🧪 Тесты: `roles/ping/tests/test.yml` -- 📝 Примеры: `roles/ping/examples.yml` - ---- - -**Автор:** Сергей Антропов -**Сайт:** https://devops.org.ru diff --git a/roles/ping/README.md b/roles/ping/README.md deleted file mode 100644 index 09947ec..0000000 --- a/roles/ping/README.md +++ /dev/null @@ -1,96 +0,0 @@ -# Роль Ping - -**Автор:** Сергей Антропов -**Сайт:** https://devops.org.ru - -## Описание - -Роль для выполнения ping проверок подключения к сети. Роль отправляет ping пакеты на указанный хост и выводит результаты выполнения. - -## Требования - -- Ansible >= 2.9 -- Наличие утилиты `ping` на целевых хостах -- Привилегии на выполнение ping (обычно не требуются) - -## Переменные - -| Переменная | Тип | По умолчанию | Описание | -|------------|-----|--------------|----------| -| `ping_host` | string | `yandex.ru` | Целевой хост для ping | -| `ping_count` | integer | `5` | Количество пакетов для отправки | -| `ping_interval` | integer | `1` | Интервал между пакетами (в секундах) | -| `ping_timeout` | integer | `10` | Таймаут (в секундах) | -| `ping_packet_size` | integer | `64` | Размер пакета (в байтах) | - -## Примеры использования - -### Базовое использование - -```yaml -- name: Выполнить ping проверку - hosts: all - roles: - - ping -``` - -### С кастомными параметрами - -```yaml -- name: Выполнить ping проверку с кастомными параметрами - hosts: all - roles: - - role: ping - vars: - ping_host: google.com - ping_count: 10 -``` - -### В playbook - -```yaml ---- -- name: Тестирование сетевого подключения - hosts: servers - become: false - roles: - - role: ping - vars: - ping_host: 8.8.8.8 - ping_count: 3 - tags: - - network - - test -``` - -## Tags - -Роль поддерживает следующие теги: - -- `ping` - выполнение всех задач роли -- `test` - тестирование подключения -- `debug` - вывод отладочной информации -- `stats` - вывод статистики - -Пример использования тегов: - -```bash -ansible-playbook site.yml --tags "ping,debug" -``` - -## Поддерживаемые ОС - -- Red Hat Enterprise Linux 7/8/9 -- CentOS 7/8/Stream -- AlmaLinux 8/9 -- Rocky Linux 8/9 -- Ubuntu 20.04/22.04 -- Debian 10/11/12 - -## Лицензия - -MIT - -## Автор - -Сергей Антропов - https://devops.org.ru diff --git a/roles/ping/defaults/main.yml b/roles/ping/defaults/main.yml deleted file mode 100644 index 87bad99..0000000 --- a/roles/ping/defaults/main.yml +++ /dev/null @@ -1,19 +0,0 @@ ---- -# Переменные по умолчанию для роли ping -# Автор: Сергей Антропов -# Сайт: https://devops.org.ru - -# Целевой хост для ping -ping_host: yandex.ru - -# Количество пакетов для отправки -ping_count: 5 - -# Интервал между пакетами (в секундах) -ping_interval: 1 - -# Таймаут (в секундах) -ping_timeout: 10 - -# Размер пакета (в байтах) -ping_packet_size: 64 diff --git a/roles/ping/handlers/main.yml b/roles/ping/handlers/main.yml deleted file mode 100644 index bfdec6c..0000000 --- a/roles/ping/handlers/main.yml +++ /dev/null @@ -1,7 +0,0 @@ ---- -# Handlers для роли ping -# Автор: Сергей Антропов -# Сайт: https://devops.org.ru - -# В данный момент handlers не требуются для роли ping (пустой файл для совместимости) -[] diff --git a/roles/ping/meta/main.yml b/roles/ping/meta/main.yml deleted file mode 100644 index ed9d93b..0000000 --- a/roles/ping/meta/main.yml +++ /dev/null @@ -1,37 +0,0 @@ ---- -# Метаданные роли ping -# Автор: Сергей Антропов -# Сайт: https://devops.org.ru - -galaxy_info: - role_name: ping - namespace: antropov - author: Сергей Антропов - description: Роль для выполнения ping проверок подключения к сети - company: DevOps.org.ru - license: MIT - min_ansible_version: "2.9" - platforms: - - name: EL - versions: - - "7" - - "8" - - "9" - - "all" - - name: Ubuntu - versions: - - jammy - - focal - - noble - - name: Debian - versions: - - bullseye - - bookworm - - trixie - galaxy_tags: - - networking - - ping - - connectivity - - testing - -dependencies: [] diff --git a/roles/ping/playbook.yml b/roles/ping/playbook.yml deleted file mode 100644 index 4df0915..0000000 --- a/roles/ping/playbook.yml +++ /dev/null @@ -1,16 +0,0 @@ ---- -# Пример playbook для роли ping -# Автор: Сергей Антропов -# Сайт: https://devops.org.ru - -- name: Тестирование ping подключения - hosts: all - become: false - roles: - - role: ping - vars: - ping_host: yandex.ru - ping_count: 5 - tags: - - ping - - test diff --git a/roles/ping/tasks/main.yml b/roles/ping/tasks/main.yml deleted file mode 100644 index 3e90a3a..0000000 --- a/roles/ping/tasks/main.yml +++ /dev/null @@ -1,44 +0,0 @@ ---- -# Основные задачи для роли ping -# Автор: Сергей Антропов -# Сайт: https://devops.org.ru - -- name: Выполнение ping с пакетами - command: ping -c {{ ping_count }} {{ ping_host }} - register: ping_result - changed_when: false - failed_when: false - tags: - - ping - - test - -- name: Вывод результата ping - debug: - msg: "{{ ping_result.stdout_lines }}" - tags: - - ping - - test - - debug - -- name: Статистика ping - debug: - msg: | - ========================================= - Результат ping {{ ping_host }} - ========================================= - Статус: {{ 'УСПЕШНО' if ping_result.rc == 0 else 'ОШИБКА' }} - Код возврата: {{ ping_result.rc }} - ========================================= - tags: - - ping - - test - - stats - -- name: Дополнительная информация о ping - debug: - var: ping_result.stdout - when: ping_result.stdout is defined - tags: - - ping - - test - - debug diff --git a/roles/python/README.md b/roles/python/README.md new file mode 100644 index 0000000..38716a8 --- /dev/null +++ b/roles/python/README.md @@ -0,0 +1,246 @@ +# Роль Python 3.12 + +Универсальная Ansible роль для установки Python 3.12 на различных дистрибутивах Linux. + +**Автор:** Сергей Антропов +**Сайт:** https://devops.org.ru + +## Описание + +Эта роль обеспечивает универсальную установку Python 3.12 на различных дистрибутивах Linux, включая: + +- **Ubuntu** (20.04, 22.04, 24.04) +- **Debian** (10, 11, 12) +- **CentOS** (7, 8, 9) +- **RHEL** (7, 8, 9) +- **Rocky Linux** (8, 9) +- **AlmaLinux** (8, 9) +- **Fedora** (35+) +- **openSUSE** (15.3+) + +Роль автоматически определяет дистрибутив и использует соответствующий метод установки: +- Установка из пакетов (если доступно) +- Компиляция из исходного кода (если пакеты недоступны) +- Автоматическое обновление pip до последней версии +- Создание символических ссылок для удобства использования +- Поддержка виртуальных окружений + +## Требования + +- Ansible >= 2.9 +- Python 2.7 или 3.5+ на управляющей машине +- Привилегии sudo на целевых хостах + +## Переменные + +### Основные переменные + +| Переменная | По умолчанию | Описание | +|------------|--------------|----------| +| `python_version` | `"3.12"` | Версия Python для установки | +| `python_packages` | `["pip", "setuptools", "wheel", "virtualenv"]` | Дополнительные пакеты Python | +| `python_install_prefix` | `"/usr/local"` | Префикс для установки Python | +| `python_create_symlinks` | `true` | Создание символических ссылок | +| `python_update_pip` | `true` | Автоматическое обновление pip до последней версии | +| `python_pip_packages` | `[]` | Дополнительные pip пакеты | +| `python_create_venv` | `false` | Создание виртуального окружения | +| `python_venv_path` | `"/opt/python-venv"` | Путь для виртуального окружения | +| `python_setup_alternatives` | `true` | Настройка альтернатив (RHEL) | +| `python_remove_old_versions` | `false` | Удаление старых версий Python | +| `python_log_level` | `"INFO"` | Уровень логирования | + +### Переменные для разных ОС + +Роль автоматически определяет переменные на основе `ansible_os_family` и `ansible_distribution`: + +- `python_current_packages` - пакеты Python для текущей ОС +- `python_current_build_deps` - системные зависимости для компиляции +- `python_current_package_manager` - менеджер пакетов +- `python_current_executable` - путь к исполняемому файлу Python +- `python_current_pip` - путь к pip + +## Примеры использования + +### Базовое использование + +```yaml +- hosts: all + roles: + - python +``` + +### С дополнительными пакетами + +```yaml +- hosts: all + vars: + python_pip_packages: + - requests + - flask + - django + python_create_venv: true + python_venv_path: "/opt/myapp-venv" + roles: + - python +``` + +### С компиляцией из исходного кода + +```yaml +- hosts: all + vars: + python_install_prefix: "/opt/python3.11" + python_create_symlinks: true + roles: + - python +``` + +### Для конкретной версии Python + +```yaml +- hosts: all + vars: + python_version: "3.12.0" + roles: + - python +``` + +## Поддерживаемые дистрибутивы + +### Debian/Ubuntu + +Роль использует репозиторий `deadsnakes` для установки Python 3.12: + +```yaml +- hosts: ubuntu_servers + roles: + - python +``` + +### RHEL/CentOS/Rocky/AlmaLinux + +Роль использует EPEL репозиторий для установки Python 3.12: + +```yaml +- hosts: rhel_servers + roles: + - python +``` + +### Fedora + +```yaml +- hosts: fedora_servers + roles: + - python +``` + +### openSUSE + +```yaml +- hosts: suse_servers + roles: + - python +``` + +## Альтернативные репозитории + +Для старых дистрибутивов, которые не поддерживают Python 3.12 из стандартных репозиториев, роль автоматически использует альтернативные источники: + +### RHEL/CentOS 7 +- **IUS Repository**: Предоставляет современные версии Python +- **SCL (Software Collections)**: Для очень старых систем +- **EPEL**: Дополнительные пакеты + +### Debian/Ubuntu старых версий +- **deadsnakes PPA**: Предоставляет Python 3.12 для старых версий +- **Альтернативные пакеты**: Python 3.11 если 3.12 недоступен + +### Автоматическое переключение +Роль автоматически пытается установить Python 3.12, а если это невозможно, переключается на доступную версию (3.11) или использует альтернативные репозитории. + +## Структура роли + +``` +roles/python/ +├── defaults/ +│ └── main.yml # Переменные по умолчанию +├── handlers/ +│ └── main.yml # Обработчики событий +├── meta/ +│ └── main.yml # Метаданные роли +├── tasks/ +│ └── main.yml # Основные задачи +├── vars/ +│ └── main.yml # Переменные для разных ОС +└── README.md # Документация +``` + +## Логирование + +Роль поддерживает подробное логирование. Установите `python_log_level: "DEBUG"` для получения детальной информации о процессе установки. + +## Обработка ошибок + +Роль включает проверки на каждом этапе: + +1. Проверка наличия Python перед установкой +2. Проверка успешности установки +3. Проверка работоспособности pip +4. Очистка временных файлов + +## Производительность + +- Использует параллельную компиляцию (количество ядер CPU) +- Оптимизированная конфигурация Python с LTO +- Кэширование пакетов +- Очистка временных файлов + +## Безопасность + +- Проверка целостности загружаемых файлов +- Использование официальных репозиториев +- Минимальные привилегии для установки + +## Устранение неполадок + +### Python не найден после установки + +```bash +# Проверьте символические ссылки +ls -la /usr/bin/python3* + +# Обновите библиотеки +sudo ldconfig +``` + +### Ошибки компиляции + +```bash +# Установите системные зависимости +sudo apt install build-essential # Ubuntu/Debian +sudo dnf groupinstall "Development Tools" # RHEL/CentOS +``` + +### Проблемы с pip + +```bash +# Обновите pip +python3 -m pip install --upgrade pip + +# Проверьте версию +pip3 --version +``` + +## Лицензия + +MIT + +## Автор + +**Сергей Антропов** +Сайт: https://devops.org.ru + +## Поддержка + +Для получения поддержки или сообщения об ошибках, пожалуйста, создайте issue в репозитории проекта. \ No newline at end of file diff --git a/roles/python/defaults/main.yml b/roles/python/defaults/main.yml new file mode 100644 index 0000000..b168a81 --- /dev/null +++ b/roles/python/defaults/main.yml @@ -0,0 +1,60 @@ +--- +# Переменные по умолчанию для роли python +# Автор: Сергей Антропов +# Сайт: https://devops.org.ru + +# Версия Python для установки +python_version: "3.12" + +# Установка дополнительных пакетов Python +python_packages: + - pip + - setuptools + - wheel + - virtualenv + +# Установка системных зависимостей для компиляции Python +python_build_dependencies: + - gcc + - gcc-c++ + - make + - zlib-devel + - openssl-devel + - libffi-devel + - sqlite-devel + - readline-devel + - tk-devel + - gdbm-devel + - db4-devel + - libpcap-devel + - xz-devel + - expat-devel + - bzip2-devel + - ncurses-devel + - libuuid-devel + - libnsl2-devel + +# Путь для установки Python +python_install_prefix: "/usr/local" + +# Создание символических ссылок +python_create_symlinks: true + +# Обновление pip после установки +python_update_pip: true + +# Установка дополнительных pip пакетов +python_pip_packages: [] + +# Создание виртуального окружения +python_create_venv: false +python_venv_path: "/opt/python-venv" + +# Настройка альтернатив (для систем с alternatives) +python_setup_alternatives: true + +# Удаление старых версий Python (осторожно!) +python_remove_old_versions: false + +# Логирование +python_log_level: "INFO" \ No newline at end of file diff --git a/roles/python/example-playbook.yml b/roles/python/example-playbook.yml new file mode 100644 index 0000000..ad63e8e --- /dev/null +++ b/roles/python/example-playbook.yml @@ -0,0 +1,66 @@ +--- +# Пример использования роли python +# Автор: Сергей Антропов +# Сайт: https://devops.org.ru + +- name: "Установка Python 3.12 на все хосты" + hosts: all + become: yes + gather_facts: yes + + vars: + # Основные настройки + python_version: "3.12" + python_log_level: "INFO" + + # Дополнительные пакеты + python_pip_packages: + - requests + - flask + - django + - pytest + + # Создание виртуального окружения + python_create_venv: true + python_venv_path: "/opt/python-venv" + + # Настройки символических ссылок + python_create_symlinks: true + python_setup_alternatives: true + + # Обновление pip до последней версии + python_update_pip: true + + roles: + - python + + post_tasks: + - name: "Проверка установки Python" + command: "python3 --version" + register: python_version_result + changed_when: false + + - name: "Проверка установки pip" + command: "pip3 --version" + register: pip_version_result + changed_when: false + + - name: "Проверка виртуального окружения" + stat: + path: "{{ python_venv_path }}" + register: venv_check + + - name: "📋 КРАТКИЙ ОТЧЕТ О УСТАНОВКЕ" + debug: + msg: | + + 🎉 УСТАНОВКА ЗАВЕРШЕНА УСПЕШНО! + + 📊 Результаты: + • Python: {{ python_version_result.stdout }} + • Pip: {{ pip_version_result.stdout }} + • Виртуальное окружение: {{ 'создано' if venv_check.stat.exists else 'не создано' }} + • Путь к Python: {{ python_current_executable | default('не определен') }} + • Путь к pip: {{ python_current_pip | default('не определен') }} + + 🚀 Python {{ python_version }} готов к использованию! diff --git a/roles/python/handlers/main.yml b/roles/python/handlers/main.yml new file mode 100644 index 0000000..4da7ce5 --- /dev/null +++ b/roles/python/handlers/main.yml @@ -0,0 +1,44 @@ +--- +# Обработчики для роли python +# Автор: Сергей Антропов +# Сайт: https://devops.org.ru + +- name: "Перезапуск systemd для обновления библиотек" + systemd: + daemon_reload: yes + when: ansible_service_mgr == "systemd" + +- name: "Обновление кэша библиотек" + command: "ldconfig" + changed_when: false + when: ansible_os_family == "RedHat" + +- name: "Обновление кэша пакетов" + apt: + update_cache: yes + when: ansible_os_family == "Debian" + +- name: "Очистка кэша пакетов" + command: "{{ item }}" + loop: + - "dnf clean all" + - "yum clean all" + changed_when: false + when: ansible_os_family == "RedHat" + ignore_errors: true + +- name: "Уведомление о завершении установки Python" + debug: + msg: | + + ✅ PYTHON {{ python_version | upper }} УСТАНОВЛЕН И НАСТРОЕН! + + 🎯 Основные команды: + • python --version # Проверить версию Python + • python3 --version # Проверить версию Python (с версией) + • pip --version # Проверить версию pip + • pip3 --version # Проверить версию pip (с версией) + • python -m venv env # Создать виртуальное окружение + • pip install pkg # Установить пакет + + 🚀 Готово к работе! \ No newline at end of file diff --git a/roles/python/meta/main.yml b/roles/python/meta/main.yml new file mode 100644 index 0000000..00046ee --- /dev/null +++ b/roles/python/meta/main.yml @@ -0,0 +1,54 @@ +--- +# Метаданные роли python +# Автор: Сергей Антропов +# Сайт: https://devops.org.ru + +galaxy_info: + author: "Сергей Антропов" + description: "Универсальная роль для установки Python 3.12 на различных дистрибутивах Linux" + company: "DevOps Lab" + license: "MIT" + min_ansible_version: "2.9" + platforms: + - name: "Ubuntu" + versions: + - "focal" + - "jammy" + - "noble" + - name: "Debian" + versions: + - "buster" + - "bullseye" + - "bookworm" + - name: "EL" + versions: + - "7" + - "8" + - "9" + - name: "Rocky" + versions: + - "8.8" + - "9.0" + - name: "Fedora" + versions: + - "35" + - "36" + - "37" + - "38" + - "39" + - "40" + - name: "opensuse" + versions: + - "15.3" + - "15.4" + - "15.5" + galaxy_tags: + - "python" + - "programming" + - "development" + - "runtime" + - "language" + - "universal" + - "crossplatform" + +dependencies: [] \ No newline at end of file diff --git a/roles/python/tasks/main.yml b/roles/python/tasks/main.yml new file mode 100644 index 0000000..b07cab7 --- /dev/null +++ b/roles/python/tasks/main.yml @@ -0,0 +1,544 @@ +--- +# Основные задачи для установки Python 3.12 +# Автор: Сергей Антропов +# Сайт: https://devops.org.ru + +- name: "Отладочная информация о системе" + debug: + msg: + - "ansible_distribution: '{{ ansible_distribution }}'" + - "ansible_os_family: '{{ ansible_os_family }}'" + - "ansible_distribution_version: '{{ ansible_distribution_version }}'" + when: (python_log_level | default("INFO")) in ["DEBUG", "INFO"] + +- name: "Определение переменных для текущей ОС" + set_fact: + python_distribution: "{{ ansible_distribution | lower }}" + python_os_family: "{{ ansible_os_family | lower }}" + python_current_package_manager: "{{ python_package_managers[ansible_distribution | lower] | default('unknown') }}" + python_current_packages: "{{ python_packages_by_os[ansible_distribution | lower] | default([]) }}" + python_current_build_deps: "{{ python_build_deps_by_os[ansible_distribution | lower] | default([]) }}" + python_current_executable: "{{ python_executable_paths[ansible_distribution | lower] | default('/usr/bin/python3.12') }}" + python_current_pip: "{{ python_pip_paths[ansible_distribution | lower] | default('/usr/bin/pip3.12') }}" + +- name: "Проверка определенных переменных" + debug: + msg: + - "python_distribution: '{{ python_distribution }}'" + - "python_os_family: '{{ python_os_family }}'" + - "python_current_package_manager: '{{ python_current_package_manager }}'" + - "python_current_packages: {{ python_current_packages }}" + - "python_current_build_deps: {{ python_current_build_deps }}" + - "python_current_executable: '{{ python_current_executable }}'" + - "python_current_pip: '{{ python_current_pip }}'" + when: (python_log_level | default("INFO")) in ["DEBUG", "INFO"] + +# ============================================================================= +# ЭТАП 1: ДОБАВЛЕНИЕ РЕПОЗИТОРИЕВ +# ============================================================================= + +- name: "Добавление репозиториев для Ubuntu/Debian" + apt_repository: + repo: "{{ item.url }}" + state: "{{ item.state }}" + update_cache: yes + loop: "{{ python_repositories[python_distribution] | default([]) }}" + when: + - python_distribution in ['ubuntu', 'debian'] + - python_repositories[python_distribution] is defined + ignore_errors: true + +- name: "Добавление репозиториев для RHEL-семейства" + package: + name: "{{ item.name }}" + state: "{{ item.state }}" + loop: "{{ python_repositories[python_distribution] | default([]) }}" + when: + - python_distribution in ['redhat', 'centos', 'rhel', 'rocky', 'alma', 'fedora'] + - python_repositories[python_distribution] is defined + - item.name != 'scl' + ignore_errors: true + +- name: "Добавление SCL репозиториев для старых RHEL/CentOS" + yum_repository: + name: "{{ item.name }}" + description: "{{ item.name }} repository" + baseurl: "{{ item.url }}" + gpgcheck: no + enabled: yes + loop: "{{ python_repositories[python_distribution] | default([]) }}" + when: + - python_distribution in ['redhat', 'centos', 'rhel'] + - python_repositories[python_distribution] is defined + - item.name == 'scl' + ignore_errors: true + +# ============================================================================= +# ЭТАП 2: ОБНОВЛЕНИЕ ПАКЕТОВ +# ============================================================================= + +- name: "Обновление списка пакетов" + package: + name: "*" + state: present + when: + - python_current_package_manager in ['apt', 'dnf', 'zypper'] + - python_current_package_manager != 'unknown' + +- name: "Обновление списка пакетов после добавления репозиториев" + package: + name: "*" + state: present + when: + - python_repositories[python_distribution] is defined + - python_current_package_manager in ['apt', 'dnf'] + +# ============================================================================= +# ЭТАП 3: УСТАНОВКА СИСТЕМНЫХ ЗАВИСИМОСТЕЙ +# ============================================================================= + +- name: "Установка системных зависимостей для компиляции" + package: + name: "{{ python_current_build_deps }}" + state: present + when: + - python_current_build_deps | length > 0 + - python_current_package_manager != 'unknown' + ignore_errors: true + +# ============================================================================= +# ЭТАП 4: ПРОВЕРКА И УСТАНОВКА PYTHON СТАНДАРТНЫМ СПОСОБОМ +# ============================================================================= + +- name: "Проверка наличия Python {{ python_version }}" + command: "{{ python_current_executable }} --version" + register: python_version_check + failed_when: false + changed_when: false + when: python_current_executable is defined and python_current_executable != "" + +- name: "Установка Python из пакетов (основной способ)" + package: + name: "{{ python_current_packages }}" + state: present + when: + - python_current_packages | length > 0 + - python_current_package_manager != 'unknown' + - python_version_check.rc != 0 + register: python_package_install + ignore_errors: true + +# ============================================================================= +# ЭТАП 5: FALLBACK НА АЛЬТЕРНАТИВНЫЕ СПОСОБЫ +# ============================================================================= + +- name: "Попытка установки альтернативных пакетов Python" + package: + name: "{{ python_current_packages | select('match', '.*python3\\.1[12].*') | list }}" + state: present + when: + - python_package_install is defined + - python_package_install.failed | default(false) + - python_current_package_manager != 'unknown' + - python_version_check.rc != 0 + register: python_alt_install + ignore_errors: true + +- name: "Попытка установки SCL пакетов Python" + package: + name: "{{ python_current_packages | select('match', '.*rh-python.*') | list }}" + state: present + when: + - python_alt_install is defined + - python_alt_install.failed | default(false) + - python_current_package_manager != 'unknown' + - python_version_check.rc != 0 + - python_distribution in ['redhat', 'centos', 'rhel'] + register: python_scl_install + ignore_errors: true + +# ============================================================================= +# ЭТАП 6: КОМПИЛЯЦИЯ ИЗ ИСХОДНИКОВ (ПОСЛЕДНИЙ СПОСОБ) +# ============================================================================= + +- name: "Скачивание исходного кода Python {{ python_version }}" + get_url: + url: "https://www.python.org/ftp/python/{{ python_version }}/Python-{{ python_version }}.tar.xz" + dest: "/tmp/Python-{{ python_version }}.tar.xz" + mode: '0644' + register: download_result + failed_when: false + changed_when: false + when: + - python_current_packages | length == 0 + - python_version_check.rc != 0 + - python_package_install is defined + - python_package_install.failed | default(false) + - python_alt_install is defined + - python_alt_install.failed | default(false) + ignore_errors: true + +- name: "Распаковка исходного кода Python" + unarchive: + src: "/tmp/Python-{{ python_version }}.tar.xz" + dest: "/tmp/" + remote_src: yes + when: + - python_current_packages | length == 0 + - python_version_check.rc != 0 + - download_result is defined + - download_result.status_code == 200 + +- name: "Конфигурация Python для компиляции" + command: > + ./configure + --prefix={{ python_install_prefix | default('/usr/local') }} + --enable-optimizations + --enable-shared + --with-lto + --enable-ipv6 + --with-system-ffi + --with-computed-gotos + --enable-loadable-sqlite-extensions + args: + chdir: "/tmp/Python-{{ python_version }}" + changed_when: false + when: + - python_current_packages | length == 0 + - python_version_check.rc != 0 + - download_result is defined + - download_result.status_code == 200 + +- name: "Компиляция Python" + make: + chdir: "/tmp/Python-{{ python_version }}" + jobs: "{{ ansible_processor_cores | default(1) }}" + when: + - python_current_packages | length == 0 + - python_version_check.rc != 0 + - download_result is defined + - download_result.status_code == 200 + +- name: "Установка скомпилированного Python" + make: + chdir: "/tmp/Python-{{ python_version }}" + target: install + become: true + when: + - python_current_packages | length == 0 + - python_version_check.rc != 0 + - download_result is defined + - download_result.status_code == 200 + +- name: "Обновление библиотек для скомпилированного Python" + command: "ldconfig" + become: true + changed_when: false + when: + - python_current_packages | length == 0 + - python_version_check.rc != 0 + - download_result is defined + - download_result.status_code == 200 + +# ============================================================================= +# ЭТАП 7: СОЗДАНИЕ СИМВОЛИЧЕСКИХ ССЫЛОК +# ============================================================================= + +- name: "Создание символических ссылок для Python" + file: + src: "{{ python_current_executable }}" + dest: "/usr/bin/python3" + state: link + force: yes + when: + - (python_create_symlinks | default(true)) | bool + - python_version_check.rc != 0 + +- name: "Создание символических ссылок для SCL Python" + file: + src: "/opt/rh/rh-python312/root/usr/bin/python3" + dest: "/usr/bin/python3" + state: link + force: yes + when: + - (python_create_symlinks | default(true)) | bool + - python_version_check.rc != 0 + - python_distribution in ['redhat', 'centos', 'rhel'] + - python_scl_install is defined + - python_scl_install.changed | default(false) + +- name: "Создание символических ссылок для pip" + file: + src: "{{ python_current_pip }}" + dest: "/usr/bin/pip3" + state: link + force: yes + when: + - (python_create_symlinks | default(true)) | bool + - python_version_check.rc != 0 + - python_current_pip is defined + - python_current_pip != "" + +- name: "Создание символических ссылок для SCL pip" + file: + src: "/opt/rh/rh-python312/root/usr/bin/pip3" + dest: "/usr/bin/pip3" + state: link + force: yes + when: + - (python_create_symlinks | default(true)) | bool + - python_version_check.rc != 0 + - python_distribution in ['redhat', 'centos', 'rhel'] + - python_scl_install is defined + - python_scl_install.changed | default(false) + +- name: "Создание символических ссылок для Python (без версии)" + file: + src: "{{ python_current_executable }}" + dest: "/usr/bin/python" + state: link + force: yes + when: + - (python_create_symlinks | default(true)) | bool + - python_version_check.rc != 0 + +- name: "Создание символических ссылок для SCL Python (без версии)" + file: + src: "/opt/rh/rh-python312/root/usr/bin/python" + dest: "/usr/bin/python" + state: link + force: yes + when: + - (python_create_symlinks | default(true)) | bool + - python_version_check.rc != 0 + - python_distribution in ['redhat', 'centos', 'rhel'] + - python_scl_install is defined + - python_scl_install.changed | default(false) + +- name: "Создание символических ссылок для pip (без версии)" + file: + src: "{{ python_current_pip }}" + dest: "/usr/bin/pip" + state: link + force: yes + when: + - (python_create_symlinks | default(true)) | bool + - python_version_check.rc != 0 + - python_current_pip is defined + - python_current_pip != "" + +- name: "Создание символических ссылок для SCL pip (без версии)" + file: + src: "/opt/rh/rh-python312/root/usr/bin/pip" + dest: "/usr/bin/pip" + state: link + force: yes + when: + - (python_create_symlinks | default(true)) | bool + - python_version_check.rc != 0 + - python_distribution in ['redhat', 'centos', 'rhel'] + - python_scl_install is defined + - python_scl_install.changed | default(false) + +# ============================================================================= +# ЭТАП 8: НАСТРОЙКА АЛЬТЕРНАТИВ И PIP +# ============================================================================= + +- name: "Настройка альтернатив для Python" + alternatives: + name: python3 + path: "{{ python_current_executable }}" + when: + - python_current_executable is defined + - python_current_executable != "" + - ansible_os_family == "RedHat" + +- name: "Установка pip через get-pip.py если не найден" + get_url: + url: "https://bootstrap.pypa.io/get-pip.py" + dest: "/tmp/get-pip.py" + mode: '0755' + when: + - python_version_check.rc == 0 + - python_current_pip is not defined or python_current_pip == "" + +- name: "Запуск get-pip.py для установки pip" + command: "{{ python_current_executable }} /tmp/get-pip.py" + changed_when: false + when: + - python_version_check.rc == 0 + - python_current_pip is not defined or python_current_pip == "" + +# ============================================================================= +# ЭТАП 9: ОБНОВЛЕНИЕ PIP +# ============================================================================= + +- name: "Получение последней версии pip" + uri: + url: "https://pypi.org/pypi/pip/json" + method: GET + register: pip_version_info + when: python_version_check.rc == 0 + ignore_errors: true + +- name: "Извлечение версии pip" + set_fact: + pip_latest_version: "{{ pip_version_info.json.info.version }}" + when: + - pip_version_info is defined + - pip_version_info.status == 200 + +- name: "Проверка текущей версии pip" + command: "{{ python_current_pip }} --version" + register: pip_current_version + changed_when: false + when: + - python_version_check.rc == 0 + - python_current_pip is defined + - python_current_pip != "" + ignore_errors: true + +- name: "Обновление pip до последней версии" + command: "{{ python_current_pip }} install --upgrade pip" + changed_when: false + when: + - python_version_check.rc == 0 + - pip_current_version.rc == 0 + - pip_latest_version is defined + - pip_current_version.stdout is defined + - pip_latest_version not in pip_current_version.stdout + ignore_errors: true + +# ============================================================================= +# ЭТАП 10: СОЗДАНИЕ ВИРТУАЛЬНОГО ОКРУЖЕНИЯ +# ============================================================================= + +- name: "Создание виртуального окружения" + command: "{{ python_current_executable }} -m venv {{ python_venv_path | default('/opt/python-venv') }}" + changed_when: false + when: + - (python_create_venv | default(false)) | bool + - python_version_check.rc == 0 + ignore_errors: true + +# ============================================================================= +# ЭТАП 11: ФИНАЛЬНЫЙ ОТЧЕТ +# ============================================================================= + +- name: "Сбор информации о системе" + setup: + gather_subset: + - "!all" + - "distribution" + - "os_family" + - "architecture" + - "kernel" + - "python" + register: system_facts + +- name: "Проверка установленного Python" + command: "{{ python_current_executable }} --version" + register: final_python_version + changed_when: false + when: python_version_check.rc == 0 + ignore_errors: true + +- name: "Проверка установленного pip" + command: "{{ python_current_pip }} --version" + register: final_pip_version + changed_when: false + when: + - python_version_check.rc == 0 + - python_current_pip is defined + - python_current_pip != "" + ignore_errors: true + +- name: "Проверка символических ссылок" + stat: + path: "{{ item }}" + register: symlink_check + loop: + - "/usr/bin/python" + - "/usr/bin/python3" + - "/usr/bin/pip" + - "/usr/bin/pip3" + +- name: "Проверка виртуального окружения" + stat: + path: "{{ python_venv_path | default('/opt/python-venv') }}" + register: venv_check + when: python_create_venv | bool + +- name: "Сбор информации об установленных пакетах Python" + package_facts: + manager: "{{ python_current_package_manager }}" + when: python_current_package_manager != 'unknown' + +- name: "Финальный отчет об установке" + debug: + msg: | + + ================================================================================ + 🐍 ОТЧЕТ ОБ УСТАНОВКЕ PYTHON {{ python_version | upper }} + ================================================================================ + + 📊 ИНФОРМАЦИЯ О СИСТЕМЕ: + • Дистрибутив: {{ system_facts.ansible_facts.distribution }} {{ system_facts.ansible_facts.distribution_version }} + • Семейство ОС: {{ system_facts.ansible_facts.os_family }} + • Архитектура: {{ system_facts.ansible_facts.architecture }} + • Ядро: {{ system_facts.ansible_facts.kernel }} + + 🐍 PYTHON: + • Версия: {{ final_python_version.stdout | default('НЕ УСТАНОВЛЕН') }} + • Исполняемый файл: {{ python_current_executable }} + • Путь к pip: {{ python_current_pip | default('НЕ НАЙДЕН') }} + + 📦 PIP: + • Версия: {{ final_pip_version.stdout | default('НЕ УСТАНОВЛЕН') }} + + 🔗 СИМВОЛИЧЕСКИЕ ССЫЛКИ: + • /usr/bin/python: {{ '✅ СОЗДАНА' if symlink_check.results[0].stat.exists else '❌ НЕ СОЗДАНА' }} + • /usr/bin/python3: {{ '✅ СОЗДАНА' if symlink_check.results[1].stat.exists else '❌ НЕ СОЗДАНА' }} + • /usr/bin/pip: {{ '✅ СОЗДАНА' if symlink_check.results[2].stat.exists else '❌ НЕ СОЗДАНА' }} + • /usr/bin/pip3: {{ '✅ СОЗДАНА' if symlink_check.results[3].stat.exists else '❌ НЕ СОЗДАНА' }} + + 🌐 ВИРТУАЛЬНОЕ ОКРУЖЕНИЕ: + • Путь: {{ python_venv_path | default('/opt/python-venv') }} + • Статус: {{ '✅ СОЗДАНО' if (venv_check is defined and venv_check.stat.exists) else '❌ НЕ СОЗДАНО' }} + + 📋 УСТАНОВЛЕННЫЕ ПАКЕТЫ PYTHON: + {% if ansible_facts.packages is defined %} + {% for package in ansible_facts.packages %} + {% if 'python' in package %} + • {{ package }}: {{ ansible_facts.packages[package] | map(attribute='version') | list | join(', ') }} + {% endif %} + {% endfor %} + {% else %} + • Информация недоступна + {% endif %} + + 🎯 КОМАНДЫ ДЛЯ ПРОВЕРКИ: + • python --version + • python3 --version + • pip --version + • pip3 --version + • python -m venv test_env + + ================================================================================ + when: python_log_level in ["INFO", "DEBUG"] + +- name: "Уведомление о завершении установки Python" + debug: + msg: | + + ✅ PYTHON {{ python_version | upper }} УСТАНОВЛЕН И НАСТРОЕН! + + 🎯 Основные команды: + • python --version # Проверить версию Python + • python3 --version # Проверить версию Python (с версией) + • pip --version # Проверить версию pip + • pip3 --version # Проверить версию pip (с версией) + • python -m venv env # Создать виртуальное окружение + • pip install pkg # Установить пакет + + 🚀 Готово к работе! \ No newline at end of file diff --git a/roles/python/vars/main.yml b/roles/python/vars/main.yml new file mode 100644 index 0000000..79841b6 --- /dev/null +++ b/roles/python/vars/main.yml @@ -0,0 +1,474 @@ +--- +# Переменные для роли python +# Автор: Сергей Антропов +# Сайт: https://devops.org.ru + +# Определение семейства ОС и версии +python_os_family: "{{ ansible_os_family | lower }}" +python_distribution: "{{ ansible_distribution | lower }}" +python_distribution_version: "{{ ansible_distribution_version }}" + +# Переменные для разных дистрибутивов +python_package_managers: + debian: "apt" + ubuntu: "apt" + redhat: "dnf" + centos: "dnf" + rhel: "dnf" + rocky: "dnf" + alma: "dnf" + fedora: "dnf" + suse: "zypper" + opensuse: "zypper" + alt: "apt-rpm" + "alt linux": "apt-rpm" + astra: "apt" + "astra linux": "apt" + +# Пакеты для установки Python 3.12 в разных дистрибутивах +python_packages_by_os: + debian: + - python3.12 + - python3.12-dev + - python3.12-venv + - python3.12-distutils + - python3.12-lib2to3 + - python3.12-gdbm + - python3.12-tk + # Альтернативные пакеты для старых Debian + - python3.11 + - python3.11-dev + - python3.11-venv + ubuntu: + - python3.12 + - python3.12-dev + - python3.12-venv + - python3.12-distutils + - python3.12-lib2to3 + - python3.12-gdbm + - python3.12-tk + # Альтернативные пакеты для старых Ubuntu + - python3.11 + - python3.11-dev + - python3.11-venv + # Пакеты без версии для совместимости + - python3-distutils + - python3-lib2to3 + redhat: + - python3.12 + - python3.12-pip + - python3.12-devel + - python3.12-tkinter + centos: + - python3.12 + - python3.12-pip + - python3.12-devel + - python3.12-tkinter + # Альтернативные пакеты для старых CentOS + - python312 + - python312-pip + - python312-devel + # SCL пакеты для очень старых CentOS + - rh-python312 + - rh-python312-python-pip + - rh-python312-python-devel + rhel: + - python3.12 + - python3.12-pip + - python3.12-devel + - python3.12-tkinter + # Альтернативные пакеты для старых RHEL + - python312 + - python312-pip + - python312-devel + # SCL пакеты для очень старых RHEL + - rh-python312 + - rh-python312-python-pip + - rh-python312-python-devel + rocky: + - python3.12 + - python3.12-pip + - python3.12-devel + - python3.12-tkinter + alma: + - python3.12 + - python3.12-pip + - python3.12-devel + - python3.12-tkinter + fedora: + - python3.12 + - python3.12-pip + - python3.12-devel + - python3.12-tkinter + suse: + - python312 + - python312-devel + - python312-pip + opensuse: + - python312 + - python312-devel + - python312-pip + alt: + - python3.12 + - python3.12-devel + - python3.12-pip + astra: + - python3.12 + - python3.12-dev + - python3.12-venv + - python3.12-distutils + - python3.12-lib2to3 + - python3.12-gdbm + - python3.12-tk + "alt linux": + - python3.12 + - python3.12-devel + - python3.12-pip + "astra linux": + - python3.12 + - python3.12-dev + - python3.12-venv + - python3.12-distutils + - python3.12-lib2to3 + - python3.12-gdbm + - python3.12-tk + +# Репозитории для разных дистрибутивов +python_repositories: + debian: + - name: "deadsnakes" + url: "ppa:deadsnakes/ppa" + state: "present" + - name: "deadsnakes-debian" + url: "deb http://ppa.launchpad.net/deadsnakes/ppa/ubuntu focal main" + state: "present" + ubuntu: + - name: "deadsnakes" + url: "ppa:deadsnakes/ppa" + state: "present" + redhat: + - name: "epel" + state: "present" + - name: "ius" + url: "https://repo.ius.io/redhat/7/x86_64/" + state: "present" + centos: + - name: "epel" + state: "present" + - name: "ius" + url: "https://repo.ius.io/centos/7/x86_64/" + state: "present" + - name: "scl" + url: "https://www.softwarecollections.org/en/scls/rhscl/rh-python312/" + state: "present" + rhel: + - name: "epel" + state: "present" + - name: "ius" + url: "https://repo.ius.io/redhat/7/x86_64/" + state: "present" + - name: "scl" + url: "https://www.softwarecollections.org/en/scls/rhscl/rh-python312/" + state: "present" + rocky: + - name: "epel" + state: "present" + alma: + - name: "epel" + state: "present" + fedora: + - name: "epel" + state: "present" + +# Команды для обновления пакетов +python_update_commands: + debian: "apt update" + ubuntu: "apt update" + redhat: "dnf update -y" + centos: "dnf update -y" + rhel: "dnf update -y" + rocky: "dnf update -y" + alma: "dnf update -y" + fedora: "dnf update -y" + suse: "zypper refresh" + opensuse: "zypper refresh" + alt: "apt-get update" + "alt linux": "apt-get update" + astra: "apt update" + "astra linux": "apt update" + +# Команды для установки пакетов +python_install_commands: + debian: "apt install -y" + ubuntu: "apt install -y" + redhat: "dnf install -y" + centos: "dnf install -y" + rhel: "dnf install -y" + rocky: "dnf install -y" + alma: "dnf install -y" + fedora: "dnf install -y" + suse: "zypper install -y" + opensuse: "zypper install -y" + alt: "apt-get install -y" + "alt linux": "apt-get install -y" + astra: "apt install -y" + "astra linux": "apt install -y" + +# Пути к исполняемым файлам Python +python_executable_paths: + debian: "/usr/bin/python3.12" + ubuntu: "/usr/bin/python3.12" + redhat: "/usr/bin/python3.12" + centos: "/usr/bin/python3.12" + rhel: "/usr/bin/python3.12" + rocky: "/usr/bin/python3.12" + alma: "/usr/bin/python3.12" + fedora: "/usr/bin/python3.12" + suse: "/usr/bin/python3.12" + opensuse: "/usr/bin/python3.12" + alt: "/usr/bin/python3.12" + "alt linux": "/usr/bin/python3.12" + astra: "/usr/bin/python3.12" + "astra linux": "/usr/bin/python3.12" + +# Пути к pip +python_pip_paths: + debian: "/usr/bin/pip3.12" + ubuntu: "/usr/bin/pip3.12" + redhat: "/usr/bin/pip3.12" + centos: "/usr/bin/pip3.12" + rhel: "/usr/bin/pip3.12" + rocky: "/usr/bin/pip3.12" + alma: "/usr/bin/pip3.12" + fedora: "/usr/bin/pip3.12" + suse: "/usr/bin/pip3.12" + opensuse: "/usr/bin/pip3.12" + alt: "/usr/bin/pip3.12" + "alt linux": "/usr/bin/pip3.12" + astra: "/usr/bin/pip3.12" + "astra linux": "/usr/bin/pip3.12" + +# Системные зависимости для компиляции +python_build_deps_by_os: + debian: + - build-essential + - zlib1g-dev + - libssl-dev + - libffi-dev + - libsqlite3-dev + - libreadline-dev + - libbz2-dev + - libncurses5-dev + - libncursesw5-dev + - xz-utils + - tk-dev + - libgdbm-dev + - libdb-dev + - libpcap-dev + - liblzma-dev + ubuntu: + - build-essential + - zlib1g-dev + - libssl-dev + - libffi-dev + - libsqlite3-dev + - libreadline-dev + - libbz2-dev + - libncurses5-dev + - libncursesw5-dev + - xz-utils + - tk-dev + - libgdbm-dev + - libdb-dev + - libpcap-dev + - liblzma-dev + redhat: + - gcc + - gcc-c++ + - make + - zlib-devel + - openssl-devel + - libffi-devel + - sqlite-devel + - readline-devel + - bzip2-devel + - ncurses-devel + - xz-devel + - tk-devel + - gdbm-devel + - db4-devel + - libpcap-devel + - expat-devel + - libnsl2-devel + centos: + - gcc + - gcc-c++ + - make + - zlib-devel + - openssl-devel + - libffi-devel + - sqlite-devel + - readline-devel + - bzip2-devel + - ncurses-devel + - xz-devel + - tk-devel + - gdbm-devel + - expat-devel + # Альтернативные пакеты для CentOS + - gdbm + - db4 + rhel: + - gcc + - gcc-c++ + - make + - zlib-devel + - openssl-devel + - libffi-devel + - sqlite-devel + - readline-devel + - bzip2-devel + - ncurses-devel + - xz-devel + - tk-devel + - gdbm-devel + - expat-devel + rocky: + - gcc + - gcc-c++ + - make + - zlib-devel + - openssl-devel + - libffi-devel + - sqlite-devel + - readline-devel + - bzip2-devel + - ncurses-devel + - xz-devel + - tk-devel + - gdbm-devel + - expat-devel + alma: + - gcc + - gcc-c++ + - make + - zlib-devel + - openssl-devel + - libffi-devel + - sqlite-devel + - readline-devel + - bzip2-devel + - ncurses-devel + - xz-devel + - tk-devel + - gdbm-devel + - expat-devel + fedora: + - gcc + - gcc-c++ + - make + - zlib-devel + - openssl-devel + - libffi-devel + - sqlite-devel + - readline-devel + - bzip2-devel + - ncurses-devel + - xz-devel + - tk-devel + - gdbm-devel + - expat-devel + suse: + - gcc + - gcc-c++ + - make + - zlib-devel + - libopenssl-devel + - libffi-devel + - sqlite3-devel + - readline-devel + - bzip2-devel + - ncurses-devel + - xz-devel + - tk-devel + - gdbm-devel + - libpcap-devel + - expat-devel + - libnsl2-devel + opensuse: + - gcc + - gcc-c++ + - make + - zlib-devel + - libopenssl-devel + - libffi-devel + - sqlite3-devel + - readline-devel + - bzip2-devel + - ncurses-devel + - xz-devel + - tk-devel + - gdbm-devel + - expat-devel + alt: + - gcc + - gcc-c++ + - make + - zlib-devel + - openssl-devel + - libffi-devel + - sqlite-devel + - readline-devel + - bzip2-devel + - ncurses-devel + - xz-devel + - tk-devel + - gdbm-devel + - expat-devel + astra: + - build-essential + - zlib1g-dev + - libssl-dev + - libffi-dev + - libsqlite3-dev + - libreadline-dev + - libbz2-dev + - libncurses5-dev + - libncursesw5-dev + - xz-utils + - tk-dev + - libgdbm-dev + - libdb-dev + - libpcap-dev + - liblzma-dev + "alt linux": + - gcc + - gcc-c++ + - make + - zlib-devel + - openssl-devel + - libffi-devel + - sqlite-devel + - readline-devel + - bzip2-devel + - ncurses-devel + - xz-devel + - tk-devel + - gdbm-devel + - expat-devel + "astra linux": + - build-essential + - zlib1g-dev + - libssl-dev + - libffi-dev + - libsqlite3-dev + - libreadline-dev + - libbz2-dev + - libncurses5-dev + - libncursesw5-dev + - xz-utils + - tk-dev + - libgdbm-dev + - libdb-dev + - libpcap-dev + - liblzma-devel