使用Ansible创建自定义模块并与playbook一起分发

模块的开发

关于创建模块的详情,请参阅官方文档中的《Developing Modules — Ansible Documentation》。

    • モジュールはスクリプトファイルとして作成します。

 

    • モジュールはどの言語で記述しても良いです。ただし、本家にpull requestを送って取り込んでもらうにはPythonで記述する必要があります。

 

    • モジュールの実行結果のステータスをJSONとして標準出力に出力するようにします。changedというbooleanのキーは必ず含めるようにします。モジュールの実行によってシステムが変更されたかどうかを設定します。

 

    上記のJSON以外にモジュールの中で標準出力や標準エラー出力に出力するのはご法度です。

在参考ansible/ansible存放的ansible/library下的源码来创建嵌入式标准模块的步骤。

# include magic from lib/ansible/module_common.py
#<<INCLUDE_ANSIBLE_MODULE_COMMON>>
main()

在创建模块时,适当利用ansible/lib/ansible/module_common.py中定义的公共函数。

作为例子,我展示了一个我创建的主机名设置模块,名为hostname。
ansible-playbooks/library/system/hostname at master · hnakamur/ansible-playbooks

我们只支持RHEL/CentOS/Debian/Ubuntu操作系统,并且执行hostname命令以及更改/etc/sysconfig/network或/etc/hostname文件的处理。

在使用者那里,只需在任务部分按以下方式写。

hostname: name=_YOUR_HOSTNAME_TO_SET_

如果不使用hostname模块,则变得相当简单。
添加自定义的hostname模块并修改hostname任务以使用它。· 6aa9f1e· hnakamur / ansible-playbooks

这个hostname模块已经在请求中,希望能够被原作者合并。添加一个设置系统主机名的模块,由hnakamur创建。by hnakamur · Pull Request #3940 · ansible/ansible。

模块的分发

按照 Ansible 文档中的最佳实践,将自定义模块放置在 playbook 的 library 文件夹中,它们将被自动加载。

如果想要将其放在其他地方,可以通过设置ANSIBLE_LIBRARY环境变量或使用–module-path命令行选项来实现。- Ansible文档

如果没有特别的理由的话,我认为在library文件夹里就可以了。

广告
将在 10 秒后关闭
bannerAds