2017-03-22 9 views
1

/etc/hostsファイルの特定の行をテンポラリファイルにコピーするために、私のAnsibleプレイブックを設定したいと思います。これが行うのは簡単でなければなりません:アイテムでAnsibleコマンドを使用するには?

--- 
hosts: 127.0.0.1 
gather_facts: False 
tasks: 
    - command: grep {{ item }} /etc/hosts >> /tmp/hosts_to_backup 
    with_items: 
     - web 
     - database 

私はこれが仕事だと思うだろうが、私はエラーを取得しています:

TypeError: string indicies must be integers, not str

私は私の周りに二重引用符を置くAnsibleは引用符で囲まれていない中括弧好き嫌いを知っていますコマンドライン全体が、私はまだエラーが発生します。

- command: "grep {{ item }} /etc/hosts >> /tmp/hosts_to_backup" 

答えて

2

は、私はあなたがあなたが得ると主張エラーを取得する理由はわかりません(システムがAnsibleに奇妙なエラーメッセージを返す場合、多分それはOSに関連することです)。

確かに、commandモジュールでファイルリダイレクトを使用することはできません。代わりにあなたがshellモジュールを使用する必要があり、そうであなたの行動を置き換える:

それ以外
- shell: grep {{ item }} /etc/hosts >> /tmp/hosts_to_backup 

、あなたのタスクでwith_itemsしても問題はありません。しかし、プレイのための-はありません。

次のコードは動作します:あなたは正しいです

--- 
- hosts: 127.0.0.1 
    gather_facts: False 
    tasks: 
    - shell: grep {{ item }} /etc/hosts >> /tmp/hosts_to_backup 
     with_items: 
     - web 
     - database 
+0

。私はコマンドの代わりにシェルを使う必要があった。ありがとう。 – William