2014-11-19 12 views
12

Chciałbym zastąpić /etc/nginx/sites-enabled dowiązaniem symbolicznym do mojego repozytorium. Próbuję to zrobić przy użyciu modułu file, ale to nie działa, ponieważ moduł plików nie usuwa katalogu z wymuszoną opcją.Jak zamienić katalog na dowiązanie symboliczne za pomocą 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 

Mogę zrezygnować z używania powłoki.

- 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 

Czy istnieje lepszy sposób na osiągnięcie tego celu zamiast powrotu do powłoki?

+0

Teraz czytam swoje pytanie właściwie: dlaczego chcesz zastąpić cały folder z włączonymi witrynami? Czy nie jest bardziej zwyczajowo dodawać linki w witrynach z włączonymi opcjami do witryn dostępnych (lub gdzieś indziej, takich jak twój projekt)? –

+0

To jest sposób, w jaki zostało zrobione we wcześniejszej konfiguracji i próbowałem powtórzyć to samo z Ansible. Jedną z rzeczy, które mogłem zrobić, to symlink/repo/etc/nginx/sites-available/* do/etc/nginx/sites-available /. W takim przypadku będę musiał pamiętać, aby uruchomić ansibli-playbook, jeśli dodaję nową stronę, której starałem się ominąć. –

Odpowiedz

30

Jeśli wziąć swoje działanie, to faktycznie rzeczy:

  • usunąć folder
  • dodać dowiązania symbolicznego w jego miejsce

Jest to prawdopodobnie również najczystszym sposobem reprezentowania w ansibl:

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 

Ale zawsze usuwanie i dodawanie dowiązania symbolicznego nie jest takie przyjemne, więc dodanie zadania, aby sprawdzić cel łącza może być miłym dodatkiem:

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

i „kiedy” stan do usuwania zadania:

- 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

To sprawia, że ​​3 kroki - stat, usuń i link. Czuje się za dużo pracy na tak prostą rzecz. –

+0

Co jeśli potrzebuję wykonać tę samą pracę dla listy plików dostarczonych przez 'with_items'? Jak możemy zarejestrować wyniki statystyczne w postaci tablicy i uzyskać do niej dostęp w instrukcji 'when'? –

+1

Pierwotne pytanie brzmiało: "Dlaczego" życie "Dyrektywa nie działa zgodnie z oczekiwaniami", uważam –

Powiązane problemy