Ansible AWX / Tower - доступ к переменной, сохраненной как артефакт из другой игры - PullRequest
0 голосов
/ 10 января 2020

У меня есть сборник пьес, который содержит более одной пьесы. Одна из игр генерирует переменную и сохраняет ее, используя модуль set_stats в качестве артефакта. Последующие игры должны получить доступ к переменной, но возникает ошибка, что данная переменная не определена. Как я могу получить доступ к переменной в артефактах? (Кстати, использование рабочего процесса, который приведет к сохранению переменной в 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
}

1 Ответ

2 голосов
/ 11 января 2020

Вы можете использовать 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 }}

Мы сохранили содержимое ключа publi c как имя факта my_slave_key и присвоили ему другую переменную как slave_key в host2 с:

hostvars[groups["host1"][0]].my_slave_key
...