From c68553cadd78a61761ca03123af7fb035e02afca Mon Sep 17 00:00:00 2001 From: smolkik_adm Date: Sat, 9 May 2026 08:02:51 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20update-docker.yml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- update-docker.yml | 145 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 update-docker.yml diff --git a/update-docker.yml b/update-docker.yml new file mode 100644 index 0000000..7a204bc --- /dev/null +++ b/update-docker.yml @@ -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 \ No newline at end of file