Ansible args 内容,将模块从 1.9 移植到 2.x

Ansible args 内容,将模块从 1.9 移植到 2.x

我正在将模块从 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)]

无论如何,祝你好运,和我们做同样事情的随机人士。

相关内容