Я запускаю сценарий Ansible, который вызывает сценарий python, который манипулирует некоторыми данными и превращает их в словарь. Я хочу перенаправить словарь python в регистр, а затем использовать его для замены разделов файла json. Мой сценарий не работает без сообщений. Я могу запустить скрипт python самостоятельно, и он распечатает словарь.
Что я делаю не так? Это лучший способ сделать это? Что лучше: использовать оболочку, команду или скрипт для вызова скриптов 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
Спасибо за уделенное время.
Зарегистрированные переменные имеют свой собственный ключ, который вы можете увидеть, если запустите ansible-playbook с опцией -vvv. Вы не можете напрямую сохранить словарь в зарегистрированных переменных.
Это зависит от того, чего вам нужно достичь, но я предлагаю следующее:
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