Добавлена роль repo для автоматического добавления репозиториев
- Создана новая роль repo для добавления репозиториев на все ОС - Добавлена поддержка Docker, PostgreSQL, Elasticsearch, Patroni репозиториев - Реализована специальная поддержка российских дистрибутивов: - Astra Linux: добавлены репозитории Lab50 и debian-archive-keyring - Alt Linux: добавлены репозитории Sisyphus (alt-sisyphus, classic, contrib) и Autoimports - Обновлена документация README.md с информацией о новой роли - Обновлен .ansible-lint для подавления необходимых правил - Автор: Сергей Антропов, https://devops.org.ru
This commit is contained in:
84
roles/repo/tasks/alt.yml
Normal file
84
roles/repo/tasks/alt.yml
Normal file
@@ -0,0 +1,84 @@
|
||||
---
|
||||
# Задачи для Alt Linux
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
# Alt Linux использует apt и свои внутренние репозитории
|
||||
|
||||
- name: Обновить кэш пакетов Alt Linux
|
||||
ansible.builtin.raw: apt-get update -qq
|
||||
register: update_result
|
||||
changed_when: update_result.rc == 0
|
||||
failed_when: false
|
||||
|
||||
- name: Установить необходимые пакеты для работы с репозиториями в Alt Linux
|
||||
ansible.builtin.raw: apt-get install -y ca-certificates curl gnupg || true
|
||||
register: install_result
|
||||
changed_when: install_result.rc == 0
|
||||
failed_when: false
|
||||
|
||||
- name: Создать директорию для GPG ключей
|
||||
ansible.builtin.file:
|
||||
path: /usr/share/keyrings
|
||||
state: directory
|
||||
mode: '0755'
|
||||
failed_when: false
|
||||
|
||||
- name: Получить и добавить Docker GPG ключ (используем ключ Debian)
|
||||
ansible.builtin.raw: curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg || true
|
||||
args:
|
||||
creates: /usr/share/keyrings/docker-archive-keyring.gpg
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
|
||||
- name: Попытаться добавить репозиторий Docker для Alt Linux
|
||||
ansible.builtin.raw: echo "deb [arch={{ ansible_architecture }} signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian buster stable" > /etc/apt/sources.list.d/docker.list || true
|
||||
changed_when: false
|
||||
failed_when: false
|
||||
when: ansible_architecture in ["amd64", "x86_64"]
|
||||
|
||||
- name: Проверить и добавить репозиторий Sisyphus (alt-sisyphus)
|
||||
ansible.builtin.raw: grep -q "Sisyphus.*alt-sisyphus" /etc/apt/sources.list || echo "{{ alt_repos['sisyphus_repo'] }}" >> /etc/apt/sources.list
|
||||
register: sisyphus_result
|
||||
changed_when: sisyphus_result.rc == 0
|
||||
failed_when: false
|
||||
|
||||
- name: Проверить и добавить репозиторий Sisyphus classic
|
||||
ansible.builtin.raw: grep -q "Sisyphus.*classic" /etc/apt/sources.list || echo "{{ alt_repos['sisyphus_classic_repo'] }}" >> /etc/apt/sources.list
|
||||
register: sisyphus_classic_result
|
||||
changed_when: sisyphus_classic_result.rc == 0
|
||||
failed_when: false
|
||||
|
||||
- name: Проверить и добавить репозиторий Sisyphus contrib
|
||||
ansible.builtin.raw: grep -q "Sisyphus.*contrib" /etc/apt/sources.list || echo "rpm [alt] http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus x86_64 contrib" >> /etc/apt/sources.list
|
||||
register: sisyphus_contrib_result
|
||||
changed_when: sisyphus_contrib_result.rc == 0
|
||||
failed_when: false
|
||||
|
||||
- name: Проверить и добавить репозиторий autoimports
|
||||
ansible.builtin.raw: grep -q "autoimports" /etc/apt/sources.list || echo "{{ alt_repos['autoimports_repo'] }}" >> /etc/apt/sources.list
|
||||
register: autoimports_result
|
||||
changed_when: autoimports_result.rc == 0
|
||||
failed_when: false
|
||||
|
||||
- name: Обновить кэш пакетов после добавления репозиториев
|
||||
ansible.builtin.raw: apt-get update -qq
|
||||
register: cache_update
|
||||
changed_when: cache_update.rc == 0
|
||||
failed_when: false
|
||||
|
||||
- name: Выполнить обновление пакетов Alt Linux
|
||||
ansible.builtin.raw: apt-get upgrade -y -qq || true
|
||||
register: upgrade_result
|
||||
changed_when: upgrade_result.rc == 0
|
||||
failed_when: false
|
||||
|
||||
- name: Информационное сообщение о репозиториях Alt Linux
|
||||
ansible.builtin.debug:
|
||||
msg: |
|
||||
Роль repo выполнена для Alt Linux.
|
||||
Добавлены репозитории:
|
||||
- Sisyphus (alt-sisyphus) - rolling release с ежедневными обновлениями
|
||||
- Sisyphus (classic) - классический репозиторий
|
||||
- Autoimports - автоматически собранные свежие пакеты из GitHub/GitLab
|
||||
ВНИМАНИЕ: Sisyphus может быть нестабилен, используйте осторожно.
|
||||
PostgreSQL, Elasticsearch и Patroni обычно доступны в базовых репозиториях Alt Linux.
|
||||
119
roles/repo/tasks/astra.yml
Normal file
119
roles/repo/tasks/astra.yml
Normal file
@@ -0,0 +1,119 @@
|
||||
---
|
||||
# Задачи для Astra Linux
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
# Astra Linux основан на Debian, используем apt
|
||||
|
||||
- name: Установить необходимые пакеты для работы с репозиториями
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- ca-certificates
|
||||
- curl
|
||||
- gnupg
|
||||
- lsb-release
|
||||
state: present
|
||||
update_cache: yes
|
||||
|
||||
- name: Создать директорию для GPG ключей
|
||||
ansible.builtin.file:
|
||||
path: /usr/share/keyrings
|
||||
state: directory
|
||||
mode: '0755'
|
||||
|
||||
- name: Получить и добавить Docker GPG ключ (используем ключ Debian)
|
||||
ansible.builtin.shell: |
|
||||
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
|
||||
args:
|
||||
creates: /usr/share/keyrings/docker-archive-keyring.gpg
|
||||
notify: "update apt cache"
|
||||
|
||||
- name: Добавить репозиторий Docker для Astra Linux
|
||||
ansible.builtin.apt_repository:
|
||||
repo: "{{ astra_repos['docker_repo'] }}"
|
||||
state: present
|
||||
filename: docker-ce
|
||||
notify: "update apt cache"
|
||||
|
||||
- name: Получить и добавить PostgreSQL GPG ключ
|
||||
ansible.builtin.shell: |
|
||||
curl -fsSL {{ postgresql_gpg_url }} | gpg --dearmor -o /usr/share/keyrings/postgresql.gpg
|
||||
args:
|
||||
creates: /usr/share/keyrings/postgresql.gpg
|
||||
notify: "update apt cache"
|
||||
|
||||
- name: Добавить репозиторий PostgreSQL для Astra Linux
|
||||
ansible.builtin.apt_repository:
|
||||
repo: "{{ astra_repos['postgresql_repo'] }}"
|
||||
state: present
|
||||
filename: postgresql
|
||||
notify: "update apt cache"
|
||||
|
||||
- name: Получить и добавить Elasticsearch GPG ключ
|
||||
ansible.builtin.shell: |
|
||||
curl -fsSL {{ elasticsearch_gpg_url }} | gpg --dearmor -o /usr/share/keyrings/elasticsearch.gpg
|
||||
args:
|
||||
creates: /usr/share/keyrings/elasticsearch.gpg
|
||||
notify: "update apt cache"
|
||||
|
||||
- name: Добавить репозиторий Elasticsearch для Astra Linux
|
||||
ansible.builtin.apt_repository:
|
||||
repo: "{{ astra_repos['elasticsearch_repo'] }}"
|
||||
state: present
|
||||
filename: elasticsearch
|
||||
notify: "update apt cache"
|
||||
|
||||
- name: Получить скрипт установки Patroni repository для Debian/Ubuntu
|
||||
ansible.builtin.get_url:
|
||||
url: "https://packagecloud.io/install/repositories/patroni/patroni/script.deb.sh"
|
||||
dest: /tmp/patroni-repo-install.sh
|
||||
mode: '0755'
|
||||
|
||||
- name: Запустить скрипт установки Patroni repository
|
||||
ansible.builtin.command: bash /tmp/patroni-repo-install.sh
|
||||
args:
|
||||
creates: /etc/apt/sources.list.d/patroni_patroni.list
|
||||
notify: "update apt cache"
|
||||
|
||||
- name: Очистить временный файл установки Patroni
|
||||
ansible.builtin.file:
|
||||
path: /tmp/patroni-repo-install.sh
|
||||
state: absent
|
||||
|
||||
- name: Установить debian-archive-keyring для поддержки Debian репозиториев
|
||||
ansible.builtin.apt:
|
||||
name: "{{ astra_repos['debian_archive_keyring'] }}"
|
||||
state: present
|
||||
notify: "update apt cache"
|
||||
|
||||
- name: Добавить ключ репозитория Лаборатории 50
|
||||
ansible.builtin.shell: |
|
||||
wget -qO - {{ astra_repos['lab50_key_url'] }} | apt-key add -
|
||||
args:
|
||||
creates: /etc/apt/trusted.gpg.d/lab50.gpg
|
||||
notify: "update apt cache"
|
||||
|
||||
- name: Добавить репозиторий Лаборатории 50
|
||||
ansible.builtin.apt_repository:
|
||||
repo: "{{ astra_repos['lab50_repo'] }}"
|
||||
state: present
|
||||
filename: lab50
|
||||
notify: "update apt cache"
|
||||
|
||||
- name: Добавить репозиторий с исходниками Лаборатории 50
|
||||
ansible.builtin.apt_repository:
|
||||
repo: "{{ astra_repos['lab50_src_repo'] }}"
|
||||
state: present
|
||||
filename: lab50-src
|
||||
notify: "update apt cache"
|
||||
|
||||
- name: Обновить кэш пакетов после добавления всех репозиториев
|
||||
ansible.builtin.apt:
|
||||
update_cache: yes
|
||||
cache_valid_time: 0
|
||||
|
||||
- name: Выполнить обновление пакетов
|
||||
ansible.builtin.apt:
|
||||
upgrade: dist
|
||||
update_cache: yes
|
||||
autoremove: yes
|
||||
autoclean: yes
|
||||
96
roles/repo/tasks/debian.yml
Normal file
96
roles/repo/tasks/debian.yml
Normal file
@@ -0,0 +1,96 @@
|
||||
---
|
||||
# Задачи для Debian/Ubuntu
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
- name: Установить необходимые пакеты для работы с репозиториями
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- ca-certificates
|
||||
- curl
|
||||
- gnupg
|
||||
- lsb-release
|
||||
state: present
|
||||
update_cache: yes
|
||||
allow_unauthenticated: no
|
||||
force_apt_get: yes
|
||||
|
||||
- name: Создать директорию для GPG ключей
|
||||
ansible.builtin.file:
|
||||
path: /usr/share/keyrings
|
||||
state: directory
|
||||
mode: '0755'
|
||||
|
||||
- name: Получить и добавить Docker GPG ключ
|
||||
ansible.builtin.shell: |
|
||||
curl -fsSL {{ docker_gpg_url }} | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
|
||||
args:
|
||||
creates: /usr/share/keyrings/docker-archive-keyring.gpg
|
||||
notify: "update apt cache"
|
||||
|
||||
- name: Добавить репозиторий Docker для {{ os_version_id }}
|
||||
ansible.builtin.apt_repository:
|
||||
repo: "{{ debian_repos[os_version_id]['docker_repo'] }}"
|
||||
state: present
|
||||
filename: docker-ce
|
||||
when: debian_repos is defined and os_version_id in debian_repos
|
||||
notify: "update apt cache"
|
||||
|
||||
- name: Получить и добавить PostgreSQL GPG ключ
|
||||
ansible.builtin.shell: |
|
||||
curl -fsSL {{ postgresql_gpg_url }} | gpg --dearmor -o /usr/share/keyrings/postgresql.gpg
|
||||
args:
|
||||
creates: /usr/share/keyrings/postgresql.gpg
|
||||
notify: "update apt cache"
|
||||
|
||||
- name: Добавить репозиторий PostgreSQL для {{ os_version_id }}
|
||||
ansible.builtin.apt_repository:
|
||||
repo: "{{ debian_repos[os_version_id]['postgresql_repo'] }}"
|
||||
state: present
|
||||
filename: postgresql
|
||||
when: debian_repos is defined and os_version_id in debian_repos
|
||||
notify: "update apt cache"
|
||||
|
||||
- name: Получить и добавить Elasticsearch GPG ключ
|
||||
ansible.builtin.shell: |
|
||||
curl -fsSL {{ elasticsearch_gpg_url }} | gpg --dearmor -o /usr/share/keyrings/elasticsearch.gpg
|
||||
args:
|
||||
creates: /usr/share/keyrings/elasticsearch.gpg
|
||||
notify: "update apt cache"
|
||||
|
||||
- name: Добавить репозиторий Elasticsearch для {{ os_version_id }}
|
||||
ansible.builtin.apt_repository:
|
||||
repo: "{{ debian_repos[os_version_id]['elasticsearch_repo'] }}"
|
||||
state: present
|
||||
filename: elasticsearch
|
||||
when: debian_repos is defined and os_version_id in debian_repos
|
||||
notify: "update apt cache"
|
||||
|
||||
- name: Получить скрипт установки Patroni repository для Debian/Ubuntu
|
||||
ansible.builtin.get_url:
|
||||
url: "https://packagecloud.io/install/repositories/patroni/patroni/script.deb.sh"
|
||||
dest: /tmp/patroni-repo-install.sh
|
||||
mode: '0755'
|
||||
|
||||
- name: Запустить скрипт установки Patroni repository
|
||||
ansible.builtin.command: bash /tmp/patroni-repo-install.sh
|
||||
args:
|
||||
creates: /etc/apt/sources.list.d/patroni_patroni.list
|
||||
notify: "update apt cache"
|
||||
|
||||
- name: Очистить временный файл установки Patroni
|
||||
ansible.builtin.file:
|
||||
path: /tmp/patroni-repo-install.sh
|
||||
state: absent
|
||||
|
||||
- name: Обновить кэш пакетов после добавления всех репозиториев
|
||||
ansible.builtin.apt:
|
||||
update_cache: yes
|
||||
cache_valid_time: 0
|
||||
|
||||
- name: Выполнить обновление пакетов
|
||||
ansible.builtin.apt:
|
||||
upgrade: dist
|
||||
update_cache: yes
|
||||
autoremove: yes
|
||||
autoclean: yes
|
||||
31
roles/repo/tasks/main.yml
Normal file
31
roles/repo/tasks/main.yml
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
# Задачи для роли repo
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
- name: Определить семейство ОС для репозиториев
|
||||
ansible.builtin.set_fact:
|
||||
os_family: "{{ ansible_os_family }}"
|
||||
distribution_lower: "{{ ansible_distribution | lower }}"
|
||||
os_version_id: "{{ ansible_distribution | lower }}{{ ansible_distribution_major_version }}"
|
||||
os_version_id_rhel: "{{ ansible_distribution | lower }}{{ ansible_distribution_major_version }}"
|
||||
|
||||
- name: Включить задачи для Debian/Ubuntu
|
||||
ansible.builtin.include_tasks: debian.yml
|
||||
when: os_family == "Debian" and ansible_distribution != "AstraLinux" and ansible_distribution != "Altlinux"
|
||||
|
||||
- name: Включить задачи для Astra Linux
|
||||
ansible.builtin.include_tasks: astra.yml
|
||||
when: ansible_distribution == "AstraLinux"
|
||||
|
||||
- name: Включить задачи для Alt Linux
|
||||
ansible.builtin.include_tasks: alt.yml
|
||||
when: ansible_distribution == "Altlinux"
|
||||
|
||||
- name: Включить задачи для RHEL/CentOS/AlmaLinux/Rocky
|
||||
ansible.builtin.include_tasks: rhel.yml
|
||||
when: os_family == "RedHat"
|
||||
|
||||
- name: Завершение настройки репозиториев
|
||||
ansible.builtin.debug:
|
||||
msg: "Роль repo успешно выполнена. Все необходимые репозитории добавлены и обновлены."
|
||||
99
roles/repo/tasks/rhel.yml
Normal file
99
roles/repo/tasks/rhel.yml
Normal file
@@ -0,0 +1,99 @@
|
||||
---
|
||||
# Задачи для RHEL/CentOS/AlmaLinux/Rocky
|
||||
# Автор: Сергей Антропов
|
||||
# Сайт: https://devops.org.ru
|
||||
|
||||
- name: Установить необходимые пакеты для работы с репозиториями (yum)
|
||||
ansible.builtin.package:
|
||||
name: yum-utils
|
||||
state: present
|
||||
when: ansible_pkg_mgr == 'yum'
|
||||
|
||||
- name: Установить необходимые пакеты для работы с репозиториями (dnf)
|
||||
ansible.builtin.package:
|
||||
name: dnf-plugins-core
|
||||
state: present
|
||||
when: ansible_pkg_mgr == 'dnf'
|
||||
|
||||
- name: Установить EPEL repository
|
||||
ansible.builtin.dnf:
|
||||
name: epel-release
|
||||
state: present
|
||||
when: ansible_distribution in ['RedHat', 'Rocky', 'CentOS', 'AlmaLinux']
|
||||
|
||||
- name: Определить корректный ключ для RHEL/CentOS 8
|
||||
ansible.builtin.set_fact:
|
||||
rhel_key: "{{ rhel_repos['rhel8'] }}"
|
||||
when: ansible_distribution_major_version == "8" and os_version_id in ["redhat8", "rhel8", "centos8", "almalinux8"]
|
||||
|
||||
- name: Определить корректный ключ для RHEL/CentOS 9
|
||||
ansible.builtin.set_fact:
|
||||
rhel_key: "{{ rhel_repos['rhel9'] }}"
|
||||
when: ansible_distribution_major_version == "9" and os_version_id in ["redhat9", "rhel9", "centos9", "rocky9"]
|
||||
|
||||
- name: Добавить репозиторий Docker
|
||||
ansible.builtin.yum_repository:
|
||||
name: docker-ce
|
||||
description: Docker CE Repository
|
||||
baseurl: "{{ rhel_key['docker_baseurl'] }}"
|
||||
gpgcheck: yes
|
||||
gpgkey: "{{ rhel_key['docker_gpgkey'] }}"
|
||||
enabled: yes
|
||||
when: rhel_key is defined
|
||||
notify: "update dnf cache"
|
||||
|
||||
- name: Добавить репозиторий PostgreSQL
|
||||
ansible.builtin.yum_repository:
|
||||
name: postgresql
|
||||
description: PostgreSQL Official Repository
|
||||
baseurl: "{{ rhel_key['postgresql_baseurl'] }}"
|
||||
gpgcheck: yes
|
||||
gpgkey: "{{ rhel_key['postgresql_gpgkey'] }}"
|
||||
enabled: yes
|
||||
when: rhel_key is defined
|
||||
notify: "update dnf cache"
|
||||
|
||||
- name: Добавить репозиторий Elasticsearch
|
||||
ansible.builtin.yum_repository:
|
||||
name: elasticsearch
|
||||
description: Elasticsearch Repository
|
||||
baseurl: "{{ rhel_key['elasticsearch_baseurl'] }}"
|
||||
gpgcheck: yes
|
||||
gpgkey: "{{ rhel_key['elasticsearch_gpgkey'] }}"
|
||||
enabled: yes
|
||||
when: rhel_key is defined
|
||||
notify: "update dnf cache"
|
||||
|
||||
- name: Получить скрипт установки Patroni repository для RHEL/CentOS
|
||||
ansible.builtin.get_url:
|
||||
url: "https://packagecloud.io/install/repositories/patroni/patroni/script.rpm.sh"
|
||||
dest: /tmp/patroni-repo-install.sh
|
||||
mode: '0755'
|
||||
|
||||
- name: Запустить скрипт установки Patroni repository
|
||||
ansible.builtin.command: bash /tmp/patroni-repo-install.sh
|
||||
args:
|
||||
creates: /etc/yum.repos.d/patroni_patroni.repo
|
||||
notify: "update dnf cache"
|
||||
|
||||
- name: Очистить временный файл установки Patroni
|
||||
ansible.builtin.file:
|
||||
path: /tmp/patroni-repo-install.sh
|
||||
state: absent
|
||||
|
||||
- name: Обновить кэш пакетов после добавления всех репозиториев
|
||||
ansible.builtin.command: "{{ ansible_pkg_mgr }} makecache"
|
||||
register: cache_result
|
||||
changed_when: "'Complete!' in cache_result.stdout or 'Metadata cache created.' in cache_result.stdout"
|
||||
|
||||
- name: Выполнить обновление пакетов через dnf
|
||||
ansible.builtin.command: dnf upgrade -y
|
||||
register: dnf_upgrade
|
||||
changed_when: "'Complete!' in dnf_upgrade.stdout or 'Nothing to do.' not in dnf_upgrade.stdout"
|
||||
when: ansible_pkg_mgr == "dnf"
|
||||
|
||||
- name: Выполнить обновление пакетов через yum
|
||||
ansible.builtin.command: yum upgrade -y
|
||||
register: yum_upgrade
|
||||
changed_when: "'Complete!' in yum_upgrade.stdout or 'Nothing to do.' not in yum_upgrade.stdout"
|
||||
when: ansible_pkg_mgr == "yum"
|
||||
Reference in New Issue
Block a user