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, но в виде файла! не каталог, хотя он создается в режиме отладки как каталог.

так почему это происходит?

0 ответов

Другие вопросы по тегам