Ansible FAQ

Мы уже ознакомились с тем, что нужно знать перед началом работы с Ansible.Теперь давайте разберем самые Часто Задаваемые Вопросы, или сокращенно FAQ. Они помогут вам глубже понять тонкости и принцип работы с Ansible. На ранних этапах можете использовать эту статью как некую шпаргалку.

Содержание

Что такое Ansible?

Это ПО с открытым исходным кодом, написанное на Python.

Для чего он используется?

Для автоматизированного выполнения задач поставки программного обеспечения, управления конфигурацией и развертывания приложений.

Есть ли Ansible на Windows?

Нет, но системы с поддержкой WSL (Windows Subsystem for Linux) позволяют запускать дистрибутивы Linux без накладных расходов на виртуальные машины.

Ansible сложный?

Нет, это простой и эффективный инструмент.

Такие сложные задачи как подготовка сервера, управление конфигурацией программных и аппаратных пакетов, развертывание приложений на разных системах, выполняются посредством написания сценариев на человекочитаемом языке YAML. А сами сценарии сродни файлам README.

Какие у него преимущества?

  • Идемпотентность. Свойство, которое при многократном выполнении приводит к тому же результату, что и однократное выполнение.

Ansible – язык программирования? Или каков синтаксис сценариев?

  • Все сценарии Ansible пишутся на YAML — это формат файла, напоминающий JSON, но намного проще для восприятия человеком.

  • Строки можно не заключать в кавычки, даже если они содержат пробелы, но рекомендуется в случае использования двойных фигурных скобок, которые используются для подстановки значений переменных.
    Пример: «{{ somevar }}»

  • Булевы выражения. Ansible достаточно гибкая система в отношении значений «истина» и «ложь».

Истина в YAML (true, Тгuе, TRUE, yes, Yes, YES, on, On, ON y, Y)
Ложь в YAML (false, False, FALSE, no, No, NO, off, Off, OFF, n, N) 
- ntp - wget - curl

Как работает Ansible?

Он устанавливает параллельные SSH-соединения и выполняет задачи по списку на всех хостах

А где этот список хостов?

В так называемом инвентаре, файле hosts

Пример:

node1 ansible_host=172.16.10.11
node2 ansible_host=172.16.10.12
node3 ansible_host=172.16.10.13 [first-group] node1 ansible_host=172.16.10.11
node2 ansible_host=172.16.10.12 [second-group] node3 ansible_host=172.16.10.13

Как сохранить результат команды в переменную?

С помощью модуля register

- name: Run some command and register output as variable shell: command register: command_result	

Как проверить определена ли переменная?

Для этого используется опция is defined (определена) или is not defined (не определена):

Где можно хранить переменные и какова их приоритетность?

Основные правила приоритета выглядят так: (От наиболее приоритетного к наименьшему)

0. extra-vars (Переменные передаваемые при вызове playbook’а через параметр -e «some_var=my_value»

1. role params (Переменные описанные в роли и включениях)

2. set_facts / registered vars (Переменные описанные в playbook используя set_facts и зарегистрированные переменные.)

3. include_vars (Добавляется указанием файла с переменными и списка переменных)

4. task vars — block_vars (Переменные только для задачи / блока)

5. role vars (Описываются в папке роли roles/role/vars/main.yml)

6. play vars_files / play vars_prompt (С указанием файла переменных / ручным вводом по запросу)

7. play vars (Указываются в playbook используя vars:)

8. host facts (Факты хоста)

9. host_vars (playbook – inventory)

10. group_vars (playbook – inventory — group_vars/all)

11. role defaults (Описываются в папке роли roles/role/defaults/main.yml)

Как вывести содержимое исполненной команды?

С помощью модуля debug

- name: Show command output debug: var: command_result.stdout	

Как проверить существует ли файл?

С помощью модуля stat

- name: Print a debug message debug: msg: "Path doesn't exist" when: path_var.stat.exists is not defined

Как запускать задачи на разных ОС и различных версиях?

С помощью встроенных переменных ansible_os_family и ansible_distribution_major_version

В следующем примере запустится задача task1 в системах на основе Debian версии 10 и task2 на основе RedHat версии 8.

- name: Run task1 if OS is Debian 10 … when: ansible_os_family == "Debian" and ansible_distribution_major_version == "10" - name: Run task2 if OS is Red Hat 8 … when: ansible_os_family == "RedHat" and ansible_distribution_major_version == "8"

Как добавить репозиторий?

- name: "Add chrome deb repository" apt_repository: repo: deb http://dl.google.com/linux/chrome/deb/ stable main state: present

Удалить – написать absent в state

Как установить конкретной версию пакета используя pip3?

- name: Install specific bottle version with pip3 pip: name: bottle==0.12.19 executable: pip3

Как склонировать в определенную папку только ветку master из github?

- name: Example clone of a single branch git: repo: https://github.com/ansible/ansible-examples.git dest: /src/ansible-examples single_branch: yes version: master

Как создать системную учетную запись?

- name: Create consul user user: name: consul system: yes comment: "Consul Agent"	

Как запустить и поставить службу на автозагрузку?

- name: Start and Enable httpd systemd: name: httpd.service state: started enabled: yes

Как скопировать файл с заданными правами?

- name: Copy file with owner and permission copy: src: /mine/ntp.conf dest: /etc/ntp.conf owner: user group: user mode: '0644'

Как скачать и разархивировать файл в директорию?

- name: Download and Unarchive file to directory unarchive: src: https://example.com/example.zip dest: /usr/local/bin remote_src: yes

Как запустить docker контейнер c healtcheck’ом в Ansible?

- name: Start container with healthstatus docker_container: name: nginx-proxy image: nginx:1.20 state: started healthcheck: # Check if nginx server is healthy by curl'ing the server. # If this fails or timeouts, the healthcheck fails. test: ["CMD", "curl", "--fail", "http://nginx.host.com"] interval: 1m30s timeout: 10s retries: 3 start_period: 30s

Как запустить playbook с определенной задачи?

С помощью ключа —start-at-task

ansible-playbook playbook.yml --start-at-task="Configure Nginx"

Как запускать / пропускать несколько задач одной тематики?

Задать tags: в плейбуке и использовать ключ —tags при запуске

ansible-playbook playbook.yml --tags=nginx,mysql

Пропускать задачи аналогично, задав tags в плейбуке и использовав —skip-tags при запуске

ansible-playbook playbook.yml --skip-tags=mysql

Сталкиваюсь с ошибками. Как детальнее узнать в чем проблема?

Используя ключ -v при запуске. (Для более детального вывода использовать -vvvv)

ansible-playbook playbook.yml -v

Наверняка кто-то уже делал задачу которая мне необходима, где ее найти?

https://galaxy.ansible.com. Вы можете ковырять, редактировать роли под ваши нужды.

Источники изучения Ansible

Читайте так же:

  • «Лаборатория Касперского» представила бесплатную версию свой операционной системы KasperskyOS Community Edition«Лаборатория Касперского» представила бесплатную версию свой операционной системы KasperskyOS Community Edition Пссст, не хочешь поставить себе KasperskyOS?«Лаборатория Касперского» представила бесплатную версию своей защищенной операционной системы под названием KasperskyOS Community Edition 1.0, в которой добавлена даже поддержка аппаратной платформы Raspberry Pi 4 Model B. Разработчики […]
  • profile-guided поиск по кодуprofile-guided поиск по коду Если объединить структурный поиск по коду через gogrep и фильтрацию результатов через perf-heatmap, то мы получим profile-guided поиск по коду.Данная комбинация позволяет находить все совпадения по шаблону поиска, а затем показывает только те результаты, что лежат на "горячем" пути […]
  • Первый смартфон Qualcomm Snapdragon уже можно заказать, названа дата выходаПервый смартфон Qualcomm Snapdragon уже можно заказать, названа дата выхода В начале месяца Qualcomm представила свой первый смартфон. Который предназначен для участников программы Snapdragon Insiders. Таких фанатов и энтузиастов во всём мире насчитывается более 1,6 миллиона человек. Теперь же стало известно о том, что желающие могут оформить предварительный […]
  • Наполнение сайта битрикс 24Наполнение сайта битрикс 24 Имя папки в разделе:/bitrix/modules/ Имя Описание Менеджер Сайта Битрикс Bitrix24 Self-hosted Реклама Реклама Управляет баннерами на сайте и контрактами рекламодателей. Битрикс.интернет-магазин Сайт Интернет-Магазина Готовое решение для интернет-магазина. Которое включает […]