У меня есть рабочая задача по переносу (копированию) определенной части моего домашнего каталога (вторая до последней строки является важной):
- name: "Migrate my-pc module home files"
copy:
src: "{{ migration_source_path }}{{ item }}"
dest: "{{ migration_destination_path }}{{ item }}"
loop: "{{ migration_paths_my_pc }}"
when:
- not is_migrating_all
- "'{{ migration_source_path }}{{ item }}' is exists"
- m_my_pc | bool
Оба ..._path
переменные всегда заканчиваются косой чертой (/
).
Пояснение: Требуется список путей к файлам из migration_paths_my_pc
и копирует их из migration_source_path
к migration_destination_path
). Это произойдет, только если: установлен флаг для этого модуля (m_my_pc
); и путь существует в источнике; и я все равно не переношу все файлы из homedir (is_migrating_all
).
Мое текущее рабочее решение (см. Выше) дает мне предупреждение:
[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: '{{ migration_source_path }}{{ item }}' is exists
Я понимаю что я должен удалять в Фигурные скобки {{
из when:
раздел, потому что у условных операторов подразумевается фигурные скобки вокруг них все равно. Проблема в том, что я не могу понять, как заставить его работать. Некоторые из многих неудачный попытки:
- vars["" + migrate_source_path + item] is exists
- vars[migrate_source_path + item] is exists
- vars[migrate_source_path ~ item] is exists
- vars[migrate_source_path]vars[item] is exists
- '' + migrate_source_path + item is exists
- lookup('/home/k/test/test2/' + item) is exists
- "{{ lookup('vars', 'migrate_source_path' + 'item') is exists }}"
- "{{ lookup('vars', 'migrate_source_path') + lookup('vars', 'item') is exists }}"
- lookup('vars', 'migrate_source_path')lookup('vars', 'item') is exists
Я автоматизирую настройку персональных компьютеров из практических соображений, а также чтобы узнать больше об Ansible и Ansible-playbooks.
Любые другие рекомендации или советы также приветствуются (в комментариях, я думаю).
Мои дизайнерские цели (функциональные стремления) для миграции:
project/vars/
казались интуитивно понятными и, возможно, лучше, чем переключение их внутри задачи. Другие переменные, которые с большей вероятностью будут закомментированы или изменены, находятся на project/vars/
также. Комментировать что-то или раскомментировать что-то - это одна горячая клавиша в большинстве текстовых редакторов и IDE. Так что довольно удобно. Попробуйте переписать немного по-другому. Вместо того, чтобы перебирать массив с помощью loop
укажите каталоги, которые вы хотите скопировать в with
или with_fileglob
. Если вы действительно хотите иметь список файлов, которые вы хотите скопировать из одного места назначения в другое, вы можете записать список в with
часть. Модуль проверит, существует ли исходный файл, и отобразит ошибку, что в этом случае неплохо, поскольку в противном случае ваша миграция будет некорректной.
Помните, что мы используем when
чтобы сообщить Ansible, когда запускать какую-либо задачу, а не контролировать саму задачу или ее поведение. Для этого мы используем обработчики, регистры и другие ресурсы.
С уважением.