Не удалось использовать ссылку yaml в ansible плагине инвентаря - PullRequest
0 голосов
/ 21 апреля 2020

Я хотел бы использовать этот конфиг с плагином инвентаря

# test_inventory_xxx.yml
plugin: cloudscale # or openstack or ...
inventory_hostname: &inventory_hostname_value uuid

compose:
  setting_of_inventory_hostname: *inventory_hostname_value

Я не получаю ошибки, но значение не установлено. И это действительно ямл. (По крайней мере, мой контролер и я сам не видим ошибку.

Поэтому я решил упростить ее, используя стандартный плагин:

# inventory_constructed.yaml
plugin: constructed

# add variables to existing inventory

keyed_groups:
  - key: from_inventory
    prefix: inventory
    parent_group: &common_parent_group test_group_1

compose:
  var_from_constructed: 1233456789
  also_from_constr: "'also'" # must be in quotes 2x!
  some_from_constr: &ref1 1234567777
  ref_from_constr: *ref1 # this works fine
  ref_to_test: *common_parent_group # <--- this line returns an error

strict: yes

Теперь я получаю ошибку: Could not set ref_to_test for host my_host: 'test_group_1' is undefined
Но это проходит, когда я раскомментирую отмеченную строку (ref & common_parent_group все еще определен, но не используется с * common_parent_group.) Почему test_group_1 не определен в одном случае, но не в другом?

Как воспроизвести: ansible -i some_of/your_inventory -i inventory_constructed.yaml -m debug -a var=vars

Что я делаю не так? Или в чем еще проблема?

(я думал, что это отсутствующая функция, поэтому оригинальная информация в https://github.com/ansible/ansible/issues/69043)

1 Ответ

1 голос
/ 22 апреля 2020

Кажется, что parent_group принимает буквальную строку, а ref_to_test принимает выражение Jinja2 (потому что оно меньше compose). Это должно привести к сбою таким же образом, если вы напишите

  ref_to_test: test_group_1

, потому что test_group_1 просто не является переменной Jinja2. Вам нужно будет написать

  ref_to_test: "'test_group_1'"

, как указано выше, поэтому Jinja2 видит 'test_group_1', что является буквальной строкой. Это также означает, что вы не можете использовать псевдоним, потому что parent_group не оценивает его содержимое с помощью Jinja2 и, следовательно, не должно включать в него кавычки.

...