Подтвердить что ты не робот

Как заменить каталог символической ссылкой с помощью ansible?

Я хотел бы заменить /etc/nginx/sites-enabled символической ссылкой на мое репо. Я пытаюсь сделать это с помощью модуля file, но это не работает, так как файловый модуль не удаляет каталог с принудительным параметром.

- 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

Я могу вернуться к использованию оболочки.

- 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  

Есть ли лучший способ добиться этого, вместо того чтобы вернуться в оболочку?

4b9b3361

Ответ 1

Когда вы выполняете свое действие, это на самом деле вещи:

  • удалить папку
  • добавить символическую ссылку на своем месте

Это, вероятно, также самый чистый способ представления в 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

Но всегда удалять и добавлять символическую ссылку не так приятно, поэтому добавление задачи для проверки цели ссылки может быть приятным дополнением:

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

И условие "когда" для задачи удаления:

  - 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