私は数時間苦労してきた問題の助けを探しています。リストを反復処理し、コマンドを実行し、各コマンドの出力を登録してから、一意の各レジスタ{{someregister}}。stdoutをデバッグして反復したい
たとえば、次のコードは"msg": "1"および"msg": "2"を吐き出します。
---
- hosts: localhost
gather_facts: false
vars:
numbers:
- name: "first"
int: "1"
- name: "second"
int: "2"
tasks:
- name: Register output
command: "/bin/echo {{ item.int }}"
register: result
with_items: "{{ numbers }}"
- debug: msg={{ item.stdout }}
with_items: "{{ result.results }}"
ただし、with_listを使用して名前が付けられたレジスタ変数でコマンドの出力をキャプチャしようとすると、リストまたはリスト内の要素にアクセスできません。たとえば、コードを次のようにわずかに変更します。
---
- hosts: localhost
gather_facts: false
vars:
numbers:
- name: "first"
int: "1"
- name: "second"
int: "2"
tasks:
- name: Register output
command: "/bin/echo {{ item.int }}"
register: "{{ item.name }}"
with_items: "{{ numbers }}"
- debug: var={{ item.name.stdout }}
with_items: "{{ numbers }}"
私に与えます:
TASK [debug]
> ******************************************************************* fatal: [localhost]: FAILED! => {"failed": true, "msg": "'unicode
> object' has no attribute 'stdout'"}
レジスタにコマンドの出力を動的に指定することはできませんか?それは後でプレイで呼び出すことができますか?コマンドの各反復とその後続のregisterが一意にアクセスされるようにしたい「first」および「second」と呼ばれる変数が登録されていることを期待しますが、ありません。
デバッグスタンザからwith_itemsを削除し、first.stdoutを使用してvarまたはメッセージを明示的に定義すると、「undefined」が返されます。
AnsibleバージョンはCentos 7_2の2.0.2.0です。
前もって感謝します。
わかりましたので、ここで何が起こっているのか、result.resultsの要素にアクセスする方法を理解するのに役立つ stackoverflowの投稿 を見つけました。
私が最終的に得たコードは次のとおりです。
---
- hosts: localhost
gather_facts: false
vars:
numbers:
- name: "first"
int: "1"
- name: "second"
int: "2"
tasks:
- name: Register output
command: "/bin/echo {{ item.int }}"
register: echo_out
with_items: "{{ numbers }}"
- debug: msg="item.item={{item.item.name}}, item.stdout={{item.stdout}}"
with_items: "{{ echo_out.results }}"
それは私に望ましい結果を与えました:
"msg": "item.item=first, item.stdout=1"
"msg": "item.item=second, item.stdout=2"
私は質問を正しく理解しているかどうかはわかりませんが、おそらくこれは助けになるでしょう:
- debug: msg="{{ item.stdout }}"
with_items: echo_out.results
Ansibleは、それぞれitemとmsgの両方を出力することに注意してください。したがって、"msg": "2"
。