我正在运行一个 Ansible 脚本,该脚本调用一个 python 脚本,该脚本操纵一些数据并将其转换为字典。我想将 python 字典重定向到寄存器,然后使用它替换 json 文件的部分。我的脚本失败,没有任何消息。我可以单独运行 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
感谢您的时间。
答案1
注册变量有自己的键,如果你使用 -vvv 选项执行 ansible-playbook 就可以看到它。你不能直接将字典存储到注册变量中。
这取决于你需要实现什么,但我的建议如下:
- 创建自定义 ansible 模块。
- 执行自定义模块并存储返回值。
- 使用这些值作为字典。
创建自定义 ansible 模块
ansiblescript.yml
|_库
|_定制的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