Ansible许可问题

时间:2015-09-10 22:06:13

标签: python ansible ansible-playbook

我有一个简单的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工作并做基本相同的事情。

1 个答案:

答案 0 :(得分:3)

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

file:
  name: /opt/refdata/PROD02
  state: directory
  recurse: yes
  mode: 0755

Ansible documentation说:

  

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

所以Ansible无法在一个命令中创建文件及其中的所有目录。

然后使用第二个命令,您应该自己创建文件。

name: create fake file 
  file:
    name: /opt/refdata/PROD02/roman.delete
    state: touch