Vai al contenuto

Ansible - Gestione dei file

In questo capitolo imparerai come gestire i file con Ansable.


Obiettivi: In questo capitolo imparerai come:

✔ modificare il contenuto del file;
✔ caricare i file ai server di destinazione;
✔ recuperare i file dai server di destinazione.

🏁 ansible, moduli, files

Conoscenza: ⭐ ⭐
Complessità: ⭐

Tempo di lettura: 20 minuti


A seconda delle vostre esigenze, dovrete utilizzare diversi moduli Ansible per modificare i file di configurazione del sistema.

modulo ini_file

Quando si desidera modificare un file INI (sezione tra doppie [] e key=value), il modo più semplice è usare il modulo ini_file.

Nota

Ulteriori informazioni possono essere trovate qui.

Il modulo richiede:

  • Il valore della sezione
  • Il nome dell'opzione
  • Il nuovo valore

Esempio di utilizzo:

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

modulo lineinfile

Per garantire che una riga sia presente in un file, o quando una singola riga in un file debba essere aggiunta o modificata, usa il modulo linefile.

Nota

Maggiori informazioni possono essere trovate qui.

In questo caso, la riga da modificare in un file verrà trovata usando un regexp.

Ad esempio, per garantire che la linea che inizia con SELINUX= nel file /etc/selinux/config contenga il valore enforcing:

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

modulo copy

Quando un file deve essere copiato dal server Ansible in uno o più host, è meglio utilizzare il modulo copy.

Nota

Maggiori informazioni possono essere trovate qui.

Qui stiamo copiando myflile.conf da una posizione all'altra:

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

modulo fetch

Quando un file deve essere copiato da un server remoto al server locale, è meglio utilizzare il modulo fetch.

Nota

Ulteriori informazioni possono essere trovate qui.

Questo modulo fa il contrario del modulo copy:

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

modulo template

Ansible e il suo modulo template utilizzano il sistema di template Jinja2 (http://jinja.pocoo.org/docs/) per generare i file sugli host di destinazione.

Nota

Ulteriori informazioni possono essere trovate qui.

Per esempio:

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

È possibile aggiungere una fase di convalida se il servizio di destinazione lo permette (ad esempio apache con il comando 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'

modulo get_url

Per caricare file da un sito web o ftp a uno o più host, utilizzare il modulo get_url:

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

Fornendo un checksum del file, il file non verrà nuovamente scaricato se è già presente nella posizione di destinazione e il suo checksum corrisponde al valore fornito.