ansible中定義變量的若干方法


Ansible支持十幾種定義變量的方式

根據優先級排序的定義方式:

  1. Inventory變量
  2. Host Facts變量
  3. Playbook變量
  4. Playbook提示變量
  5. 變量文件
  6. 命令行變量

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這個變量

  1. #注意事項:
  2. #在ansible劇本中當調用變量時,開始位置就調用變量,就需要在{{}}外面加雙引號
  3. #如果是在后面或者中間位置調用變量{{}}外面可以不加雙引號

2.Host Facts變量

  1. vim ~/ansible/facts_var.yml
  2. ---
  3. - hosts: test
  4.   tasks:
  5.       - name: create user.
  6.         user:
  7.           name: "{{ansible_hostname}}"
  8. #定義劇本,遠程所有被管理主機,調用user模塊,創建用戶
  9. #需要創建的用戶名ansible_hostname是一個ansible_facts變量
  10. #驗證: 到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參數定義變量

 

5.單獨定義個變量文件,在playbook中用vars_files調用該文件。

  [root@control ansible]# vim ~/ansible/file_var.yml
---
- hosts: test

  vars_files: variables.yml #當變量比較多時,專門定義一個文件用來存變量

  tasks:

    - name: create user.

      user:

        name: "{{ iname }}"

        password: "{{ ipass | password_hash('sha512') }}"

#調用user模塊創建用戶

#用戶名是變量文件variables.yml中定義的變量iname,密碼也是變量文件中定義的變量

[root@control ansible]# vim ~/ansible/variables.yml

---

iname: cloud

ipass: '123456'

 
6.命令行執行ansible-playbook命令時執行-e參數定義變量
[root@control ansible]# vim ~/ansible/command_var.yml
---
- hosts: test

  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"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM