如何集中存放Ansible自定义模块供所有Playbook调用?
实现Ansible自定义模块集中管理并让分散Playbook调用的方案
完全可行,以下是几种可靠的实现方式,替代软链接方案:
方法1:通过ansible.cfg全局配置
在你的Ansible仓库根目录创建或修改ansible.cfg文件,在[defaults]段添加library参数,指向集中存放模块的目录:
[defaults] library = ./playbooks/ansible_custom_modules/library
- 路径可以用相对路径(相对于
ansible.cfg的位置)或绝对路径 - 所有Playbook执行时会自动优先加载该目录下的自定义模块,无需在每个Playbook中单独配置
方法2:通过环境变量临时指定
执行Playbook前,设置ANSIBLE_LIBRARY环境变量指向集中模块目录:
export ANSIBLE_LIBRARY=./playbooks/ansible_custom_modules/library ansible-playbook playbooks/tool_xxx/playbook_xxx.yml
- 适合临时测试场景,或者不想修改全局配置的情况
方法3:在Playbook中单独指定module_path
在每个Playbook的开头添加module_path参数,路径相对当前Playbook文件的位置:
- name: 示例任务集 hosts: all module_path: ../ansible_custom_modules/library tasks: - name: 调用自定义模块 my_custom_module: param: test_value
- 因为每个
tool_*目录都在playbooks目录下,所以用../ansible_custom_modules/library可以准确定位到集中模块目录
关于软链接无效的说明
软链接失效通常是因为Ansible的路径解析逻辑(它会优先解析Playbook所在目录的绝对路径,软链接可能被识别为无效路径),或者执行Playbook时的工作目录与软链接的相对路径不匹配,上述三种官方配置方式比软链接更稳定可靠。
内容的提问来源于stack exchange,提问作者Tms91
相关产品推荐
相关产品推荐

