2015-11-13 1 views
8

どうすればAnsibleプレイブックregisterの変数にincludingの別のプレイブックの結果が表示されますか?例えばどのようにして、プレイブックを含む結果を変数に「登録」することができますか?

は、result_of_footasks/foo.ymlを実行した結果を登録以下か?

tasks: 
    - include: tasks/foo.yml 
    - register: result_of_foo 

他にどのようにタスクシーケンスの結果を記録Ansibleことができますか?

答えて

7

簡単な答えはできません。

registerステートメントは、単一のタスクの出力を変数に格納するために使用されます。登録した変数の正確な内容はstatタスクがあるファイルの詳細を提供する一方、たとえばshellタスクは、あなたが登録した変数で実行するコマンドから標準出力& stderr出力が含まれます(タスクの種類に依存して広く変化することができますタスクに渡された)。あなたはその中のタスクの任意の数のインクルードファイルがある場合は

は、Ansibleはあなたの例では、変数に格納するかを知る方法はありません。あなたがファイルを含める内

個々のタスクは、変数を登録することができ、あなたが他の場所でこれらの変数を参照することができ、そうであっても、このような何かをする必要は本当にありません。

+0

あなたはシンプルで不透明なボックス(関数)のように脚本を扱う場合は、明確に定義された必要がありますインタフェース。なぜプレイブックはスコープ変数と戻り値を持つべきではないのですか? –

+3

可能性のあるプレイブックは、Java用のビルド言語であるAntなどの他のドメイン固有言語(DSL)で見られたいくつかの問題を抱えています。そのような言語は主に宣言的であるが、不完全な機能的または命令的な振る舞いもある。可能なプレイブックは、必然的なギャップを段階的に埋めるようになっていますが、このケースが示すように、まだ埋めるための穴があります。別のアプローチは、DSLの設計を既存のプログラミング言語に基づいて行いますが、より狭い構文に従うか、特定の機能のみを提供することです。 (YAMLとXMLはプログラミング言語ではありません) –

+0

プレイブックには1つのタスクしかないのにこれはまだできませんか?そのタスクの結果を登録して元のプレイブックに戻すことができますか? – user3270760

3

変数名をタスクに使用する変数として渡すことでこれを実行できました。私はmain.yamlと以下のcgw.yamlファイルをインクルードしました。

main.yaml:

- name: Create App A CGW 
    include: cgw.yaml 
    vars: 
    bgp_asn: "{{ asn_spoke }}" 
    ip_address: "{{ eip_app_a.public_ip }}" 
    name: cgw-app-a 
    region: "{{ aws_region }}" 
    aws_access_key: "{{ ec2_access_key }}" 
    aws_secret_key: "{{ ec2_secret_key }}" 
    register: cgw_app_a 

cgw.yaml:

- name: "{{ name }}" 
    ec2_customer_gateway: 
    bgp_asn: "{{ bgp_asn }}" 
    ip_address: "{{ ip_address }}" 
    name: "{{ name }}" 
    region: "{{ region }}" 
    aws_access_key: "{{ aws_access_key }}" 
    aws_secret_key: "{{ aws_secret_key }}" 
    register: "{{ register }}" 
関連する問題