ansible-playbook -e
用来传递额外变量(extra variables)到 playbook 中。
基本语法
bash
ansible-playbook -e "变量名=值" playbook.yml
# 或
ansible-playbook --extra-vars "变量名=值" playbook.yml
使用方式
1. 传递单个变量
bash
ansible-playbook -e "env=production" deploy.yml
2. 传递多个变量
bash
# 方式一:多个 -e 选项
ansible-playbook -e "env=production" -e "version=1.2.3" deploy.yml
# 方式二:空格分隔
ansible-playbook -e "env=production version=1.2.3" deploy.yml
# 方式三:JSON 格式
ansible-playbook -e '{"env":"production","version":"1.2.3"}' deploy.yml
3. 从文件传递变量
bash
# YAML 文件
ansible-playbook -e "@vars.yml" deploy.yml
# JSON 文件
ansible-playbook -e "@vars.json" deploy.yml
4. 在 playbook 中使用变量
yaml
- name: Deploy application
hosts: all
tasks:
- name: Deploy to {{ env }} environment
debug:
msg: "Deploying version {{ version }} to {{ env }}"
变量优先级
-e
传递的变量具有最高优先级,会覆盖其他来源的同名变量:
- Extra vars (-e) ← 最高优先级
- Task vars
- Block vars
- Role vars
- Play vars
- Host vars
- Group vars
- Inventory vars ← 最低优先级
实际应用场景
bash
# 部署不同环境
ansible-playbook -e "env=staging" -e "branch=develop" deploy.yml
# 传递敏感信息
ansible-playbook -e "db_password=secret123" setup.yml
# 动态配置
ansible-playbook -e "nginx_port=8080" -e "workers=4" webserver.yml