2015-09-10 9 views
6

私は、ファイルを作成し、簡単なansibleタスクがあります。Ansible許可問題

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

を私は公開鍵/秘密鍵を生成し、私がターゲットホスト上として実行しているユーザーのためのauthorized_keys2する公共の1を追加しました。私は、SSHやPythonの問題を持っているかどうかを確認するためにそう

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' 

、私はこれを試してみました - 私は1つのラインでのpythonファイル作成:

私はそれを実行しようとすると、私は次のエラーを取得する

open('/opt/refdata/PROD02/roman.delete', 'w').close() 

と私はansible実行するのと同じ場所、同じユーザーからこれを実行しました:

cat test2.py | ssh -i ~/.ssh/myPrivateKey -q [email protected] python - 

をし、それが作成 ファイル。

私の質問は - 問題はどこにありますか、なぜファイルを作成できないのですか?

私は脚本を実行する方法はこれです:

ansible-playbook -i inventory/prod/ acc.yml -v --vault-password-file=~/.ansible-vault-pw --private-key ~/.ssh/myPrivateKey 

は私も働いていたの/ tmp /とansibleでファイルを作成しようとしました。

編集:もう1つのアップデート - 私は、ファイルをworld writable(777)に書き込んでいて、ファイルを作成しました。だから、質問です -

cat test2.py | ssh -i ~/.ssh/myPrivateKey -q [email protected] python - 

作品というAnsibleに異なっあるものとAnsibleを通じて、本質的に同じことをやっていません。

+0

。 – nikobelia

+0

私は単純に/ tmp/fooをAnipal内からタッチして、/ tmp/fooのアクセス権と所有権を調べて、ファイルがAnipalによって期待される属性で作成されていることを確認します。 –

+0

これは私が期待する属性で作成されています - 正しいユーザー/グループ –

答えて

3

/opt/refdata/PROD02/が存在しない場合は、最初のディレクトリを作成する必要があります

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

Ansible documentationは言う:

recurse - Set the specified file attributes (applies only to state=directory)

のでAnsible 1つのコマンドでパスのITにファイルおよびすべてのディレクトリを作成することはできません。

次に、2番目のコマンドを使用して、ファイル自体を作成する必要があります。 VAR = ansible_ssh_user`と確認することがあなたのPythonスクリプトのはによって運営されているユーザーと一致します。ansible脚本は、/ tmpにファイルを書き込むことができますが、ここではない、私はデバッグ `に遊びにステップを追加したいので

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

/opt/refdata/PROD02 /存在しません –