Учебники

12) Ansible Tutorial

Что такое Ansible?

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

Ansible функционирует, подключаясь через SSH к клиентам, поэтому для него не требуется специальный агент на стороне клиента, и передавая модули клиентам. Затем модули выполняются локально, на стороне клиента, и выходные данные передаются обратно на сервер Ansible.

Поскольку он использует SSH, он может очень легко подключаться к клиентам с помощью SSH-ключей, упрощая весь процесс. Детали клиента, такие как имена хостов или IP-адреса и порты SSH, хранятся в файлах, называемых файлами инвентаризации. После того, как вы создали файл инвентаризации и заполнили его, ansible может использовать его.

В этом уроке Ansible вы узнаете больше о:

Зачем использовать Ansible?

Вот некоторые важные плюсы / преимущества использования Ansible

  • Одним из наиболее значительных преимуществ Ansible является то, что он доступен всем.
  • Для установки и использования Ansible не требуется специальных навыков системного администратора, а официальная документация очень обширна.
  • Его модульность в отношении плагинов, модулей, инвентаризаций и игровых книг делает Ansible идеальным компаньоном для организации больших сред.
  • Ansible очень легкий и непротиворечивый, никаких ограничений относительно операционной системы или базового оборудования нет.
  • Он также очень безопасен благодаря своим безагентным возможностям и использованию функций безопасности OpenSSH.
  • Еще одним преимуществом, способствующим принятию Ansible, является его плавная кривая обучения, определяемая всеобъемлющей документацией, а также простота изучения структуры и конфигурации.

История Ansible

Вот важные наземные ориентиры из истории Ансибла:

  • В феврале 2012 года начался проект Ansible. Он был впервые разработан Майклом ДеХаном, создателем Cobbler и Func, Fedora Unified Network Controller.
  • Изначально называвшаяся AnsibleWorks Inc, компания, финансирующая этот инструмент, была приобретена в 2015 году компанией RedHat, а затем, вместе с RedHat, перешла под эгиду IBM.
  • В настоящее время Ansible входит в такие дистрибутивы, как Fedora Linux, RHEL, Centos и Oracle Linux.

Важные термины, используемые в Ansible

  • Ansible сервер:

    Машина, на которой установлен Ansible и с которой будут запускаться все задания и книги.

  • Модуль:

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

  • Задача:

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

  • Роль:

    Способ организации задач и связанных файлов для последующего вызова в сборнике

  • Факт:

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

  • Инвентарь:

    Файл, содержащий данные о клиентских серверах. Определено в следующих примерах как файл hosts

  • Играть в:

    Исполнение пьесы

  • Обработчик:

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

  • Notifier:

    Раздел, относящийся к задаче, которая вызывает обработчик, если выходные данные изменены

  • Тег:

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

Ansible Установка в Linux

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

Установите Ansible на системы Centos / RedHat

Шаг 1) Установите репо EPEL

[root@ansible-server ~]# sudo yum install epel-release

Шаг 2) Установите пакет ansible

[root@ansible-server ~]# sudo  yum install -y ansible

Установите ansible в системах Ubuntu / Debian

Шаг 1) Выполните обновление пакетов

$ sudo apt update

Шаг 2) Установите пакет software-properties-common

$ sudo apt install software-properties-common

Шаг 3) Установить архив ansible персонального пакета

$ sudo apt-add-repository ppa:ansible/ansible

Шаг 4) Установите ansible

$ sudo apt update
$ sudo apt install ansible

Ansible ad-hoc команды

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

Для этого руководства будет настроен простой файл с двумя серверами, содержащий host1 и host2.

Вы можете убедиться, что хосты доступны с сервера ansible, выполнив команду ping на всех хостах.

[root@ansible-server test_ansible]# ansible -i hosts all -m ping
host1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Объяснение:

  1. Статус команды, в данном случае УСПЕХ
  2. Хост, на котором выполнялась команда
  3. Команда, введенная через параметр -m, в данном случае ping
  4. С помощью параметра -i вы можете указать файл hosts.

Вы можете выполнить ту же команду только на определенном хосте, если это необходимо.

[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
host2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Объяснение:

  1. Параметр –Limit может использоваться для выдачи команд только на определенных хостах в файле хоста
  2. Имя хоста, как определено в файле инвентаризации

Если вам нужно быстро скопировать файл в несколько мест назначения, вы можете использовать модуль копирования в ansible, который использует SCP. Таким образом, команда и ее вывод выглядят так:

[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"
host1 | SUCCESS => {
    "changed": true,
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "dest": "/tmp/testfile",
    "gid": 0,
    "group": "root",
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "src": "/root/.ansible/tmp/ansible-tmp-1562216392.43-256741011164877/source",
    "state": "file",
    "uid": 0
}
host2 | SUCCESS => {
    "changed": true,
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
    "dest": "/tmp/testfile",
    "gid": 0,
    "group": "root",
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
    "mode": "0644",
    "owner": "root",
    "size": 0,
    "src": "/root/.ansible/tmp/ansible-tmp-1562216392.6-280302911361278/source",
    "state": "file",
    "uid": 0
}

Объяснение:

  1. Определен модуль копирования
  2. В этом случае аргументами модуля являются абсолютный путь источника и абсолютный путь назначения.
  3. Вывод команды Ansible, отражающий успешное выполнение команды копирования, и другие подробности, такие как контрольные суммы sha1 или md5 для проверки целостности файла, и метаданные, такие как владелец, размер или разрешения.

    Легко установить пакет на нескольких серверах. Ansible имеет несколько модулей, которые взаимодействуют с используемыми установщиками, такими как yum, apt, dnf и т. Д.

В следующем примере вы узнаете, как установить пакет через модуль yum на двух хостах Centos.

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'
host1 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [


"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.xservers.ro\n * epel: fedora.mirrors.telekom.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: remi.schlundtech.de\n * remi-safe: remi.schlundtech.de\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version                Repository       Size\n================================================================================\nInstalling:\n ncdu            x86_64            1.14-1.el7             epel             51 k\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nInstalled:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}
host2 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.leadhosts.com\n * epel: mirrors.nav.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: mirrors.uni-ruse.bg\n * remi-safe: mirrors.uni-ruse.bg\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version                Repository       Size\n================================================================================\nInstalling:\n ncdu            x86_64            1.14-1.el7             epel             51 k\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nInstalled:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}

Объяснение:

  1. Модуль Yum используется в этом примере
  2. – Он определяет аргументы модуля, и в этом случае вы выберете имя пакета и его состояние. Например, если состояние отсутствует, пакет будет найден и, если найден, удален
  3. Если он окрашен в желтый цвет, вы увидите вывод команды ansible с измененным состоянием, что означает, что в этом случае пакет был найден и установлен.
  4. Состояние команды yum install, отправленной через ansible. В этом случае был установлен пакет ncdu.x86_64 0: 1.14-1.el7.

Конечно, все параметры установщика yum можно использовать через ansible, включая обновление, установку, последнюю версию или удаление.

В приведенном ниже примере та же команда была введена для удаления ранее установленного пакета ncdu.

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'
host1 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version               Repository        Size\n================================================================================\nRemoving:\n ncdu            x86_64            1.14-1.el7            @epel             87 k\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nRemoved:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}
host2 | SUCCESS => {
    "changed": true,
    "msg": "",
    "rc": 0,
    "results": [
        "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package         Arch              Version               Repository        Size\n================================================================================\nRemoving:\n ncdu            x86_64            1.14-1.el7            @epel             87 k\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : ncdu-1.14-1.el7.x86_64                                       1/1 \n  Verifying  : ncdu-1.14-1.el7.x86_64                                       1/1 \n\nRemoved:\n  ncdu.x86_64 0:1.14-1.el7                                                      \n\nComplete!\n"
    ]
}

Объяснение:

  1. Вывод команды yum показывает, что пакет был удален.

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

Если вам нужна подробная информация о системах, которые необходимо изменить с помощью ansible, можно использовать следующую команду. Модуль настройки собирает факты из системных переменных.

Ansible Playbooks

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

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

Чтобы все детали были точными, прежде чем продолжить с примерами, мы должны сначала определить задачу. Это интерфейс к ANSIB-модулям для ролей и сборников.

Один playbook с одним play, содержащий несколько заданий, выглядит следующим образом.

---

- hosts: group1
  tasks:
  - name: Install lldpad package
    yum:
      name: lldpad
      state: latest
  - name: check lldpad service status
    service:
      name: lldpad
      state: started

В приведенном выше примере группа 1 хостов в файле хоста предназначена для установки пакета lldpad с использованием модуля yum, а затем запускается служебный lldpad, созданный после установки, с использованием сервисного модуля, используемого в основном для взаимодействия с ансамблем systemd.

Объяснение:

  1. Группа хостов, на которых будет работать playbook
  2. Модуль Yum используется в этой задаче для установки lldpad
  3. Сервисный модуль используется для проверки работоспособности службы после установки.

Каждый сборник игр работает с файлом инвентаря. Файл инвентаризации содержит список серверов, разделенных на группы для лучшего контроля таких деталей, как IP-адрес и порт SSH для каждого хоста.

Файл инвентаря, который вы можете использовать для этого примера, выглядит следующим образом. Есть две группы с именами group1 и group2, каждая из которых содержит host1 и host2 соответственно.

[group1]
host1 ansible_host=192.168.100.2 ansible_ssh_port=22
[group2]
host2 ansible_host=192.168.100.3 ansible_ssh_port=22

Объяснение:

  1. Имя группы
  2. Имя хоста с IP-адресом и ssh-портом, в данном случае по умолчанию, 22.

Другой полезный пример пьесы Ansible, содержащей на этот раз две пьесы для двух хостов, – следующий. Для первой группы хостов group1, selinux будет включен. Если он включен, то на экране хоста появится сообщение.

Для второй группы хостов пакет httpd будет установлен только в том случае, если ansible_os_family – это RedHat, а ansible_system_vendor – это HP.

Ansible_os_family и ansible_system_vendor являются переменными, собранными с параметром collect_facts, и могут использоваться как в этом условном примере.

---

- hosts: group1
  tasks:
  - name: Enable SELinux
    selinux:
      state: enabled
    when: ansible_os_family == 'Debian'
    register: enable_selinux

  - debug:
      Imsg: "Selinux Enabled. Please restart the server to apply changes."
    when: enable_selinux.changed == true

- hosts: group2
  tasks:
  - name: Install apache
    yum:
      name: httpd
      state: present
    when: ansible_system_vendor == 'HP' and ansible_os_family == 'RedHat'

Объяснение:

  1. Пример предложения when, в этом случае, когда типом ОС является Debian. Переменная ansible_os_family собирается с помощью функции collect_facts.
  2. Вывод задачи зарегистрирован для будущего использования с именем enable_selinux
  3. Еще один пример предложения когда. В этом случае сообщение пользователя хоста будет отображаться, если SELinux действительно был включен ранее.
  4. Другой пример предложения when, состоящего из двух правил

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

Если обработчик не будет уведомлен во время запуска playbook, он не будет запущен. Однако, если обработчик уведомляет более одной задачи, он будет запущен только один раз после завершения всех задач.

В приведенном ниже примере вы можете видеть, как у конкретной задачи есть раздел уведомлений, который вызывает другую задачу. Если выходные данные первой задачи будут изменены, будет вызвана задача-обработчик. Лучший пример – изменить файл конфигурации и затем перезапустить эту конкретную службу.

---

- hosts: group2
  tasks:
  - name: sshd config file modify port
    lineinfile:
     path: /etc/ssh/sshd_config
     regexp: 'Port 28675'
     line: '#Port 22'
    notify:
       - restart sshd
handlers
    - name: restart sshd
      service: sshd
        name: sshd
        state: restarted
	

В этом случае, если первая задача, «изменить файл конфигурации sshd», означает, что если порт не 28675, то он будет изменен, и задача уведомит обработчик с тем же именем для запуска и он перезапустит службу sshd.

Объяснение:

  1. Пример уведомителя
  2. Пример обработчика

Ansible Роли

Имея дело с обширными книгами, легче разделить задачи на роли. Это также помогает в повторном использовании ролей в будущем. Роли – это набор задач, которые можно перемещать из одной книги воспроизведения в другую, которые можно запускать независимо, но только через файл книги.

Роли хранятся в отдельных каталогах и имеют определенную структуру каталогов.

[root@ansible-server test2]# tree
.
`-- role1
    |-- defaults
    |   `-- main.yml
    |-- handlers
    |   `-- main.yml
    |-- meta
    |   `-- main.yml
    |-- README.md
    |-- tasks
    |   `-- main.yml
    |-- tests
    |   |-- inventory
    |   `-- test.yml
    `-- vars
        `-- main.yml

7 directories, 8 files

Файл yaml в каталоге по умолчанию содержит список переменных по умолчанию, которые должны использоваться вместе с playbook. Каталог обработчиков используется для хранения обработчиков. Предполагается, что мета-каталог содержит информацию об авторе и ролевых зависимостях. В каталоге задач находится основной файл yaml для роли.

Каталог tests содержит образец файла книги воспроизведения yaml и пример файла инвентаризации и в основном используется для целей тестирования перед созданием фактической роли.

Каталог vars содержит файл yaml, в котором будут определены все переменные, используемые ролью. Шаблоны каталогов и файлы каталогов должны содержать файлы и шаблоны, которые будут использоваться задачами в роли.

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

[root@ansible-server test2]# ansible-galaxy init role1

Ansible также хорошо работает с шаблонами. В качестве языка шаблонов используется Jinja2.

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

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

{% for resolver in resolver_ip_addresses %}
nameserver {{ resolver }}
{% endfor %}

options timeout:1
options attempts:5
options rotate

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

- name: Set resolver for server
  template:
    src: dns.j2
    dest: /etc/resolv.conf
    group: root
    owner: root
    mode: "0644"
    tag: resolver	

Объяснение:

  1. Название шаблона, который будет использоваться. Шаблон находится в шаблоне dir в ролевом пути
  2. Путь назначения имени файла, подлежащего замене шаблоном, на стороне клиента.
  3. Разрешения файла назначения

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

Тематическое исследование

В этом разделе мы проанализируем тематическое исследование важнейшего сборника пьес, который выполняет три роли. Цель этого – дать практический пример того, о чем мы говорили ранее. Некоторые из примеров, использованных ранее в этом учебном пособии, будут адаптированы и использованы в этом учебнике.

Ниже приведена структура каталогов playbook. Файл Yaml, который будет использоваться, будет p4.yml.

[root@ansible-server test_ansible]# ls -lrth
total 16K
-rw-r--r--. 1 root root   0 Jul  3 10:13 testfile
-rw-r--r--. 1 root root 203 Jul  3 13:30 p1.yml
-rw-r--r--. 1 root root 125 Jul  3 15:00 hosts
-rw-r--r--. 1 root root 488 Jul  3 16:40 p2.yml
-rw-r--r--. 1 root root 188 Jul  4 17:33 p4.yml
drwxr-xr-x. 5 root root  47 Jul  4 17:35 roles
[root@ansible-server test_ansible]# cd roles
[root@ansible-server roles]# ls -lrth
total 12K
drwxr-xr-x. 9 root root 4.0K Jul  4 12:52 httpd
drwxr-xr-x. 9 root root 4.0K Jul  4 13:55 selinux
drwxr-xr-x. 9 root root 4.0K Jul  4 16:54 resolver

Книга воспроизведения имеет три роли, одна из которых называется resolver, которая устанавливает конкретный сервер имен на серверах путем копирования файла с сервера в место назначения /etc/resolv.conf. Другой называется httpd, и он устанавливает пакет httpd с модулем yum, а третий включает SELinux и уведомляет зарегистрированного пользователя о перезагрузке системы. Каждая роль была создана с использованием команды ansible-galaxy.

Роль резолвера, задача main.yml:

Роль Httpd, задача main.yml:

Роль Selinux, задача main.yml:

Ниже определен список воспроизведения p4.yml. Он будет работать на всех хостах, если в командной строке не указано иное, он будет работать от имени пользователя root на порту 22 (SSH), собирать факты перед запуском ролей и запускать все три роли, упомянутые ранее. Каждую роль можно запустить независимо, указав тег в командной строке ansible-playbook с параметром –t.

---

- hosts: all
  user: root
  port: 22
  gather_facts: True
  roles:
    - { role: selinux, tags: selinux }
    - { role: httpd, tags: httpd }
    - { role: resolver, tags: resolver }

Запуск playbook p4.yml на двух хостах и ​​интерпретация выходных данных. Эту же команду можно запустить с параметром –check для пробного запуска. Если вы хотите использовать аутентификацию по паролю, используйте параметр -k.

Объяснение:

  1. Команда Ansible-playbook, запускающая p4.yml
  2. Playbook пропускает роль SELinux, потому что она уже включена.
  3. Ansible обнаружил, что пакет httpd уже установлен, поэтому он возвращает нормально.
  4. Resolver был установлен, и роль распознавателя получила статус изменен.

Шпаргалка по командам Ansible

Установите репозиторий EPEL в системах Centos / RHEL

[root@ansible-server ~]# sudo yum install epel-release

Установите пакет ansible в системах Centos / RHEL

[root@ansible-server ~]# sudo  yum install -y ansible

Выполните обновление пакетов в системах Debian / Ubuntu

$ sudo apt update

Установите общий пакет свойств программного обеспечения в системах Debian / Ubuntu

$ sudo apt install software-properties-common

Установить ансиби личный архив пакетов в системах Debian / Ubuntu

$ sudo apt-add-repository ppa:ansible/ansible

Установите ansible в системах Debian / Ubuntu

$ sudo apt update
$ sudo apt install ansible

Выполните команду ping на всех серверах, определенных в файле инвентаризации с именем hosts

 
[root@ansible-server test_ansible]# ansible -i hosts all -m ping

Выполните команду ping только на host2

[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2

Скопируйте файл «testfile» на все хосты в файле инвентаря

[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"

Установить пакет ncdu на всех хостах

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'

Удалить пакет ncdu на всех хостах

[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'

Создайте структуру каталогов для роли с именем role1.

[root@ansible-server test2]# ansible-galaxy init role1

Dry-run p4.yml playbook

[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml --check

Запустите p4.yml playbook с аутентификацией по паролю для всех хостов.

[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml -k

Резюме

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

В то время как есть много инструментов (Chef, Puppet), которые делают то же самое с некоторыми отличиями, Ansible удалось подняться над всеми из них благодаря своей простоте, повышенной безопасности и, что наиболее важно, плавной кривой обучения. Благодаря этим качествам и быстрому внедрению Ansible, мы создали учебник, полный примеров, чтобы вы могли получить еще более плавный первый опыт работы с Ansible.

В этом уроке мы описали ansible и немного рассказали о его истории. Мы упомянули сильные стороны Ansible и преимущества, которые ANSIBLE может принести автоматизации и оркестрации инфраструктур разных размеров. Мы определили основные используемые и используемые термины и определили структуру сборников пьес Ansible. Тщательные примеры сопровождали всю информацию подробными объяснениями.