Ansible从python脚本传递字典

我正在运行一个Ansible脚本,它调用一个python脚本,该脚本处理一些数据并将其转换为字典。 我想将Python字典redirect到一个寄存器,然后使用它replaceJSON文件的部分。 我的脚本失败,没有任何消息。 我可以自己运行python脚本,并打印出字典。

我究竟做错了什么? 这是做这个最好的方法吗? 使用shell,命令或脚本调用python脚本会更好吗?

pyscript.py pydict[pykey] = pyvalue print (pydict) ansiblescript.yml --- - hosts: 10.215.237.238 tasks: - name : Gather info shell: '/usr/bin/python /home/devoper/scripts/pyscript.py' register: pydict - name: Insert Info replace: destfile: /home/devoper/scripts/template.json regexp: "KEY1" replace: "{{ pydict.pykey }}" backup: yes 

感谢您的时间。

已注册的variables有自己的密钥,如果使用-vvv选项执行ansible-playbook,则可以看到该密钥。 您不能直接将字典存储到regiteredvariables。

这取决于你需要做什么,但我的build议如下:

  1. 创build定制的可靠模块。
  2. 执行自定义模块并存储返回的值。
  3. 将这些值用作字典。

创build自定义的模块

ansiblescript.yml
| _LIBRARY
| _customized_pyscript.py

 #!/usr/bin/python from ansible.module_utils.basic import * def main(): module = AnsibleModule(argument_spec={}) pydict = {"key1": "result1"} module.exit_json(changed=False, meta=pydict) if __name__ == '__main__': main() 

执行自定义模块并存储返回的值

ansiblescript.yml

 --- - hosts: 10.215.237.238 tasks: - name: Gather info customized_pyscript: register: pydict 

将这些值用作字典

ansiblescript.yml

 - name: Insert Info replace: destfile: /home/devoper/scripts/template.json regexp: "KEY1" replace: "{{ pydict.meta.KEY1 }}" backup: yes