Ansible如何根据使用的inventory文件动态设置orc_user变量
实现方案
以下方案完全不需要修改现有inventory文件的内容,依赖Ansible内置变量即可实现需求:
核心逻辑
Ansible默认提供内置变量inventory_file,会自动返回当前运行时使用的inventory文件的完整路径,我们可以基于该变量的文件名做条件判断,直接给orc_user赋值。
具体实现方式
方案1:单playbook内定义(适合仅单个playbook使用该变量的场景)
直接在playbook的vars块中写入判断逻辑即可,示例代码:
- name: 业务部署playbook hosts: all vars: # 取inventory文件名做精准判断,避免路径包含关键字导致误判 orc_user: >- {{ 'orchestration-test-user' if (inventory_file | basename == 'test.yaml') else 'orchestration-prod-user' }} tasks: # 后续任务可直接调用 {{ orc_user }} 变量,会自动匹配对应环境的取值 - name: 打印orc_user验证取值 debug: var: orc_user
方案2:全局公共变量定义(适合多个playbook都需要使用该变量的场景)
将变量判断逻辑写入项目根目录下的group_vars/all.yaml文件(如果文件不存在可手动创建),所有playbook运行时都会自动加载该变量,无需重复编写:
# group_vars/all.yaml 内容 orc_user: >- {{ 'orchestration-test-user' if (inventory_file | basename == 'test.yaml') else 'orchestration-prod-user' }}
验证方式
分别指定两套inventory运行playbook,即可看到变量自动匹配对应取值:
- 指定测试环境运行:
ansible-playbook -i test.yaml your_playbook.yaml,orc_user取值为orchestration-test-user - 指定生产环境运行:
ansible-playbook -i production.yaml your_playbook.yaml,orc_user取值为orchestration-prod-user
内容的提问来源于stack exchange,提问作者en1cc
相关产品推荐
相关产品推荐

