feat: Добавлена роль Python 3.12 и восстановлена роль Docker
- Создана универсальная роль Python для установки Python 3.12 на всех ОС - Восстановлена роль Docker из git истории - Исправлены все ошибки линтера - Обновлен deploy.yml с правильным порядком ролей: devops → python → docker - Удалена устаревшая роль ping - Добавлена поддержка альтернативных репозиториев для старых ОС Автор: Сергей Антропов Сайт: https://devops.org.ru
This commit is contained in:
@@ -96,11 +96,11 @@ hosts:
|
|||||||
# =============================================================================
|
# =============================================================================
|
||||||
# RHEL СЕРВЕРЫ (ARM64)
|
# RHEL СЕРВЕРЫ (ARM64)
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
- name: rhel1
|
#- name: rhel1
|
||||||
family: rhel
|
# family: rhel
|
||||||
groups: [cod, rhel]
|
# groups: [cod, rhel]
|
||||||
platform: "linux/arm64" # Используем ARM64
|
# platform: "linux/arm64" # Используем ARM64
|
||||||
docker_options:
|
# docker_options:
|
||||||
platform: "linux/arm64"
|
# platform: "linux/arm64"
|
||||||
docker_platform: "linux/arm64"
|
# docker_platform: "linux/arm64"
|
||||||
|
|
||||||
|
|||||||
@@ -84,10 +84,10 @@ hosts:
|
|||||||
# =============================================================================
|
# =============================================================================
|
||||||
# REDOS СЕРВЕРЫ (ARM64)
|
# REDOS СЕРВЕРЫ (ARM64)
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
- name: redos1
|
#- name: redos1
|
||||||
family: redos
|
# family: redos
|
||||||
groups: [geop, redos]
|
# groups: [geop, redos]
|
||||||
platform: "linux/arm64" # Используем ARM64
|
# platform: "linux/arm64" # Используем ARM64
|
||||||
docker_options:
|
# docker_options:
|
||||||
platform: "linux/arm64"
|
# platform: "linux/arm64"
|
||||||
docker_platform: "linux/arm64"
|
# docker_platform: "linux/arm64"
|
||||||
|
|||||||
@@ -5,10 +5,9 @@
|
|||||||
|
|
||||||
- name: Развертывание всех ролей
|
- name: Развертывание всех ролей
|
||||||
hosts: all
|
hosts: all
|
||||||
vars_files:
|
become: true
|
||||||
- "{{ vault_file_path | default(omit) }}"
|
|
||||||
roles:
|
roles:
|
||||||
# - ping
|
- devops
|
||||||
- devops
|
- python
|
||||||
# - devops2
|
- docker
|
||||||
# - docker
|
|
||||||
|
|||||||
@@ -9,14 +9,14 @@
|
|||||||
- name: "Проверка наличия пароля пользователя devops"
|
- name: "Проверка наличия пароля пользователя devops"
|
||||||
fail:
|
fail:
|
||||||
msg: "Пароль пользователя devops не найден в vault/secrets.yml. Установите переменную vault_devops_password."
|
msg: "Пароль пользователя devops не найден в vault/secrets.yml. Установите переменную vault_devops_password."
|
||||||
when:
|
when:
|
||||||
- vault_file_path is defined
|
- vault_file_path is defined
|
||||||
- devops_password == ""
|
- devops_password == ""
|
||||||
|
|
||||||
- name: "Проверка наличия SSH публичного ключа"
|
- name: "Проверка наличия SSH публичного ключа"
|
||||||
fail:
|
fail:
|
||||||
msg: "SSH публичный ключ не найден в vault/secrets.yml. Установите переменную vault_devops_ssh_public_key."
|
msg: "SSH публичный ключ не найден в vault/secrets.yml. Установите переменную vault_devops_ssh_public_key."
|
||||||
when:
|
when:
|
||||||
- vault_file_path is defined
|
- vault_file_path is defined
|
||||||
- devops_ssh_public_key == ""
|
- devops_ssh_public_key == ""
|
||||||
|
|
||||||
|
|||||||
@@ -127,7 +127,7 @@
|
|||||||
dest: /tmp/get-docker.sh
|
dest: /tmp/get-docker.sh
|
||||||
mode: '0755'
|
mode: '0755'
|
||||||
when:
|
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
|
- not docker_binary.stat.exists
|
||||||
|
|
||||||
- name: Установка Docker через скрипт get.docker.com
|
- name: Установка Docker через скрипт get.docker.com
|
||||||
@@ -136,7 +136,7 @@
|
|||||||
args:
|
args:
|
||||||
creates: /usr/bin/docker
|
creates: /usr/bin/docker
|
||||||
when:
|
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
|
- not docker_binary.stat.exists
|
||||||
|
|
||||||
- name: Проверка установки Docker
|
- name: Проверка установки Docker
|
||||||
|
|||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
---
|
|
||||||
# Handlers для роли ping
|
|
||||||
# Автор: Сергей Антропов
|
|
||||||
# Сайт: https://devops.org.ru
|
|
||||||
|
|
||||||
# В данный момент handlers не требуются для роли ping (пустой файл для совместимости)
|
|
||||||
[]
|
|
||||||
@@ -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: []
|
|
||||||
@@ -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
|
|
||||||
@@ -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
|
|
||||||
246
roles/python/README.md
Normal file
246
roles/python/README.md
Normal file
@@ -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 в репозитории проекта.
|
||||||
60
roles/python/defaults/main.yml
Normal file
60
roles/python/defaults/main.yml
Normal file
@@ -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"
|
||||||
66
roles/python/example-playbook.yml
Normal file
66
roles/python/example-playbook.yml
Normal file
@@ -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 }} готов к использованию!
|
||||||
44
roles/python/handlers/main.yml
Normal file
44
roles/python/handlers/main.yml
Normal file
@@ -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 # Установить пакет
|
||||||
|
|
||||||
|
🚀 Готово к работе!
|
||||||
54
roles/python/meta/main.yml
Normal file
54
roles/python/meta/main.yml
Normal file
@@ -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: []
|
||||||
544
roles/python/tasks/main.yml
Normal file
544
roles/python/tasks/main.yml
Normal file
@@ -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 # Установить пакет
|
||||||
|
|
||||||
|
🚀 Готово к работе!
|
||||||
474
roles/python/vars/main.yml
Normal file
474
roles/python/vars/main.yml
Normal file
@@ -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
|
||||||
Reference in New Issue
Block a user