Ansible 条件变量

Ansible Conditional Variable

在开始之前,让我详细介绍一下我的 ansible 目录结构

所以现在,如果我想将一个应用程序部署到暂存区,我可以简单地 运行 这个剧本命令:

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 等等。