将多行 jinja2 块转换为单行

Transform multiline jinja2 block to single line

我使用ansible(使用jinja2)来管理nginx。我的 nginx 配置文件有一行很长很难维护:

add_header Content-Security-Policy "default-src 'self' http: https: https://*.foo.com: https://*.bar.com: https://*.baz.com: https://*.qux.com: https://*.spam.com: https://*.ham.com: https://*.eggs.com: wss://*.foo.com: object-src 'none'" always;

由于配置文件是一个jinja2模板,我想把那一行改写成多行(为了便于维护),但是为了像上面那样转换成一行。

我该怎么做?换句话说,像这样(当然行不通):

add_header Content-Security-Policy {%
"default-src 'self'
http:
https:
https://*.foo.com:
https://*.bar.com:
https://*.baz.com:
https://*.qux.com:
https://*.spam.com:
https://*.ham.com:
https://*.eggs.com:
wss://*.foo.com:
object-src 'none'"
always;%}

...转换后会给我上面显示的一个衬垫吗?

一个可能的解决方案:将您需要的值放在一个列表中并用空格将它们连接起来:

{%- set my_values=[                                               
"default-src 'self'",                                             
"http:",                                                          
"https:",                                                         
"https://*.foo.com:",                                             
"https://*.bar.com:",                                             
"https://*.baz.com:",                                             
"https://*.qux.com:",                                             
"https://*.spam.com:",                                            
"https://*.ham.com:",                                             
"https://*.eggs.com:",                                            
"wss://*.foo.com:",                                               
"object-src 'none'",                                              
"always",                                                         
]-%}                                                              
add_header Content-Security-Policy "{{ my_values | join(' ') }}"; 

蛋糕上的樱桃:将此列表从您在 inventory/playbook 中声明的 var 直接传递到您的模板。