Rom*_*nko 6 python ansible ansible-playbook
我有一个简单的ansible任务创建一个文件:
- name: create fake file
file:
name: /opt/refdata/PROD02/roman.delete
state: touch
Run Code Online (Sandbox Code Playgroud)
我生成了公钥/私钥,并为我在目标主机上运行的用户添加了public_keys2的public.
当我尝试运行它时,我收到以下错误:
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'
Run Code Online (Sandbox Code Playgroud)
所以,看看我是否有ssh或python的问题我试过这个 - 我用一行创建了一个python文件:
open('/opt/refdata/PROD02/roman.delete', 'w').close()
Run Code Online (Sandbox Code Playgroud)
并从我运行ansible的同一个地方和同一个用户运行它:
cat test2.py | ssh -i ~/.ssh/myPrivateKey -q target_user@targethost python -
Run Code Online (Sandbox Code Playgroud)
它创建了文件.
所以,我的问题是 - 问题出在哪里,为什么不能创建文件?
我运行剧本的方式是这样的:
ansible-playbook -i inventory/prod/ acc.yml -v --vault-password-file=~/.ansible-vault-pw --private-key ~/.ssh/myPrivateKey
Run Code Online (Sandbox Code Playgroud)
我还尝试在/ tmp /和ansible中创建一个文件.
编辑:所以,另一个更新 - 我将我正在写入文件的目录写入world writable(777)并创建了该文件.所以,问题是 - Ansible的不同之处在于
cat test2.py | ssh -i ~/.ssh/myPrivateKey -q target_user@targethost python -
Run Code Online (Sandbox Code Playgroud)
通过Ansible工作和做基本相同的事情不是.
如果/opt/refdata/PROD02/不存在,您应该先创建目录
file:
name: /opt/refdata/PROD02
state: directory
recurse: yes
mode: 0755
Run Code Online (Sandbox Code Playgroud)
recurse - 设置指定的文件属性(仅适用于 state=directory)
因此 Ansible 无法通过一个命令创建文件及其路径中的所有目录。
然后使用第二个命令您应该创建文件本身。
name: create fake file
file:
name: /opt/refdata/PROD02/roman.delete
state: touch
Run Code Online (Sandbox Code Playgroud)