GNU/Linux >> Linux Esercitazione >  >> Linux

Guida di Ansible:gestisci i file utilizzando Ansible

In questa guida ti mostrerò come gestire i file utilizzando i moduli ansible. Imparerai come copiare, modificare, inserire, scaricare e sostituire file utilizzando Ansible.

Cosa faremo?

  • Copia il file usando il modulo 'copia' e 'modelli'
  • Scarica il file utilizzando il modulo 'fetch'
  • Modifica il file utilizzando i moduli 'blockinfile', 'lineinfile' e 'replace'
  • Gestisci attributi file

Copia file utilizzando il modulo 'copy' e 'templates' in Ansible

Ansible fornisce alcuni moduli per copiare file dalla directory locale alle macchine di destinazione remote, è il modulo "copia" e "modello".

La differenza tra il modulo "copia" e "modello" è che il modulo copia copierà il file dalla directory "file" e il "modello" copierà il modello Jinja2 dalla directory "modelli" sui playbook Ansible.

Il modulo 'copia' è utile per copiare file persistenti come i certificati, mentre il 'modello' è più utile per configurazioni riutilizzabili come la configurazione dell'host virtuale ecc.

1. Copia il file dal computer di destinazione locale a quello remoto

Copiare la configurazione 'sources.list' nella directory 'files' locale sulla macchina remota '/etc/apt/sources.list'. Quando c'è la configurazione, verrà sostituita e salvata in base ai timestamp.

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

2. Copia il file sulla macchina remota in un'altra directory

Copia la configurazione sudoers '/etc/sudoers.d/hakase' sul computer remoto nell'altra directory '/home/hakase/hakase-suoers.txt'. È possibile farlo con l'opzione '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. Copia il file e cambia l'autorizzazione e il proprietario del file

Copia il file bash nella directory 'files' sul computer del server remoto e imposta l'autorizzazione predefinita per il file '0755' e il proprietario del file è '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. Copia il file con il modulo Modello

Copia la configurazione del modello Jinja2 per l'host virtuale nginx dalla directory 'templates' alla directory '/etc/sites-enabled/' sulla macchina remota. Con il template Jinja2 possiamo creare variabili per la nostra configurazione e renderla più riutilizzabile.

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

Scarica un file utilizzando il modulo Fetch in Ansible

Per scaricare un file dalla macchina remota al nostro nodo ansible locale, possiamo usare il modulo ansible chiamato 'fetch'.

1. Scarica da una macchina remota in locale

Scarica il file di configurazione di nginx 'nginx.conf' dal server remoto nella directory ansible-node locale '/home/hakase/backup' per creare un backup. E il modulo di recupero predefinito includerà le strutture delle directory.

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

2. Scarica da remoto a locale senza strutture di directory

Scarica dalla macchina remota al nodo ansible locale senza strutture di directory aggiungendo l'opzione "piatta".

- 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

Modifica file con Ansible

Ora modificheremo i file usando i moduli Ansible. Ci sono alcuni moduli che devi conoscere per modificare i file usando Ansible, come blockinfile, lineinfile e replace.

Il blockinfile inserirà/rimuoverà più righe nel file. Il lineinfile è per la riga singola e il modulo di sostituzione può essere utilizzato per sostituire la stringa.

1. Inserisci più righe in un file usando 'blockinfile'

Aggiungi la configurazione a più righe alla configurazione ssh 'sshd_config' usando il modulo 'blockinfile'. E l'impostazione predefinita inserirà la nuova configurazione in fondo alle righe.

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

2. Inserisci più righe usando le Opzioni Marker

Oppure, se desideri inserire nella riga specifica, puoi utilizzare l'opzione marker e seguire 'insertafter' o 'insertbefore' e Regex, oppure puoi utilizzare entrambi.

Il playbook seguente inserirà una nuova configurazione aggiuntiva nel file 'sshd_config'. La configurazione aggiuntiva verrà aggiunta prima della riga "UserPAM" circondata dall'indicatore predefinito "# 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. Elimina/rimuovi Linee multiple bloccano i dintorni all'interno dei marker

Rimuovi il blocco di linee circostanti dall'indicatore 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. Inserisci una nuova riga nel file

Inserisci la nuova configurazione di riga 'PasswordAuthentication no' sotto la riga regex '#PermitEmptyPasswords' nella configurazione 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. Rimuovere la linea dal file utilizzando il modulo lineinfile

Per rimuovere/eliminare una riga dal file, puoi utilizzare l'opzione 'stato:assente' e seguire l'espressione regolare della riga come di seguito.

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

6. Sostituisci le stringhe di pattern con l'espressione regolare e sostituisci il modulo

Ora sostituiremo una stringa usando il modulo 'replace'. Il modulo di sostituzione richiedeva l'espressione regolare come riferimento di back-end per sostituire il tipo di stringhe.

Cambia il nome dell'host nel file '/etc/hosts' usando sostituisci il modulo.

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

7. Decommenta le configurazioni

Il modulo di sostituzione può essere utilizzato per decommentare la configurazione sul sistema Linux. Semplice, possiamo rimuovere la stringa di commento '#' all'inizio della riga usando il modulo di sostituzione.

Decommenta la configurazione della riga 'server_tokens' nel file '/etc/nginx/nginx.conf'.

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

8. Commenta la linea di configurazione

Di seguito è possibile commentare la configurazione della riga aggiungendo il '#' all'inizio della riga.

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

Imposta gli attributi dei file utilizzando il modulo file in Ansible

Il modulo file può essere utilizzato per impostare gli attributi dei file stessi, come cambiare proprietario, gruppo e autorizzazione, creare un collegamento simbolico, creare una nuova directory ed eliminare un collegamento simbolico, un file o una directory.

Crea un file di collegamento simbolico sull'host remoto per la configurazione dell'host virtuale nginx chiamato 'vhost' nella directory '/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. Crea una nuova directory usando il modulo file

Per creare una nuova directory utilizzando il modulo file, dobbiamo utilizzare l'opzione state con il valore 'directory' come di seguito.

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

Linux
  1. Copia i file nel terminale Linux

  2. Gestisci l'avvio usando systemd

  3. Come copiare ricorsivamente i file per estensione del file??

  4. Come copiare più file contemporaneamente usando scp

  5. Distribuzione di una cartella di file modello utilizzando ansible

Comando Cp in Linux (copia file)

Come condividere file localmente su Linux utilizzando NitroShare

Inventario Ansible e file di configurazione

Come copiare file con estensione di file specifica in modo ricorsivo

Come copiare file in Linux usando il comando CP

Trasferisci file usando WinSCP