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 збираються вказівки.