在ansible中使用變量,能讓我們的工作變得更加靈活,在ansible中,變量的使用方式有很多種。
變量的定義:
變量名應該有字母,數字,下劃線組成,變量名需要以字母開頭,ansible內置的關鍵字不能作爲變量名。
在playbook中使用變量:
如果我們想要在某個paly中定義變量,了一借組vars關鍵字,示例如下:
上例,使用vars關鍵字,表示在當前play中進行變量的相關設置。
vars關鍵字的下一級定義定義了一個變量,變量名爲testvar1,變量值爲testfile
當我們需要使用testvar1的變量時,則需要應用這個變量,引用方式是兩個大括號。
也可以定義多個變量:
除了上面語法,使用yaml的塊序列語法也可以定義變量,事例如下:
還可以用類似“屬性”的方式定義變量,示例如下:
對於上面,我們引用變量的方式有兩種:
語法一:"{{nginx.conf80}}" 語法二:"{{nginx['conf8080']}}"
仔細觀察,上例中,我們在引用變量時使用了雙引號,而在第一個示例中沒有用雙引號,這是因爲第一個示例中的變量在被引用時,並沒有處於”開頭的位置“,第一個示例中變量被引用時如下:
#path: /testdir/{{ testvar1 }}
當file模塊的path參數引用對應的變量時,先引入了/testdir/,然後才引用了’testvar1‘變量。
而在上述示例中引用變量,變量被引用時如下,處於’開頭的位置‘,這種情況下,我們引用變量時必須使用雙引號引起被引用的變量,否則報語法錯誤。
path:"{{ nginx.conf80 }}"
當我們在playbook中爲模塊的參數賦值時,我們使用”冒號,也可以使用”等號“,當使用等號位模塊的參數賦值時,則不用考慮引用變量時是否使用”引號“的問題,示例如下:
除了能夠在play中直接定義變量,我們還可以在某個文件中定義變量,然後再在playbook引入對應的文件,引入文件後,playbook即可使用文件中定義的變量,你可能會問,爲什麼要多此一舉呢?
這是因爲在某些工作場景很有用,比如:你想讓別人閱讀你的playbook,卻不想讓別人看到某些值,可以使用這種方法,因爲別人在閱讀playbook時,只能看到引入的變量名,不能看到相應的值,這種將變量分離到某個文件中的做法就做”變量文件分離“,”變量文件分離“除了能夠隱藏某些值,還能夠讓你將不同類的信息放在不同的文件中,並且讓這些信息與劇本主體分開。
例子,定義一個專門用來存放nginx相關變量的文件(文件名nginx_vars.yaml):
定義完相關變量後,即可在playbook中引入文件中的變量,在playbook中引入包含變量的文件時,需要使用”vars_files“關鍵字,被引入的文件需要以”-“開頭,以yaml中塊序列語法引用,示例如下:
上例中使用"var_files"關鍵字引入了對應的變量文件,然後使用了文件中定義的變量。當然也可以引用多個變量文件,每個被引入的文件都需要以“-”開頭。
“var”關鍵字和“var_files”關鍵字可以同時使用,如下:
var: - conf90: /etc/nginx/conf.d/90.conf vars_files: - /testdir/ansible/nginx_vars.yml