Рейтинг:0

Ansible playbook — определение var на основе условия

флаг cn
Sam

Я хочу создать переменную на основе условия, поэтому я создал следующее:

хозяева: тест

vars: vtarget_backup_folder_in_progress: "{{ "{{ folder }}/{{ target }}/test{{ hostvars['localhost']['tstamp'].stdout }}{{ type }}" if node_type == "master " else "{{ папка }}/{{ target }}/prod{{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}" }}"

но у меня это не получается с ошибкой ниже:

Мы можем ошибаться, но это похоже на проблему с отсутствующими кавычками. Всегда заключайте скобки выражения шаблона в кавычки, когда они начинают значение. Например:

with_items:
  - {{фу}}
Должно быть написано как:

with_items:
  - "{{фу}}"

не могли бы вы помочь мне с этим?

РЕДАКТИРОВАТЬ

Я пробовал следующее:

задачи:

- имя: установить папку резервного копирования IN_PROGRESS
  set_fact:
     v_target_backup_folder_in_progress: >-
       {% если node_type == "мастер" %}
       "{{ папка }}/{{ target }}/test_{{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}"
       {% еще %} 
       "{{ папка }}/{{ target }}/prod_{{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}"
       {% конец%}


- имя: убедитесь, что целевая папка в процессе существует
  файл:
    путь: "{{ v_target_backup_folder_in_progress }}"
    состояние: каталог
    владелец: "{{ app_user }}" 
    группа: "{{ app_user_group }}" 
    режим: u=rwx,g=rwx

он получает правильные значения переменной, когда я отлаживаю книгу воспроизведения, НО когда я проверяю v_target_backup_folder_in_progress на каждом узле из 3 узлов, на которых работает игра, я нахожу что-то странное:

на одном узле v_target_backup_folder_in_progress не создается, хотя кажется, что он создается в режиме отладки, но когда я иду по тому же пути, я не могу найти каталог!

на двух других узлах создается v_target_backup_folder_in_progress, но в виде файла! не каталог, хотя он создается в режиме отладки как каталог.

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

флаг br
curls "{{ }}" не могут быть вложенными.
флаг cn
Sam
Итак, вы имеете в виду, что мне нужно удалить {{ }} из переменных внутри основного/родительского {{ }}? Как эта переменная: "{{ папка/цель}}"
U880D avatar
флаг ca
Да, вам нужно их удалить, но, например, `"{{ folder }}/{{ target }}/test_...`
флаг cn
Sam
Если вы имеете в виду следующее: v_target_backup_folder_in_progress: "{{ folder }}/{{ target }}/test_{{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}" if node_type == "мастер" иначе "{{ папка }}/{{ цель }}" это не сработало
Рейтинг:0
флаг in

Это должно сделать это:

vtarget_backup_folder_in_progress: "{% if node_type == 'master' %}{{ folder }}/{{ target }}/test{{ hostvars['localhost']['tstamp'].stdout }}{{ type }}{ % else %}{{ папка }}/{{ target }}/prod{{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}{% endif %}"

Все в одной строке, без вложенных фигурных скобок, if/else/endif с {% %}

Вы могли бы даже немного уменьшить его, переместив общие начало и конец из условного выражения:

vtarget_backup_folder_in_progress: "{{ папка }}/{{ target }}/{% if node_type == 'master' %}test{{ hostvars['localhost']['tstamp'].stdout }}{% else %}prod {{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}{% endif %}{{ type }}"

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.