注冊變量
ansible的模塊在運行之后,其實都會返回一些”返回值”,只是默認情況下,這些”返回值”并不會顯示而已,我們可以把這些返回值寫入到某個變量中,這樣我們就能夠通過引用對應的變量從而獲取到這些返回值了,這種將模塊的返回值寫入到變量中的方法被稱為”注冊變量”。
提示用戶輸入信息并寫入變量
在運行某些腳本時,有時候腳本會提示用戶輸入一些信息,腳本需要根據用戶輸入的信息決定下一步的動作,這種”交互”有時候是必須的,那么,在playbook中該怎樣實現這種交互呢?我們可以這樣做,提示用戶輸入信息,然后將用戶輸入的信息存入到指定的變量中,當我們需要使用這些”輸入的信息”時,只要引用對應的變量即可
使用”vars_prompt”關鍵字創建了兩個變量,在定義” vars_prompt”中的變量時,使用private關鍵字,將變量的private屬性設置為no即可, “private: no”表示變量值為非私有的,可見的,默認情況下 private值為yes,表示不可見。我們還能為提示信息設置默認值,即如果用戶不輸入任何信息,則將默認值賦予變量
[root@server4 ~]# vim bl_test4.yml
[root@server4 ~]# cat bl_test4.yml
---
- hosts: testBremote_user: rootvars_prompt:- name: "solution"prompt: "Choose the solution you want \nA: solutionA\nB: solutionB\nC: solutionC\n"private: nodefault: Atasks:- name: output varsdebug:msg: The final solution is {{solution}}.
我們使用了default關鍵字設置了”solution”變量的默認值,如果用戶沒有輸入任何值(直接回車),則將”solution”變量的值設置為A,如果用戶輸入了值,則”solution”變量值為用戶輸入的值
encrypt關鍵字表示對用戶輸入的信息進行哈希,encrypt: “sha512_crypt”表示使用sha512算法對用戶輸入的信息進行哈希,當使用”encrypt”關鍵字對字符串進行哈希時,ansible需要依賴passlib庫完成哈希操作,如果未安裝passlib庫(一個用于哈希明文密碼的python庫),執行playbook時會報錯。
除了能夠使用”encrypt”關鍵字對字符串進行哈希加密,還能夠使用”confirm”關鍵字實現類似確認密碼的功能,我們在為用戶設置密碼時,通常需要輸入兩次完全相同的密碼,才能夠設置成功,通過”confirm”關鍵字就能實現類似的效果
通過命令行傳入變量
在調用playbook時使用?–extra-vars
選項可以傳遞對應的變量與變量值,?–extra-vars
是長選項,對應的短選項是-e
,我們也可以一次性傳入多個變量,變量之間用空格隔開。在playbook中定義好變量,然后在執行playbook時,再次傳入相同名稱的變量,最終還是以傳入的變量值為準。命令行傳入的變量的優先級要高于playbook中的變量,傳入相同名稱的變量,除了使用”key=value”的方式傳遞變量,ansible還支持通過json的格式傳入變量。
使用”@”符號加上變量文件的路徑,即可在命令行中傳入對應的變量文件,變量文件中的所有變量都可以在playbook中引用
?