ansible變量一(var和var_files)

在ansible中使用變量,能讓我們的工作變得更加靈活,在ansible中,變量的使用方式有很多種。

變量的定義:

變量名應該有字母,數字,下劃線組成,變量名需要以字母開頭,ansible內置的關鍵字不能作爲變量名。

在playbook中使用變量:

如果我們想要在某個paly中定義變量,了一借組vars關鍵字,示例如下:

image.png

上例,使用vars關鍵字,表示在當前play中進行變量的相關設置。

vars關鍵字的下一級定義定義了一個變量,變量名爲testvar1,變量值爲testfile

當我們需要使用testvar1的變量時,則需要應用這個變量,引用方式是兩個大括號。


也可以定義多個變量:

image.png

除了上面語法,使用yaml的塊序列語法也可以定義變量,事例如下:
image.png

還可以用類似“屬性”的方式定義變量,示例如下:

image.png


對於上面,我們引用變量的方式有兩種:

語法一:"{{nginx.conf80}}"
語法二:"{{nginx['conf8080']}}"


仔細觀察,上例中,我們在引用變量時使用了雙引號,而在第一個示例中沒有用雙引號,這是因爲第一個示例中的變量在被引用時,並沒有處於”開頭的位置“,第一個示例中變量被引用時如下:

#path: /testdir/{{ testvar1 }}

當file模塊的path參數引用對應的變量時,先引入了/testdir/,然後才引用了’testvar1‘變量。

而在上述示例中引用變量,變量被引用時如下,處於’開頭的位置‘,這種情況下,我們引用變量時必須使用雙引號引起被引用的變量,否則報語法錯誤。

path:"{{ nginx.conf80 }}"


當我們在playbook中爲模塊的參數賦值時,我們使用”冒號,也可以使用”等號“,當使用等號位模塊的參數賦值時,則不用考慮引用變量時是否使用”引號“的問題,示例如下:

image.png


除了能夠在play中直接定義變量,我們還可以在某個文件中定義變量,然後再在playbook引入對應的文件,引入文件後,playbook即可使用文件中定義的變量,你可能會問,爲什麼要多此一舉呢?

這是因爲在某些工作場景很有用,比如:你想讓別人閱讀你的playbook,卻不想讓別人看到某些值,可以使用這種方法,因爲別人在閱讀playbook時,只能看到引入的變量名,不能看到相應的值,這種將變量分離到某個文件中的做法就做”變量文件分離“,”變量文件分離“除了能夠隱藏某些值,還能夠讓你將不同類的信息放在不同的文件中,並且讓這些信息與劇本主體分開。


例子,定義一個專門用來存放nginx相關變量的文件(文件名nginx_vars.yaml):

image.png


定義完相關變量後,即可在playbook中引入文件中的變量,在playbook中引入包含變量的文件時,需要使用”vars_files“關鍵字,被引入的文件需要以”-“開頭,以yaml中塊序列語法引用,示例如下:

image.png

上例中使用"var_files"關鍵字引入了對應的變量文件,然後使用了文件中定義的變量。當然也可以引用多個變量文件,每個被引入的文件都需要以“-”開頭。


“var”關鍵字和“var_files”關鍵字可以同時使用,如下:

var:
- conf90: /etc/nginx/conf.d/90.conf
vars_files:
- /testdir/ansible/nginx_vars.yml


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章