Перейти до змісту

Ansible - Управління файлами

У цьому розділі ви дізнаєтесь, як керувати файлами за допомогою Ansible.


Цілі: В цьому розділі ви дізнаєтеся як:

✔ змінити вміст файлу;
✔ завантажити файли на цільові сервери;
✔ отримати файли з цільових серверів.

🏁 ansible, module, files

Знання: ⭐ ⭐
Складність: ⭐

Час читання: 20 хвилин


Залежно від ваших потреб вам доведеться використовувати різні модулі Ansible для зміни файлів конфігурації системи.

Модуль ini_file

Якщо ви хочете змінити файл INI (розділ між парами [] і key=value), найпростішим способом є використання модуля ini_file.

Важливо

Більше інформації можна знайти тут.

Модуль вимагає:

  • Значення розділу
  • Назву опції
  • Нове значення

Приклад використання:

- name: change value on inifile
  community.general.ini_file:
    dest: /path/to/file.ini
    section: SECTIONNAME
    option: OPTIONNAME
    value: NEWVALUE

Модуль lineinfile

Щоб переконатися, що рядок присутній у файлі, або коли один рядок у файлі потрібно додати або змінити, використовуйте модуль linefile.

Важливо

Більше інформації можна знайти тут.

У цьому випадку рядок у файлі, який потрібно змінити, буде знайдено за допомогою регулярного виразу.

Наприклад, щоб переконатися, що рядок, який починається з SELINUX= у файлі /etc/selinux/config, містить значення enforcing:

- ansible.builtin.lineinfile:
    path: /etc/selinux/config
    regexp: '^SELINUX='
    line: 'SELINUX=enforcing'

Модуль copy

Якщо файл необхідно скопіювати з сервера Ansible на один чи більше хостів, краще використовувати модуль copy.

Примітка

Більше інформації можна знайти тут.

Тут ми копіюємо myflile.conf з одного місця в інше:

- ansible.builtin.copy:
    src: /data/ansible/sources/myfile.conf
    dest: /etc/myfile.conf
    owner: root
    group: root
    mode: 0644

Модуль fetch

Якщо файл потрібно скопіювати з віддаленого сервера на локальний, найкраще використовувати модуль fetch.

Примітка

Більше інформації можна знайти тут.

Цей модуль діє протилежно до модуля copy:

- ansible.builtin.fetch:
    src: /etc/myfile.conf
    dest: /data/ansible/backup/myfile-{{ inventory_hostname }}.conf
    flat: yes

Модуль template

Ansible і його модуль template використовують систему шаблонів Jinja2 (http://jinja.pocoo.org/docs/) для створення файлів на target hosts.

Примітка

Більше інформації можна знайти тут.

Наприклад:

- ansible.builtin.template:
    src: /data/ansible/templates/monfichier.j2
    dest: /etc/myfile.conf
    owner: root
    group: root
    mode: 0644

Можна додати крок перевірки, якщо це дозволяє цільова служба (наприклад, apache за допомогою команди apachectl -t):

- template:
    src: /data/ansible/templates/vhost.j2
    dest: /etc/httpd/sites-available/vhost.conf
    owner: root
    group: root
    mode: 0644
    validate: '/usr/sbin/apachectl -t'

Модуль get_url

Щоб завантажити файли з веб-сайту чи ftp на один або кілька хостів, скористайтеся модулем get_url:

- get_url:
    url: http://site.com/archive.zip
    dest: /tmp/archive.zip
    mode: 0640
    checksum: sha256:f772bd36185515581aa9a2e4b38fb97940ff28764900ba708e68286121770e9a

Використовуючи checksum of file, файл не буде перезавантажено, якщо він є в повному обсязі на місцевому місці, і його checksum збираються вказівки.