Ansible许可问题

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工作和做基本相同的事情不是.

Nic*_*Roz 3

如果/opt/refdata/PROD02/不存在,您应该先创建目录

file:
  name: /opt/refdata/PROD02
  state: directory
  recurse: yes
  mode: 0755
Run Code Online (Sandbox Code Playgroud)

Ansible 文档说:

recurse - 设置指定的文件属性(仅适用于 state=directory

因此 Ansible 无法通过一个命令创建文件及其路径中的所有目录。

然后使用第二个命令您应该创建文件本身。

name: create fake file 
  file:
    name: /opt/refdata/PROD02/roman.delete
    state: touch
Run Code Online (Sandbox Code Playgroud)