我有一个简单的ansible任务,可以创建一个文件:
- name: create fake file
file:
name: /opt/refdata/PROD02/roman.delete
state: touch
我生成了公钥/私钥,并为我在目标主机上运行的用户添加了public_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 -
并创建了该文件。
所以,我的问题是 - 问题在哪里,为什么不能创建文件?
我运行剧本的方式是:
ansible-playbook -i inventory/prod/ acc.yml -v --vault-password-file=~/.ansible-vault-pw --private-key ~/.ssh/myPrivateKey
我还尝试在/ tmp /中创建一个文件并且ansible工作。
编辑:所以,另一个更新 - 我将文件写入world writable(777)并创建了该文件。所以,问题是 - 在Ansible中有什么不同
cat test2.py | ssh -i ~/.ssh/myPrivateKey -q target_user@targethost python -
通过Ansible工作并做基本相同的事情。
答案 0 :(得分:3)
如果/opt/refdata/PROD02/
不存在,您应首先创建目录
file:
name: /opt/refdata/PROD02
state: directory
recurse: yes
mode: 0755
递归 - 设置指定的文件属性(仅适用于state = directory )
所以Ansible无法在一个命令中创建文件及其中的所有目录。
然后使用第二个命令,您应该自己创建文件。
name: create fake file
file:
name: /opt/refdata/PROD02/roman.delete
state: touch