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”一词延伸到合理的范围之外。

哦,我已经尝试了包括核武器在内的所有方法,当时最简单的方法是“说‘朋友’然后进入”。谢谢。