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

Передача списка значений скрипту Python в качестве аргументов внутри скрипта ansible

У меня есть скрипт python внутри ansible playbook:

---
 - hosts: localhost
   become: yes
   become_method: sudo
   become_user: root
   gather_facts: false
   tasks:
     - name: execute script
       command: ./qwe.py
       register: python_output

     - debug:
          var: python_output.stdout_lines

qwe.py:

#!/usr/bin/python
import subprocess 
import os
import json
import ssl
import platform
from requests import get
#import psutil
data = subprocess.Popen(['uname', '-r'], stdout = subprocess.PIPE)
output = str(data.communicate())
a = output[2:len(output)-10]
if "3.10.0-1062.9.1.el7.x86_64" ==  a:
  print(json.dumps({"status":"pass", "kernelVersion":a}))
else:
  print(json.dumps({"status":"fail", "kernelVersion":a}))

b = ssl.OPENSSL_VERSION
if "OpenSSL 1.0.2k-fips  26 Jan 2017" == b:
  print(json.dumps({ "status":"pass","OpenSSLVersion":b}))
else:
  print(json.dumps({"status":"fail", "OpenSSLVersion":b}))

Мне нужно передать этот список значений, например: «OpenSSL 1.0.2k-fips 26 января 2017 года», «3.10.0-1062.9.1.el7.x86_64» извне скрипта вместо того, чтобы его кодировать. Таким образом, У меня есть 15 значений, которые мне нужно передать.

Как мы можем этого добиться? Спасибо за вашу помощь и время !!

У вас много возможностей.

  • Шаблон из .py файла с вашим vars / config и импортируйте его.
  • Создайте шаблон своего полного сценария.
  • Передайте данные как аргумент командной строки. Возможно, кодировка base64, поэтому вы не сталкиваетесь с таким количеством проблем с побегом. См. Документацию по фильтру b64encode и, возможно, фильтрам to_json. Было бы достаточно легко сделать command: a.py {{ some_ansible_var | to_json|b64encode }}.
  • Запишите данные в какой-то временный файл с разделителями и дайте команде путь к временному файлу. Записывая файл с шаблоном, используйте
  • Передайте данные через стандартный ввод. (Вам нужна оболочка вместо команды)
  • Установите переменные среды (см. Аргумент задачи environment)
  • Перепишите свой скрипт как доступный модуль. Тогда у вас будет полный доступ к вашим переменным.

Поскольку я уверен, что это всего лишь простой пример, я не уверен, какая идея лучше всего подойдет для вашего случая.

Имейте в виду, что если все ваше программное обеспечение установлено через систему управления пакетами дистрибутива, вы, вероятно, сможете получить все, что вам нужно, просто из package_facts модуль. Здесь вы можете заново изобретать колесо.