ansible變量管理和使用

一.ansible變量的作用

將playbook 中的某些值使用變量代替,從而簡化playbook 的編寫

二.管理變量

1.ansible 變量簡介

變量可能包含下面這些值:

  • 要創建的用戶
  • 要安裝的軟件包
  • 要重啓的服務
  • 要刪除的文件
  • 要從互聯網檢索的文檔

2.命名變量

變量名稱必須以字母開頭,並且只能含有字母、數字和下劃線
錯誤正確

3.定義變量

三個範圍級別:

  • 全局範圍:從命令行或ansible 配置設置的變量
  • playbook 範圍:在play 和相關結構中設置的變量
  • 主機範圍:由清單、事實收集或註冊的任務,在主機組和個別主機上設置的變量

注意:
如果多個級別上定義了相同名稱的變量,優先採用級別最高的變量,窄範圍優先於廣範圍

在playbook 中定義變量
1.常見方式:在playbook 開頭的vars 塊中:

- host: all
vars:
user: student
home: /home/student

2.在外部文件定義playbook 變量

- hosts: all
vars_files:
- vars/users.yml

在users.yml 文件中寫入

user: student
home: /home/student

4.在playbook 中使用變量

將變量名稱放在花括號內

vars:
user: westos
tasks:
- name: Create user {{ user }}
user:
name: "{{ user }}"

注意:
當變量用作開始一個值的第一元素時,必須使用引號

三.主機變量和組變量

1.直接應用於主機的清單變量分爲兩大類:

  • 主機變量:應用於特定主機
  • 組變量:應用於一個主機組或一組主機組中的所有主機

主機變量優先於組變量,但是playbook 中定義的變量比這兩者更高

2.定義主機變量和組變量:

方法一:使用目錄填充主機和組變量
定義主機和主機組變量的首選做法時與清單文件或目錄相同的工作目錄中,創建group_vars和host_vars 兩個目錄,這兩個目錄分別包含用於定義組變量和主機變量的文件
創建group_vars/servers 的YAML 文件,設置變量爲值:user: student
同樣需要在host_vars 目錄中創建名稱與主機匹配的文件來存放主機變量
所以一個項目目錄中包含:
ansible.cfg、group_vars、host_vars、inventory、playbook.yml

方法二(比較舊,不建議使用)
定義嵌套組user 變量:

[servers1]
node1.example.com
node2.example.com
[servers2]
node3.example.com
node4.example.com
[servers:children]
servers1
servers2
[servers:vars]
user=student

這種做法使的清單文件難以處理,在同一文件中混合提供主機和變量信息,語法也過時

3.從命令行覆蓋變量
清單變量可以被playbook 中設置的變量覆蓋
兩者又可通過命令行參數覆蓋

4.使用數組作爲變量

users:
wanggang:
first_name: gang
last_name: wang
home_dir: /home/wanggang
liming:
first_name: ming
last_name: li
home_dir: /home/liming

訪問:

users.wanggang.first_name
users.wanggang.home_dir
變量被定義爲python 字典,可以使用替代語法:
users['wanggang']['first_name']
users['liming']['home_dir']
#使用已註冊變量捕獲命令輸出
管理員可以使用register 語句捕獲命令輸出
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章