Поиск по сайту:

Руководство по Ansible: управление файлами с помощью Ansible


На этой странице

  1. Что будем делать?
  2. Скопируйте файл с помощью модуля копирования и шаблонов в Ansible.
    1. 1. Скопируйте файл с локальной на удаленную целевую машину
    2. 2. Скопировать файл на удаленном компьютере в другой каталог
    3. 3. Скопируйте файл и измените разрешение и владельца файла
    4. 4. Скопируйте файл с модулем шаблона

    1. 1. Загрузка с удаленного компьютера на локальный
    2. 2. Загрузка с удаленного на локальный без структур каталогов

    1. 1. Вставить несколько строк в файл с помощью blockinfile
    2. 2. Вставьте несколько строк, используя параметры маркера
    3. 3. Удалить/удалить окружение блока нескольких линий внутри маркеров
    4. 4. Вставить новую строку в файл
    5. 5. Удалить строку из файла с помощью модуля lineinfile
    6. 6. Замените строки шаблона регулярным выражением и замените модуль
    7. 7. Раскомментировать конфигурации
    8. 8. Комментарий к строке конфигурации

    1. 1. Создать символическую ссылку на файл
    2. 2. Создайте новый каталог, используя файловый модуль

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

    Что мы будем делать?

    • Копировать файл с помощью модуля копирования и шаблонов
    • Загрузить файл с помощью модуля выборки
    • Редактировать файл с помощью модулей blockinfile, lineinfile и replace.
    • Управление атрибутами файла

    Скопируйте файл с помощью модуля копирования и шаблонов в Ansible

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

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

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

    1. Скопируйте файл с локальной на удаленную целевую машину.

    Скопируйте конфигурацию sources.list из каталога локальных файлов на удаленный компьютер /etc/apt/sources.list. Когда есть конфигурация, она будет заменена и сделана резервная копия на основе меток времени.

    - name: Copy from Local to Remote Target Machine with 'copy'
      copy:
        src: sources.list
        dest: /etc/apt/sources.list
        backup: yes

    2. Скопируйте файл на удаленном компьютере в другой каталог.

    Скопируйте конфигурацию sudoers /etc/sudoers.d/hakase на удаленном компьютере в другой каталог /home/hakase/hakase-suoers.txt. Это можно сделать с помощью опции remote_src.

    - name: Copy file from one directory to other on the Remote Machine
      copy:
        src: /etc/sudoers.d/hakase
        dest: /home/hakase/hakase-sudoers.txt
        remote_src: yes

    3. Скопируйте файл и измените разрешение и владельца файла.

    Скопируйте файл bash из каталога файлов на удаленный сервер и установите разрешение файла по умолчанию 0755, а владельцем файла является hakase.

    - name: Copy file and set up the permission and owner of the file
      copy:
        src: simple.sh
        dest: /home/hakase/simple.sh
        owner: hakase
        group: hakase
        mode: 0755

    4. Скопируйте файл с модулем шаблона

    Скопируйте конфигурацию шаблона Jinja2 для виртуального хоста nginx из каталога templates в каталог /etc/sites-enabled/ на удаленном компьютере. С помощью шаблона Jinja2 мы можем создавать переменные для нашей конфигурации и делать ее более пригодной для повторного использования.

    - name: Copy file using 'template' module
      template:
        src: default.j2
        dest: /etc/nginx/sites-enabled/
        backup: yes
        owner: root
        group: root
        mode: 0644

    Загрузите файл с помощью модуля Fetch в Ansible

    Чтобы загрузить файл с удаленного компьютера на наш локальный узел ansible, мы можем использовать модуль ansible под названием fetch.

    1. Загрузка с удаленного компьютера на локальный

    Загрузите файл конфигурации nginx nginx.conf с удаленного сервера в локальную директорию ansible-node /home/hakase/backup для создания резервной копии. И модуль выборки по умолчанию будет включать структуры каталогов.

    - name: Download file from Remote Machine to Local ansible-node directory
      become: yes
      fetch:
        src: /etc/nginx/nginx.conf
        dest: /home/hakase/backup/

    2. Загрузка с удаленного на локальный без структур каталогов

    Загрузите с удаленного компьютера на локальный ansible-node без структуры каталогов, добавив опцию flat.

    - name: Download file from Remote Machine to Local ansible node without directory structures
      become: yes
      fetch:
        src: /etc/nginx/nginx.conf
        dest: /home/hakase/backup/
        flat: yes

    Редактировать файлы с помощью Ansible

    Теперь собирались редактировать файлы с помощью модулей Ansible. Есть некоторые модули, которые вы должны знать для редактирования файлов с помощью Ansible, такие как blockinfile, lineinfile и replace.

    Blockinfile будет вставлять/удалять несколько строк в файл. Lineinfile предназначен для одной строки, а модуль replace можно использовать для замены строки.

    1. Вставьте несколько строк в файл, используя blockinfile

    Добавьте многострочную конфигурацию в конфигурацию ssh sshd_config с помощью модуля blockinfile. И настройка по умолчанию вставит новую конфигурацию в конец строк.

    - name: Insert multiple lines and Backup
      blockinfile:
        path: /etc/ssh/sshd_config
        backup: yes
        block: |
          ClientAliveInterval 360
          ClientAliveCountMax 0

    2. Вставьте несколько строк, используя параметры маркера.

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

    Приведенный ниже плейбук добавит новую дополнительную конфигурацию в файл sshd_config. Дополнительная конфигурация будет добавлена перед строкой UserPAM, окруженной маркером по умолчанию # BEGIN ANSIBLE MANAGED BLOCK.

    - name: Insert after regex, backup, and validate
      blockinfile:
        path: /etc/ssh/sshd_config
        backup: yes
        marker: "# {mark} ANSIBLE MANAGED BLOCK "
        insertbefore: '^UsePAM '
        block: |
          AllowUsers hakase vagrant
          PermitEmptyPasswords no
          PermitRootLogin no
        validate: '/usr/sbin/sshd -T -f %s'

    3. Удалить/удалить окружение блока нескольких линий внутри маркеров.

    Удалите блок строк окружения маркером ansible # BEGIN ANSIBLE MANAGED BLOCK.

    - name: Remote text block surrounding by markers
      blockinfile:
        path: /etc/ssh/sshd_config
        marker: "# {mark} ANSIBLE MANAGED BLOCK"
        content: ""
        backup: yes

    4. Вставьте новую строку в файл

    Вставьте новую строку конфигурации PasswordAuthentication no под строкой регулярного выражения #PermitEmptyPasswords в конфигурацию ssh /etc/ssh/sshd_config.

    - name: Insert New Line under the Regex configuration
      lineinfile:
        path: /etc/ssh/sshd_config
        backup: yes
        regexp: '^PasswordAuthentication '
        insertafter: '^#PermitEmptyPasswords '
        line: 'PasswordAuthentication no'
        validate: '/usr/sbin/sshd -T -f %s'

    5. Удалить строку из файла с помощью модуля lineinfile

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

    - name: Remove a line from the file
      lineinfile:
        path: /etc/ssh/sshd_config
        state: absent
        regexp: '^PasswordAuthentication'

    6. Замените строки шаблона регулярным выражением и замените модуль

    Теперь собирались заменить строку с помощью модуля replace. Модулю замены требовалось регулярное выражение в качестве бэкэнд-ссылки для замены вида строк.

    Измените имя хоста в файле /etc/hosts, используя модуль replace.

    - name: Replace the default
      replace:
        path: /etc/hosts
        regexp: '(\s+)node\.provision\.labs(\s+.*)?$'
        replace: '\1box.hakase.labs\2'
        backup: yes

    7. Раскомментируйте конфигурации

    Модуль замены можно использовать для раскомментирования конфигурации в системе Linux. Просто мы можем удалить строку комментария # в начале строки, используя модуль замены.

    Раскомментируйте конфигурацию строки server_tokens в файле /etc/nginx/nginx.conf.

    - name: Uncomment configuration
      replace:
        path: /etc/nginx/nginx.conf
        regexp: '#(\s+)server_tokens'
        replace: 'server_tokens'
        backup: yes

    8. Комментарий к строке конфигурации

    Ниже следует прокомментировать конфигурацию строки, добавив # в начало строки.

    - name: Comment Line configuration
      replace:
        path: /etc/nginx/nginx.conf
        regexp: '(\s+)gzip on'
        replace: '\n\t#gzip on'
        backup: yes

    Установите атрибуты файлов с помощью файлового модуля в Ansible

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

    1. Создайте символическую ссылку на файл

    Создайте файл символической ссылки на удаленном хосте для конфигурации виртуального хоста nginx с именем vhost в каталоге /etc/nginx/sites-enabled/.

    - name: Create Symlink of file
      file:
        src: /etc/nginx/sites-available/vhost
        dest: /etc/nginx/sites-enabled/vhost
        owner: root
        group: root
        state: link

    2. Создайте новый каталог, используя файловый модуль

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

    - name: Create a New Directory using file
      file:
        path: /etc/nginx/ssl
        state: directory
        owner: root
        group: root
        mode: 0755

    Ссылка