如何使用ansible用符号链接替换目录?

时间:2014-11-19 00:39:14

标签: ansible ansible-playbook

我想将/etc/nginx/sites-enabled替换为我的仓库的符号链接。我正在尝试使用file模块执行此操作,但这不起作用,因为文件模块不会使用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

我可以回到使用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  

有没有更好的方法来实现这一目标,而不是回到shell?

1 个答案:

答案 0 :(得分:42)

当你采取行动时,实际上是事情:

  • 删除文件夹
  • 在其位置添加符号链接

这可能也是在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