--- # Задачи для роли 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 # Генерация безопасного пароля для пользователя 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_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 # Логирование успешного создания пользователя - name: "Логирование создания пользователя devops" debug: msg: "Пользователь {{ devops_user.name }} успешно создан с безопасным паролем и SSH доступом на {{ devops_os_name | default('неизвестная') }} ОС"