0

ansible

Знакомство с Ansible. Часть 4: модули

Мы уже справились установкой системы управления конфигурациями Ansible, написали первый набор инструкций (playbook) и разобрали результат его выполнения, а также ознакомились с использованием переменных в Ansible.

В этой части давайте разберемся с модулями в Ansible.

Система управления конфигурациями Ansible позволяет использовать более двух сотен модулей (полный список модулей и их параметры) для настройки IT-инфраструктуры.

Рассмотрим наиболее часто используемые модули и их параметры.

Модуль command принимает команду и аргументы, разделенные пробелом. Аргументами могут быть:

  • chdir — переход в каталог для выполнения команды;
  • creates — создание файла по указанному пути;
  • removes — удаление файла по указанному пути.

Для проверки работы модуля command напишем набор инструкций /etc/ansible/playbooks/install_ntpdate.yml такого вида:

---
- hosts: test
  tasks:
 
  - name: Check if ntpdate is installed
    command: dpkg-query -W ntpdate
    register: ntpdate_check_deb
    failed_when: ntpdate_check_deb.rc > 1
    changed_when: ntpdate_check_deb.rc == 1
 
  - name: Install ntpdate
    apt: name=ntpdate update_cache=yes
    sudo: yes
    when: ntpdate_check_deb.rc == 1
 
  - name: Sync date
    command: ntpdate -u 192.168.0.13
    sudo: yes

Результат выполнения данного playbook будет таким:

ansible-playbook install_ntpdate.yml 

PLAY [test] ******************************************************************* 

GATHERING FACTS *************************************************************** 
ok: [test-1]

TASK: [Check if ntpdate is installed] ***************************************** 
ok: [test-1]

TASK: [Install ntpdate] ******************************************************* 
skipping: [test-1]

TASK: [Sync date] ************************************************************* 
changed: [test-1]

PLAY RECAP ******************************************************************** 
test-1                 : ok=3    changed=1    unreachable=0    failed=0   

Модуль shell — это аналог модуля command с важным отличием: для выполнения команд используется оболочка /bin/sh. Параметры такие же, как и у модуля command — chdircreates и removes.

Модуль script используют при необходимости копирования скрипта на удаленный хост с последующим выполнением. Поддерживаются параметры creates и removes. Для проверки работы данного модуля напишем простейший скрипт /etc/ansible/playbooks/scripts/count_dir.sh со следующим содержимым:

#/bin/bash
ls -l /var/log | grep "^d" | wc -l

Примечание. Скрипт посчитает количество директорий в /var/log.

Playbook в этом случае будет выглядеть так:

---
- hosts: test
  tasks:
 
  - name: Count directories in /var/log
    script: /etc/ansible/playbooks/scripts/count_dir.sh /var/log
    sudo: yes

Результат выполнения данного набора инструкций (с выводом отладочной информации) следующий:

ansible-playbook -vv count_directories.yml 

PLAY [test] ******************************************************************* 

GATHERING FACTS *************************************************************** 
 REMOTE_MODULE setup
ok: [test-1]

TASK: [Count directories in /var/log] ***************************************** 
changed: [test-1] => {"changed": true, "rc": 0, "stderr": "", "stdout": "15\r\n"}

PLAY RECAP ******************************************************************** 
test                 : ok=2    changed=1    unreachable=0    failed=0   

Модуль raw предусмотрен для использования в случаях, когда другие командные модули (commandshell и script) использовать невозможно. Этот модуль можно использовать на удаленных хостах даже без установленного Python. Пример playbook:

---
- hosts: test
  tasks:
 
  - name: Update & safe-upgrade
    raw: aptitude update && aptitude safe-upgrade -y
    sudo: yes

и результат его выполнения:

ansible-playbook safe_upgrade.yml 

PLAY [test] ******************************************************************* 

GATHERING FACTS *************************************************************** 
ok: [test-1]

TASK: [Update & safe-upgrade] ************************************************* 
ok: [test-1]

PLAY RECAP ******************************************************************** 
test-1                 : ok=2    changed=0    unreachable=0    failed=0   

Модуль file предназначен для создания/удаления каталогов, символических ссылок и файлов, а также для работы с атрибутами файлов. Параметры:

  • group — имя группы-владельца файла/каталога;
  • owner — имя пользователя-владельца файла/каталога;
  • mode — права доступа к файлу/каталогу;
  • path — путь к файлу/каталогу (можно использовать алиасы dest или name);
  • src — путь к файлу, для создания симлинка (используется при state=link);
  • recurse — рекурсивно установить атрибуты файла/каталога (используется при state=directory);
  • state — определяет типы файлов, над которым проводятся операции (filelinkdirectoryhardtouch и absent).

Пример использования модуля в наборе инструкций:

---
- hosts: test
  vars:
    dir: /home/admin/testdir
  tasks:
 
  - name: Create directory 
    file: path={{ dir }} state=directory owner=admin group=admin mode=0777
    sudo: yes
 
  - name: Create symlink
    file: src=/etc/hostname dest=/home/admin/testdir/hostname owner=root group=root state=link
    sudo: yes

Результат выполнения playbook:

ansible-playbook mkdir.yml 

PLAY [test] ******************************************************************* 

GATHERING FACTS *************************************************************** 
ok: [test-1]

TASK: [Create directory] ****************************************************** 
ok: [test-1]

TASK: [Create symlink] ******************************************************** 
changed: [test-1]

PLAY RECAP ******************************************************************** 
test-1                 : ok=3    changed=1    unreachable=0    failed=0   

Модуль copy используется для копирования файлов на удаленный хост. Кроме уже описанных выше параметров groupownermode может принимать следующие:

  • backup — создает резервную копию файла (в имени файла будет дописан timestamp);
  • dest — куда будет скопирован файл (абсолютный путь на удаленном хосте);
  • directory_mode — используется для рекурсивного копирования каталогов;
  • force — копировать файл на удаленный хост, если содержимое файла было изменено;
  • src — откуда копировать файл — локальный путь (абсолютный или относительный).

Пример использования в наборе инструкций:

---
- hosts: test
  tasks:
 
  - name: Copy speedtest-cli
    copy: src=/home/install/speedtest-cli dest=/usr/local/bin/speedtest-cli mode=0777
    sudo: yes

и результат выполения playbook:

ansible-playbook copy.yml 

PLAY [test] ******************************************************************* 

GATHERING FACTS *************************************************************** 
ok: [test-1]

TASK: [Copy speedtest-cli] **************************************************** 
ok: [test-1]

PLAY RECAP ******************************************************************** 
test-1                 : ok=2    changed=0    unreachable=0    failed=0   

Для управления планировщиком задач используется модуль cron. Может принимать следующие параметры:

  • backup — создает резервную перед изменением;
  • cron_file — использует указанный файл из каталога cron.d вместо пользовательского crontab;
  • day — день запуска задачи (1-31, *, */2);
  • hour — час запуска задачи (0-23, *, */2);
  • minute — минута запуска задачи (0-59, *, */2);
  • month — месяц запуска задачи (1-12, *, */2);
  • weekday — неделя запуска задачи (0-6 for Sunday-Saturday, *);
  • disabled — закомментировать ранее добавленную задачу;
  • job — задача;
  • name — описание задачи в crontab (комментарий);
  • state — существует ли такая задача(принимает значения present и absent);
  • user — пользователь, в чей crontab следует добавить задачу;
  • special_time — специальное время запуска задачи (reboot, yearly, annually, monthly, weekly, daily и hourly).

Пример playbook с использованием модуля cron:

---
- hosts: test
  tasks:
 
  - name: Add task to cron
    cron: name="check speedtest" minute="0" hour="1,10" job="/usr/local/bin/speedtest.sh"
    sudo: yes

результатом выполнения задачи будет:

ansible-playbook cron.yml 

PLAY [test] ******************************************************************* 

GATHERING FACTS *************************************************************** 
ok: [test-1]

TASK: [Add task to cron] ****************************************************** 
ok: [test-1]

PLAY RECAP ******************************************************************** 
test-1                 : ok=2    changed=0    unreachable=0    failed=0   

Модуль template используется в Ansible для создания файлов по определенным шаблонам (например, конфигов) на удаленных хостах. Чтобы проверить работу данного модуля, создадим простенький шаблон /etc/ansible/playbooks/templates/hostname/ с таким содержимым:

This is test file on {{ ansible_hostname }}

Playbook с использованием модуля template получится такой:

---
- hosts: test
  tasks:
 
  - name: Create template with hostname
    template: src=/etc/ansible/playbooks/templates/hostname dest=/home/admin/testfile mode=0644
    sudo: yes

Результатом выполнения этого набора инструкций будет:

ansible-playbook create_template.yml 

PLAY [test] ******************************************************************* 

GATHERING FACTS *************************************************************** 
ok: [test-1]

TASK: [Create template with hostname] ***************************************** 
changed: [test-1]

PLAY RECAP ******************************************************************** 
test-1                 : ok=2    changed=1    unreachable=0    failed=0   

На удаленном хосте по указанному нами пути появился файл со следующим содержимым:

This is test file on test-1

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

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

Свежие комментарии

Подписка

Лучшие статьи

Рубрики

Популярное

1 ansible

Знакомство с Ansible. Часть 1: Введение

Ansible – одна из систем управления конфигурациями (автоматизации настройки и развертывания серверов). Особенность Ansible – наличие управляющего сервера, с которого отправляются команды или наборы инструкций
2 ansible

Знакомство с Ansible. Часть 3: переменные

В первой части знакомства с Ansible мы успешно установили систему управления конфигурациями и написали первый playbook, во второй части разобрали результат выполнения нашего набора инструкций и научились повторно
ansible
Previous Story

Знакомство с Ansible. Часть 3: переменные

ansible
Next Story

Знакомство с Ansible. Часть 5: роли, условия и циклы

Latest from Blog

Настройка роутера MikroTik с BGP для просмотра потокового видео дома

Про сервис antifilter.download Из-за большого наплыва пользователей после блокировки YouTube сервис испытывает перегрузки. Обещают починить. Изначально я пользовался именно сервисом antifilter.download, но по непонятным для меня причинам он перестал у меня работать. Я

Решаем проблему блокировок (и YouTube) за 5 минут на роутере Mikrotik через контейнеры и без VPN

как ускорить ютуб и разблокировать доступ к некоторым заблокированным ресурсам прямо на роутере Mikrotik и без VPN. В моем случае используется MikroTik hAP ax3. Стоит упомянуть, что подойдут только роутеры с архитектурой

Mikrotik — несколько ip на внешнем интерфейсе

Рассмотрим ситуацию, когда провайдер выдал нам один шнурок и несколько ip в нем (например, /29 подсеть). И за нашим роутером находится несколько разных подсетей, которые надо выпускать наружу с разными src-ip; также

Игра системный администратор

docker run -p 8080:8080 -p 3390:3389 –name play-adobe-flash-after-eol jchprj/play-adobe-flash-after-eolзайти localhost:8080, и открыть эту страницу, или https://serveradmin.ru/files/sysadmin.swf

Что делать, когда на сервере кончаются файловые дескрипторы (inode)

Нередки случаи, когда причиной проблем на сервере становится переполнение файловых дескрипторов (inode). Симптомы точно такие же, как при переполнившемся диске, только вот диск при этом может оказаться свободным. Количество inode каждой файловой системы определяется при разворачивании ОС.
Go toTop

Don't Miss

ansible

Ansible: ввод sudo-пароля при выполнении playbook

Большинство действий в наборах инструкций системы управления конфигурациями Ansible следует выполнять с
ansible

Добавление учетных записей с помощью Ansible

Ранее мы уже рассматривали несколько вариантов использования системы управления конфигурациями Ansible,