性能/调用python脚本将json输出提供给ansible的问题

时间:2018-12-16 15:11:24

标签: python ansible yaml

我有ansible模块,我必须执行数千个设置,必须完成大量数据解析才能为ansible模块输入提供有效的输入。

我选择了执行数千种设置的Python脚本,它执行数据解析并将有效的json输入提供给ansible模块

- name: Calling Python1 script
  script: /usr/bin/python /python1.py
  register: var1

#perform few tasks using ansible modules

#Calling python2 script
- name: Calling Python2 script
  script: /usr/bin/python /python2.py
  register: var2


#perform few tasks using ansible modules

Python脚本至少每执行20个Ansible任务就会调用多次,一个python脚本会被调用以获取正确的输入和数据解析。

一切正常,现在仍然没有问题。

任何在python脚本中执行的任务都可以从ansible剧本中实现(通过使用jinja2模板)。但是,开发需要花费大量时间,并且编写用于数据解析并向ansible模块提供输入的ansible剧本非常困难。

这就是原因,我正在使用python脚本并在ansible剧本中调用python脚本。

现在我关注的是

  1. 调用Python脚本会导致性能下降或出现问题吗?
  2. 调用Python脚本是标准编码吗?如果我调用python脚本(例如错误处理或控制Ansible剧本),我会失去任何好处

1 个答案:

答案 0 :(得分:1)

  

任何在python脚本中执行的任务都可以从ansible剧本中实现(通过使用jinja2模板)。但是,开发需要花费大量时间,并且编写用于数据解析并向ansible模块提供输入的ansible剧本非常困难。

我认为这是您真正要提出的评论,或重申:“我的团队可以在Ansible + Python中完成所有这些工作,但我们可以在Ansible + Jinja2中完成。”

您没有说您正在创建的Python脚本有多复杂,但是使用Ansible + Jinja的最大好处之一是您的剧本将会更多idempotent,并最终减少不必要的更改到系统(可能导致其他服务重启,管理问题等)。

但是与此相平衡的是,构建和维护这些Jinja2模板的工作将对您的团队产生多大的影响?如果您是一家小商店,而Ansible只是您工作的一小部分,但是您拥有大量的Python开发人员,那么Python脚本可能是“足够好”的解决方案。

您提到了两个问题:

  
      
  1. 调用Python脚本会导致性能下降或出现问题吗?
  2.   

是的,每当您从Ansible调用另一个任务(Python,Shell,可执行文件等)时,您都会受到一些额外的执行惩罚。您可能不会在很小的环境中看到它,但是如果您是在100个系统上运行剧本,或者在仅持续几分钟的每个容器上运行剧本,那么这样做肯定会受到一些性能损失。 / p>

  
      
  1. 调用Python脚本是标准编码吗?如果我调用诸如错误处理之类的python脚本或控制Ansible剧本,我会失去任何好处吗?
  2.   

是的,您将不得不在Python脚本中处理更多的错误处理,否则将在Ansible或Jinja2编码中为您处理这些错误,包括您提到的内容以及Ansible提供的幂等功能。

最终,您要的是“一个正确的答案”,很少有一个答案。在我的团队中,我正在尝试深化Ansible的经验,因此Ansible + Jinja2是我选择的路线。