Назад | Перейти на главную страницу

Ansible playbook - переменная concat в условном выражении

У меня есть рабочая задача по переносу (копированию) определенной части моего домашнего каталога (вторая до последней строки является важной):

- 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.

Любые другие рекомендации или советы также приветствуются (в комментариях, я думаю).

ОБНОВИТЬ:

Мои дизайнерские цели (функциональные стремления) для миграции:

Попробуйте переписать немного по-другому. Вместо того, чтобы перебирать массив с помощью loopукажите каталоги, которые вы хотите скопировать в with или with_fileglob. Если вы действительно хотите иметь список файлов, которые вы хотите скопировать из одного места назначения в другое, вы можете записать список в with часть. Модуль проверит, существует ли исходный файл, и отобразит ошибку, что в этом случае неплохо, поскольку в противном случае ваша миграция будет некорректной.

Помните, что мы используем when чтобы сообщить Ansible, когда запускать какую-либо задачу, а не контролировать саму задачу или ее поведение. Для этого мы используем обработчики, регистры и другие ресурсы.

С уважением.