Ansible regex_replace模板错误

时间:2017-11-01 19:38:55

标签: ansible

我有一个我在Ansible 2.0.2中难以解析的字符串。字符串的格式为:

  

“{u'tens_under_25':u'0',u'tens_over_hundred':u'5',   u'fifties_over_hundred':u'1',u'tens_over_25':你好','数百':   u'1',u'fifties_under_hundred':u'0',u'thousands':u'1'}“

此字符串是实用程序的std_out,用于从数字中解析这些值。使用寄存器命令将此字符串捕获到变量“response”中。 'response'是一个字典,其元素'std_out'包含感兴趣的字符串。

我正在尝试使用Ansible regex_replace过滤器提取元素,如

  - set_fact:
      thousands: "{{response['stdout'] | regex_replace('.*thousands\': u\'(.*)\'.*', '\\1')}}"

这给出了错误:

TemplateSyntaxError: unexpected char u'\\' at 66

我不能为我的生活在这里找到语法错​​误,希望有人比我有更好的眼睛。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

所以,你可以在这里使用一个肮脏的技巧。您的命令输出是一个Python对象转储,Ansible碰巧有特殊的代码识别它并将其反序列化回适当的数据结构。所以,如果你这样做:

- set_fact:
    response_dict: "{{ response.stdout }}"

...你最终会得到一个名为response_dict的字典。然后,您可以获得thousands这样的值:

- debug:
    var: response_dict.thousands