web-dev-qa-db-fra.com

Comment remplacer un répertoire par un lien symbolique en utilisant ansible?

Je voudrais remplacer /etc/nginx/sites-enabled avec un lien symbolique vers mon dépôt. J'essaie de le faire en utilisant le module file, mais cela ne fonctionne pas car le module de fichier ne supprime pas un répertoire avec l'option force.

- name: setup nginx sites-available symlink
  file: path=/etc/nginx/sites-available src=/repo/etc/nginx/sites-available state=link force=yes
  notify: restart nginx

Je pourrais revenir à l'utilisation de Shell.

- name: setup nginx sites-available symlink
  Shell: test -d /etc/nginx/sites-available && rm -r /etc/nginx/sites-available && ln -sT /repo/etc/nginx/sites-available /etc/nginx/sites-available
  notify: restart nginx  

Existe-t-il un meilleur moyen d'y parvenir au lieu de retomber en coquille?

21
Anand Chitipothu

Lorsque vous agissez, ce sont en fait des choses:

  • supprimer un dossier
  • ajouter un lien symbolique à sa place

C'est probablement aussi la manière la plus propre de représenter dans Ansible:

tasks:
  - name: remove the folder
    file: path=/etc/nginx/sites-available state=absent 

  - name: setup nginx sites-available symlink
    file: path=/etc/nginx/sites-available 
          src=/repo/etc/nginx/sites-available 
          state=link 
          force=yes
    notify: restart nginx

Mais, toujours supprimer et ajouter le lien symbolique n'est pas si agréable, donc l'ajout d'une tâche pour vérifier la cible du lien peut être un ajout agréable:

  - name: check the current symlink
    stat: path=/etc/nginx/sites-available 
    register: sites_available

Et une condition "quand" à la tâche de suppression:

  - name: remove the folder (only if it is a folder)
    file: path=/etc/nginx/sites-available state=absent
    when: sites_available.stat.isdir is defined and sites_available.stat.isdir
45
Ramon de la Fuente