潜入Ansible模块和模块实用程序
#编程 #python #ansible #module

我的任务是开发一个通过Ansible在目标计算机上执行的自定义脚本。虽然意识到Ansible可以集成自定义脚本的能力,但我不确定是否是通过 Ansible Ansible模块或插件来完成此类集成的

Anibsle module vs Ansible plugin

经过Google的快速研究,我了解模块旨在处理特定任务,并为与远程系统通信的Ansible提供了标准化的界面。

另一方面,

插件用于扩展Ansible本身的功能,而不是定义系统的所需状态。插件可用于将新功能添加到Ansible,例如自定义库存脚本,自定义连接类型和自定义回调插件。插件通常用Python编写,可以在运行时加载。

ansible meme

所以现在我知道我需要创建模块而不是插件,现在问题在于我需要编写模块 python或powershell 的哪种语言?它取决于您针对的机器。如果您打算使用Linux机器运行模块,则Python是最佳选择。就我而言,我是针对Windows机器的,因此我需要写下Windows模块。

突然在我的脑海中突然出现了一个问题,为什么我不能写一个Python模块并将其与Windows和Linux一起使用,这是最好的方法吗?

这是不可能的。 Ansible团队在下面的链接中解释了原因。

https://docs.ansible.com/ansible/latest/os_guide/windows_faq.html#can-i-run-python-modules-on-windows-hosts

Ansible overview

好,然后让我们创建An​​sible PowerShell模块。

当我阅读文档时,我知道我们应该在创建自定义Ansible模块时使用Ansible Inbuild ** module_utils **。

Image description

为什么使用Ansible Module_utils?

Module_utils可以由Ansible Module开发人员使用来简化其代码并减少重复。通过使用Module_utils功能,模块开发人员可以避免编写样板代码,而要专注于实现其模块的核心功能。

例如,ansible.module_utils.basic模块提供了用于处理输入和输出的功能,而ansible.module_utils.urls.urls模块提供了用于制作HTTP请求的功能。

我可以在哪里找到这个Ansible module_utils?
您可以在安装Ansible的路径下找到它。

Ansible Module Utils

如何将module_utils导入我的自定义模块?

就像我在下面显示的那样,您可以将模块_utils进口到python和powershell模块

#!/usr/bin/python
from ansible.module_utils.basic import AnsibleModule
#!powershell
#AnsibleRequires -CSharpUtil Ansible.Basic

Ansible python and powershell module

#python
module = AnsibleModule(argument_spec=spec)
#powershell
$module = [Ansible.Basic.AnsibleModule]::Create($args, $spec)

注意:Spec参数是一个标签/字典,它定义了模块的参数规范。

在Python和PowerShell Ansible模块中,您可以看到我为类Ansiblembobodule创建了一个称为模块的对象。

ansiblemodule class 是Ansible的核心组成部分,为编写Ansible模块提供了标准接口。

ansiblemobodule类可用于访问输入参数和模块的输出结果。创建的对象模块提供了几种方法和属性,包括:

  • 参数:一个包含传递给模块的输入参数的标签。

  • exitjson($ result):一种退出模块并返回输出结果的方法。

  • failjson($ msg):一种以JSON格式以错误消息退出模块的方法。

  • warn($ msg):将警告消息写给控制台的方法。

  • 失败($ msg):将错误消息写入控制台并退出模块的方法。

使用所有这些方法,我为Ansible创建了一个不错的PowerShell模块。
我不想解释我如何编写模块,因为它已经在Ansible文档https://docs.ansible.com/ansible/latest/dev_guide/developing_modules_general_windows.html

中提到

现在开始编写自己的Ansible模块。 :)享受!!