如何使用 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  

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

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

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

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

最新更新