如何防止ansible模板被收到的内容混淆?

jsc*_*ank 3 python wordpress jinja2 ansible

我使用ansible来提供wordpress安装,为此我有一个wp-config.php的模板.

我的wp-config.php.j2模板替换了键和盐,它看起来像这样

{{ wordpress_keys.content }}
Run Code Online (Sandbox Code Playgroud)

wordpress_keys来自一个任务,如下所示:

- name: retrieve new wordpress keys and salts
  uri:
    url: "https://api.wordpress.org/secret-key/1.1/salt/"
    method: GET
    return_content: yes
  register: wordpress_keys
Run Code Online (Sandbox Code Playgroud)

问题是,有时键和盐在其中有"特殊"字符,如<>,{}等,这似乎导致ansible产生如下错误:

致命:[ddc-wpchange2.ddc.prod] => {'msg':"AnsibleError:模板定义失败('AUTH_KEY',
'1 = MFI*+!d ^ 1/y;} za6 $ Qf w4vo {bv !gV?lmX?^ P h/5L?szDv&V <~in + .~ ^ oOdCFpyt] Tu8FSmGE} @ ||,Pe(:( 1%CjjAwhq {Gi#j-'); \ndefine('LOGGED_IN_KEY',
' BJ6c9#/ XDBVDB-8Q + ctK9DLZiKUzPYbM&aMlO!.v7COPb8 = [9HdU&Y7%SzE {&xh'); \ndefine('NONCE_KEY','.x B:3|/#|^2*JMh6+t$Ek:DG+wEqyO4:QZmMo}g|MeZi~LrvNpJ-z(8/S ,P.,N');\ndefine('AUTH_SALT', '-pzZ6 l40^8++a@t_sldj_CK {{V%] u-#cK44dAig%v <'); \ndefine( 'SECURE_AUTH_SALT','?ONdE { - {6CQT_Jrn0N4xHhI |} Rz2y1cc9Cj22XO
kITU |)BJm@BgPd5.lPW-?e;'); \ndefine('LOGGED_IN_SALT','O_Q7} Q.fx,Gt#0m30 - @ $ k +〜> dSk k6gz/I +> $ k~h9)<6(M~F +} UFU:'y + zF = o1:> p1S:2F B6)e~vO_#[ - i1ur} V?y $> EOyF; {lkU8Y; y0Znt '); \n:模板生成时模板错误:意外'''','失败':真}

只有当存在某些特殊字符时,错误才会一直发生.

我的问题是......我怎样才能在请求的结果中替换,而不会发生这种情况?是否有某种逃避或引用可行?

谢谢,
约翰

1.6*_*618 5

逃避某些角色将是困难的,因为uri模块不仅需要支持它,而且模板引擎引擎也必须不受欢迎.

相反,这是一个解决方法:

修改任务,以便将内容保存到文件而不是变量:

- name: retrieve new wordpress keys and salts
  uri:
    url: "https://api.wordpress.org/secret-key/1.1/salt/"
    method: GET
    dest: wp_keys.php
    return_content: yes
Run Code Online (Sandbox Code Playgroud)

然后在包含的wp-config.php.j2模板中添加一行wp_keys.php.