mirror of
https://github.com/ilyamak04/DevOps.git
synced 2025-04-11 01:54:50 +02:00
summary ansible: second day
This commit is contained in:
parent
4278c73a90
commit
6c205e0818
@ -1,3 +1,4 @@
|
||||
### Quick start
|
||||
- Устанавливаем ansible на машину
|
||||
```bash
|
||||
# Для Ubuntu
|
||||
@ -11,7 +12,7 @@ sudo apt install ansible
|
||||
[web_servers]
|
||||
archers ansible_host=176.119.89.45 ansible_user=archer ansible_private_key=/home/ilyamak04/.ssh/archers
|
||||
```
|
||||
#### Про инвентарный файл (что можно делать?)
|
||||
### Про инвентарный файл (что можно делать?)
|
||||
- Разбивать сервера на группы
|
||||
```ini
|
||||
[dev_servers]
|
||||
@ -51,7 +52,7 @@ db_servers
|
||||
|
||||
> По умолчанию любой сервер входит в 2 группы: 1) all 2) ungrouped или пользовательская группа
|
||||
|
||||
#### Про конфигурационный файл `ansible.cfg`
|
||||
### Про конфигурационный файл `ansible.cfg`
|
||||
- Ansible ищет конфигурационный файл в нескольких местах, в следующем порядке при запуске:
|
||||
|
||||
1. В текущем каталоге — если существует файл ansible.cfg в директории, из которой запускается Ansible.
|
||||
@ -62,7 +63,7 @@ Ansible будет использовать первый найденный ко
|
||||
|
||||
Файл ansible.cfg лучше хранить в проекте, инфраструктуру когорого менеджерит ansible, а вот инвентарный файл hosts.ini можно хранить где угодно на Ansible-Master хосте, главное в .cfg задать путь к hosts.ini
|
||||
|
||||
#### Основные секции `ansible.cfg`
|
||||
### Основные секции `ansible.cfg`
|
||||
- [defaults] - Это основная секция для установки параметров по умолчанию
|
||||
```ini
|
||||
[defaults]
|
||||
@ -108,9 +109,177 @@ log_path = /var/log/ansible.log
|
||||
### Ad-Hoc команды
|
||||
`ansible [опции] <группа-хостов> -m <модуль> -a <аргументы>` - структура Ad-Hoc команд
|
||||
|
||||
- `ansible -i hosts.ini all -m setup` - выводит подробную информацию про конфигурацию хостов.
|
||||
- `ansible -i hosts.ini all -m setup` - модуль, который собирает детальную информацию о системе каждого хоста (например, информацию о процессоре, операционной системе, памяти, сетевых интерфейсах и т.д.). Эта информация затем может быть использована в плейбуках или для отладки.
|
||||
- `ansible -i hosts.ini all -m ping` - проверка доступности хостов.
|
||||
- `ansible -i hosts.ini all -m shell -a "rm -rf /"` - запускает команду в кавычках на хостах, выводит вывод команды со всех хостов в консоль.
|
||||
- `ansible -i hosts.ini all -m command -a "rm -rf /"` - Команда(ы) не будут обрабатываться через shell, поэтому переменные типа $HOSTNAME и операции типа "*", "<", ">", "|", ";" и "&" не будут работать. Используйте модуль ansible.builtin.shell, если вам нужны эти функции. То есть command более секьюрная.
|
||||
- `ansible -i hosts.ini all -m copy -a "src=filename.txt dest=/home mode=777" -b` - ну тут понятно что команда делает, флаг `-b` - это выполнить от суперпользователя
|
||||
|
||||
Про модуль `file` - С помощью этого модуля можно изменять права доступа, владельцев, группы, создавать или удалять файлы и директории, а также устанавливать символические ссылки.
|
||||
|
||||
Вот основные параметры, которые можно использовать с модулем file:
|
||||
|
||||
- `path`: путь к файлу или директории, с которыми нужно работать.
|
||||
- `state`: определяет, что должно быть сделано с файлом или директорией. Возможные значения:
|
||||
- `touch`: создать пустой файл, если он не существует, или обновить время доступа и модификации, если файл уже существует.
|
||||
- `absent`: удалить файл или директорию.
|
||||
- `directory`: создать директорию.
|
||||
- `file`: создать файл.
|
||||
- `link`: создать символическую ссылку.
|
||||
- `hard`: создать жесткую ссылку.
|
||||
- `owner`: владелец файла или директории.
|
||||
- `group`: группа файла или директории.
|
||||
- `mode`: права доступа к файлу или директории, указанные в виде числового значения (например, 0644).
|
||||
- `recurse`: рекурсивно изменяет права, владельцев или группы для директорий и их содержимого (поддиректорий и файлов).
|
||||
|
||||
- `ansible -i hosts.ini all -m file -a "path=/home/privet.txt state=absent" -b` - удаляет файл
|
||||
- `ansible -i hosts.ini all -m get_url -a "url=https://link/on/download/file dest=/home" -b` - скачивает файл из интернета
|
||||
- `ansible -i hosts.ini all -m apt -a "name=nginx state=present" --become` - устанаваливает пакет на Ubuntu/Debian (-b и --become эквивалентны)
|
||||
- `ansible -i hosts.ini all -m uri -a "url=https://www.content.ru return_content=yes"` - Модуль uri в Ansible используется для взаимодействия с веб-сервисами через HTTP или HTTPS. Этот модуль позволяет выполнять запросы к REST API, загружать данные, отправлять данные на удалённый сервер и проверять доступность веб-сервисов.
|
||||
|
||||
Модуль `service` в Ansible используется для управления системными сервисами на удалённых хостах. Он позволяет запускать, останавливать, перезапускать и изменять состояние сервисов, а также управлять их включением при загрузке системы.
|
||||
|
||||
- `name`: Название сервиса, который нужно управлять. Например, apache2, nginx, ssh, и т. д.
|
||||
- `state`: Указывает желаемое состояние сервиса. Возможные значения:
|
||||
- `started`: Запустить сервис.
|
||||
- `stopped`: Остановить сервис.
|
||||
- `restarted`: Перезапустить сервис.
|
||||
- `reloaded`: Перезагрузить конфигурацию сервиса без остановки.
|
||||
- `enabled`: Включить сервис при загрузке системы.
|
||||
- `disabled`: Отключить сервис от автозагрузки.
|
||||
- `enabled`: Указывает, должен ли сервис автоматически запускаться при загрузке системы. Значения могут быть true или false.
|
||||
- `ansible -i hosts.ini all -m service -a "name=nginx state=started enabled=yes" -b`
|
||||
> Все демоны могут считаться сервисами, но не все сервисы являются демонами
|
||||
|
||||
### group_vars
|
||||
Директория `group_vars` должна находиться в директории с инвентарным файлом.
|
||||
```css
|
||||
├── ansible.cfg
|
||||
├── inventory/
|
||||
│ ├── hosts
|
||||
├── group_vars/
|
||||
│ ├── all.yml
|
||||
│ ├── web_servers.yml
|
||||
│ └── db_servers.yml
|
||||
└── playbook.yml
|
||||
```
|
||||
Внутри директории group_vars могут находиться файлы с именами групп из инвентаря. Эти файлы содержат переменные, которые будут применяться ко всем хостам, принадлежащим к соответствующей группе.
|
||||
|
||||
- Файл web_servers.yml содержит переменные, которые будут применяться ко всем серверам группы web_servers.
|
||||
|
||||
- Файл all.yml содержит переменные для всех хостов, независимо от группы.
|
||||
|
||||
#### Основные моменты
|
||||
- **Приоритеты**: Если переменные определены в нескольких местах, например, в файлах group_vars, host_vars или playbook, Ansible применяет переменные в следующем порядке:
|
||||
|
||||
1. Переменные, определённые внутри задач в плейбуке (самый высокий приоритет).
|
||||
|
||||
2. Переменные, указанные для конкретных хостов (host_vars).
|
||||
|
||||
3. Переменные из группы хостов (group_vars).
|
||||
|
||||
4. Переменные для всех хостов (например, файл group_vars/all.yml).
|
||||
|
||||
5. Значения по умолчанию.
|
||||
|
||||
- **Наследование переменных**: Переменные, определённые в файле для всех хостов (например, `group_vars/all.yml`), могут быть переопределены переменными, определёнными в группе конкретных хостов (например, `group_vars/web_servers.yml`).
|
||||
|
||||
- **Формат файлов**: Файлы в директории `group_vars` могут быть в формате YAML или INI, хотя YAML используется чаще.
|
||||
|
||||
### Флаги
|
||||
- `-b` - от суперюзера
|
||||
- `-k` - `--ask-pass`: ask for connection password
|
||||
- `-K` - `--ask-become-pass`: ask for privilege escalation password
|
||||
- `-v`, `-vv`, `-vvv`, `-vvvv` - подробный вывод для дебага
|
||||
|
||||
### Плейбуки
|
||||
|
||||
Ansible playbook — это файл в формате YAML, который описывает последовательность действий для настройки хостов (серверов). Playbooks позволяют автоматизировать задачи, такие как установка программ, управление конфигурациями, деплой приложений и многое другое. Они состоят из набора инструкций, называемых tasks (задачи), которые выполняются на удалённых хостах, указанных в инвентаре. (определение chat gpt, на мой взгляд неплохое)
|
||||
|
||||
- **Hosts (хосты)** - это часть плейбука, которая указывает, на каких серверах выполнять задачи
|
||||
- `all` означает, что команды будут выполняться на всех хостах из инвентаря.
|
||||
|
||||
- Также можно указывать конкретные группы или отдельные хосты.
|
||||
```yml
|
||||
- hosts: web_servers # Выполнить задачи на всех хостах группы 'web_servers'
|
||||
```
|
||||
- **Tasks (задачи)** - Каждая задача в плейбуке представляет собой отдельное действие (например, установка пакета, редактирование файла, запуск сервиса). Задачи выполняются по порядку, сверху вниз.
|
||||
```yml
|
||||
tasks:
|
||||
- name: Установить Apache
|
||||
ansible.builtin.apt:
|
||||
name: apache2
|
||||
state: present
|
||||
```
|
||||
- **Vars (переменные)** - Можно использовать переменные для хранения данных, таких как имена пользователей, порты, пути к файлам и так далее.
|
||||
```yml
|
||||
- hosts: web_servers
|
||||
become: true
|
||||
|
||||
vars:
|
||||
http_port: 8080
|
||||
document_root: /var/www/html
|
||||
|
||||
tasks:
|
||||
- name: Установить Apache
|
||||
ansible.builtin.apt:
|
||||
name: apache2
|
||||
state: present
|
||||
|
||||
- name: Настроить Apache на нужный порт
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/apache2/ports.conf
|
||||
regexp: '^Listen'
|
||||
line: "Listen {{ http_port }}" # Использование переменной
|
||||
|
||||
- name: Создать директорию DocumentRoot
|
||||
ansible.builtin.file:
|
||||
path: "{{ document_root }}" # Использование переменной
|
||||
state: directory
|
||||
```
|
||||
- **Handlers (обработчики)** - это специальные задачи, которые выполняются **только в случае, если их вызвали**. Их часто используют для таких задач, как перезагрузка сервиса после изменения конфигурационного файла.
|
||||
```yml
|
||||
tasks:
|
||||
- name: Изменить конфигурацию Apache
|
||||
ansible.builtin.template:
|
||||
src: templates/apache.conf.j2
|
||||
dest: /etc/apache2/apache2.conf
|
||||
notify:
|
||||
- Перезапустить Apache
|
||||
|
||||
handlers:
|
||||
- name: Перезапустить Apache
|
||||
ansible.builtin.service:
|
||||
name: apache2
|
||||
state: restarted
|
||||
```
|
||||
- **Become (повышение привилегий)** - Некоторые команды требуют прав администратора (sudo). Для этого используется `become`.
|
||||
```yml
|
||||
tasks:
|
||||
- name: Установить Apache
|
||||
ansible.builtin.apt:
|
||||
name: apache2
|
||||
state: present
|
||||
become: true # Повышение привилегий до sudo
|
||||
```
|
||||
- **Loops (циклы)** - Ansible поддерживает выполнение задач в цикле
|
||||
```yml
|
||||
tasks:
|
||||
- name: Установить список пакетов
|
||||
ansible.builtin.apt:
|
||||
name: "{{ item }}"
|
||||
state: present
|
||||
loop:
|
||||
- apache2
|
||||
- mysql-server
|
||||
- php
|
||||
```
|
||||
- **Conditions (условия)** - Ansible позволяет выполнять задачи только при выполнении определённых условий с помощью `when`.
|
||||
```yml
|
||||
tasks:
|
||||
- name: Установить Apache только на Ubuntu
|
||||
ansible.builtin.apt:
|
||||
name: apache2
|
||||
state: present
|
||||
when: ansible_facts['os_family'] == "Debian"
|
||||
```
|
Loading…
x
Reference in New Issue
Block a user