Как получить доступ к переменным задач между задачами в Ansible?

У меня есть простая инструкция, как показано ниже, которая состоит из нескольких задач. В верхней части плейбука я создаю файл YAML из предоставленного файла CSV, но если я хочу определить переменную в задаче, эта переменная не будет определена в другой задаче. Так что же такое видимость и / или объем переменных Ansible? Я знаю, что если я определю переменную в разделе hosts, эта переменная будет сохраняться во всех задачах, но, поскольку я буду определять переменную динамически, это не лучший подход.

- name: Create IAM users
  vars:
    password: Sometestpassword123
  iam:
    iam_type: user
    name: "{{ item.username }}"
    password: "{{ password }}"
    access_key_state: create
    state: present
    groups: "{{ item.group }}"

  with_items:
    - "{{ users.users }}"
  register: user

- name: Create a file with user credentials
  local_action: template src=template.j2 dest=./users_credentials.csv

Итак, если я определяю пароль в задаче, эта переменная используется в качестве параметра модуля, но я не могу повторно использовать эту переменную во второй задаче, где я хочу объединить отфильтрованные выходные данные первой задачи в зарегистрированной переменной с определенная переменная, которая будет динамически изменяться на каждой итерации цикла.

 TASK [Create a file with user credentials] *********************************************************************************************************************************************************************
    fatal: [localhost -> localhost]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'password' is undefined"}

По сути, я хочу создать файл CSV, состоящий из отфильтрованных возвращаемых значений модуля iam, сохраненных в зарегистрированной переменной «пользователь», и динамически вычисляемого значения переменной «пароль».

К сожалению, модуль AWS iam не возвращает пароль.

Шаблон действительно прост, так как для целей тестирования мне просто нужно значение значения «пароль», определенное в задаче. Вот оно.

{{ password }}

person Alan Kis    schedule 18.06.2018    source источник
comment
@techraf Совершенно верно. Я должен отредактировать вопрос.   -  person Alan Kis    schedule 19.06.2018
comment
Теперь ответ: вы не можете.   -  person techraf    schedule 19.06.2018
comment
почему так, а не с set_fact?   -  person imjoseangel    schedule 19.06.2018


Ответы (1)


Обобщая ответ, предоставленный @imjoseangel. вы можете определить переменную с помощью set_fact, которая будет доступна для последующих воспроизведений.

Образец фрагмента:

---
- name : Test set_fact Variable
  hosts : localhost
  tasks:
    - name : Set Password Variable
      set_fact:
        password : 'Abcd123'
    - name : Copy Template
      template :
        src : template.j2
        dest : ./template.csv

-

---
- name : Test set_fact Variable
  hosts : localhost
  tasks:
  - name : Set Password Variable
    set_fact:
      password : 'Abcd123'

- name :  Apply set_fact Variable
  hosts : localhost
  tasks:
  - name : Copy Template
    template :
      src : template.j2
      dest : ./template.csv
person Ada Pongaya    schedule 19.06.2018