Ansible 条件变量
Ansible Conditional Variable
在开始之前,让我详细介绍一下我的 ansible 目录结构
- 环境
- production # 生产服务器的库存文件
- group_vars
- host_vars
- 主机
- staging # 暂存环境的清单文件
- group_vars
- host_vars
- 主机
- 角色
- nginx
- mysql
- 等等
- deploy_app.yml
所以现在,如果我想将一个应用程序部署到暂存区,我可以简单地 运行 这个剧本命令:
ansible-playbook -i environments/staging/hosts deploy-app.yml
例如,我将 staging/group_vars/webserver 中我的 app1 目录的路径定义为“/var/www/staging.app1.com”。但我还需要为 app2 部署到同一台服务器,但目录不同。是否可以在 group_vars 中使用条件变量?
所以如果我 运行:
ansible-playbook -i environments/staging/hosts deploy-app.yml --extra-vars "app_name=app1"
它将部署到 /var/www/staging 上的登台服务器。app1.com
和:
ansible-playbook -i environments/staging/hosts deploy-app.yml --extra-vars "app_name=app2"
它将部署到 /var/www/staging 上的登台服务器。app2.com
我知道最简单的方法是在 运行 宁剧本时定义 app_dir 变量,但如果可能的话,我更喜欢定义 app_name 然后 app_dir 将根据指定的 app_name 使用。
if app_name = app1, then app_dir = /var/www/staging.app1.com
elif app_name = app2, then app_dir = /var/www/staging.app2.com
请多多指教
您可以在您的组变量中模板 app_dir
:
app_dir: '/var/www/staging.{{ app_name }}.com'
如果你有更多依赖于应用程序的变量并且它们不可模板化,你可以在你的变量文件中使用apps
dict:
apps:
app1:
dir: '/var/www/app1'
key: 'klg23sdkjfsdf'
db_host: '127.0.0.1'
app2:
dir: '/opt/apps/app2'
key: 'askjh233423444'
db_host: '127.0.1.1'
并在需要时使用 apps[app_name].dir
app_dir 等等。
在开始之前,让我详细介绍一下我的 ansible 目录结构
- 环境
- production # 生产服务器的库存文件
- group_vars
- host_vars
- 主机
- staging # 暂存环境的清单文件
- group_vars
- host_vars
- 主机
- production # 生产服务器的库存文件
- 角色
- nginx
- mysql
- 等等
- deploy_app.yml
所以现在,如果我想将一个应用程序部署到暂存区,我可以简单地 运行 这个剧本命令:
ansible-playbook -i environments/staging/hosts deploy-app.yml
例如,我将 staging/group_vars/webserver 中我的 app1 目录的路径定义为“/var/www/staging.app1.com”。但我还需要为 app2 部署到同一台服务器,但目录不同。是否可以在 group_vars 中使用条件变量?
所以如果我 运行:
ansible-playbook -i environments/staging/hosts deploy-app.yml --extra-vars "app_name=app1"
它将部署到 /var/www/staging 上的登台服务器。app1.com 和:
ansible-playbook -i environments/staging/hosts deploy-app.yml --extra-vars "app_name=app2"
它将部署到 /var/www/staging 上的登台服务器。app2.com
我知道最简单的方法是在 运行 宁剧本时定义 app_dir 变量,但如果可能的话,我更喜欢定义 app_name 然后 app_dir 将根据指定的 app_name 使用。
if app_name = app1, then app_dir = /var/www/staging.app1.com
elif app_name = app2, then app_dir = /var/www/staging.app2.com
请多多指教
您可以在您的组变量中模板 app_dir
:
app_dir: '/var/www/staging.{{ app_name }}.com'
如果你有更多依赖于应用程序的变量并且它们不可模板化,你可以在你的变量文件中使用apps
dict:
apps:
app1:
dir: '/var/www/app1'
key: 'klg23sdkjfsdf'
db_host: '127.0.0.1'
app2:
dir: '/opt/apps/app2'
key: 'askjh233423444'
db_host: '127.0.1.1'
并在需要时使用 apps[app_name].dir
app_dir 等等。