Переменные Ansible, кажется, исчезают внутри set_fact - PullRequest
0 голосов
/ 19 октября 2018

Есть ли какое-то странное поведение Ansible, которое означает, что имя_ инвентаря работает только в определенных контекстах?

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

По какой-то причине точно такое же выражение ведет себя по-разному в debug и set_fact, и я не понимаю, почему.Как будто inventory_hostname не определено в задаче set_fact (и я даже получаю сообщение о том, что если в обоих случаях я добавлю тег «первый»), как я в конечном итоге захочу.

- name: debug it
  debug:
    var: all_tagged_droplets.json.droplets | selectattr('name', 'equalto', '{{inventory_hostname}}') | list

- name: find the right droplet
  set_fact: 
    droplet: "{{ all_tagged_droplets.json.droplets | selectattr('name', 'equalto', '{{inventory_hostname}}') | list }}"

- name: debug it
  debug:
    var: droplet

Какие-нибудь указатели относительно того, как получить данные в более разумную переменную?

1 Ответ

0 голосов
/ 19 октября 2018

О, я был так глуп.

Я пытался оценить inventory_hostname дважды !!Поскольку во втором случае мне нужно {{ ... }} для всего выражения, я забыл удалить его из переменной.

Правильный ответ был:

- name: debug it
  debug:
    var: all_tagged_droplets.json.droplets | selectattr('name', 'equalto', '{{inventory_hostname}}') | list

- name: find the right droplet
  set_fact: 
    droplet: "{{ all_tagged_droplets.json.droplets | selectattr('name', 'equalto', inventory_hostname) | list }}"

- name: debug it
  debug:
    var: droplet

См. Выражение в строке set_fact исправлено.

...