如何在ansible的vars文件中使用if条件

时间:2016-06-21 22:31:39

标签: variables ansible

是否可以在anisble vars文件中执行类似的操作

env: "{{ lookup('env','MY_ENV') }}"    
user: tom if {{ env }} else mike

2 个答案:

答案 0 :(得分:2)

以下是您的问题的答案,我认为您不能将env用作变量,因为它是ansible中的保留字:

---
- hosts: all 
  gather_facts: no
  vars:
    ENV: "dev"
  tasks:
    - debug:
        msg: "{%- if ENV == 'dev' -%} tom {%- else -%} mike {%- endif -%}"

ENV的值为dev时的结果:

% ansible-playbook -i "localhost," test.yml -c local

PLAY [all] *********************************************************************

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "tom"
}

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0

ENV的值为其他内容时的结果:

% ansible-playbook -i "localhost," test.yml -c local

PLAY [all] *********************************************************************

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "mike"
}

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0

希望能帮到你

答案 1 :(得分:1)

一种方法是使用另一个查找到包含user-env映射的json文件。 E.g:

user_envs.json:

{
    "dev": "tom",
    "prod": "mike"
}

查找

{{ (lookup('file', 'user_envs.json') | from_json).get('dev') }}

现在没有尝试尝试,但试一试!