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

Есть ли способ уничтожить переменную в Ansible?

На самом деле, у меня есть переменная {{version}}, которая используется во всех моих ролях для соответствующие пакеты. Когда я запускаю несколько ролей, значение версии одной роли передается другой - это связано с тем, что для какой-то роли я не указываю значение версии, чтобы она могла установить версию этого пакета по умолчанию, доступную для соответствующего m / c, например ubuntu / redhat и т. д.

Вот мой шаблон роли. Значение {{version}} из mysql передается в rabbitmq.

    roles:
- { role: mysql }
- { role: rabbitmq}

Если я смогу уничтожить / удалить значение версии в каждой роли, это должно решить проблему, я считаю.

8
задан 22 June 2017 в 03:43
5 ответов

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

Избегайте этой ситуации, добавляя префикс к именам ваших переменных, например rabbitmq_version и т. Д. . ИМХО, это лучшая практика.

Помимо избежания ситуации, с которой вы столкнулись, это добавит ясности вашим host_vars и group_vars .

7
ответ дан 2 December 2019 в 22:48

вместо этого следует использовать переменную для каждой роли:

  roles:
    - role: mysql
      version: mysql_version
    - role: rabbitmq
      version: rabbitmq_version

или

  roles:
    - { role: mysql, version: mysql_version }
    - { role: rabbitmq, version: rabbitmq_version }
3
ответ дан 2 December 2019 в 22:48

Нет, нет возможности отключить переменную (верхний уровень) в Ansible.

Единственное, что вы можете сделать, - это создать словарь и сохранить переменную как ключ в этот словарь. Очистка "родительского" словаря по существу заставит работать условное выражение dictionary.key is defined .

4
ответ дан 2 December 2019 в 22:48

Чтобы отключить переменной, попробуйте запустить задачу 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. Хорошего дня.

3
ответ дан 2 December 2019 в 22:48

Вы можете ничего не устанавливать. В настоящее время я использую его так:

variable_name: ''
-2
ответ дан 29 July 2020 в 12:29

Теги

Похожие вопросы