如何的Ansible劇本register
在一個變量的including另一個劇本,結果呢?Ansible如何在一個變量中「註冊」一個包含劇本的結果?
例如,將以下寄存器執行在result_of_foo
tasks/foo.yml
的結果?
tasks:
- include: tasks/foo.yml
- register: result_of_foo
Ansible如何記錄任務序列的結果?
如何的Ansible劇本register
在一個變量的including另一個劇本,結果呢?Ansible如何在一個變量中「註冊」一個包含劇本的結果?
例如,將以下寄存器執行在result_of_foo
tasks/foo.yml
的結果?
tasks:
- include: tasks/foo.yml
- register: result_of_foo
Ansible如何記錄任務序列的結果?
簡而言之,這是無法完成的。
的register語句用於單個任務的輸出存儲到變量中。註冊變量的確切內容可以變化很大,取決於任務的類型(例如shell
任務將包括標準輸出從您在註冊變量運行命令& stderr輸出,而stat
任務將提供是文件的細節傳遞給任務)。
如果您在使用中它的任務的任意數量的包括文件,然後Ansible就沒有知道該怎麼在你的榜樣變量存儲的方式。
每個單獨的任務中的包含文件可以註冊變量,你可以在其他地方引用這些變量,所以真的沒有必要,甚至做這樣的事情。
我能夠做到這一點,通過傳遞一個變量名作爲變量在任務中使用。我包含了我的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 }}"
有必要,如果你把一個劇本像一個不透明的盒子(即功能)用一個簡單的,明確的接口。爲什麼不應該有劇本的範圍變量和返回值? –
Ansible playbook患有我在其他領域特定語言(DSL)中觀察到的一些問題,例如Ant,一種用於Java的構建語言。這些語言大多是聲明式的,但也有不完整的功能或命令行爲。 Ansible劇本已經逐漸填補了必要的空白,但正如這個案例所顯示的那樣,仍然有空缺。另一種方法是將DSL的設計建立在現有編程語言的基礎上,但遵循更窄的語法或僅提供特定的功能。 (YAML和XML不是*編程語言) –
即使在劇本中只有一項任務,這仍然不可能嗎?您可以註冊該任務的結果,然後將其引回原始劇本嗎? – user3270760