Есть ли способ уничтожить переменную в Ansible?
На самом деле, у меня есть переменная {{version}}, которая используется во всех моих ролях для соответствующие пакеты. Когда я запускаю несколько ролей, значение версии одной роли передается другой - это связано с тем, что для какой-то роли я не указываю значение версии, чтобы она могла установить версию этого пакета по умолчанию, доступную для соответствующего m / c, например ubuntu / redhat и т. д.
Вот мой шаблон роли. Значение {{version}} из mysql передается в rabbitmq.
roles:
- { role: mysql }
- { role: rabbitmq}
Если я смогу уничтожить / удалить значение версии в каждой роли, это должно решить проблему, я считаю.
Как уже указывалось, отключить переменную в Ansible невозможно.
Избегайте этой ситуации, добавляя префикс к именам ваших переменных, например rabbitmq_version
и т. Д. . ИМХО, это лучшая практика.
Помимо избежания ситуации, с которой вы столкнулись, это добавит ясности вашим host_vars
и group_vars
.
вместо этого следует использовать переменную для каждой роли:
roles:
- role: mysql
version: mysql_version
- role: rabbitmq
version: rabbitmq_version
или
roles:
- { role: mysql, version: mysql_version }
- { role: rabbitmq, version: rabbitmq_version }
Нет, нет возможности отключить переменную (верхний уровень) в Ansible.
Единственное, что вы можете сделать, - это создать словарь и сохранить переменную как ключ в этот словарь. Очистка "родительского" словаря по существу заставит работать условное выражение dictionary.key is defined
.
Чтобы отключить переменной, попробуйте запустить задачу set_fact, установив для переменной значение null, например:
- name: Unset variables
set_fact:
version:
other_var:
Если у вас есть полный словарь, который может просто переопределить dict с помощью null
, например:
- name: Set dict
set_fact:
dict:
rabbitmq_version: 1
other_version: 2
- name: override dict to null
set_fact:
dict:
Что-то вроде other_var:
просто "other_var": null
в JSON. Вот как вы можете отключить переменные в Ansible. Хорошего дня.