Ansible 如何使用标识折叠多行yaml字符串
(在给出答案之前,请记住我已经尝试了Ansible 如何使用标识折叠多行yaml字符串,ansible,yaml,Ansible,Yaml,(在给出答案之前,请记住我已经尝试了和-,但都没有成功) 我想在易变变量方面做些花哨的事。我希望有一个格式良好的SQL(伪SQL)查询可以折叠成一行,而不需要新行字符 我的问题是,如果字符串具有标识,运算符不起作用 --- - hosts: localhost gather_facts: no tasks: - debug: var=foo vars: foo: > select foo from bar where ok
和-
,但都没有成功)
我想在易变变量方面做些花哨的事。我希望有一个格式良好的SQL(伪SQL)查询可以折叠成一行,而不需要新行字符
我的问题是,如果字符串具有标识,
运算符不起作用
---
- hosts: localhost
gather_facts: no
tasks:
- debug: var=foo
vars:
foo: >
select foo
from bar
where ok
join left
select baz
from boo
产生:
ok:[localhost]=>{
“foo”:“从栏中选择foo\n,其中确定\n连接到左侧\n从boo中选择baz\n\n”
}
我不想在正文中间看到<代码> \n>代码>。仅使用YAML电源就可以解决此问题吗?
是的,这是YAML最奇怪的“功能”。请改用普通多行标量:---
- hosts: localhost
gather_facts: no
tasks:
- debug: var=foo
vars:
foo:
select foo
from bar
where ok
join left
select baz
from boo
从YAML加载的数据中出现换行的原因是: 折叠允许在单个空格字符分隔两个非空格字符的任何位置断开长行 由于条形码的
前面有空格,所以前面一行的换行不能是“折叠”的,而是硬换行
要单独使用YAML来“解决”这个问题,您可以尝试使用前面提到的as@flyx,但是要注意,对于普通标量有一些限制,这些限制不适用于折叠标量。这些限制可能不适用于您的示例,但当您有真正的SQL语法时,可能会适用
您可以做的另一件事是不要在折叠后缩进:
foo: >
select foo
from bar
where ok
join left
select baz
from boo
这并不能真正提高可读性,但没有普通样式标量的限制
最好的解决方案是添加一个标记并使用文字样式标量,同时最大限度地保持可读性
foo: !flatten |
select foo
from bar
where ok
join left
select baz
from boo
并为标记加载对象!展平,在加载过程中适当地展开以下行(即,用单个换行符替换换行符,后跟空格)
虽然在我看来,使用标签是最好的解决方案,但这是将“仅由YAML”一词延伸到合理的范围之外。哦,我已经尝试了包括核武器在内的所有方法,当时最简单的方法是“说‘朋友’然后进入”。谢谢。