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