Ansible AWX中剧本在子目录时group_vars/host_vars配置方法
问题场景
当前项目目录结构如下:
inventory/ group_vars/ all/ all.yml inventory playbooks/ test_group_vars.yml ansible.cfg
目前只有将group_vars放在playbooks目录下时,变量才能生效;AWX无法识别inventory/group_vars或根目录下的group_vars中的变量。按照Ansible最佳实践,group_vars/host_vars通常放在inventory子目录下,想确认在AWX中是否支持将这些变量目录放在playbook文件夹之外,是否需要设置playbook_dir或playbook_vars_root。该问题也在Ansible AWX的官方issue中被讨论过。
解决方案
AWX完全支持将group_vars/host_vars放在playbook文件夹之外,核心是让AWX正确关联到你的inventory目录及其中的变量文件,具体操作如下:
正确配置AWX的Inventory来源
若你的项目是从Git等版本控制系统同步到AWX的,创建Inventory时必须选择SCM来源,并在配置中指定Inventory file的路径为inventory/inventory(对应项目根目录下的inventory文件)。如果是手动创建的静态Inventory,AWX不会自动读取inventory目录下的变量文件,必须使用SCM同步的方式。调整项目根目录的ansible.cfg配置
在项目根目录的ansible.cfg中明确指定inventory路径,避免AWX默认从playbook目录查找:[defaults] inventory = ./inventory/inventory不需要修改
playbook_dir或playbook_vars_root,这两个变量主要用于playbook内部路径解析,AWX会基于项目根目录来处理文件路径。验证变量加载情况
可以在test_group_vars.yml中添加debug任务,确认变量是否加载成功:- name: 验证group_vars变量加载 hosts: all tasks: - debug: var: 你的变量名 # 替换为all.yml中定义的变量在AWX中运行该playbook,查看输出是否显示正确的变量值即可验证。
内容的提问来源于stack exchange,提问作者jackson

