Ansible - 變量使用


變量(variable)

  • Ansible的變量名僅能由字母、數字和下劃線組成,且只能以字母開頭。
  • Python關鍵字和playbook關鍵字都不能作爲有效的變量名。
  • Ansible的變量可以被定義在playbook、inventory、yaml格式文件、角色和命令行中,也可以將任務的輸出定義爲變量。

自定義變量

# 方式1:在Inventory中爲主機或組定義專用變量
[groupname]
192.168.56.1 variable_name=value
[groupname:vars]
variable_name=value
[all:vars]
ansible_ssh_port="2222"

# 方式2:在playbook中通過關鍵字vars或vars_files定義變量
vars:
  - var_name: value
  - var_name: value
vars_files:
  - ./external_vars.yml  # 變量文件內容遵循yml格式

# 方式3:在playbook中把任務的輸出通過關鍵字register定義爲變量,然後用於其他任務
tasks:
    - name: test
      shell: /usr/bin/foo
      register: foo_result

# 方式4:在playbook中使用變量,執行palybook時通過命令行傳遞變量,通過“-e”或“--extra-vars”參數傳遞的變量優先級更高
ansible-playbook test.yml --extra-vars "hosts=Test user=anliven"

# 方式5:指定主機角色時通過 roles 傳遞變量,並在角色內通過` var_name `調用
roles:
  - { role: ROLE_NAME, var: value, ...}

系統變量

# 遠程主機的系統信息統稱爲facts
# facts信息是JSON格式的數據結構,ansible_facts是最上層,可以使用 ansible_facts 變量查看所有內容
# 此外默認情況下使用 ansible_ 前綴可以將一些fact作爲頂級變量訪問
# 通過 setup 模塊可以查看指定主機的所有facts信息,通過使用filter參數來查看指定信息

ansible <host> -m setup  # 查看指定主機的facts信息
ansible ta -m setup | grep "xxx"  # 獲取主機所有facts然後結合grep命令過濾
ansible ta -m setup -a "filter=ansible_os_family"  # 通過filter參數來查看指定信息
ansible ta -m setup -a 'filter="*mem*"' --tree ./facts  # 通過filter參數查看指定信息並按主機名保存到facts目錄

引用變量

# 普通變量
通過 {{ var_name }} 方式引用

# 關鍵字register或系統fact變量
- 返回結果集通常是嵌套yaml或者json的數據結構
- 通過  {{ var_name.stdout }}  或 {{ ansible_facts["eth0"]["ipv4"]["address"] }} 的方式引用

變量優先級

# 優先級
1. 命令行中定義的變量(用-e或--extra-vars定義的變量)
2. 在Inventory中定義的連接變量(比如:ansible_ssh_user)
3. 普通變量(命令行轉換、play中的變量、included的變量、role中的變量等)
4. 在Inventory中定義的其他變量
5. Facts變量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章