Руководство по Ansible: управление файлами с помощью Ansible
На этой странице
- Что будем делать?
- Скопируйте файл с помощью модуля копирования и шаблонов в Ansible.
- 1. Скопируйте файл с локальной на удаленную целевую машину
- 2. Скопировать файл на удаленном компьютере в другой каталог
- 3. Скопируйте файл и измените разрешение и владельца файла
- 4. Скопируйте файл с модулем шаблона
- 1. Загрузка с удаленного компьютера на локальный
- 2. Загрузка с удаленного на локальный без структур каталогов
- 1. Вставить несколько строк в файл с помощью blockinfile
- 2. Вставьте несколько строк, используя параметры маркера
- 3. Удалить/удалить окружение блока нескольких линий внутри маркеров
- 4. Вставить новую строку в файл
- 5. Удалить строку из файла с помощью модуля lineinfile
- 6. Замените строки шаблона регулярным выражением и замените модуль
- 7. Раскомментировать конфигурации
- 8. Комментарий к строке конфигурации
- 1. Создать символическую ссылку на файл
- 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 02. Вставьте несколько строк, используя параметры маркера.
Или, если вы хотите вставить в определенную строку, вы можете использовать опцию маркера и следовать вставить после или вставить до и регулярное выражение, или вы можете использовать оба.
Приведенный ниже плейбук добавит новую дополнительную конфигурацию в файл 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: yes4. Вставьте новую строку в файл
Вставьте новую строку конфигурации 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: yes7. Раскомментируйте конфигурации
Модуль замены можно использовать для раскомментирования конфигурации в системе Linux. Просто мы можем удалить строку комментария # в начале строки, используя модуль замены.
Раскомментируйте конфигурацию строки server_tokens в файле /etc/nginx/nginx.conf.
- name: Uncomment configuration
replace:
path: /etc/nginx/nginx.conf
regexp: '#(\s+)server_tokens'
replace: 'server_tokens'
backup: yes8. Комментарий к строке конфигурации
Ниже следует прокомментировать конфигурацию строки, добавив # в начало строки.
- 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: link2. Создайте новый каталог, используя файловый модуль
Чтобы создать новый каталог с помощью файлового модуля, нам нужно использовать параметр состояния со значением каталога, как показано ниже.
- name: Create a New Directory using file
file:
path: /etc/nginx/ssl
state: directory
owner: root
group: root
mode: 0755Ссылка