无法在Ansible中创建符号链接,说:“文件夹不为空,拒绝转换它”

时间:2016-12-14 01:25:23

标签: ansible ansible-playbook

错误:

  

失败! => {“已更改”:false,“失败”:true,“gid”:0,“group”:“root”,“mode”:“0755”,“msg”:“目录/ var / www / html / simpleRepoTwo / simpleRepoThree / release-20161213-1927 /不为空,拒绝转换它“,”所有者“:”root“,”path“:”/ var / www / html / simpleRepoTwo / simpleRepoThree / release-20161213-1927 /“ ,“size”:4096,“state”:“directory”,“uid”:0}

我也尝试在/ home / ubuntu /中使用不同的目录创建符号链接。 force:yes无效。

这是代码

- name: Creating symlinks of Products
  file:
    src: /home/ubuntu/productName/
    dest: /var/www/html/simpleRepoTwo/simpleRepoThree/release-{{release_folder}}/
    state: link
    force: yes

我想在productName

中创建simpleRepoTwo/simpleRepoThree/release-20161213-1927的符号链接

3 个答案:

答案 0 :(得分:1)

创建符号链接" / home / ubuntu / productName"到你的文件夹" / var / www / html / simpleRepoTwo / simpleRepoThree / release - {{release_folder}}",你必须设置" / home / ubuntu / productName"在您的参数 dest 中。决赛' /'不得使用

关于force参数,在两种情况下使用它:

  
      
  • 源文件不存在(但稍后会出现)
  •   
  • 目标存在并且是一个文件(因此,我们需要取消链接"路径"文件并创建符号链接到" src"文件来代替它。)
  •   

使用此任务

- name: Creating symlinks of Products
  file:
    src: /var/www/html/simpleRepoTwo/simpleRepoThree/release-{{release_folder}}
    dest: /home/ubuntu/productName
    state: link

要循环项目,请使用此任务

- name: Creating symlinks of Products
  file:
    src: "/var/www/html/simpleRepoTwo/simpleRepoThree/release-{{ release_folder }}/{{ item.src }}"
    dest: "/home/ubuntu/{{ item.dest }}"
    state: link
  with_items:
  - src: p1
    dest: p1
  - src: p2
    dest: p2

答案 1 :(得分:0)

如果这是rails应用程序,rails会将.keep文件放在某些文件夹中。记录例如。这会导致文件夹不为空。清空文件夹,然后重试。

答案 2 :(得分:0)

似乎没有办法满足您的要求。

可以将一个空目录“ 转换”转换为另一个目录内的符号链接。此“ 转换”要求删除原始目录并随后创建一个目录。符号链接。

但是,如果该目录不为空,则目录删除将使其所有内容完全不可用。而且Ansible说不可能像错误消息中明确指出的那样。

当然,您可以创建几个任务来首先删除目录内容,然后将其“ 转换”成符号链接。