Назад | Перейти на главную страницу

Словарь Ansible pass из скрипта Python

Я запускаю сценарий 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. Вы не можете напрямую сохранить словарь в зарегистрированных переменных.

Это зависит от того, чего вам нужно достичь, но я предлагаю следующее:

  1. Создайте настраиваемый модуль ansible.
  2. Запустить настраиваемый модуль и сохранить возвращенные значения.
  3. Используйте эти значения как словарь.

Создать настраиваемый модуль ansible

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