Skip to content

如何在 Ansible Playbook 中使用變量

Ansible 支持使用變量來更好地自定義任務和劇本的執行。這樣,就可以將同一劇本用於不同的目標和環境。

變量可以來自不同的來源,例如劇本文件本身或劇本中導入的外部變量文件。當使用定義同名變量的多個變量源時,將應用特殊優先級規則。

為了了解變量在實踐中是如何工作的,我們將創建一個新的測試 playbook,它將打印兩個變量的值,usernamehome_dir。在你的 ansible-practice 目錄中創建一個名為 playbook-02.yml 的新文件:

playbook-02.yml
---
- hosts: all
  vars:
    - username: vagrant
    - home: /home/vagrant   
  tasks:
    - name: print variables
      debug:
        msg: "Username: {{ username }}, Home dir: {{ home }}"

playbook 的 vars 部分定義了將在該 play 範圍內要注入的變量列表。所有任務以及可能包含在 playbook 中的任何文件或模板都可以訪問這些變量。

要在您的清單文件中的服務器上嘗試此 playbook,請使用您之前在運行我們的第一個示例時使用的相同連接參數運行 ansible-playbook。同樣,我們將使用一個名為 inventory 的清單文件連接到遠程服務器:

ansible-playbook -i inventory playbook-02.yml

結果:

PLAY [all] ***********************************************************************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************************************************************
ok: [demo-vm]

TASK [print variables] ***********************************************************************************************************************************************************************
ok: [demo-vm] => {
    "msg": "Username: vagrant, Home dir: /home/vagrant"
}

PLAY RECAP ***********************************************************************************************************************************************************************************
demo-vm                    : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

打印變量任務將使用調試模塊打印我們在劇本的 vars 區塊中定義的兩個變量的值。