我有一个简单的Ansible任务,用于创建一个文件:
- name: create fake file
file:
name: /opt/refdata/PROD02/roman.delete
state: touch
我已生成公钥/私钥,将公钥添加到目标主机上正在运行的用户的authorized_keys2中。
当我尝试运行它时,我会收到以下错误:
failed: [experiment01] => {"failed": true, "parsed": false}
Traceback (most recent call last):
File "/home/acplus_uat01/.ansible/tmp/ansible-tmp-1441921944.69-3869708445827/file", line 1999, in <module>
main()
File "/home/acplus_uat01/.ansible/tmp/ansible-tmp-1441921944.69-3869708445827/file", line 372, in main
open(path, 'w').close()
IOError: [Errno 2] No such file or directory: '/opt/refdata/PROD02/roman.delete'
所以,为了检查我是否有ssh或python的问题,我尝试了以下操作-创建一个只有一行代码的python文件:
open('/opt/refdata/PROD02/roman.delete', 'w').close()
我从与ansible相同的位置和使用相同的用户运行了这个命令:
cat test2.py | ssh -i ~/.ssh/myPrivateKey -q target_user@targethost python -
它创建了文件。
所以,我的问题是 - 问题出在哪里,为什么无法创建文件?
我运行playbook的方式是这样的:
ansible-playbook -i inventory/prod/ acc.yml -v --vault-password-file=~/.ansible-vault-pw --private-key ~/.ssh/myPrivateKey
我也尝试在 /tmp/ 中创建文件,ansible 可以正常工作。
编辑:另外一个更新 - 我将要写入的目录设置为全局可写权限(777),这样就能够创建文件了。所以问题是 - Ansible 中有什么不同呢?
cat test2.py | ssh -i ~/.ssh/myPrivateKey -q target_user@targethost python -
使用Ansible进行的工作和实现的基本相同,但是与之不同的是。
debug: var=ansible_ssh_user
并检查它是否与运行您的python脚本的用户匹配。 - nikobeliafile name=/opt/refdata/PROD02 state=directory recurse=yes
。 - Nick Roz