Ansible set fact не изменяет значение переменной
сценарий ansible-playbook вызывается с переданным в extra var:
-e my_var=init_value
тогда в коде роли значение должно изменяться с помощью вызова set_fact (значение переменной other_var - "new_value"):
set_fact: my_var: {{ other_var }}
Это хороший выход, якобы подтверждающих изменения:
{"ansible facts": {"my_var": "new_value"}}
однако Эхо переменной после ее изменения показывает старое значение:
echo {{ my_var }}
-> "echo init_value"
чтобы добавить к этому, когда я устанавливаю две переменные в приведенном выше пример:
set_fact: my_var: {{ other_var }}
set_fact: new_var: {{ other_var }}
new_var установлен правильно.
является ли переменная каким-то образом неизменяемой? Как использовать set_fact для обновления значения переменной?
2 ответов
модуль "set_fact" эффективно добавляет еще один факт хоста, т. е. "обнаружен факт о системе". Из документации (http://docs.ansible.com/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable) Вы можете видеть, что эти факты имеют низкий приоритет и будут переопределены экстра-Варс и различными другими вещами.
Это может быть запутанным, потому что с помощью "set_fact" может показаться, что вы меняете значение переменной при этом точка, но, возможно, имя является ключом к пониманию - это не "set_variable", это "set_(host)fact", а факты хоста имеют низкий приоритет. Приоритет более важен, чем порядок присвоения значения.
один обходной путь, если вы хотите предоставить значение через extra-vars, которое будет перезаписано позже, - это переназначить это значение extra-vars другой переменной через set_fact в начале вашего playbook, а затем переназначить эту новую переменную позже с помощью set_fact снова. Поскольку они находятся на одном уровне приоритета, "перезапись" должна работать так, как вы ожидаете.
переменные командной строки имеют наивысший приоритет среди всех типов переменных. Что-нибудь можно определить в командной строке переопределяет любые другие определения этой переменной.
документация по переменному приоритету в Ansible здесь http://docs.ansible.com/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable в этом списке перечислены все другие места, где вы можете поместить свое начальное/значение по умолчанию.