如何向导入的Ansible playbook传递额外的环境变量
解决方法
方法1:修改复用剧本变量合并(兼容性最好)
首先调整可复用剧本a.yml的配置,将固定环境变量和自定义环境变量做合并处理:
--- - name: my_playbook hosts: "{{ HOSTS }}" force_handlers: true gather_facts: false # 合并默认环境变量和额外传入的自定义环境变量 environment: "{{ default_envs | combine(extra_envs | default({})) }}" vars: # 原有固定环境变量 default_envs: APP_DEFAULT_PORT: "{{ APP_DEFAULT_PORT }}" tasks: - name: Print Msg debug: msg: "hello"
后续需要传入额外环境变量时,直接在main_play.yml导入剧本时通过vars传递即可:
- import_playbook: "reusable_playbooks/a.yml" vars: # 传入额外环境变量 extra_envs: SPRING_PROFILE: "{{ SPRING_PROFILE }}" # 其余需要的基础变量如HOSTS、APP_DEFAULT_PORT也可以在此处统一传入
该方法兼容所有Ansible 2.0以上版本,不需要额外调整Ansible全局配置,不需要传额外环境变量时直接正常导入a.yml即可,不会触发报错。
方法2:直接传递play级环境变量(无需修改a.yml)
使用Ansible 2.10及以上版本默认支持play级别环境变量自动合并,不需要修改a.yml的原有配置,直接在main_play.yml导入时指定环境变量即可:
- import_playbook: "reusable_playbooks/a.yml" environment: SPRING_PROFILE: "{{ SPRING_PROFILE }}"
如果是2.10以下版本需要先将Ansible全局配置项ANSIBLE_ENVIRONMENT_MERGE设置为merge,否则传入的环境变量会覆盖a.yml中原有定义的环境变量。
内容的提问来源于stack exchange,提问作者Sanjesh M
相关产品推荐
相关产品推荐

