文章目錄
Ansible 變數不存在時指定預設值
這個技巧之前就已經頻繁用在專案上了,原本也以為掌握度相當高,不過隔了好陣子沒有寫 ansible script,當下要用時卻又腦袋打結不知道該如何下手,想了想雖然簡單但為了方便日後搜尋還是決定簡單筆記一下
基本環境設定
- macOS Big Sur 11.6
- ansible 2.11.9
- python 3.9.7 (default, Sep 3 2021, 12:37:55) [Clang 12.0.5 (clang-1205.0.22.9)]
- jinja 3.0.1
問題描述
直接存取未指定的變數
- hosts: localhost tasks: - name: DEBUG debug: msg: "{{ test }}"
出現未定義
undefined variable
錯誤fatal: [localhost]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'test' is undefined\n\nThe error appears to be in '/Users/yowko.tsai/sourcecode/it-automation/test.yml': line 37, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n tasks:\n - name: DEBUG\n ^ here\n"}
使用方式
value type :
boolean
,int
,string
,float
語法
- hosts: localhost tasks: - name: DEBUG debug: msg: "{{ test|default(對應型別的預設值) }}"
範例
bool
- hosts: localhost tasks: - name: DEBUG debug: msg: "{{ test|default(false) }}"
string
- hosts: localhost tasks: - name: DEBUG debug: msg: "{{ test|default('string') }}"
refernce type :
dict
、list
- hosts: localhost tasks: - name: DEBUG debug: msg: "{{ item }}" with_items: "{{testdic|default({})}}"
特殊使用:
omit
default(omit)
表示當變數 undifined 時即不送出該行設定值;以下方 script 為例,testvar undifined 於是 debug module 就不會送出 msg value,而 msg 在 debug module 的預設值為Hello world!
最後就是 print 出Hello world!
- hosts: localhost tasks: - name: DEBUG debug: msg: "{{ testvar|default(omit) }}"
心得
原本想要快速紀錄一下的,結果發現記憶力衰退嚴重,又重新查了些資料才又慢慢回憶起來,不過幸虧有先下定決心要筆記,這次查資料還是覺得不是很好查,幸好下次知道哪邊可以快速找到了
參考資訊
文章作者 Yowko Tsai
上次更新 2023-06-09
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。