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('неизвестная') }} ОС"
 |