2016-01-11 20 views
5

Devo controllare se una directory è un punto di montaggio prima di eseguire altre attività.Controllare se la directory è un punto di montaggio?

Mi sono guardato intorno nella documentazione e sembra solo che tu possa creare/distruggere i punti di montaggio ma non solo controllare se ne esiste uno. Dal link sottostante.

http://docs.ansible.com/ansible/mount_module.html

Mi chiedo se non v'è alcun modo per verificare che esiste con ansible, o dovrà essere qualche altro linguaggio chiamato da ansible.

risposta

11

Ho provato con entrambi i moduli mount e stat. Entrambi non hanno soddisfatto le tue esigenze.

Sono riuscito a lavorare solo utilizzando un comando OS. Ho testato su famiglie Redhat, Debian e SLES.

vars: 
    - myvolume: /backup 

tasks: 

    - command: mountpoint -q {{myvolume}} 
    register: volume_stat 
    failed_when: False 
    changed_when: False 

    - debug: 
     msg: "This is a mountpoint!" 
     when: volume_stat.rc == 0 

Il problema è, mountpoint comando genera stderr se il percorso non è un punto di montaggio quindi bisogna usare ignore_errors, strega non è una buona soluzione.

EDIT 1: è menzionata da @udondan, failed_when è un approccio migliore allora ignore_errors in quanto non errori di output.

Potrebbe essere quello che vuoi se hai bisogno di fermare il playbook se il percorso non è un punto di mount.

Spero che qualcuno trovi una soluzione migliore di questa.

NOTA: C'è alcune piattaforme che non hanno mountpoint di comando, per quanto ne so Darwin (Mac OSX) e SunOS (Oracle Solaris), se avete bisogno di questo per lavorare su questi sistemi, ti è necessario trovare un'altra soluzione alternativa.

+0

Credo di creare un punto di montaggio che l'obiettivo ha effettivamente bisogno di esistere. Ma un percorso esistente non significa che sia montato. – udondan

+0

Hai ragione @udondan, ho cambiato la mia risposta. –

+0

Invece di 'ignore_errors: true' puoi usare' failed_when: false'.È un po 'meno brutto perché non mostrerebbe l'errore nell'output. D'altra parte salta tutti gli errori. Non so se il comando 'mountpoint' potrebbe non esistere su alcuni sistemi? Sarebbe qualcosa su cui vorresti fallire. :) Ma se questo è il modo in cui vuoi andare, puoi armeggiare con la condizione 'failed_when'. – udondan

2

Dopo un po 'di tentativi, mi sono inventato questo.

vars: 
- myvolume: /backup 

tasks: 
- debug: msg="The dir is a mount point" 
    with_items: ansible_mounts 
    when: item.mount == myvolume 

Non sono sicuro di come questo vale per tutti i sistemi e/o se ansible_mounts contiene tutti i punti di montaggio del sistema operativo o solo quelli creati con ansible.

+1

Ho provato questo fatto, mostra tutti i punti di montaggio. Ha lavorato su SLES, RedHat e Ubuntu/Debian. Su SunOS (Solaris 11,10), Darwin (MacOSX El Capitan) e HPUX la variabile non era presente. Io preferisco soluzioni che non richiedono moduli come 'shell' o' command' perché non si può usare la 'modalità dry-run'. –

1

È possibile utilizzare Ansible "comando" "stdout" del modulo per determinare lo stato di montaggio di una determinata directory, codice di esempio viene incollato qui:

- name: "check mount point {{ mount_dir }}" 
    command: mountpoint {{ mount_dir }} 
    register: mount_stat 
    failed_when: False 
    changed_when: False 

- name: "debug" 
    when: mount_stat.stdout == "{{ mount_dir }} is a mountpoint" 
    debug: 
    msg: "{{ mount_dir }} is a mountpoint" 

- name: "debug" 
    when: mount_stat.stdout == "{{ mount_dir }} is not a mountpoint" 
    debug: 
    msg: "{{ mount_dir }} is not a mountpoint" 
+1

Dovresti scrivere una risposta più dettagliata. In primo luogo è necessario menzionare la fonte del testo pubblicato poiché in pratica si limita a copiarlo dalla documentazione. In secondo luogo questo codice può essere visto sul sito fornito dall'autore della domanda, quindi credo che l'abbia letto. Se è così, probabilmente non ha capito quel testo. Alla fine penso che apprezzerà qualche tuo commento. –

1

Avendo difficoltà simili, ma provare qualcosa di simile -

- name: testing for required mount points 
    fail: 
    msg: "{{ item }} must be a mount point" 
    when: not item|is_mount 
    with_items: 
    - /path/to/test 

Ora, se posso solo capire come ottenere affidabile la dimensioni del punto di montaggio, lol

B TW, vale la pena guardare i fatti di default, come {{ ansible_mounts }}, anche se il mio/dev/shm non viene mostrato lì - non so perché ancora. Screat scriptor, ymmv.

Problemi correlati