Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
ansible:over [2023/08/05 05:09] admin создано |
ansible:over [2024/11/20 09:51] (текущий) admin |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | < | ||
- | < | ||
- | Управление хостами, | ||
- | При запуске плейбука из консоли, | ||
- | |||
- | В командах мы описываем желаемое состояние системы, | ||
- | Команды можно выполнять одиночно из cli, либо объединять в файлы конфигурации т.н. плейбуки **" | ||
- | |||
- | < | ||
- | < | ||
- | Описано две задачи, | ||
- | |||
- | <code yaml> | ||
- | - hosts: web-servers | ||
- | tasks: | ||
- | - name: Installs nginx web server | ||
- | apt: pkg=nginx state=installed update_cache=true | ||
- | - name: Push future default virtual host configuration | ||
- | copy: src=files/ | ||
- | </ | ||
- | </ | ||
- | |||
- | |||
- | **Inventory** файл в котором хранится перечень целевых хостов, | ||
- | По умолчанию **/ | ||
- | Хосты могут объединяться в группы, | ||
- | |||
- | < | ||
- | < | ||
- | ./ | ||
- | <code yaml> | ||
- | all: | ||
- | children: | ||
- | myGroup: | ||
- | vars: | ||
- | myVariable1: | ||
- | myVariable2: | ||
- | myVariable3: | ||
- | hosts: | ||
- | alias1: | ||
- | ansible_host: | ||
- | alias2: | ||
- | ansible_host: | ||
- | alias3: | ||
- | ansible_host: | ||
- | </ | ||
- | Непонятки с организацией этого инвентаря, | ||
- | |||
- | Далее в коде доступны эти хосты и набор переменных к каждому | ||
- | ./test.yaml | ||
- | <code yaml> | ||
- | ... | ||
- | with_items: "{{ groups[' | ||
- | |||
- | "{{ hostvars[item] }}" # Элемент группы, | ||
- | "{{ hostvars[item][myVariable1-4] }}" # Во вложенном массиве доступна вся инфа о хосте, в т.ч. набор переменных из инвентори, | ||
- | </ | ||
- | </ | ||
- | |||
- | |||
- | **Roles**, роли используются для разделения плейбука на части, и организации файлов. Для роли создается каталог, | ||
- | Создание происходит автоматически, | ||
- | Особенность в том что роли могут быть вложенными т.е. составлять цепочку выполнения\\ | ||
- | {{: | ||
- | |||
- | |||
- | Все переменные в ансибл **глобальные**, | ||
- | Хороший путь ансибл это максимально **простое и линейное описание** последовательного процесса, | ||
- | **Шаблоны** нечто иное как использование переменных типа **{ { inventory_hostname } }** (двойные скобки вместе), | ||
- | **notify** обработчик, | ||
- | **handlers** описание обработчика, | ||
- | **ansible.cfg** основной конфиг\\ | ||
- | |||
- | < | ||
- | < | ||
- | [[https:// | ||
- | <code yaml> | ||
- | [defaults] | ||
- | # Используемый инвентори | ||
- | inventory = ./myhosts | ||
- | |||
- | # Чтобы убрать предупреждение об автопоиске питона | ||
- | interpreter_python = auto_silent | ||
- | |||
- | # Подключаемый пользователь | ||
- | remote_user = anuser | ||
- | |||
- | # Отключение подтверждения нового ssh ключа | ||
- | host_key_checking = False | ||
- | |||
- | # Отключение сбора фактов | ||
- | gathering = explicit | ||
- | </ | ||
- | </ | ||
- | </ | ||
- | |||
===== Использование ===== | ===== Использование ===== | ||
Строка 253: | Строка 157: | ||
Ключ для запроса в cmd: --ask-vault-pass | Ключ для запроса в cmd: --ask-vault-pass | ||
Ключ для указания в cmd: --vault-password-file | Ключ для указания в cmd: --vault-password-file | ||
+ | |||
+ | |||
+ | # ask password | ||
+ | --ask-vault-password, | ||
+ | |||
+ | # создать, | ||
+ | ansible-vault create new_file | ||
+ | |||
+ | # расшифровать | ||
+ | ansible-vault decrypt file.txt --output file.txt_open | ||
+ | |||
+ | # открыть для редактирования, | ||
+ | ansible-vault edit | ||
+ | |||
+ | ansible-vault view | ||
</ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | |||
+ | <code bash> | ||
+ | export chiphertext=' | ||
+ | 63363161346637313765383762356535366637653435313436623435666166326338346163303232 | ||
+ | 6432313962643561306631303363613334303664666536350a653561613564343236313766646336 | ||
+ | 66336363396339353734643732343833333135336662613038326435633831613935326434633865 | ||
+ | 6631626366386234620a386332633965613436386337613138353762623566623461353034653832 | ||
+ | 62306266396439656533636430643261376331616436656334376430386264656532' | ||
+ | |||
+ | printf " | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
Строка 605: | Строка 542: | ||
</ | </ | ||
</ | </ | ||
+ | |||
+ | |||
+ | <code yml> | ||
+ | # become для винды | ||
+ | become: yes | ||
+ | become_method: | ||
+ | become_user: | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | Есть проблемы с синхронным/ | ||
+ | <code yml> | ||
+ | - name: " | ||
+ | win_shell: | | ||
+ | cd {{ my_path }} | ||
+ | ./ | ||
+ | async: 15 | ||
+ | ignore_errors: | ||
+ | register: start_app | ||
+ | failed_when: | ||
+ | |||
+ | |||
+ | # Еще примеры запуска скриптов/ | ||
+ | - name: " | ||
+ | win_shell: | | ||
+ | cd {{ my_path }} | ||
+ | ./ | ||
+ | |||
+ | |||
+ | - name: " | ||
+ | win_shell: | | ||
+ | cd {{ my_path }} | ||
+ | (Start-Process java -ArgumentList " | ||
+ | |||
+ | # Рестарт | ||
+ | Stop-Process -Id $(cat myScript.pid) | ||
+ | ./ | ||
+ | </ | ||
+ | |||
+ | |||
+ | Переменная с результатом содержит примерно такой вывод, при условии что консоль продолжила работать\\ | ||
+ | (и started и finished == 1)\\ | ||
+ | Если консоль сразу же корректно завершилась то вывод не отличается, | ||
+ | <code bash> | ||
+ | ok: [host_mes_mds_prod] => { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | Смысл в том что можно в рантайме сформировать группу хостов, | ||
+ | |||
+ | Динамические группы формируются на все попадаемые значения, | ||
+ | |||
+ | Так же использовать можно только в текущем плейбуке, | ||
+ | Например: | ||
+ | <code yaml> | ||
+ | # Выполняем на всех хостах, | ||
+ | - hosts: all | ||
+ | gather_facts: | ||
+ | tasks: | ||
+ | - name: Set ' | ||
+ | group_by: | ||
+ | key: "{{ variable_in_host }}" | ||
+ | |||
+ | # Далее запускаем плейбуки с определенными параметрами только для нужной группы | ||
+ | - hosts: value_1 | ||
+ | gather_facts: | ||
+ | roles: | ||
+ | - my_role_for_1 | ||
+ | |||
+ | - hosts: value_2 | ||
+ | gather_facts: | ||
+ | roles: | ||
+ | - my_role_for_2 | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | === Command & shell === | ||
+ | **command** - работает чуть быстрее но запускается не через оболочку (" | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | <code yaml> | ||
+ | - name: " | ||
+ | ansible.builtin.shell: | ||
+ | register: try_name | ||
+ | |||
+ | - name: " | ||
+ | debug: | ||
+ | msg: "{{ try_name }}" | ||
+ | </ | ||
+ | |||
+ | |||
+ | <code bash> | ||
+ | ok: [localhost] => { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ] | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | <code yaml> | ||
+ | </ | ||
+ | </ | ||
+ |