在使用Ansible Tower时,执行新增的Ansible模块的方法是什么?

Ansible Tower是什么?

这是红帽的产品,可以在Web GUI中运行Ansible。在操作方面,同样使用Ansible Engine进行操作,但与在服务器上运行Ansible有一些不同的方式。当安装Ansible后,无法直接使用标准模块,需要额外安装模块才能运行。以下是环境信息。

    • RHEL: 7.7

 

    • Ansible Tower: 3.5.3

 

    • Ansible version: 2.8.2

 

    Python: 2.7.5 & 3.6.8

有关Ansible模块的添加

在正常的Ansible中,关于添加模块的规定遵循官方的步骤,很顺利。
这次遇到的问题是,当进入服务器执行Ansible时可以顺利运行,但从Tower上运行就不能成功。
还出现了其他错误,让人头疼。

当在Ansible Tower上使用Python3执行Playbook时可能遇到的陷阱。

虽然对于模块的添加没有影响,但是我添加的模块需要使用Python 3系列而不是2系列。因此,我通过”ansible_python_interpreter”指定了在RHEL7上额外安装的Python 3。在普通的Ansible中,可以正常使用python3进行执行,但是在Tower中运行时,却出现了以下错误…

AttributeError: module 'enum' has no attribute 'IntFlag'

根据我的环境来看,我发现enum34造成了问题,我通过使用”バルス”来修复了它。请注意,这里指的是Ansible Tower的venv中的pip,而不是服务器本地的pip。

# /var/lib/awx/venv/ansible/bin/pip uninstall enum34

添加在 Tower 上的模块的环境变量。

终于到了正题,上面的枚举错误修复后,接下来是这个错误。

<module>ImportError: cannot import name 'ModuleName'

在这里我第一次意识到,哦,加载失败了,发现Ansible Tower的设置中有一个地方可以添加环境变量,并通过将”ANSIBLE_LIBRARY”设置为JSON格式并注册它,成功地执行了。

{
 "ANSIBLE_LIBRARY": "/usr/share/ansible/plugins/modules/<added module name>",
 "ANSIBLE_MODULE_UTILS": "/usr/share/ansible/plugins/modules/<added module name>/module_utils/"
}

在Ansible Tower的设置>作业>附加环境变量中进行设置。

广告
将在 10 秒后关闭
bannerAds