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

Ana*_*thu 20 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
Run Code Online (Sandbox Code Playgroud)

我可以回到使用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  
Run Code Online (Sandbox Code Playgroud)

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

Ram*_*nte 43

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

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

这可能也是在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
Run Code Online (Sandbox Code Playgroud)

但是,总是删除和添加符号链接不是很好,所以添加一个任务来检查链接目标可能是一个很好的补充:

  - name: check the current symlink
    stat: path=/etc/nginx/sites-available 
    register: sites_available
Run Code Online (Sandbox Code Playgroud)

删除任务的"何时"条件:

  - 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
Run Code Online (Sandbox Code Playgroud)

  • 这使它成为3个步骤 - 统计,删除和链接.对于这么简单的事情,感觉太多了. (2认同)