Ansible条件变量

时间:2016-09-01 09:13:47

标签: automation ansible ansible-playbook

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

  • 环境
    • 生产服务器的生产#库存文件
      • group_vars
      • host_vars
      • 主机
    • staging#inventory文件用于登台环境
      • group_vars
      • host_vars
      • 主机
  • 角色
    • nginx的
    • MySQL的
  • deploy_app.yml

所以现在,如果我想将一个应用程序部署到暂存,我只需运行此playbook命令:

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上的登台服务器

我知道最简单的方法是在运行playbook时定义app_dir变量,但如果可能,我更喜欢定义app_name,然后将根据指定的app_name使用app_dir。

if app_name =  app1, then app_dir = /var/www/staging.app1.com

elif app_name = app2, then app_dir = /var/www/staging.app2.com

请善意告知

1 个答案:

答案 0 :(得分:1)

您可以在论坛中模板Non-SSL Settings (NOT Recommended) Username: jon@domain.com Password: Use the email account’s password. Incoming Server: mail.domain.com IMAP Port: 143 POP3 Port: 110 Outgoing Server: mail.domian.com SMTP Port: 25 Authentication is required for IMAP, POP3, and SMTP.

app_dir

如果您有更多依赖于应用程序的变量并且它们不可篡改,您可以在变量文件中使用app_dir: '/var/www/staging.{{ app_name }}.com' dict:

apps

并在需要app_dir等时使用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'