Почему to_nice_yaml создает кавычки вокруг результата в Jinja2 (Ansible)?

У меня следующая установка.

my_var имеет следующее значение.

  ansible_facts:
    discovered_interpreter_python: /usr/bin/python
  invocation:
    module_args:
      api_key: null
      api_version: v1
      ca_cert: null
      client_cert: null
      client_key: null
      context: null
      field_selectors: []
      host: null
      kind: Secret
      kubeconfig: null
      label_selectors: []
      password: null
      proxy: null
      username: null
      validate_certs: null
  resources:
  - apiVersion: v1
    data:
      a: blah
      b: blah
      c: blah
    kind: Secret
    metadata:
      name: my_name
    type: Opaque

Я использую это в задаче с таким шаблоном.

- name: "doh"
  k8s:
    state: present
    namespace: "doh"
    definition: "{{ lookup('template', 'template.j2') }}"

Мой шаблон выглядит так.

apiVersion: v1
data: "{{ my_var | json_query("resources[?metadata.name=='" + my_name + ".my_string." + some_var + "'].data") | first | to_nice_yaml }}"
kind: Secret
metadata:
  name: "blah"
type: Opaque

К сожалению, я получаю это в результате. Это строка и должна быть простой yaml.

apiVersion: v1
data: "a: blah <-- quote, why?
b: blah
c: blah
" <-- quote, why?
kind: Secret
metadata:
  name: "blah"
type: Opaque

Почему я получаю кавычки вокруг моего yaml в Jinja2 и как мне этого избежать?


person Tony Stark    schedule 08.05.2020    source источник
comment
В вашем шаблоне есть кавычки вокруг yaml. "{{ ... | to_nice_yaml }}" Я думаю, вы путаете синтаксис Ansible с синтаксисом шаблона jinja2. Если вам не нужны кавычки в отображаемом значении, просто удалите их из шаблона.   -  person chash    schedule 08.05.2020
comment
Лол, я был уверен, что пробовал это много раз. Спасибо. Не стесняйтесь создавать ответ из этого.   -  person Tony Stark    schedule 08.05.2020


Ответы (2)


В вашем шаблоне есть кавычки вокруг yaml:

data: "{{ ... | to_nice_yaml }}"

Эти цитаты являются частью вашего шаблона и будут частью отображаемого вывода.

Я думаю, вы путаете синтаксис Ansible с синтаксисом шаблона jinja2 (вероятно, на основе подсказка из документации).

Эта ошибка неверна для шаблонов jinja2. Все, что не находится внутри блока с разделителями jinja2 ({%, {{ и т. д.), будет переведено в отображаемое значение.

Если вам не нужны кавычки в отображаемом значении, просто удалите их из шаблона.

person chash    schedule 08.05.2020

У меня та же проблема, даже если вы оставите кавычки, to_nice_yaml добавляет их, так как в yaml они технически являются строкой.

person user892583    schedule 19.03.2021