2014-11-19 10 views
12

Ich möchte /etc/nginx/sites-enabled mit einem Symlink zu meinem Repo ersetzen. Ich versuche, dies mit file Modul zu tun, aber das funktioniert nicht, da das Dateimodul ein Verzeichnis mit Force-Option nicht entfernt.Wie ersetzt man ein Verzeichnis mit einem Symlink mit Ansible?

- 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 

Ich könnte wieder auf die Shell zurückgreifen.

- 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 

Gibt es einen besseren Weg dies zu erreichen, anstatt zurück in die Shell zu fallen?

+0

Nun, da ich Ihre Frage richtig gelesen: eine Aufgabe Hinzufügen der Link-Ziel zu überprüfen, eine schöne Ergänzung sein könnte, warum wollen Sie um den gesamten sites-enabled-Ordner zu ersetzen? Ist es nicht gebräuchlicher, Links zu Sites hinzuzufügen, die für Websites aktiviert sind (oder woanders, wie Ihr Projekt)? –

+0

So wurde es in der früheren Installation gemacht und ich versuchte dasselbe mit Ansible zu wiederholen. Eine Sache, die ich hätte tun können, ist symlink/repo/etc/nginx/sites-available/* nach/etc/nginx/sites-available /. In diesem Fall muss ich daran denken, ein Ansible-Playbook zu erstellen, wenn ich eine neue Site hinzufüge, die ich vermeiden wollte. –

Antwort

30

Wenn Sie Maßnahmen ergreifen, ist es eigentlich Dinge:

  • Löschen eines Ordners
  • einen Symlink an seinem Platz hinzufügen

Dies ist wahrscheinlich der sauberste Weg ist auch in ansible zu vertreten:

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 

Aber das Entfernen und Hinzufügen des Symlinks ist nicht so nett, also

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

Und ein ‚wenn‘ Zustand der Lösch Aufgabe:

- 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 
+2

Das macht es 3 Schritte - stat, entfernen und verknüpfen. Es fühlt sich zu viel Arbeit für so eine einfache Sache an. –

+0

Was ist, wenn ich die gleiche Arbeit für eine Liste von Dateien tun muss, die über 'with_items' bereitgestellt werden? Wie können wir Stat-Ergebnisse als Array registrieren und in 'when'-Anweisung darauf zugreifen? –

+1

Ursprüngliche Frage war 'Warum" erzwingen "Richtlinie funktioniert nicht wie erwartet, glaube ich –

Verwandte Themen