Ansible

Ansible 根據條件更改預設值

  • May 4, 2022

是否可以根據某些條件(即另一個變數的值)更改角色變數的預設值?

細節

我有兩個相關的命令變數,envcomposer_opts.

如果兩者都保留為預設值 (env = "prod"composer_opts = "--no-dev"),一切正常。

如果我更改envdev,另一個預設值會破壞我的命令,所以我總是需要同時設置兩者。是否可以通過使用自定義腳本/ if 設置條件預設值來避免這種情況?

重要提示:我不想總是composer_opts根據值設置env值。我只想在尚未設置的情況下設置它(即動態預設值)。

虛擬碼

我想做這樣的事情(以下程式碼無效,只是虛擬碼來表達我的需要)

---
# defaults/main.yml

env: prod
composer_opts: 
   when: "{{env}}" = 'prod'
       '--no-dev --optimize-autoloader --no-interaction'
   when: "{{env}}" = 'dev'
       '' 

我建議這個解決方案:

---
- set_fact:
    composer_opts: ""
  when: "{{env}}" == 'dev'

當變數等於’ ‘時,它將composer_opts變數設置為字元串。""``env``dev

以下是基於更新問題的劇本範例:

$ cat test.yml

---
- hosts: 127.0.0.1
 connection: local
 tasks:
 - set_fact:
     composer_opts: "{% if env == 'prod' %} '--no-dev --optimize-autoloader --no-interaction' {% else %} '' {% endif %}"

 - debug: var=composer_opts

樣本輸出:

sudo ansible-playbook test.yml -e env=dev

PLAY [127.0.0.1] ************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [127.0.0.1]

TASK: [set_fact ] ************************************************************* 
ok: [127.0.0.1]

TASK: [debug var="{{composer_opts}}"] ***************************************** 
ok: [127.0.0.1] => {
   "var": {
       " '' ": " '' "
   }
}

PLAY RECAP ******************************************************************** 
127.0.0.1                  : ok=3    changed=0    unreachable=0    failed=0   


sudo ansible-playbook test.yml -e env=prod

PLAY [127.0.0.1] ************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [127.0.0.1]

TASK: [set_fact ] ************************************************************* 
ok: [127.0.0.1]

TASK: [debug var="{{composer_opts}}"] ***************************************** 
ok: [127.0.0.1] => {
   "var": {
       " '--no-dev --optimize-autoloader --no-interaction' ": " '--no-dev --optimize-autoloader --no-interaction' "
   }
}

PLAY RECAP ******************************************************************** 
127.0.0.1                  : ok=3    changed=0    unreachable=0    failed=0   

引用自:https://serverfault.com/questions/715769