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

от автора

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

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

Поехали…

Модуль copy

Модуль copy может использоваться для копирования файла с локального/удаленного устройства и передаваться на другое устройство. Для компьютера с Windows можно использовать модуль win_copy.

--- - name: copy module   hosts: localhost   tasks:   - name: copy a file from local machine to local machine     copy:       src: files/src.txt       dest: files/dest.txt --- - name: copy module   hosts: all   tasks:   - name: copy a file from remote machine to remote machine     copy:       src: /etc/src.txt       dest: /etc/dest.txt    - name: copy a file from local machine to remote machine with owner and permissions     copy:       src: files/src.txt       dest: /etc/dest.txt       owner: foo       group: foo       mode: '0644'

Модуль fetch

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

--- - name: fetch module   hosts: all   tasks:   - name: copy a file from remote machine to local machine     fetch:       src: /var/log/access.log       dest: /var/log/fetched    - name: copy a file from local machine to remote machine with owner and permissions     copy:       src: files/src.txt       dest: /etc/dest.txt       owner: foo       group: foo       mode: '0644'

Также можно удалить структуру родительских папок для файла, выставив в параметрах значение flat = true.

--- - name: fetch module   hosts: all   tasks:   - name: copy a file from remote machine to local machine without parent folder structure.     fetch:       src: /var/log/access.log       dest: /var/{{ inventory_hostname }}/       flat: true

Модуль get_url

Модуль get_url можно использовать для загрузки файлов с серверов HTTPS/HTTP/FTP. По умолчанию этот модуль использует прокси, с настройками для узла. Пользовательский прокси можно использовать, установив переменную среды или используя опцию use_proxy.

--- - name: get_url module   hosts: all   tasks:   - name: download tomcat from apache      get_url:       url: https://downloads.apache.org/tomcat/tomcat-8/v8.5.81/bin/apache-tomcat-8.5.81-deployer.tar.gz       dest: /tmp/download/tomcat       mode: 0755       owner: tomcat       group: tomcat

Модуль archive

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

--- - name: archive module   hosts: all   tasks:   - name: Compress directory /path/to/foo/ into /path/to/foo.tgz     archive:       path: /path/to/foo       dest: /path/to/foo.tgz   - name: Compress regular file /path/to/foo into /path/to/foo.gz and remove it     archive:       path: /path/to/foo       remove: yes   - name: Create a bz2 archive of multiple files, rooted at /path     archive:       path:       - /path/to/foo       - /path/wong/foo       dest: /path/file.tar.bz2       format: bz2   - name: Create a gz archive of a globbed path, while excluding specific dirnames     archive:       path:       - /path/to/foo/*       dest: /path/file.tar.bz2       exclude_path:       - /path/to/foo/bar       - /path/to/foo/baz       format: gz

Модуль unarchive

Модуль unarchive используется для распаковки архивных файлов, таких как tar, gz, zip. Он также может скопировать файл на удаленный сервер перед его распаковкой. Модуль использует команды unzip и tar -xzf для распаковки сжатого файла, поэтому эти команды должны быть установлены на целевых узлах. Для Windows можно использовать узел win_unzip.

--- - name: unarchive module   hosts: all   tasks:   - name: Extract foo.tgz into /var/lib/foo     unarchive:       src: foo.tgz       dest: /var/lib/foo    - name: Unarchive a file that is already on the remote machine     unarchive:       src: /tmp/foo.zip       dest: /usr/local/bin       remote_src: yes    - name: Unarchive a file that needs to be downloaded      unarchive:       src: https://example.com/example.zip       dest: /usr/local/bin       remote_src: yes

Модуль file

Модуль file отвечает за выполнение таких задач, как создание файлов и каталогов, их удаление, создание мягких и жестких символических ссылок, добавление и изменение разрешений для файлов и каталогов и многое другое. Для компьютера с Windows можно использовать модуль win_file.

--- - name: file module   hosts: all   tasks:   - name: Create a file     file:       path: /etc/foo.conf       state: touch       mode: u=rw,g=r,o=r   - name: Create a directory if it does not exist     file:       path: /etc/some_directory       state: directory       mode: '0755'   - name: Remove file (delete file)     file:       path: /etc/foo.txt       state: absent   - name: Change file ownership, group and permissions     file:       path: /etc/foo.conf       owner: foo       group: foo       mode: '0644'   - name: Create a symbolic link     file:       src: /file/to/link/to       dest: /path/to/symlink       owner: foo       group: foo       state: link

Модуль acl

Модуль acl используется для создания и изменения записей списка контроля доступа, как и функции команд getfacl и setfacl. Этот модуль требует, чтобы списки управления доступом были включены в целевую файловую систему, а также установку двоичных файлов setfacl и getfacl. Для компьютера с Windows можно использовать модуль win_acl.

--- - name: acl module   hosts: all   tasks:   - name: Grant user Joe read access to a file     acl:       path: /etc/foo.conf       entity: joe       etype: user       permissions: r       state: present    - name: Removes the acl for Joe on a specific file     acl:       path: /etc/foo.conf       entity: joe       etype: user       state: absent    - name: Sets default acl for joe on foo.d     acl:       path: /etc/foo.d       entity: joe       etype: user       permissions: rw       default: yes       state: present

Модуль template

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

Модуль template выполняет две вещи: во-первых, заменяет интерполяционные переменные синтаксиса Jinja2, присутствующие в файле шаблона, фактическими значениями, во-вторых, копирует (scp) файл на удаленный сервер.

--- - name: template module   hosts: all   tasks:   - name: Template a file to /etc/file.conf     template:       src: /mytemplates/foo.j2       dest: /etc/file.conf       owner: bin       group: wheel       mode: '0644'

Модуль find

Модуль find функционирует так же, как и команда поиска Linux,  помогая находить файлы и каталоги на основе различных критериев поиска. Для Windows вместо этого следует использовать модуль win_find.

--- - name: find module   hosts: all   tasks:   - name: Recursively find /tmp files older than 2 days     find:       paths: /tmp       age: 2d       recurse: yes    - name: Recursively find /tmp files older than 4 weeks and equal or greater than 1 megabyte     find:       paths: /tmp       age: 4w       size: 1m       recurse: yes    - name: Recursively find /var/tmp files with last access time greater than 3600 seconds     find:       paths: /var/tmp       age: 3600       age_stamp: atime       recurse: yes

Модуль replace

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

--- - name: replace module   hosts: all   tasks:   - name: Ansible replace Unix with Linux     replace:       path: /etc/ansible/sample.txt       regexp: 'Unix'       replace: 'Linux'   - name: Replace before the expression till the begin of the file     replace:       path: /etc/apache2/sites-available/default.conf       before: '# live site config'       regexp: 'Unix'       replace: 'Linux'   - name: Replace between the expressions and create a backup     replace:       path: /etc/hosts       after: '<VirtualHost [*]>'       before: '</VirtualHost>'       regexp: 'Unix'       replace: 'Linux'       backup: yes

Модуль lineinfile

Модуль lineinfile незаменим в тех случаях, когда вы хотите добавить, удалить или изменить одну строку в файле. Можно также использовать режим сопоставления строки перед изменением или удалением при помощи регулярных выражений. Вы можете повторно использовать и изменять строку, используя параметр обратной ссылки. Также можно использовать свойства insertafter и insertbefore для внесения изменений в указанную часть файла.

--- - name: lineinfile module   hosts: all   tasks:   - name: adding a line     lineinfile:       path: /etc/selinux/config       regexp: '^SELINUX='       line: SELINUX=enforcing    - name: deleting a line     lineinfile:       path: /etc/sudoers       state: absent       regexp: '^%wheel'    - name: Replacing a line     lineinfile:       path: /etc/hosts       regexp: '^127\.0\.0\.1'       line: 127.0.0.1 localhost   - name: replace a line only after a specified string      lineinfile:       path: /etc/httpd/conf/httpd.conf       regexp: '^Listen '       insertafter: '^#Listen '       line: Listen 8080

Модуль blockinfile

Модуль blockinfile вставит/обновит/удалит блок многострочного текста. Блок будет выделен метками, такими как begin и end, для того, чтобы сделать задачу идемпотентной. По умолчанию блок будет вставлен в конец файла.

--- - name: blockinfile module   hosts: all   tasks:   - name: insert a block into a file     blockinfile:       path: /etc/ssh/sshd_config       block: |         Match User ansible-agent         PasswordAuthentication no   - name: Insert/Update HTML surrounded by custom markers after <body> line     blockinfile:       path: /var/www/html/index.html       marker: "<!-- {mark} ANSIBLE MANAGED BLOCK -->"       insertafter: "<body>"       block: |         <h1>Welcome to {{ ansible_hostname }}</h1>         <p>Last updated on {{ ansible_date_time.iso8601 }}</p>

В третьей части серии мы поговорим о модуле, который используется при обработке сервиса (модуль service), модулях управления пользователями и группами (модуль user и модуль group), модуле управления cron (модуль cron), модуле печати сообщений во время выполнения плейбука (модуль debug) и модулях, включающих переменные и роли (модуль include_vars и модуль include_role).

Еще больше о работе с 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/707986/


Комментарии

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

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