将字典变量传递给自定义模块

时间:2018-12-05 21:57:10

标签: python ansible

我维护着a custom module for Ansible written in Python,并且需要能够将所有检测到的Ansible事实作为字典传递到该模块中。

目前,我正在尝试这样做:

aria-hidden="true"

我模块的参数规范如下:

<input>

我的模块文档还指定了以下内容:

aria-labelledby

但是,当我进行消毒和验证时,我收到的是- name: run tests degoss: # ... facts: "{{ ansible_facts }}" 而不是字典:

AnsibleModule(argument_spec=dict(
  # ...
  facts=dict(required=False, default={}),
), ...)

这是在运行时抛出的:

DOCUMENTATION="""
# ...
options:
  facts:
    required: false
    default: empty dictionary
    description: A dictionary of Ansible facts.
"""

是否需要使用特定的语法将值作为字典传递,还是需要将字典变量视为JSON并尝试反序列化它们?

2 个答案:

答案 0 :(得分:0)

这有效:

  1. 在您的游戏中将ansible_facts传递给 string s = Convert.ToString(-5, 2); Console.WriteLine(s); int i = Convert.ToInt32(s,2); Console.WriteLine(i); 过滤器。

    to_json
  2. 在您的python模块中,使用 - name: run tests degoss: # ... facts: "{{ ansible_facts | to_json }}" json.loads

    解码json
    ast.literal_eval

答案 1 :(得分:0)

here所述,您可以指定ansible可以期望的类型。

AnsibleModule(argument_spec=dict(
  # ...
  facts=dict(required=False, default={}, type=dict),
), ...)

然后,“事实”将成为字典