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:
@@ -6,5 +6,6 @@
|
||||
- name: Развертывание всех ролей
|
||||
hosts: all
|
||||
roles:
|
||||
- ping
|
||||
# - ping
|
||||
# - 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')) }}"
|
||||
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
|
||||
- name: "Генерация безопасного пароля для пользователя devops"
|
||||
set_fact:
|
||||
@@ -31,7 +58,7 @@
|
||||
name: "{{ devops_user.name }}"
|
||||
home: "{{ devops_user.home }}"
|
||||
shell: "{{ devops_user.shell }}"
|
||||
groups: "{{ devops_user_groups }}"
|
||||
groups: "{{ devops_existing_groups | default(devops_user_groups) }}"
|
||||
create_home: "{{ devops_user.create_home }}"
|
||||
state: "{{ devops_user.state }}"
|
||||
password: "{{ devops_user_password | password_hash('sha512') }}"
|
||||
@@ -67,6 +94,17 @@
|
||||
validate: "{{ devops_sudo_validate }}"
|
||||
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"
|
||||
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