我有一个非常简单的 Ansible 任务,它试图在两个目录之间创建一个符号链接。这些文件还不存在,所以现在我只是创建指向目标目录的符号链接。即使我使用
force: true
,它仍然失败。根据我对 Ansible 文档的理解,这应该在以下情况下使用:
Force the creation of the symlinks in two cases: the source file does not exist (but will appear later).
参考:Ansible文件文档
当我尝试在具有绝对路径的测试服务器上创建符号链接时,它工作得很好,就像这样:
ln -s /src/mydir /mydir
我在 Ansible 中做同样的事情,像这样:
- name: Create symlink
file:
src: /src/mydir
dest: /mydir
state: link
force: true
在我的剧本中,我也在使用
become:true
.
但是,在 Ansible 中,这失败了,因为 Ansible 似乎正在尝试创建临时目录和文件,并且失败并显示无法访问的错误消息:
UNREACHABLE! => {"changed": false, "msg": "Failed to create temporary directory.
In some cases, you may have been able to authenticate and did not have
permissions on the target directory.
Consider changing the remote tmp path in ansible.cfg to
a path rooted in \"/tmp\", for more error information use -vvv.
失败的命令是:
( umask 77 && mkdir -p \"` echo /src/mydir/.ansible/tmp `\"&& mkdir \"` echo /src/mydir/.ansible/tmp/ansible-tmp `\" && echo ansible-tmp-\"` echo /src/mydir/.ansible/tmp/ansible-tmp `\" ),
exited with result 1", "unreachable": true}
到目前为止,所有其他任务都成功运行。从输出中可以看出,此任务返回为无法访问:
default: ok=18 changed=15 unreachable=1 failed=0 skipped=7 rescued=0 ignored=0
我按照错误消息说明进行操作,并在我的
ansible.cfg
项目根目录中创建了一个ansible
文件并将远程tmp设置为/tmp/.ansible/tmp
.
ansible.cfg:
[defaults]
remote_tmp = /tmp/.ansible/tmp
尽管如此,它仍然失败并出现同样的错误。
目录结构:
tree ansible/
ansible/
├── ansible.cfg
├── role1
│ └── tasks
│ └── main.yml
├── playbook.yml
├── role2
│ └── tasks
│ └── main.yml
└── role3
└── tasks
├── main.yml
您可以在我的项目根目录中看到
ansible.cfg
文件,当我运行ansible-config view
它返回文件的内容时没有任何错误:
[ defaults ]
remote_tmp = /tmp/.ansible/tmp
通过
-vvv
后,这是我得到的以下错误:
"msg": "Error while linking: [Errno 2] No such file or directory: b'/src/mydir' -> b'/mydir'", "path": "/mydir"
即使我在创建符号链接之前添加此任务:
- name: Create directory for symbolic link
file:
state: directory
path: /src/my_dir
它仍然失败并出现同样的错误。
下面的戏如期而至
shell> cat pb.yml
- hosts: all
become: true
tasks:
- file:
state: directory
path: /src/mydir
- file:
src: /src/mydir
dest: /mydir
state: link
force: true
shell> ansible-playbook -l test_11 pb.yml
PLAY [test_11] ********************************************************************************
TASK [file] ***********************************************************************************
changed: [test_11]
TASK [file] ***********************************************************************************
changed: [test_11]
PLAY RECAP ************************************************************************************
test_11: ok=2 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
shell> ssh admin@test_11 'ls -la / | grep src'
lrwxr-xr-x 1 root wheel 10 Apr 24 22:56 mydir -> /src/mydir
drwxr-xr-x 3 root wheel 3 Apr 24 22:56 src
选项
force: true
也按预期工作。链接创建到丢失的源
- hosts: all
become: true
tasks:
- file:
state: absent
path: /src
- file:
src: /src/mydir
dest: /mydir
state: link
force: true
shell> ssh admin@test_11 'ls -la / | grep src'
lrwxr-xr-x 1 root wheel 10 Apr 24 22:53 mydir -> /src/mydir