Ansible AWX/Tower - 访问另一个游戏中保存为工件的变量
Ansible AWX/Tower - Access a variable saved as artifact from another play
我有一本剧本,其中包含不止一部剧本。其中一个剧本生成一个变量并使用 set_stats 模块将其存储为工件。后面的play需要访问这个变量,但是出现了给定变量未定义的错误。如何访问工件中的变量? (顺便说一句,在这种情况下,使用会导致将变量保存在 extra_variables 而不是工件容器中的工作流不是选项)
问题详情:
我有以下剧本,其中包括 2 个在不同主机上执行的剧本:
---
- hosts: ansible
roles:
- role_parse_strings
- hosts: all, !ansible
roles:
- role_setup_basics
- role_create_accounts
第一部戏中的角色"role_parse_strings"生成变量"users",由于set_stats模块作为神器而被存储。以下内容位于 ansible awx 的工件部分:
users:
- username: user1
admin: true
- username: user2
admin: false
当角色 "role_create_accounts" 被执行时试图以下列方式访问变量 "users"...
- user: name={{ item.username }}
shell=/bin/bash
createhome=yes
groups=user
state=present
with_items: "{{ users }}"
..显示此错误:
{
"msg": "'users' is undefined",
"_ansible_no_log": false
}
您可以使用 set_fact 在主机之间共享变量。下面的示例显示了如何通过 set_fact.
共享文件内容
- hosts: host1
pre_tasks:
- name: Slurp the public key
slurp:
src: /tmp/ssh_key.pub
register: my_key_pub
- name: Save the public key
set_fact:
my_slave_key: >-
{{ my_key_pub['content'] | b64decode }}
- hosts: host2
vars:
slave_key: "{{ my_slave_key }}"
pre_tasks:
- set_fact:
my_slave_key: >-
{{ hostvars[groups["host1"][0]].my_slave_key | trim }}
我们将 public 键的内容保存为名为 my_slave_key 的事实名称,并且
在 host2 中将其分配为另一个变量 slave_key:
hostvars[groups["host1"][0]].my_slave_key
我有一本剧本,其中包含不止一部剧本。其中一个剧本生成一个变量并使用 set_stats 模块将其存储为工件。后面的play需要访问这个变量,但是出现了给定变量未定义的错误。如何访问工件中的变量? (顺便说一句,在这种情况下,使用会导致将变量保存在 extra_variables 而不是工件容器中的工作流不是选项)
问题详情:
我有以下剧本,其中包括 2 个在不同主机上执行的剧本:
---
- hosts: ansible
roles:
- role_parse_strings
- hosts: all, !ansible
roles:
- role_setup_basics
- role_create_accounts
第一部戏中的角色"role_parse_strings"生成变量"users",由于set_stats模块作为神器而被存储。以下内容位于 ansible awx 的工件部分:
users:
- username: user1
admin: true
- username: user2
admin: false
当角色 "role_create_accounts" 被执行时试图以下列方式访问变量 "users"...
- user: name={{ item.username }}
shell=/bin/bash
createhome=yes
groups=user
state=present
with_items: "{{ users }}"
..显示此错误:
{
"msg": "'users' is undefined",
"_ansible_no_log": false
}
您可以使用 set_fact 在主机之间共享变量。下面的示例显示了如何通过 set_fact.
共享文件内容- hosts: host1
pre_tasks:
- name: Slurp the public key
slurp:
src: /tmp/ssh_key.pub
register: my_key_pub
- name: Save the public key
set_fact:
my_slave_key: >-
{{ my_key_pub['content'] | b64decode }}
- hosts: host2
vars:
slave_key: "{{ my_slave_key }}"
pre_tasks:
- set_fact:
my_slave_key: >-
{{ hostvars[groups["host1"][0]].my_slave_key | trim }}
我们将 public 键的内容保存为名为 my_slave_key 的事实名称,并且 在 host2 中将其分配为另一个变量 slave_key:
hostvars[groups["host1"][0]].my_slave_key