Ansible как пропустить l oop, если список пуст - PullRequest
0 голосов
/ 17 марта 2020

У меня работает Ansible, и я пытаюсь заставить эту задачу работать. Я определил значение по умолчанию для переменной "docker_registries" как пустой список: docker_registries: [] Я заметил, что получу ошибку при запуске playbook ansible, если список пуст. это ошибка, которую я получаю:

неустранимо: [***. cloudapp. azure .com]: FAILED! => {"msg": "Недопустимые данные переданы в 'l oop', требуется список, вместо этого он получил: Нет. Подсказка: если вы передали список / текст только одного элемента, попробуйте добавить wantlist = True в Ваш запрос поиска или используйте q / query вместо lookup. "}

Я пытаюсь добавить условие, что, если" docker_registries "пусто, задача продолжается без возникновения ошибки. Вот код для этой задачи:

- name: Log into additional docker registries, when required
  command: docker login -u {{item.username}} -p {{item.password}} {{item.server}}
  become: true
  loop: "{{docker_registries}}"

Я пытался изменить l oop на loop: "{{ lookup(docker_registries, {'skip_missing': True})}}", но я получаю ошибку

Исключительная ситуация возникла во время выполнения задачи , Чтобы увидеть полную трассировку, используйте -vvv. Ошибка была: AttributeError: у объекта 'NoneType' нет атрибута 'нижний' фатальный: [***. Cloudapp. azure .com]: СБОЙ! => {"msg": "Неожиданный сбой во время выполнения модуля.", "stdout": ""}

Я довольно новичок в этом. Кто-нибудь может помочь?

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Вы можете использовать оператор when в сочетании с iterable тестом дзиндзя.
Потому что, если вы хотите, чтобы l oop превысил ваш переменная, то она должна быть повторяемой.

- name: Log into additional docker registries, when required
  command: docker login -u {{item.username}} -p {{item.password}} {{item.server}}
  become: true
  loop: "{{docker_registries}}"
  when: docker_registries is iterable
0 голосов
/ 19 марта 2020

Спасибо всем, ребята. В моем файле group_vars была строка, в которой я закомментировал все имя пользователя и пароль docker_registries и все, но я не прокомментировал саму строку docker_registries:. Вот почему мне дали None вместо пустого списка.

...