Добавить update-docker.yml
This commit is contained in:
145
update-docker.yml
Normal file
145
update-docker.yml
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
---
|
||||||
|
- name: Update Docker and Docker Compose
|
||||||
|
hosts: all
|
||||||
|
become: yes
|
||||||
|
vars:
|
||||||
|
# Версии для установки (если не указаны - будут последние)
|
||||||
|
docker_version: "latest"
|
||||||
|
docker_compose_version: "latest"
|
||||||
|
# Очищать старые пакеты Docker перед установкой
|
||||||
|
purge_old_docker: yes
|
||||||
|
# Перезапускать контейнеры после обновления (нужно для обновления Docker Engine)
|
||||||
|
restart_docker: yes
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Include OS-specific variables
|
||||||
|
include_vars: "{{ ansible_os_family }}.yml"
|
||||||
|
ignore_errors: yes
|
||||||
|
|
||||||
|
- name: Update apt cache (Debian/Ubuntu)
|
||||||
|
apt:
|
||||||
|
update_cache: yes
|
||||||
|
cache_valid_time: 3600
|
||||||
|
when: ansible_os_family == "Debian"
|
||||||
|
|
||||||
|
- name: Remove old Docker packages (if purge_old_docker is true)
|
||||||
|
package:
|
||||||
|
name:
|
||||||
|
- docker
|
||||||
|
- docker-engine
|
||||||
|
- docker.io
|
||||||
|
- containerd
|
||||||
|
- runc
|
||||||
|
state: absent
|
||||||
|
when: purge_old_docker
|
||||||
|
register: old_docker_removed
|
||||||
|
|
||||||
|
- name: Install prerequisites for Docker repository
|
||||||
|
package:
|
||||||
|
name:
|
||||||
|
- apt-transport-https
|
||||||
|
- ca-certificates
|
||||||
|
- curl
|
||||||
|
- gnupg
|
||||||
|
- lsb-release
|
||||||
|
- software-properties-common
|
||||||
|
state: present
|
||||||
|
when: ansible_os_family == "Debian"
|
||||||
|
|
||||||
|
- name: Add Docker GPG key (Debian/Ubuntu)
|
||||||
|
apt_key:
|
||||||
|
url: https://download.docker.com/linux/{{ ansible_distribution | lower }}/gpg
|
||||||
|
state: present
|
||||||
|
when: ansible_os_family == "Debian"
|
||||||
|
|
||||||
|
- name: Add Docker repository (Debian/Ubuntu)
|
||||||
|
apt_repository:
|
||||||
|
repo: "deb [arch=amd64] https://download.docker.com/linux/{{ ansible_distribution | lower }} {{ ansible_distribution_release }} stable"
|
||||||
|
state: present
|
||||||
|
when: ansible_os_family == "Debian"
|
||||||
|
|
||||||
|
- name: Install or update Docker CE (Debian/Ubuntu)
|
||||||
|
apt:
|
||||||
|
name: "docker-ce{% if docker_version != 'latest' %}={{ docker_version }}{% endif %}"
|
||||||
|
state: "{{ 'present' if docker_version != 'latest' else 'latest' }}"
|
||||||
|
update_cache: yes
|
||||||
|
when: ansible_os_family == "Debian"
|
||||||
|
notify: restart docker
|
||||||
|
|
||||||
|
- name: Install Docker CE (RedHat/CentOS)
|
||||||
|
yum:
|
||||||
|
name: "docker-ce{% if docker_version != 'latest' %}-{{ docker_version }}{% endif %}"
|
||||||
|
state: "{{ 'present' if docker_version != 'latest' else 'latest' }}"
|
||||||
|
when: ansible_os_family == "RedHat"
|
||||||
|
|
||||||
|
- name: Install Docker CE (Amazon Linux)
|
||||||
|
yum:
|
||||||
|
name: docker
|
||||||
|
state: latest
|
||||||
|
when: ansible_distribution == "Amazon"
|
||||||
|
|
||||||
|
- name: Ensure Docker service is running and enabled
|
||||||
|
systemd:
|
||||||
|
name: docker
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
|
|
||||||
|
- name: Check current Docker Compose version
|
||||||
|
command: docker-compose --version
|
||||||
|
register: compose_current_version
|
||||||
|
changed_when: false
|
||||||
|
failed_when: false
|
||||||
|
|
||||||
|
- name: Extract current version number
|
||||||
|
set_fact:
|
||||||
|
compose_current: "{{ compose_current_version.stdout | regex_replace('.*v', '') | regex_replace(',.*', '') }}"
|
||||||
|
when: compose_current_version.rc == 0
|
||||||
|
|
||||||
|
- name: Get latest Docker Compose version from GitHub
|
||||||
|
uri:
|
||||||
|
url: https://api.github.com/repos/docker/compose/releases/latest
|
||||||
|
return_content: yes
|
||||||
|
register: github_release
|
||||||
|
when: docker_compose_version == "latest"
|
||||||
|
|
||||||
|
- name: Set Docker Compose version to install
|
||||||
|
set_fact:
|
||||||
|
compose_version_to_install: "{{ github_release.json.tag_name | regex_replace('^v', '') if docker_compose_version == 'latest' else docker_compose_version }}"
|
||||||
|
when: docker_compose_version == "latest" or compose_current != docker_compose_version
|
||||||
|
|
||||||
|
- name: Install or update Docker Compose
|
||||||
|
get_url:
|
||||||
|
url: "https://github.com/docker/compose/releases/download/v{{ compose_version_to_install }}/docker-compose-{{ ansible_system | lower }}-{{ ansible_architecture }}"
|
||||||
|
dest: /usr/local/bin/docker-compose
|
||||||
|
mode: '0755'
|
||||||
|
force: yes
|
||||||
|
when: (docker_compose_version == "latest" and (compose_current_version.rc != 0 or compose_current != compose_version_to_install)) or (docker_compose_version != "latest" and compose_current != docker_compose_version)
|
||||||
|
|
||||||
|
- name: Verify Docker Compose installation
|
||||||
|
command: docker-compose --version
|
||||||
|
register: compose_new_version
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Display Docker Compose version
|
||||||
|
debug:
|
||||||
|
msg: "Docker Compose updated to: {{ compose_new_version.stdout }}"
|
||||||
|
|
||||||
|
- name: Clean up unused Docker packages (Debian/Ubuntu)
|
||||||
|
apt:
|
||||||
|
autoremove: yes
|
||||||
|
purge: yes
|
||||||
|
when: ansible_os_family == "Debian" and purge_old_docker
|
||||||
|
|
||||||
|
handlers:
|
||||||
|
- name: restart docker
|
||||||
|
systemd:
|
||||||
|
name: docker
|
||||||
|
state: restarted
|
||||||
|
when: restart_docker
|
||||||
|
|
||||||
|
- name: restart docker on version change
|
||||||
|
listen: "restart docker"
|
||||||
|
systemd:
|
||||||
|
name: docker
|
||||||
|
state: restarted
|
||||||
|
when: restart_docker
|
||||||
Reference in New Issue
Block a user