Присвойте переменную, ссылаясь на другую - PullRequest
0 голосов
/ 10 мая 2018

В следующей Ansible Playbook я пытаюсь создать пароль пользователя, используя предопределенные переменные из defaults/main.yml, которые, в свою очередь, вызывают пароль из vars/passwords.yml. этот файл будет хранилище позже.

вары / пароли

---
passwords:
  foobar: 
     password: pass1234

по умолчанию / main.yml

users:
  - username: foobar
    group: barfoo
    password: "{{passwords.foobar}}"

задачи / main.yml

- include_vars: passwords.yml

- name: Create user
  user:
    name: "{{item.username}}"
    group: "{{item.group}}"
    password: "{{item.password | password_hash('sha512') }}"

Когда я запускаю эту пьесу, я получаю следующую ошибку:

ERROR:
{
    "msg": "[{u'username': u'foobar',
     u'group': u'barfoo',
     u'password': u'{{passwords.username}}'}]: 'list object' has no attribute 'username'"
}

Любая идея, как мне добиться присвоения переменной, ссылаясь на другую.

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

С текущими файлами переменных (значения по умолчанию и переменные), для меня решение было вызвать пароль для панели пользователя, используя имя пользователя в качестве ключа. В настоящее время у меня есть:

- include_vars: passwords.yml

- name: Create user
  user:
    name: "{{item.username}}"
    group: "{{item.group}}"
    password: "{{item.password | password_hash('sha512') }}"

новый defaults/main.yml не будет иметь ключ / значение пароля:

users:
  - username: foobar
    group: barfoo

Теперь с vars/passwords.yml:

---
passwords:
  foobar: 
     password: pass1234

Я могу изменить свое задание на изменение:

- include_vars: passwords.yml

- name: Create user
  user:
    name: "{{item.username}}"
    group: "{{item.group}}"
    password: "{{passwords[item.username].password | password_hash('sha512') }}"

Это решило мою проблему и позволило мне спрятать passwords.yml. Пожалуйста, дайте мне знать, если у вас есть какие-либо улучшения или предложения.

0 голосов
/ 10 мая 2018

первый предоставленный вами файл имеет passwords в качестве переменной списка, в то время как в вашем defaults/main.yml файле вы ожидаете переменную словаря (passwords.foobar).

пожалуйста, измените содержимое 1-го файла на:

---
passwords:
  foobar: pass1234

Не могу комментировать все остальное, мне кажется, что в tasks/main.yml отсутствует строка, возможно, строка, содержащая оператор with_items.Я не предполагаю, что это проблема в вашем коде, просто вы, вероятно, не вставили весь свой код в этот вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...