Почему to_nice_yaml создает кавычки вокруг результата в Jinja2 (Ansible)? - PullRequest
0 голосов
/ 08 мая 2020

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

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 и как этого избежать?

1 Ответ

2 голосов
/ 08 мая 2020

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

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

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

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

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

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

...