Ниже моя пьеса:
tasks:
- name: Construct File Path on Destination Server.
include_vars:
file: "{{ item }}"
with_fileglob:
- "vars/myvars.yaml"
- name: setting_facts for BackEnd
set_fact:
fpath_BackEnd_APP: []
set_fact:
fpath_BackEnd_APP: "{{ fpath_BackEnd_APP + [ BASEPATH ~ '/' ~ vars[ (item | splitext)[1].split('.')[1] ] ~ '/' ~ item | basename ] }}"
with_items:
- "{{ Source_Filenames.split(',') }}"
Вот мой переменный файл:
cat vars / myvars.yaml
com: /path/to/com/folder
src: /path/to/src/folder
Приведенный ниже запуск плейбука работает нормально как и ожидалось.
ansible-playbook /app/deploy.yml -e Source_Filenames=/app/testing_purpose.src,/app/testing_purpose.com
Однако, когда я передаю имя файла, у которого нет точки (.), т.е. без расширения файла, игра ansible не может найти переменную в myvars.yaml и ошибки как показано ниже:
ansible-playbook /app/deploy.yml -e Source_Filenames=/app/testing_purpose.src,/app/testing_purpose,/app/testing_purpose.com,/app/testing_moht
"The task includes an option with an undefined variable. The error was: list object has no element 1\n\nThe error appears to be in '/app/deploy.yml'"
Мое требование состоит в том, чтобы выделить «/ path / to / no-ext / folder» для переменной «fpath_BackEnd_APP», если передан файл без расширения. Файлы с расширениями .com & .sr c работают нормально, так как они заменяют значение переменной из файла myvars.yml. Для любых других расширений файлов, таких как .jpg или .txt, плейбук должен падать с переменной undefined error. Любое решение будет оценено.