Ansible
Ansible 根據條件更改預設值
是否可以根據某些條件(即另一個變數的值)更改角色變數的預設值?
細節
我有兩個相關的命令變數,
env
和composer_opts
.如果兩者都保留為預設值 (
env = "prod"
和composer_opts = "--no-dev"
),一切正常。如果我更改
env
為dev
,另一個預設值會破壞我的命令,所以我總是需要同時設置兩者。是否可以通過使用自定義腳本/ 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