Ansible支持十幾種定義變量的方式
根據優先級排序的定義方式:
- Inventory變量
- Host Facts變量
- Playbook變量
- Playbook提示變量
- 變量文件
- 命令行變量
1.Inventory變量(在主機清單配置文件中定義變量)。
# vim ~/ansible/inventory
[test]
node1 iname="nb"
[proxy]
node2
[webserver]
node[3:4]
[webserver:vars]
iname="dachui"
#備注,在node1主機后面給該主機添加變量iname,值為nb.
#給webserver組定義變量,vars是關鍵詞不可以改變,webserver是上面定義的組
#給這個組定義變量iname="dachui"
下面編寫劇本調用剛才的變量:(在劇本中需要調用變量是要使用{{}})
vim inventory_var.yml
---
- hosts: test #定義需要遠程管理的主機是誰
tasks: #劇目要完成哪些任務
- name: create a user with var #劇目中的第一個任務描述信息
user: #調用user模塊創建用戶
name: "{{ iname }}" #需要創建的用戶名是iname這個變量
- #注意事項:
- #在ansible劇本中當調用變量時,開始位置就調用變量,就需要在{{}}外面加雙引號
- #如果是在后面或者中間位置調用變量{{}}外面可以不加雙引號
2.Host Facts變量
- vim ~/ansible/facts_var.yml
- ---
- - hosts: test
- tasks:
- - name: create user.
- user:
- name: "{{ansible_hostname}}"
- #定義劇本,遠程所有被管理主機,調用user模塊,創建用戶
- #需要創建的用戶名ansible_hostname是一個ansible_facts變量
- #驗證: 到node1主機查看是否有一個與主機名同名的用戶
3)Playbook變量(使用vars關鍵詞可以在playbook內定義變量)。
# vim ~/ansible/playbook_var.yml
---
- hosts: test
vars: #vars是關鍵詞,用來定義變量用的
iname: heal #具體變量名是iname,值是heal
ipass: '123456' #再定義一個變量名是ipass,值是123456
#注意密碼必須是字符串,需要引號
tasks: #tasks定義需要執行的任務
- name: Use variables create user. #給任務寫個描述信息
user: #調用user模塊創建用戶
name: "{{ iname }}" #用戶名的是前面定義的變量
password: "{{ ipass | password_hash('sha512') }}"
#密碼是前面定義好的ipass,管道給password_hash把密碼加密.
4)Playbook提示變量(根據提示輸入變量的值)。
# vim ~/ansible/prompt_var.yml
---
- hosts: test
vars_prompt: #vars_prompt是關鍵詞,定義提示變量
- name: iname #通過name定義變量名為iname
prompt: "請輸入用戶名" #執行劇本時提示信息
private: no #是否是隱私數據,no代表不是(屏幕可以顯示)
- name: ipasswd #通過name再定義變量,變量名為ipasswd
prompt: "請輸入密碼" #執行劇本時提示信息
private: yes #是否是隱私數據,yes代表是(隱私數據屏幕不顯示)
tasks: #定義劇本需要執行的任務
- name: Create a user. #定義第一個任務的描述信息
user: #調用user模塊創建用戶,設置用戶密碼
name: "{{ iname }}" #用戶名是前面創建的變量iname
password: "{{ ipasswd | password_hash('sha512') }}"
#密碼是前面定義的變量ipasswd,密碼管道給password_hash加密.
執行ansible-playbook命令時使用-e參數定義變量
tasks:
- name: create user
user:
name: "{{ iname }}"
password: "{{ ipass | password_hash('sha512') }}"
[root@control ansible]# ansible-playbook command_var.yml -e iname="beth" -e ipass="123456"