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
		
			
				
	
	
		
			251 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			251 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
---
 | 
						||
# Задачи для роли 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
 |