Ansible playbook – определение var на основе условия
Я хочу создать переменную на основе условия, поэтому я создал следующее:
hosts: test
vars: vtarget_backup_folder_in_progress: "{{ "{{ folder }}/{{ target }}/test{{ hostvars['localhost']['tstamp'].stdout }}{{ type }}" if node_type == "master" else "{{ folder }}/{{ target }}/prod{{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}" }}"
но у меня это не получается с ошибкой ниже:
Мы можем ошибаться, но похоже, что проблема связана с отсутствием кавычек. Всегда заключайте скобки выражения шаблона, когда они начинают значение. Например:
with_items: - {{ foo }} Should be written as: with_items: - "{{ foo }}"
не могли бы вы помочь мне с этим?
РЕДАКТИРОВАТЬ
Я попробовал следующее:
tasks:
- name: set IN_PROGRESS backup folder
set_fact:
v_target_backup_folder_in_progress: >-
{% if node_type == "master" %}
"{{ folder }}/{{ target }}/test_{{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}"
{% else %}
"{{ folder }}/{{ target }}/prod_{{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}"
{% endif %}
- name: ensure target in progress folder exists
file:
path: "{{ v_target_backup_folder_in_progress }}"
state: directory
owner: "{{ app_user }}"
group: "{{ app_user_group }}"
mode: u=rwx,g=rwx
он получает правильные значения переменной, когда я отлаживаю книгу воспроизведения, НО когда я проверяю v_target_backup_folder_in_progress на каждом узле из трех узлов, на которых выполняется игра, я обнаруживаю что-то странное:
на одном узле v_target_backup_folder_in_progress не создается, хотя кажется, что он создан в режиме отладки, но когда я иду по тому же пути, я не могу найти каталог!
на двух других узлах создается v_target_backup_folder_in_progress, но в виде файла! не каталог, хотя он создается в режиме отладки как каталог.
так почему это происходит?