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

时间:2015-05-08 18:37:04

标签: python wordpress jinja2 ansible

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

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

{{ wordpress_keys.content }}

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

问题在于,键和盐有时会在其中包含“特殊”字符,例如<&gt ;, {}等,这似乎会导致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 + GT; $ K〜H9)&10 6(M〜F +} UFU:   “Y + ZF =   o1:> p1S:2F B6)e~vO_#[ - i1ur} V?y $> EOyF; {lkU8Y; y0Znt'); \ n:模板   模板字符串时出错:意外'''','失败':真}

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

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

谢谢,
约翰

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:2)

所以我最终放弃了模板解决方案。相反,我使用wp-cli为我生成wp-config.php文件。我之所以这样做是因为模板解决方案随机无法使用模板,因为模板正在接收内容。