我正在将模块从 ansible 1.9 移植到 2.x,args 文件内容似乎有点奇怪?经过 shlex 处理后,简单的字符串没有问题,但列表和字典看起来像是过度转义的垃圾。例如:
我的电话:
测试:“包={{test.var}}”
test.var 是包列表,['one', 'two', 'three', 'foo']
ansible 1.9 args内容:
包=['一','二','三','foo']
ansible 2.3 args内容:
包裹='[u'“'“'一'“'”,u'“'''二'“''”,u'“'''三'“'',u'“'''foo'“'']'“'”]'“'”]'“'”]'
我的问题是:“有没有一种优雅或简单的方法可以反序列化这些参数数据?”我可以删除有问题的转义符和引号,但这样做很麻烦,也很不安全。我在移植指南中没有找到任何相关内容。
答案1
好吧,我没有找到答案,但我想出了一个不错的方法来得到我想要的东西。我会把我的答案放在这里,以防有人遇到问题并有需要。
首先,根据您调用模块的方式,不平衡的括号会消失:
test: "blip={{testpackages}}"
会导致括号不平衡,但是
test: blip="{{testpackages}}"
导致括号平衡。
其次,如果你只是要求 ansible 将变量传递到“to_json”过滤器,然后读取它,那么整个事情就变得毫无意义了。剧本示例:
- name: run test module (ansible 2.x)
test: packages='{{ testpackages| to_json }}'
when: ansible_version.major|int > 1
模块内示例:
packages_to_test = [x.encode('utf-8') for x in json.loads(packages)]
无论如何,祝你好运,和我们做同样事情的随机人士。