如何的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