Ansible: 30 самых важных модулей для DevOps-профессионалов (часть 1)

—

от автора

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

Существует несколько наиболее важных Ansible-модулей, которые часто используются при автоматизации ряда задач. Но охватить все важные модули в одной статье будет не самой хорошей идеей, поэтому мы делим её на три части.

В этой части мы рассмотрим модули проверки подключения хоста, а также целевого узла (модуль ping), модуль, который может извлекать информацию с целевого узла (модуль setup), модули управления существующим пакетом и установки новых пакетов (yum, apt, package, pip и npm модули), а также модуль запуска базовых команд и скриптов на целевых узлах (raw, command, shell и script модули).

Итак, начнём..

Модуль Ping

Модуль Ping используется при проверке на удаленном хосте, особенно при подключении к удаленному хосту, и проверке Python на нём. Он также может использоваться для проверки логина пользователя и доступов.

--- - name: ping module    hosts: all   become: false   tasks:     - name: test connection       ping:

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

host-1 | SUCCESS => { “ansible_facts”: { “discovered_interpreter_python”: “/usr/bin/python” }, “changed”: false, “ping”: “pong” }

Важные факты о модуле Ping:

Он не работает на ICMP, но по умолчанию работает на SSH или на любом другом установленном методе подключения.

Одним из допустимых параметров являются данные, которые принимают значения вида pong, crash или какой-либо другой строки.

Pong – по умолчанию. Он представляет собой возвращаемое значение при успешном выполнении.

Если данные предоставлены со значением crash, то этот модуль вернет исключение.

Модуль Setup

Модуль Setup помогает нам в сборе данных о целевых узлах, таких как hostname, ip, os и других. Этот модуль автоматически реализуется плейбуком для сбора полезной информации об удаленном хосте. Вся информация представлена в удобном формате t JSON, а всем значениям предшествует “ansible_”.

ansible host-1 -m setup -u ec2-user

Применив обозначенную выше команду, получим результат в следующем формате:

Также можно отфильтровать результаты, используя параметр фильтра:

Модуль yum

Модуль yum используется для установки различных пакетов или программного обеспечения в Linux на базе Redhat.

--- - name: Update Package on linux system   hosts: all   become: yes   tasks:   - name: Uninstall Apache     yum:       name: nginx       state: absent   - name: Install a list of packages with a list variable     yum:       name: "{{ packages }}"     vars:       packages:       - httpd       - httpd-tools

Модуль apt

Модуль apt package используется для управления ПО в ОС Linux на базе debian.

--- - name: Update Package on debian system   hosts: all   become: yes   tasks:   - name: Run the equivalent of "apt-get update" as a separate step     apt:       update_cache: yes   - name: Install latest version of "openjdk-6-jdk"      apt:       name: openjdk-6-jdk       state: latest       install_recommends: no

Модуль package

Этот модуль управляет пакетами на целевом объекте без указания модуля диспетчера пакетов (yum, apt, …). Его удобно использовать в гетерогенной среде без необходимости создавать конкретную задачу под каждого менеджера пакетов. Этот модуль выступает в качестве прокси-сервера для базового модуля диспетчера пакетов, тогда как все параметры будут переданы базовому модулю:

--- - name: Update Packages on target system   hosts: all   become: yes   tasks:   - name: Install ntpdate     ansible.builtin.package:       name: ntpdate       state: present       - name: Install the latest version of Apache and MariaDB     ansible.builtin.package:       name:         - httpd         - mariadb-server       state: latest

Модуль pip

Модуль pip используется при управлении пакетами Python в целевой системе.

--- - name: Update python packages   hosts: all   become: yes   tasks:   - name: Install multi python packages with version specifiers     pip:       name:         - django>1.11.0,<1.12.0         - bottle>0.10,<0.20,!=0.11   - name: Install specified python requirements     pip:       requirements: /my_app/requirements.txt

Модуль npm

Модуль npm используется при управлении node.js пакетами. Этот модуль не является частью ansible-core модулей. Для того, чтобы использовать его в плейбуке, укажите: community.general.npm.

--- - name: npm module   hosts: all   tasks:   - name: Install "coffee-script" node.js package.     community.general.npm:       name: coffee-script       path: /app/location   - name: Install packages based on package.json.     community.general.npm:       path: /app/location

Модуль raw

Модуль raw используется при выполнении низкоуровневой команды SSH, она очень эффективна, но должна выполняться лишь в нескольких случаях. 

Наиболее распространенным случаем является установка Python в системе, в которой Python отсутствует. Другим случаем является обращение к любым устройствам, таким как маршрутизаторы, на которых не установлен Python.

В любом другом случае уместнее будет использовать модуль shell или модуль command. Параметры, переданные модулем raw, выполняются напрямую через удалённый настроенный модуль shell.

--- - name: raw module usage   hosts: all   become: yes   tasks:   - name: Bootstrap a host without python2 installed     raw: dnf install -y python2 python2-dnf libselinux-python      - name: Run a command that uses non-posix shell-isms (in this example /bin/sh doesn't handle redirection and wildcards together but bash does)     raw: cat < /tmp/*txt     args:       executable: /bin/bash

Модуль Command

Модуль Command используется для выполнения команд на удаленном узле. В основном он применяется для выполнения простых команд Linux. Команда или несколько команд не будут обрабатываться модулем shell, поэтому такие переменные, как  $HOSTNAME и операции типа “*”, “<”, “>”, “|”, “;” не будут работать. Для целей Windows нужно использовать модуль win_command. Для целей на базе Windows win_command может использоваться вместо модуля command.

--- - name: command module   hosts: all   tasks:   - name: Run command if /path/to/database does not exist (without 'args')     command: /usr/bin/make_database.sh db_user db_name creates=/path/to/database   - name: Run command if /path/to/database does not exist (with 'args' keyword)     ansible.builtin.command: /usr/bin/make_database.sh db_user db_name     args:       creates: /path/to/database

Модуль shell

Модуль shell предназначен для выполнения shell-команд на целевых хостах на базе unix. В отличие от модуля Ansible command, Ansible Shell будет принимать очень сложные команды с каналами, переадресацией и т.д. Также можно выполнять shell script с помощью этого модуля. Этот модуль предназначен для работы только с ПО на базе Linux, а не Windows. Для Windows следует использовать модуль win_powershell.

--- - name: shell module   hosts: all   tasks:   - name: This command will change the working directory to somedir/ and will only run when somedir/somelog.txt doesn't exist     shell: somescript.sh >> somelog.txt     args:       chdir: somedir/       creates: somelog.txt      - name: This command will change the working directory to somedir/     shell:       cmd: ls -l | grep log       chdir: somedir/      - name: Run a command that uses non-posix shell-isms (in this example /bin/sh doesn't handle redirection and wildcards together but bash does)     shell: cat < /tmp/*txt     args:       executable: /bin/bash

Модуль script

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

Две важные вещи, которые следует знать об этом модуле: первая – он не требует Python на удаленном узле, вторая – script выполняется через shell. Модуль script также поддерживается для узлов на базе Windows.

--- - name: script module   hosts: all   tasks:   -  name: Run a script with arguments (free form)      ansible.builtin.script: /some/local/script.sh --some-argument 1234       -  name: Run a script with arguments (using 'cmd' parameter)      ansible.builtin.script:        cmd: /some/local/script.sh --some-argument 1234

В следующей части мы рассмотрим все модули, связанные с управлением различными файлами и их свойствами, такими как модуль копирования или загрузки файлов (модули copy, fetch и get_url), модуль сжатия и распаковки файлов (модули archive и unarchive), модуль создания/удаления (модуль file), модуль управления доступом к файлам (модуль acl), модуль управления файловой конфигурацией (модуль template), модуль поиска файлов (модуль find) и модуль для замены текста внутри содержимого файла (модули replace, lineinfile и blockinfile).

Еще немного об изучении Ansible

Тех, кто хочет научиться управлять серверами и автоматизировать задачи с помощью Ansible, мы приглашаем на наш курс  «Ansible: Infrastructure as Code», который пройдет с 23 января по 19 февраля.

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

На курсе вы:

  • Узнаете как работать с переменными, как писать плейбуки и роли;

  • Развернете LEMP стек, PostgreSQL и Mongo кластеры,

  • Задеплоите Flask приложение;

  • Напишите свой модуль для Ansible;

  • Настроите IaC в Gitlab;

  • Разберетесь с работой с облаками и enterprise решениями.

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

Купите курс до 28 декабря и участвуйте в розыгрыше сертификата на 500 000Р на курсы Слёрма. 

Посмотреть программу курса и записаться.


ссылка на оригинал статьи https://habr.com/ru/company/southbridge/blog/707130/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *