Добавить 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