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
112 lines
5.0 KiB
YAML
112 lines
5.0 KiB
YAML
---
|
||
# Задачи для роли devops
|
||
# Автор: Сергей Антропов
|
||
# Сайт: https://devops.org.ru
|
||
|
||
# Определение ОС и настройка переменных
|
||
- name: "Определение ОС и настройка переменных"
|
||
set_fact:
|
||
devops_os_family: "{{ ansible_os_family | lower }}"
|
||
devops_distribution: "{{ ansible_distribution | lower }}"
|
||
devops_os_name: "{{ ansible_distribution | lower if ansible_distribution is defined else ansible_os_family | lower }}"
|
||
when: ansible_os_family is defined
|
||
|
||
# Определение групп пользователя в зависимости от ОС
|
||
- name: "Определение групп пользователя для {{ devops_os_name }}"
|
||
set_fact:
|
||
devops_user_groups: "{{ devops_os_config[devops_os_name].groups | default(devops_os_config[devops_os_family].groups | default(['sudo'])) }}"
|
||
devops_sudo_file: "{{ devops_os_config[devops_os_name].sudo_file | default(devops_os_config[devops_os_family].sudo_file | default('/etc/sudoers.d/devops')) }}"
|
||
devops_sudo_validate: "{{ devops_os_config[devops_os_name].sudo_validate | default(devops_os_config[devops_os_family].sudo_validate | default('visudo -cf %s')) }}"
|
||
when: devops_os_name is defined
|
||
|
||
# Проверка существования групп перед созданием пользователя
|
||
- name: "Проверка существования групп"
|
||
getent:
|
||
database: "group"
|
||
key: "{{ item }}"
|
||
register: group_check
|
||
failed_when: false
|
||
changed_when: false
|
||
loop: "{{ devops_user_groups }}"
|
||
when: devops_user_groups is defined
|
||
|
||
# Фильтрация только существующих групп
|
||
- name: "Фильтрация существующих групп"
|
||
set_fact:
|
||
devops_existing_groups: "{{ group_check.results | selectattr('ansible_facts', 'defined') | map(attribute='item') | list }}"
|
||
when: group_check is defined
|
||
|
||
# Создание отсутствующих групп (если необходимо)
|
||
- name: "Создание группы docker если она не существует"
|
||
group:
|
||
name: "docker"
|
||
state: "present"
|
||
become: true
|
||
when:
|
||
- "'docker' in devops_user_groups"
|
||
- "'docker' not in (devops_existing_groups | default([]))"
|
||
|
||
# Генерация безопасного пароля для пользователя devops
|
||
- name: "Генерация безопасного пароля для пользователя devops"
|
||
set_fact:
|
||
devops_user_password: "{{ lookup('password', '/tmp/devops_password length=' + devops_password.length | string + ' chars=ascii_letters,digits,punctuation') }}"
|
||
no_log: true
|
||
|
||
# Создание пользователя devops
|
||
- name: "Создание пользователя devops"
|
||
user:
|
||
name: "{{ devops_user.name }}"
|
||
home: "{{ devops_user.home }}"
|
||
shell: "{{ devops_user.shell }}"
|
||
groups: "{{ devops_existing_groups | default(devops_user_groups) }}"
|
||
create_home: "{{ devops_user.create_home }}"
|
||
state: "{{ devops_user.state }}"
|
||
password: "{{ devops_user_password | password_hash('sha512') }}"
|
||
become: true
|
||
|
||
# Создание SSH директории для пользователя devops
|
||
- name: "Создание SSH директории для пользователя devops"
|
||
file:
|
||
path: "{{ devops_ssh.ssh_dir }}"
|
||
state: directory
|
||
owner: "{{ devops_user.name }}"
|
||
group: "{{ devops_user.name }}"
|
||
mode: "{{ devops_ssh.ssh_dir_mode }}"
|
||
become: true
|
||
|
||
# Добавление SSH ключа в authorized_keys
|
||
- name: "Добавление SSH ключа в authorized_keys"
|
||
authorized_key:
|
||
user: "{{ devops_user.name }}"
|
||
key: "{{ devops_ssh_public_key }}"
|
||
state: present
|
||
manage_dir: false
|
||
become: true
|
||
when: devops_ssh_public_key is defined
|
||
|
||
# Настройка sudo для пользователя devops (без пароля)
|
||
- name: "Настройка sudo для пользователя devops без пароля"
|
||
lineinfile:
|
||
path: "{{ devops_sudo_file }}"
|
||
line: "{{ devops_user.name }} ALL=(ALL) NOPASSWD: {{ devops_sudo.commands }}"
|
||
create: true
|
||
mode: '0440'
|
||
validate: "{{ devops_sudo_validate }}"
|
||
become: true
|
||
|
||
# Добавление пользователя в группу docker (если группа существует)
|
||
- name: "Добавление пользователя в группу docker"
|
||
user:
|
||
name: "{{ devops_user.name }}"
|
||
groups: "{{ devops_user_groups }}"
|
||
append: true
|
||
become: true
|
||
when:
|
||
- "'docker' in devops_user_groups"
|
||
- "'docker' in (devops_existing_groups | default([]))"
|
||
|
||
# Логирование успешного создания пользователя
|
||
- name: "Логирование создания пользователя devops"
|
||
debug:
|
||
msg: "Пользователь {{ devops_user.name }} успешно создан с безопасным паролем и SSH доступом на {{ devops_os_name | default('неизвестная') }} ОС"
|