feat: добавлена универсальная роль docker и обновлена документация
Some checks failed
Ansible Testing / lint (push) Has been cancelled
Ansible Testing / test (default) (push) Has been cancelled
Ansible Testing / test (minimal) (push) Has been cancelled
Ansible Testing / test (performance) (push) Has been cancelled
Ansible Testing / deploy-check (push) Has been cancelled
Some checks failed
Ansible Testing / lint (push) Has been cancelled
Ansible Testing / test (default) (push) Has been cancelled
Ansible Testing / test (minimal) (push) Has been cancelled
Ansible Testing / test (performance) (push) Has been cancelled
Ansible Testing / deploy-check (push) Has been cancelled
- Создана универсальная роль docker для установки Docker и Docker Compose - Поддержка Debian, Ubuntu, CentOS, AlmaLinux, Rocky, RHEL - Установка через официальный репозиторий или get.docker.com - Полностью переписана документация README.md с актуальной информацией - Добавлен preset mytest для тестирования - Обновлен roles/deploy.yml с актуальными ролями Автор: Сергей Антропов Сайт: https://devops.org.ru
This commit is contained in:
46
molecule/presets/mytest.yml
Normal file
46
molecule/presets/mytest.yml
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
---
|
||||||
|
#description: Стандартный пресет по умолчанию для тестирования с 2 хостами (Ubuntu + Debian)
|
||||||
|
# Автор: Сергей Антропов
|
||||||
|
# Сайт: https://devops.org.ru
|
||||||
|
|
||||||
|
docker_network: labnet
|
||||||
|
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
|
||||||
|
|
||||||
|
# systemd-ready образы
|
||||||
|
images:
|
||||||
|
alt: "inecs/ansible-lab:alt-linux-latest"
|
||||||
|
astra: "inecs/ansible-lab:astra-linux-latest"
|
||||||
|
rhel: "inecs/ansible-lab:rhel-latest"
|
||||||
|
centos7: "inecs/ansible-lab:centos7-latest"
|
||||||
|
centos8: "inecs/ansible-lab:centos8-latest"
|
||||||
|
centos9: "inecs/ansible-lab:centos9-latest"
|
||||||
|
alma: "inecs/ansible-lab:alma-latest"
|
||||||
|
rocky: "inecs/ansible-lab:rocky-latest"
|
||||||
|
redos: "inecs/ansible-lab:redos-latest"
|
||||||
|
ubuntu20: "inecs/ansible-lab:ubuntu20-latest"
|
||||||
|
ubuntu22: "inecs/ansible-lab:ubuntu22-latest"
|
||||||
|
ubuntu24: "inecs/ansible-lab:ubuntu24-latest"
|
||||||
|
debian9: "inecs/ansible-lab:debian9-latest"
|
||||||
|
debian10: "inecs/ansible-lab:debian10-latest"
|
||||||
|
debian11: "inecs/ansible-lab:debian11-latest"
|
||||||
|
debian12: "inecs/ansible-lab:debian12-latest"
|
||||||
|
|
||||||
|
systemd_defaults:
|
||||||
|
privileged: true
|
||||||
|
command: "/sbin/init"
|
||||||
|
volumes:
|
||||||
|
- "/sys/fs/cgroup:/sys/fs/cgroup:rw"
|
||||||
|
tmpfs: ["/run", "/run/lock"]
|
||||||
|
capabilities: ["SYS_ADMIN"]
|
||||||
|
|
||||||
|
hosts:
|
||||||
|
# Стандартный набор - 2 хоста для базового тестирования (стабильные ОС)
|
||||||
|
- name: u1
|
||||||
|
family: ubuntu22
|
||||||
|
groups: [test]
|
||||||
|
- name: u2
|
||||||
|
family: debian12
|
||||||
|
groups: [test]
|
||||||
|
- name: u3
|
||||||
|
family: centos9
|
||||||
|
groups: [test]
|
||||||
@@ -6,5 +6,6 @@
|
|||||||
- name: Развертывание всех ролей
|
- name: Развертывание всех ролей
|
||||||
hosts: all
|
hosts: all
|
||||||
roles:
|
roles:
|
||||||
- ping
|
# - ping
|
||||||
# - devops
|
# - devops
|
||||||
|
- docker
|
||||||
|
|||||||
@@ -19,6 +19,33 @@
|
|||||||
devops_sudo_validate: "{{ devops_os_config[devops_os_name].sudo_validate | default(devops_os_config[devops_os_family].sudo_validate | default('visudo -cf %s')) }}"
|
devops_sudo_validate: "{{ devops_os_config[devops_os_name].sudo_validate | default(devops_os_config[devops_os_family].sudo_validate | default('visudo -cf %s')) }}"
|
||||||
when: devops_os_name is defined
|
when: devops_os_name is defined
|
||||||
|
|
||||||
|
# Проверка существования групп перед созданием пользователя
|
||||||
|
- name: "Проверка существования групп"
|
||||||
|
getent:
|
||||||
|
database: "group"
|
||||||
|
key: "{{ item }}"
|
||||||
|
register: group_check
|
||||||
|
failed_when: false
|
||||||
|
changed_when: false
|
||||||
|
loop: "{{ devops_user_groups }}"
|
||||||
|
when: devops_user_groups is defined
|
||||||
|
|
||||||
|
# Фильтрация только существующих групп
|
||||||
|
- name: "Фильтрация существующих групп"
|
||||||
|
set_fact:
|
||||||
|
devops_existing_groups: "{{ group_check.results | selectattr('ansible_facts', 'defined') | map(attribute='item') | list }}"
|
||||||
|
when: group_check is defined
|
||||||
|
|
||||||
|
# Создание отсутствующих групп (если необходимо)
|
||||||
|
- name: "Создание группы docker если она не существует"
|
||||||
|
group:
|
||||||
|
name: "docker"
|
||||||
|
state: "present"
|
||||||
|
become: true
|
||||||
|
when:
|
||||||
|
- "'docker' in devops_user_groups"
|
||||||
|
- "'docker' not in (devops_existing_groups | default([]))"
|
||||||
|
|
||||||
# Генерация безопасного пароля для пользователя devops
|
# Генерация безопасного пароля для пользователя devops
|
||||||
- name: "Генерация безопасного пароля для пользователя devops"
|
- name: "Генерация безопасного пароля для пользователя devops"
|
||||||
set_fact:
|
set_fact:
|
||||||
@@ -31,7 +58,7 @@
|
|||||||
name: "{{ devops_user.name }}"
|
name: "{{ devops_user.name }}"
|
||||||
home: "{{ devops_user.home }}"
|
home: "{{ devops_user.home }}"
|
||||||
shell: "{{ devops_user.shell }}"
|
shell: "{{ devops_user.shell }}"
|
||||||
groups: "{{ devops_user_groups }}"
|
groups: "{{ devops_existing_groups | default(devops_user_groups) }}"
|
||||||
create_home: "{{ devops_user.create_home }}"
|
create_home: "{{ devops_user.create_home }}"
|
||||||
state: "{{ devops_user.state }}"
|
state: "{{ devops_user.state }}"
|
||||||
password: "{{ devops_user_password | password_hash('sha512') }}"
|
password: "{{ devops_user_password | password_hash('sha512') }}"
|
||||||
@@ -67,6 +94,17 @@
|
|||||||
validate: "{{ devops_sudo_validate }}"
|
validate: "{{ devops_sudo_validate }}"
|
||||||
become: true
|
become: true
|
||||||
|
|
||||||
|
# Добавление пользователя в группу docker (если группа существует)
|
||||||
|
- name: "Добавление пользователя в группу docker"
|
||||||
|
user:
|
||||||
|
name: "{{ devops_user.name }}"
|
||||||
|
groups: "{{ devops_user_groups }}"
|
||||||
|
append: true
|
||||||
|
become: true
|
||||||
|
when:
|
||||||
|
- "'docker' in devops_user_groups"
|
||||||
|
- "'docker' in (devops_existing_groups | default([]))"
|
||||||
|
|
||||||
# Логирование успешного создания пользователя
|
# Логирование успешного создания пользователя
|
||||||
- name: "Логирование создания пользователя devops"
|
- name: "Логирование создания пользователя devops"
|
||||||
debug:
|
debug:
|
||||||
|
|||||||
193
roles/docker/README.md
Normal file
193
roles/docker/README.md
Normal file
@@ -0,0 +1,193 @@
|
|||||||
|
# Роль docker
|
||||||
|
|
||||||
|
## Описание
|
||||||
|
|
||||||
|
Универсальная роль Ansible для установки и настройки Docker и Docker Compose на различных Linux-дистрибутивах.
|
||||||
|
|
||||||
|
Роль автоматически определяет семейство ОС (Debian/Ubuntu или Red Hat/CentOS/AlmaLinux) и использует соответствующий метод установки.
|
||||||
|
|
||||||
|
**Поддерживаемые ОС:**
|
||||||
|
- Debian 9/10/11/12
|
||||||
|
- Ubuntu 20.04/22.04/24.04
|
||||||
|
- CentOS 7/8/9
|
||||||
|
- AlmaLinux 8/9
|
||||||
|
- Rocky Linux 8/9
|
||||||
|
- RHEL 8/9
|
||||||
|
|
||||||
|
**Автор:** Сергей Антропов
|
||||||
|
**Сайт:** https://devops.org.ru
|
||||||
|
|
||||||
|
## Переменные
|
||||||
|
|
||||||
|
| Переменная | По умолчанию | Описание |
|
||||||
|
|------------|--------------|----------|
|
||||||
|
| `docker_version` | `"latest"` | Версия Docker CE для установки |
|
||||||
|
| `docker_compose_version` | `"latest"` | Версия Docker Compose (для standalone версии) |
|
||||||
|
| `docker_use_official_repo` | `true` | Использовать официальный репозиторий Docker |
|
||||||
|
| `docker_use_compose_plugin` | `true` | Использовать docker-compose-plugin вместо standalone |
|
||||||
|
| `docker_users` | `[]` | Список пользователей для добавления в группу docker |
|
||||||
|
| `docker_service_enabled` | `true` | Автозапуск Docker при загрузке |
|
||||||
|
| `docker_service_state` | `started` | Состояние службы Docker |
|
||||||
|
| `docker_additional_packages` | `[]` | Дополнительные пакеты для установки |
|
||||||
|
| `docker_install_method` | `"official"` | Метод установки: 'official' или 'get.docker.com' |
|
||||||
|
|
||||||
|
## Примеры использования
|
||||||
|
|
||||||
|
### Базовое использование
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- hosts: all
|
||||||
|
roles:
|
||||||
|
- docker
|
||||||
|
```
|
||||||
|
|
||||||
|
### Установка с добавлением пользователей
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- hosts: all
|
||||||
|
roles:
|
||||||
|
- role: docker
|
||||||
|
vars:
|
||||||
|
docker_users:
|
||||||
|
- ansible
|
||||||
|
- deploy
|
||||||
|
```
|
||||||
|
|
||||||
|
### Установка через скрипт get.docker.com
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- hosts: all
|
||||||
|
roles:
|
||||||
|
- role: docker
|
||||||
|
vars:
|
||||||
|
docker_install_method: "get.docker.com"
|
||||||
|
docker_use_official_repo: false
|
||||||
|
```
|
||||||
|
|
||||||
|
### Установка standalone Docker Compose
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- hosts: all
|
||||||
|
roles:
|
||||||
|
- role: docker
|
||||||
|
vars:
|
||||||
|
docker_use_compose_plugin: false
|
||||||
|
docker_compose_version: "2.23.0"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Установка с дополнительными пакетами
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
- hosts: all
|
||||||
|
roles:
|
||||||
|
- role: docker
|
||||||
|
vars:
|
||||||
|
docker_additional_packages:
|
||||||
|
- docker-ce-rootless-extras
|
||||||
|
```
|
||||||
|
|
||||||
|
## Зависимости
|
||||||
|
|
||||||
|
Нет зависимостей от других ролей.
|
||||||
|
|
||||||
|
## Требования
|
||||||
|
|
||||||
|
- Ansible 2.9+
|
||||||
|
- Python 3.6+
|
||||||
|
- Права sudo на целевых хостах
|
||||||
|
- Доступ к интернету для загрузки пакетов
|
||||||
|
|
||||||
|
## Что делает роль
|
||||||
|
|
||||||
|
1. Определяет семейство ОС (Debian или Red Hat)
|
||||||
|
2. Устанавливает необходимые зависимости
|
||||||
|
3. Добавляет официальный репозиторий Docker
|
||||||
|
4. Устанавливает Docker CE и Docker Compose
|
||||||
|
5. Запускает и включает службу Docker
|
||||||
|
6. Создает группу docker
|
||||||
|
7. Добавляет пользователей в группу docker
|
||||||
|
8. Проверяет корректность установки
|
||||||
|
|
||||||
|
## Проверка установки
|
||||||
|
|
||||||
|
После выполнения роли проверьте установку:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Проверка версии Docker
|
||||||
|
docker --version
|
||||||
|
|
||||||
|
# Проверка версии Docker Compose
|
||||||
|
docker compose version
|
||||||
|
# или
|
||||||
|
docker-compose --version
|
||||||
|
|
||||||
|
# Проверка статуса службы
|
||||||
|
systemctl status docker
|
||||||
|
|
||||||
|
# Проверка информации о Docker
|
||||||
|
docker info
|
||||||
|
```
|
||||||
|
|
||||||
|
## Пример playbook для тестирования
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
- name: Установка Docker на все хосты
|
||||||
|
hosts: all
|
||||||
|
become: yes
|
||||||
|
roles:
|
||||||
|
- role: docker
|
||||||
|
vars:
|
||||||
|
docker_users:
|
||||||
|
- ansible
|
||||||
|
docker_use_compose_plugin: true
|
||||||
|
|
||||||
|
post_tasks:
|
||||||
|
- name: Запуск тестового контейнера
|
||||||
|
docker_container:
|
||||||
|
name: hello-world
|
||||||
|
image: hello-world:latest
|
||||||
|
state: started
|
||||||
|
|
||||||
|
- name: Проверка запущенных контейнеров
|
||||||
|
command: docker ps -a
|
||||||
|
register: docker_ps
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Вывод списка контейнеров
|
||||||
|
debug:
|
||||||
|
var: docker_ps.stdout_lines
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Docker не запускается
|
||||||
|
|
||||||
|
Проверьте журналы systemd:
|
||||||
|
```bash
|
||||||
|
sudo journalctl -u docker.service
|
||||||
|
```
|
||||||
|
|
||||||
|
### Проблемы с репозиторием
|
||||||
|
|
||||||
|
Для Ubuntu/Debian, если репозиторий не добавляется:
|
||||||
|
```bash
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
|
||||||
|
```
|
||||||
|
|
||||||
|
### Проблемы с правами
|
||||||
|
|
||||||
|
Если пользователь не может запускать docker без sudo:
|
||||||
|
```bash
|
||||||
|
sudo usermod -aG docker $USER
|
||||||
|
# Выйдите и войдите снова
|
||||||
|
```
|
||||||
|
|
||||||
|
## Лицензия
|
||||||
|
|
||||||
|
MIT
|
||||||
|
|
||||||
|
## Автор
|
||||||
|
|
||||||
|
Сергей Антропов - https://devops.org.ru
|
||||||
33
roles/docker/defaults/main.yml
Normal file
33
roles/docker/defaults/main.yml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
# Переменные по умолчанию для роли docker
|
||||||
|
# Автор: Сергей Антропов
|
||||||
|
# Сайт: https://devops.org.ru
|
||||||
|
|
||||||
|
# Версия Docker CE
|
||||||
|
docker_version: "latest"
|
||||||
|
|
||||||
|
# Версия Docker Compose (если не используется docker-compose-plugin)
|
||||||
|
docker_compose_version: "latest"
|
||||||
|
|
||||||
|
# Использовать ли официальный репозиторий Docker (рекомендуется)
|
||||||
|
docker_use_official_repo: true
|
||||||
|
|
||||||
|
# Использовать ли docker-compose-plugin (вместо standalone docker-compose)
|
||||||
|
docker_use_compose_plugin: true
|
||||||
|
|
||||||
|
# Пользователь для добавления в группу docker
|
||||||
|
docker_users: []
|
||||||
|
# - ansible
|
||||||
|
# - deploy
|
||||||
|
|
||||||
|
# Автозапуск Docker при загрузке системы
|
||||||
|
docker_service_enabled: true
|
||||||
|
|
||||||
|
# Автозапуск Docker при загрузке системы
|
||||||
|
docker_service_state: started
|
||||||
|
|
||||||
|
# Дополнительные пакеты для установки
|
||||||
|
docker_additional_packages: []
|
||||||
|
|
||||||
|
# Метод установки: 'official' (официальный репозиторий) или 'get.docker.com' (скрипт)
|
||||||
|
docker_install_method: "get.docker.com"
|
||||||
104
roles/docker/examples.yml
Normal file
104
roles/docker/examples.yml
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
---
|
||||||
|
# Примеры использования роли docker
|
||||||
|
# Автор: Сергей Антропов
|
||||||
|
# Сайт: https://devops.org.ru
|
||||||
|
|
||||||
|
- name: Базовый пример установки Docker
|
||||||
|
hosts: all
|
||||||
|
become: yes
|
||||||
|
roles:
|
||||||
|
- docker
|
||||||
|
|
||||||
|
- name: Установка Docker с добавлением пользователей
|
||||||
|
hosts: all
|
||||||
|
become: yes
|
||||||
|
roles:
|
||||||
|
- role: docker
|
||||||
|
vars:
|
||||||
|
docker_users:
|
||||||
|
- ansible
|
||||||
|
- deploy
|
||||||
|
- developer
|
||||||
|
|
||||||
|
- name: Установка Docker через скрипт get.docker.com
|
||||||
|
hosts: all
|
||||||
|
become: yes
|
||||||
|
roles:
|
||||||
|
- role: docker
|
||||||
|
vars:
|
||||||
|
docker_install_method: "get.docker.com"
|
||||||
|
docker_use_official_repo: false
|
||||||
|
|
||||||
|
- name: Установка Docker с standalone Docker Compose
|
||||||
|
hosts: all
|
||||||
|
become: yes
|
||||||
|
roles:
|
||||||
|
- role: docker
|
||||||
|
vars:
|
||||||
|
docker_use_compose_plugin: false
|
||||||
|
docker_compose_version: "2.23.0"
|
||||||
|
|
||||||
|
- name: Установка Docker с дополнительными пакетами
|
||||||
|
hosts: all
|
||||||
|
become: yes
|
||||||
|
roles:
|
||||||
|
- role: docker
|
||||||
|
vars:
|
||||||
|
docker_additional_packages:
|
||||||
|
- docker-ce-rootless-extras
|
||||||
|
|
||||||
|
- name: Полный пример с тестированием
|
||||||
|
hosts: all
|
||||||
|
become: yes
|
||||||
|
roles:
|
||||||
|
- role: docker
|
||||||
|
vars:
|
||||||
|
docker_users:
|
||||||
|
- ansible
|
||||||
|
docker_use_compose_plugin: true
|
||||||
|
|
||||||
|
post_tasks:
|
||||||
|
- name: Проверка версии Docker
|
||||||
|
command: docker --version
|
||||||
|
register: docker_version
|
||||||
|
changed_when: false
|
||||||
|
failed_when: false
|
||||||
|
|
||||||
|
- name: Вывод версии Docker
|
||||||
|
debug:
|
||||||
|
msg: "{{ docker_version.stdout }}"
|
||||||
|
|
||||||
|
- name: Проверка версии Docker Compose
|
||||||
|
shell: |
|
||||||
|
if command -v docker compose &> /dev/null; then
|
||||||
|
docker compose version
|
||||||
|
elif command -v docker-compose &> /dev/null; then
|
||||||
|
docker-compose --version
|
||||||
|
fi
|
||||||
|
register: docker_compose_version
|
||||||
|
changed_when: false
|
||||||
|
failed_when: false
|
||||||
|
|
||||||
|
- name: Вывод версии Docker Compose
|
||||||
|
debug:
|
||||||
|
msg: "{{ docker_compose_version.stdout }}"
|
||||||
|
|
||||||
|
- name: Запуск тестового контейнера
|
||||||
|
docker_container:
|
||||||
|
name: hello-world
|
||||||
|
image: hello-world:latest
|
||||||
|
state: started
|
||||||
|
|
||||||
|
- name: Проверка запущенных контейнеров
|
||||||
|
command: docker ps -a
|
||||||
|
register: docker_ps
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Вывод списка контейнеров
|
||||||
|
debug:
|
||||||
|
var: docker_ps.stdout_lines
|
||||||
|
|
||||||
|
- name: Удаление тестового контейнера
|
||||||
|
docker_container:
|
||||||
|
name: hello-world
|
||||||
|
state: absent
|
||||||
22
roles/docker/handlers/main.yml
Normal file
22
roles/docker/handlers/main.yml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
---
|
||||||
|
# Обработчики для роли docker
|
||||||
|
# Автор: Сергей Антропов
|
||||||
|
# Сайт: https://devops.org.ru
|
||||||
|
|
||||||
|
- name: Restart docker
|
||||||
|
become: true
|
||||||
|
systemd:
|
||||||
|
name: docker
|
||||||
|
state: restarted
|
||||||
|
|
||||||
|
- name: Reload docker
|
||||||
|
become: true
|
||||||
|
systemd:
|
||||||
|
name: docker
|
||||||
|
state: reloaded
|
||||||
|
|
||||||
|
- name: Restart docker socket
|
||||||
|
become: true
|
||||||
|
systemd:
|
||||||
|
name: docker.socket
|
||||||
|
state: restarted
|
||||||
35
roles/docker/meta/main.yml
Normal file
35
roles/docker/meta/main.yml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
---
|
||||||
|
galaxy_info:
|
||||||
|
author: Сергей Антропов
|
||||||
|
description: Универсальная роль Ansible для установки и настройки Docker и Docker Compose на различных Linux-дистрибутивах
|
||||||
|
company: https://devops.org.ru
|
||||||
|
license: MIT
|
||||||
|
min_ansible_version: "2.9"
|
||||||
|
platforms:
|
||||||
|
- name: Ubuntu
|
||||||
|
versions:
|
||||||
|
- focal
|
||||||
|
- jammy
|
||||||
|
- noble
|
||||||
|
- name: Debian
|
||||||
|
versions:
|
||||||
|
- stretch
|
||||||
|
- buster
|
||||||
|
- bullseye
|
||||||
|
- bookworm
|
||||||
|
- name: EL
|
||||||
|
versions:
|
||||||
|
- "7"
|
||||||
|
- "8"
|
||||||
|
- "9"
|
||||||
|
- name: Rocky
|
||||||
|
versions:
|
||||||
|
- "8.0"
|
||||||
|
- "9.0"
|
||||||
|
galaxy_tags:
|
||||||
|
- docker
|
||||||
|
- dockercompose
|
||||||
|
- container
|
||||||
|
- virtualization
|
||||||
|
- linux
|
||||||
|
dependencies: []
|
||||||
250
roles/docker/tasks/main.yml
Normal file
250
roles/docker/tasks/main.yml
Normal file
@@ -0,0 +1,250 @@
|
|||||||
|
---
|
||||||
|
# Задачи для роли docker
|
||||||
|
# Автор: Сергей Антропов
|
||||||
|
# Сайт: https://devops.org.ru
|
||||||
|
|
||||||
|
# Определяем семейство ОС для выбора правильного метода установки
|
||||||
|
- name: Определение семейства ОС
|
||||||
|
set_fact:
|
||||||
|
docker_os_family: "{{ ansible_os_family }}"
|
||||||
|
docker_pkg_manager: "{{ 'yum' if ansible_pkg_mgr == 'yum' else ('dnf' if ansible_pkg_mgr == 'dnf' else 'apt') }}"
|
||||||
|
|
||||||
|
# Устанавливаем предварительные зависимости
|
||||||
|
- name: Установка зависимостей для Debian/Ubuntu
|
||||||
|
become: true
|
||||||
|
apt:
|
||||||
|
name:
|
||||||
|
- apt-transport-https
|
||||||
|
- ca-certificates
|
||||||
|
- curl
|
||||||
|
- gnupg
|
||||||
|
- lsb-release
|
||||||
|
- software-properties-common
|
||||||
|
state: present
|
||||||
|
update_cache: yes
|
||||||
|
when: ansible_os_family == "Debian"
|
||||||
|
|
||||||
|
- name: Установка зависимостей для Red Hat
|
||||||
|
become: true
|
||||||
|
package:
|
||||||
|
name:
|
||||||
|
- yum-utils
|
||||||
|
- device-mapper-persistent-data
|
||||||
|
- lvm2
|
||||||
|
state: present
|
||||||
|
when: ansible_os_family == "RedHat"
|
||||||
|
failed_when: false
|
||||||
|
|
||||||
|
# Добавляем официальный репозиторий Docker для Debian/Ubuntu
|
||||||
|
- name: Добавление GPG ключа Docker для Debian/Ubuntu
|
||||||
|
become: true
|
||||||
|
shell: |
|
||||||
|
install -m 0755 -d /etc/apt/keyrings
|
||||||
|
curl -fsSL https://download.docker.com/linux/{{ (ansible_distribution | lower) }}/gpg -o /etc/apt/keyrings/docker.asc
|
||||||
|
chmod a+r /etc/apt/keyrings/docker.asc
|
||||||
|
args:
|
||||||
|
creates: /etc/apt/keyrings/docker.asc
|
||||||
|
when:
|
||||||
|
- ansible_os_family == "Debian"
|
||||||
|
- docker_use_official_repo
|
||||||
|
|
||||||
|
- name: Добавление репозитория Docker для Debian/Ubuntu
|
||||||
|
become: true
|
||||||
|
apt_repository:
|
||||||
|
repo: "deb [arch={{ ansible_architecture }} signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/{{ (ansible_distribution | lower) }} {{ ansible_distribution_release }} stable"
|
||||||
|
state: present
|
||||||
|
filename: docker
|
||||||
|
update_cache: yes
|
||||||
|
when:
|
||||||
|
- ansible_os_family == "Debian"
|
||||||
|
- docker_use_official_repo
|
||||||
|
|
||||||
|
# Добавляем официальный репозиторий Docker для Red Hat
|
||||||
|
- name: Добавление репозитория Docker для Red Hat через dnf
|
||||||
|
become: true
|
||||||
|
shell: |
|
||||||
|
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
|
||||||
|
args:
|
||||||
|
creates: /etc/yum.repos.d/docker-ce.repo
|
||||||
|
when:
|
||||||
|
- ansible_os_family == "RedHat"
|
||||||
|
- ansible_pkg_mgr == "dnf"
|
||||||
|
- docker_use_official_repo
|
||||||
|
failed_when: false
|
||||||
|
|
||||||
|
- name: Добавление репозитория Docker для Red Hat через yum-config-manager
|
||||||
|
become: true
|
||||||
|
shell: |
|
||||||
|
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
|
||||||
|
args:
|
||||||
|
creates: /etc/yum.repos.d/docker-ce.repo
|
||||||
|
when:
|
||||||
|
- ansible_os_family == "RedHat"
|
||||||
|
- ansible_pkg_mgr == "yum"
|
||||||
|
- docker_use_official_repo
|
||||||
|
failed_when: false
|
||||||
|
|
||||||
|
# Устанавливаем Docker через официальный репозиторий
|
||||||
|
- name: Установка Docker CE для Debian/Ubuntu (официальный репозиторий)
|
||||||
|
become: true
|
||||||
|
apt:
|
||||||
|
name:
|
||||||
|
- docker-ce
|
||||||
|
- docker-ce-cli
|
||||||
|
- containerd.io
|
||||||
|
- docker-buildx-plugin
|
||||||
|
state: "{{ 'present' if docker_version == 'latest' else docker_version }}"
|
||||||
|
update_cache: yes
|
||||||
|
when:
|
||||||
|
- ansible_os_family == "Debian"
|
||||||
|
- docker_use_official_repo
|
||||||
|
- docker_install_method == "official"
|
||||||
|
|
||||||
|
- name: Установка Docker CE для Red Hat (официальный репозиторий)
|
||||||
|
become: true
|
||||||
|
package:
|
||||||
|
name:
|
||||||
|
- docker-ce
|
||||||
|
- docker-ce-cli
|
||||||
|
- containerd.io
|
||||||
|
- docker-buildx-plugin
|
||||||
|
state: "{{ 'present' if docker_version == 'latest' else docker_version }}"
|
||||||
|
when:
|
||||||
|
- ansible_os_family == "RedHat"
|
||||||
|
- docker_use_official_repo
|
||||||
|
- docker_install_method == "official"
|
||||||
|
|
||||||
|
# Устанавливаем Docker через скрипт get.docker.com
|
||||||
|
- name: Проверка наличия Docker
|
||||||
|
stat:
|
||||||
|
path: /usr/bin/docker
|
||||||
|
register: docker_binary
|
||||||
|
|
||||||
|
- name: Скачивание скрипта установки Docker
|
||||||
|
become: true
|
||||||
|
get_url:
|
||||||
|
url: https://get.docker.com
|
||||||
|
dest: /tmp/get-docker.sh
|
||||||
|
mode: '0755'
|
||||||
|
when:
|
||||||
|
- docker_install_method == "get.docker.com" or docker_use_official_repo == false
|
||||||
|
- not docker_binary.stat.exists
|
||||||
|
|
||||||
|
- name: Установка Docker через скрипт get.docker.com
|
||||||
|
become: true
|
||||||
|
command: /tmp/get-docker.sh
|
||||||
|
args:
|
||||||
|
creates: /usr/bin/docker
|
||||||
|
when:
|
||||||
|
- docker_install_method == "get.docker.com" or docker_use_official_repo == false
|
||||||
|
- not docker_binary.stat.exists
|
||||||
|
|
||||||
|
- name: Проверка установки Docker
|
||||||
|
become: true
|
||||||
|
command: docker --version
|
||||||
|
register: docker_version_check
|
||||||
|
changed_when: false
|
||||||
|
failed_when: false
|
||||||
|
|
||||||
|
- name: Вывод версии Docker
|
||||||
|
debug:
|
||||||
|
msg: "{{ docker_version_check.stdout if docker_version_check.rc == 0 else 'Docker не установлен' }}"
|
||||||
|
|
||||||
|
# Устанавливаем docker-compose-plugin для Debian/Ubuntu
|
||||||
|
- name: Установка docker-compose-plugin для Debian/Ubuntu
|
||||||
|
become: true
|
||||||
|
apt:
|
||||||
|
name:
|
||||||
|
- docker-compose-plugin
|
||||||
|
state: present
|
||||||
|
when:
|
||||||
|
- ansible_os_family == "Debian"
|
||||||
|
- docker_use_compose_plugin
|
||||||
|
- docker_use_official_repo
|
||||||
|
|
||||||
|
# Устанавливаем docker-compose-plugin для Red Hat
|
||||||
|
- name: Установка docker-compose-plugin для Red Hat
|
||||||
|
become: true
|
||||||
|
package:
|
||||||
|
name:
|
||||||
|
- docker-compose-plugin
|
||||||
|
state: present
|
||||||
|
when:
|
||||||
|
- ansible_os_family == "RedHat"
|
||||||
|
- docker_use_compose_plugin
|
||||||
|
- docker_use_official_repo
|
||||||
|
|
||||||
|
# Устанавливаем standalone docker-compose
|
||||||
|
- name: Скачивание docker-compose
|
||||||
|
become: true
|
||||||
|
get_url:
|
||||||
|
url: "https://github.com/docker/compose/releases/{{ 'latest/download' if docker_compose_version == 'latest' else 'download/v' + docker_compose_version }}/docker-compose-{{ ansible_system }}-{{ ansible_machine }}"
|
||||||
|
dest: /usr/local/bin/docker-compose
|
||||||
|
mode: '0755'
|
||||||
|
when:
|
||||||
|
- not docker_use_compose_plugin or docker_compose_version != 'latest'
|
||||||
|
|
||||||
|
- name: Проверка установки Docker Compose
|
||||||
|
become: true
|
||||||
|
shell: |
|
||||||
|
set -o pipefail
|
||||||
|
if command -v docker compose &> /dev/null; then
|
||||||
|
docker compose version
|
||||||
|
elif command -v docker-compose &> /dev/null; then
|
||||||
|
docker-compose --version
|
||||||
|
else
|
||||||
|
echo "Docker Compose не установлен"
|
||||||
|
fi
|
||||||
|
register: docker_compose_version_check
|
||||||
|
changed_when: false
|
||||||
|
failed_when: false
|
||||||
|
|
||||||
|
- name: Вывод версии Docker Compose
|
||||||
|
debug:
|
||||||
|
msg: "{{ docker_compose_version_check.stdout if docker_compose_version_check.rc == 0 else 'Docker Compose не установлен' }}"
|
||||||
|
|
||||||
|
# Запускаем и включаем службу Docker
|
||||||
|
- name: Запуск службы Docker
|
||||||
|
become: true
|
||||||
|
systemd:
|
||||||
|
name: docker
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
|
|
||||||
|
# Создаем группу docker
|
||||||
|
- name: Создание группы docker
|
||||||
|
become: true
|
||||||
|
group:
|
||||||
|
name: docker
|
||||||
|
state: present
|
||||||
|
|
||||||
|
# Добавляем пользователей в группу docker
|
||||||
|
- name: Добавление пользователей в группу docker
|
||||||
|
become: true
|
||||||
|
user:
|
||||||
|
name: "{{ item }}"
|
||||||
|
groups: docker
|
||||||
|
append: yes
|
||||||
|
loop: "{{ docker_users }}"
|
||||||
|
when: docker_users | length > 0
|
||||||
|
|
||||||
|
# Устанавливаем дополнительные пакеты
|
||||||
|
- name: Установка дополнительных пакетов
|
||||||
|
become: true
|
||||||
|
package:
|
||||||
|
name: "{{ docker_additional_packages }}"
|
||||||
|
state: present
|
||||||
|
when: docker_additional_packages | length > 0
|
||||||
|
|
||||||
|
# Проверка статуса Docker
|
||||||
|
- name: Проверка статуса Docker
|
||||||
|
become: true
|
||||||
|
command: docker info
|
||||||
|
register: docker_info
|
||||||
|
changed_when: false
|
||||||
|
failed_when: false
|
||||||
|
|
||||||
|
- name: Вывод информации о Docker
|
||||||
|
debug:
|
||||||
|
msg: "Docker успешно установлен и запущен"
|
||||||
|
when: docker_info.rc == 0
|
||||||
89
roles/docker/tests/test.yml
Normal file
89
roles/docker/tests/test.yml
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
---
|
||||||
|
# Тестовый playbook для роли docker
|
||||||
|
# Автор: Сергей Антропов
|
||||||
|
# Сайт: https://devops.org.ru
|
||||||
|
|
||||||
|
- name: Тестирование установки Docker
|
||||||
|
hosts: all
|
||||||
|
become: yes
|
||||||
|
roles:
|
||||||
|
- role: docker
|
||||||
|
vars:
|
||||||
|
docker_users:
|
||||||
|
- ansible
|
||||||
|
|
||||||
|
post_tasks:
|
||||||
|
- name: Проверка установки Docker
|
||||||
|
command: docker --version
|
||||||
|
register: docker_version_check
|
||||||
|
changed_when: false
|
||||||
|
failed_when: false
|
||||||
|
|
||||||
|
- name: Проверка установки Docker Compose
|
||||||
|
shell: |
|
||||||
|
if command -v docker compose &> /dev/null; then
|
||||||
|
docker compose version
|
||||||
|
elif command -v docker-compose &> /dev/null; then
|
||||||
|
docker-compose --version
|
||||||
|
else
|
||||||
|
echo "Docker Compose не найден"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
register: docker_compose_check
|
||||||
|
changed_when: false
|
||||||
|
failed_when: false
|
||||||
|
|
||||||
|
- name: Вывод результатов проверки
|
||||||
|
debug:
|
||||||
|
msg:
|
||||||
|
- "Docker: {{ docker_version_check.stdout }}"
|
||||||
|
- "Docker Compose: {{ docker_compose_check.stdout }}"
|
||||||
|
|
||||||
|
- name: Проверка статуса службы Docker
|
||||||
|
systemd:
|
||||||
|
name: docker
|
||||||
|
register: docker_service
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Вывод статуса службы
|
||||||
|
debug:
|
||||||
|
msg: "Docker service is {{ docker_service.status.ActiveState }}"
|
||||||
|
|
||||||
|
- name: Проверка группы docker
|
||||||
|
group:
|
||||||
|
name: docker
|
||||||
|
register: docker_group_check
|
||||||
|
|
||||||
|
- name: Вывод информации о группе
|
||||||
|
debug:
|
||||||
|
msg: "Group docker exists with gid {{ docker_group_check.group.gid }}"
|
||||||
|
|
||||||
|
- name: Запуск тестового контейнера
|
||||||
|
docker_container:
|
||||||
|
name: test-container
|
||||||
|
image: alpine:latest
|
||||||
|
command: echo "Hello from Docker"
|
||||||
|
state: started
|
||||||
|
|
||||||
|
- name: Проверка запущенных контейнеров
|
||||||
|
command: docker ps -a
|
||||||
|
register: docker_ps
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Вывод списка контейнеров
|
||||||
|
debug:
|
||||||
|
var: docker_ps.stdout_lines
|
||||||
|
|
||||||
|
- name: Удаление тестового контейнера
|
||||||
|
docker_container:
|
||||||
|
name: test-container
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: Проверка успешного завершения теста
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- docker_version_check.rc == 0
|
||||||
|
- docker_compose_check.rc == 0
|
||||||
|
- docker_service.status.ActiveState == "active"
|
||||||
|
fail_msg: "Тестирование не пройдено"
|
||||||
|
success_msg: "Все тесты пройдены успешно"
|
||||||
Reference in New Issue
Block a user