Убедитесь, что указанная переменная пуста или отсутствует в Ansible - PullRequest
1 голос
/ 06 февраля 2020
- hosts: localhost
  vars:
           files_list:
           #it may contain the file_list like 
           #file_list: 
           #     - "file*"
  tasks: 
       - name: copy
         copy:
             src: "{{item}}"
             dest: "/tmp/"
         with_fileglob: "{{files_list}}"
         when: files != None

Я хочу скопировать несколько файлов с указанным шаблоном c из files_list. но иногда file_list может быть пустым . как проверить, пуст ли список_файлов Я пробовал приведенный выше код, но он не работает. это дает мне следующую ошибку

The full traceback is:<br>
Traceback (most recent call last):<br>
  File "/usr/lib/python2.7/site-packages/ansible/executor/task_executor.py", line 104, in run<br>
    items = self._get_loop_items()<br>
  File "/usr/lib/python2.7/site-packages/ansible/executor/task_executor.py", line 245, in _get_loop_items<br>
    items = wrap_var(mylookup.run(terms=loop_terms, variables=self._job_vars, wantlist=True))<br>
  File "/usr/lib/python2.7/site-packages/ansible/plugins/lookup/fileglob.py", line 60, in run<br>
    term_file = os.path.basename(term)<br>
  File "/usr/lib64/python2.7/posixpath.py", line 121, in basename<br>
    i = p.rfind('/') + 1<br>
AttributeError: 'NoneType' object has no attribute 'rfind'<br>
fatal: [machine1.kirusa.com]: FAILED! => {<br>
    "msg": "Unexpected failure during module execution.", <br>
    "stdout": ""<br>
}

Можете ли вы также объяснить, что это значит. заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 06 февраля 2020

Q: "Убедитесь, что определенная переменная пуста или отсутствует в Ansible."

A: Просто проверьте переменную. Пустой список оценивается как False. Это также охватывает случай, когда переменная не определена. YAML None - это Python null. None также оценивается как False. Например,

- debug:
    msg: The variable files is an empty list or None.
  when: not files|default(None)
  • В l oop нет необходимости проверять, является ли список пустым. Пустой список все равно будет пропущен.
  • YAML строка - это список символов. Пустая строка оценивается как False так же, как пустой список.
0 голосов
/ 06 февраля 2020

Чтобы проверить, является ли он пустым, вам нужно дать, как показано ниже

when: not files_list

См. Правила по умолчанию здесь: https://docs.ansible.com/ansible-lint/rules/default_rules.html

В нем говорится: не сравнить с пустой строкой, использовать when: var вместо when: var != "" (или наоборот when: not var вместо when: var == "")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...