Ansible: Часть 2. Примеры простых задач.

На чем было опробовано:

  1. Ansible 2.9.18
  2. Hyper-V на Windows 10 Pro.
  3. Сервер Ansible: CentOS Linux release 7.9.2009 (Core).
  4. Node 1: CentOS Linux release 7.9.2009 (Core).
  5. Node 2: CentOS Linux release 7.9.2009 (Core).
  6. Node 3: CentOS Linux release 7.9.2009 (Core).

1. Введение.

Как установить и первоначально настроить Ansible описано здесь:

Ссылка: «Ansible: Часть 1. Описание, установка и первоначальная настройка.»

Рассмотрим структуру и правила написания таких сценариев более подробно.

Ссылка: «Ansible: Часть 3. Сценарии (плейбуки) — Playbooks.»

По данной ссылке я создам небольшую подборку самых интересных и типовых плейбуков, которые могут пригодиться вам в повседневной работе.

Ссылка: «Ansible: Часть 4. Практические примеры плейбуков.»

Как настраивать защищенные плейбуки описано в этом разделе.

Ссылка: «Ansible: Часть 5. Настройка защищенных плейбуков.»

2. Примеры.

Для того, чтобы понять как работают простые команды Ansible, приведу несколько простых примеров. По аналоги вы всегда сможете придумать свои команды под ваши конкретные ситуации.

2.1. Проверка связи.

С помощью Ansible можно одновременно выполнить одну задачу на целой группе серверов.

Модуль ping проверит, есть ли у вас валидные учетные данные для подключения к нодам, определенным в файле инвентаря, и может ли Ansible запускать сценарии Python на удаленном сервере от имени root пользователя.

2.1.1. Со всеми нодами.

Чтобы убедиться, что Ansible может подключаться к нодам и запускать команды и плейбуки, вы можете использовать следующую команду:

# ansible all -m ping

Ответ pong означает, что Ansible готов запускать команды и плейбуки на этой ноде.

Ответ:

2.1.2. С целевыми хостами.

Проверять с целевыми хостами можно и поштучно через их алиасы:

# ansible server1 -m ping
# ansible server2 -m ping
# ansible server3 -m ping

Ответ:

2.1.3. С целевой группой.

Попробуем, например, отправить запрос ping на серверы выбранной группы:

# ansible -m ping test_servers

Ответ:

2.2. Сбор информации о хостах.

Следующий пример соберёт информацию о хостах и выведёт её на консоль в формате JSON.

Так как список будет безумно длинный, то закажу информацию по одному целевому серверу по его алиасу server1:

# ansible server1 -m setup

Ответ:

Далее будет длинный-длинный список с перечислением параметров хоста или хостов.

2.3. Создать логический том.

А вот так можно создать логический том или, в зависимости от текущего состояния, изменить его размер с именем examplevolume в группе examplegroup:

# ansible test_servers -m lvol -a "vg=examplegroup lv=examplevolume size=1024 state=present"

Ответ:

server1 | success >> {
"changed": true,
"msg": ""
}

server2 | success >> {
"changed": false,
"msg": ""
}

server3 | success >> {
"changed": false,
"msg": ""
}

2.4. Подключение с помощью учетной записи другого пользователя.

По умолчанию Ansible пытается подключиться к нодам в качестве текущего пользователя системы через соответствующую пару ключей SSH.

Чтобы подключиться как другой пользователь, добавьте команду с флагом -u и именем нового пользователя otheruser:

# ansible all -m ping -u otheruser

То же самое относится и к ansible-playbook:

# ansible-playbook myplaybook.yml -u otheruser

В данном примере предполагается, что вы пробросили ключ данного пользователя на целевые хосты.

2.5. Настройка пользовательского ключа SSH.

Если вы используете свой ключ SSH для подключения к удаленным серверам, вы можете предоставить его с помощью параметра --private-key:

# ansible all -m ping --private-key=~/.ssh/id_rsa

Ответ:

Эта опция также работает для ansible-playbook:

# ansible-playbook myplaybook.yml --private-key=~/.ssh/id_rsa

В данном примере предполагается, что вы пробросили ключ данного пользователя на целевые хосты.

2.6. Настойка парольной аутентификации.

Если вам нужно использовать парольную аутентификацию для подключения к нодам, добавьте опцию --ask-pass к команде Ansible.

Это заставит Ansible запросить у вас пароль пользователя на удаленном сервере, к которому вы пытаетесь подключиться:

# ansible all -m ping --ask-pass

Ответ:

Эта опция также действительна для ansible-playbook:

# ansible-playbook myplaybook.yml --ask-pass

2.7. Использование пароля sudo.

Если удаленный пользователь должен предоставить пароль для запуска команд sudo, вы можете включить опцию --ask-become-pass в команду Ansible.

Опция позволит вам ввести пароль sudo удаленного пользователя:

# ansible all -m ping --ask-become-pass

Ответ:

Эта опция также действительна для ansible-playbook:

# ansible-playbook myplaybook.yml --ask-become-pass

2.8. Запуск специальных команд.

Чтобы выполнить любую команду на ноде, используйте параметр -a, а затем укажите нужную команду в кавычках.

Например, следующая команда выполнит uname -a на всех нодах в вашем инвентаре:

# ansible all -a "uname -a"

uname – инструмент, который чаще всего используется для определения архитектуры процессора, имени хоста системы и версии ядра, работающего в системе.

Ответ:

Или удалит vim на какой-то конкретной:

# ansible server1 -a "yum -y remove vim"

Ответ:

Также с помощью опции -m можно запускать модули Ansible.

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

Это можно сделать, включив параметр --check:

# ansible server1 -m yum -a "name=vim" --check

Ответ:

Следующая команда установит пакет Midnight Commander на server1 из вашего инвентаря:

# ansible server1 -m yum -a "name=mc"

Ответ: после долгих-долгих раздумий…

2.9. Отправка сообщений.

Отправить в echo «Hello World»:

# ansible all -a '/bin/echo Hello, World!'

Ответ:

2.10. Расход памяти по хостам.

Иногда требуется узнать расход памяти по хостам:

# ansible all -m shell -a 'free -m'

Ответ:

2.11. Модуль copy.

Модуль copy позволяет копировать файл из управляющей машины Ansible Server на удаленный узел server2.

Представим, что нам нужно скопировать наш /tmp/from/file1.test в каталог /tmp/to/ узла server2.

Чтобы создать файл с именем file1.test размером 1 ГБ, вы должны выполнить последовательность действий.

Создадим каталог, из которого будем копировать целевой файл:

# mkdir -p /tmp/from/

Сгенерируем в этот каталог целевой файл:

# dd if=/dev/zero of=/tmp/from/file1.test bs=1 count=0 seek=1G

Ответ:

Создадим на удаленном узле server2 каталог, в который мы будем копировать целевой файл:

# ansible -m shell -a 'mkdir -p /tmp/to/' server2

Ответ:

Совершим копирование с Ansible Server на удаленный узел server2:

# ansible -m copy -a 'src=/tmp/from/file1.test dest=/tmp/to/' server2

Ответ:

На узле server2 появился file1.test в каталоге  /tmp/to/.

3. Оригиналы источников информации.

  1. selectel.ru «Система управления конфигурацией Ansible».
  2. 8host.com «Как работать с Ansible: простая удобная шпаргалка».
  3. habr.com «Автоматизируем и ускоряем процесс настройки облачных серверов с Ansible. Часть 1: Введение».
  4. Источник: https://hamsterden.ru/ansible-examples-of-simple-ansible-tasks/

Was this helpful?

5 / 0