为什么 to_nice_yaml 在 Jinja2 (Ansible) 的结果周围产生引号?
Why does to_nice_yaml produce quotes around the result in 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
为什么在 Jinja2 中我的 yaml 周围会出现引号,我该如何避免?
在您的模板中,yaml 周围有引号:
data: "{{ ... | to_nice_yaml }}"
这些引用是您的模板的一部分,并将成为渲染输出的一部分。
我认为您混淆了 Ansible 语法和 jinja2 模板语法(可能基于文档中的 this gotcha)。
这个问题不适用于 jinja2 模板。不在 jinja2 分隔块({%
、{{
等)内的所有内容都将转换为渲染值。
如果您不想要呈现值中的引号,只需将它们从模板中取出即可。
我有同样的问题,即使您不使用引号,to_nice_yaml 也会添加它们,因为在 yaml 中它们在技术上是一个字符串。
我有以下设置。
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
为什么在 Jinja2 中我的 yaml 周围会出现引号,我该如何避免?
在您的模板中,yaml 周围有引号:
data: "{{ ... | to_nice_yaml }}"
这些引用是您的模板的一部分,并将成为渲染输出的一部分。
我认为您混淆了 Ansible 语法和 jinja2 模板语法(可能基于文档中的 this gotcha)。
这个问题不适用于 jinja2 模板。不在 jinja2 分隔块({%
、{{
等)内的所有内容都将转换为渲染值。
如果您不想要呈现值中的引号,只需将它们从模板中取出即可。
我有同样的问题,即使您不使用引号,to_nice_yaml 也会添加它们,因为在 yaml 中它们在技术上是一个字符串。