Переменная по умолчанию Ansible concat и литеральная строка

Я не могу сделать очень простую вещь.

В моей задаче я пытаюсь объединить две переменные по умолчанию с буквальной строкой, чтобы создать путь

- name: "Uploading File"
  copy:
    src: "{{ installer_iso_src_location }}"/"{{ installer_version }}"/filename.iso
    dest: /opt/temp/filename.iso

Это дает мне ошибку. Любая идея, как объединить переменную и литеральные строки?


person Anand Rao    schedule 21.06.2017    source источник


Ответы (1)


Во-первых, YAML

  1. Ваш синтаксис должен соответствовать YAML:

    Строки (скаляры) обычно не заключаются в кавычки, но могут быть заключены в двойные кавычки (") или одинарные кавычки (').

    Таким образом, вы можете написать:

    parameter: value
    

    or

    parameter: 'value'
    

    or

    parameter: "value"
    

    Следующее не является допустимым YAML:

    "{{ installer_iso_src_location }}"/"{{ installer_version }}"/filename.iso
    
  2. #P6# <блочная цитата> #P7# #P8#

Во-вторых, Jinja2:

  • Большинство параметров в Ansible (заметным исключением является значение when) являются шаблонами Jinja2 (строками).

    Чтобы сослаться на значение переменной Ansible, вы используете выражение Jinja2, разделенное {{ и }} (без кавычек):

    {{ variable }}
    

    Есть два способа объединить строки со значениями переменных для вашего случая:

    {{ installer_iso_src_location }}/{{ installer_version }}/filename.iso
    

    or

    {{ installer_iso_src_location + '/' + installer_version + '/filename.iso' }}
    

Теперь YAML и Jinja2 вместе:

  • Поскольку ваш параметр (строка) начинается с символа { и не является допустимым словарем YAML/JSON, синтаксический анализатор YAML завершится ошибкой (см. пункт 2. приведенных выше требований YAML).

    В результате, чтобы парсер YAML считал ваше значение строкой, вы должны заключить значение (шаблон Jinja2) в кавычки:

    src: "{{ installer_iso_src_location }}/{{ installer_version }}/filename.iso"
    

    or

    src: "{{ installer_iso_src_location + '/' + installer_version + '/filename.iso' }}"
    

    или другая комбинация одинарных и двойных кавычек.

  • Если значение вашего параметра начинается со строки, отличной от {, вы можете использовать ее без кавычек, как в первом примере в пункте 1. выше.


Наконец, есть два заметных исключения, когда значение не должно соответствовать правилам YAML:

  • Сокращенный синтаксис Ansible для модулей с парами ключ-значение, объединенными =
  • параметр произвольной формы, например, в модулях command или shell
person techraf    schedule 25.06.2017