變量的命名
和大多數編程語言類似,ansible的變量允許使用字母數字下劃線來取,但是變量名始終以字母開頭。
yaml語法可以定義一個字典:
foo:
field1: 1
field2: 2
調用可以使用括號和點:
foo['field1']
foo.field1
點有時候會和python的某些屬性調用衝突,所以儘量使用括號法。
變量的定義
- 變量可以在inventory中定義
[atlanta]
host1 http_port=80 maxRequestsPerChild=808
host2 http_port=303 maxRequestsPerChild=909
- 變量可以在playbook中定義
- hosts: webservers
vars:
http_port: 80
這將很利於閱讀playbook
- 變量可以在roles和incloud的結構中定義
在主目錄中建立group_vars目錄,在其中寫入yaml格式定義的變量。
使用變量
My amp goes to {{ max_amp_value }}
這是簡單的例子,雙大括號內部就是變量名。
在playbook中,同樣的使用:template: src=foo.cfg.j2 dest={{ remote_install_path }}/foo.cfg
注意
在yaml語法中,如果你需要引用變量作爲一行的開頭,你要加上雙引號,否則不能調用變量而是創建字典。
這是錯的:
- hosts: app_servers
vars:
app_path: {{ base_path }}/22
這是對的:
- hosts: app_servers
vars:
app_path: "{{ base_path }}/22"
從系統獲取變量:facts
有一種變量不是手動定義的,而是從系統獲取的,facts就是這種變量的集合。
要獲得一臺主機的facts,使用這個命令:ansible hosts -m setup
這將會返回很多的內容的,其實就是facts變量的組成的字典。
例如:"ansible_distribution": "CentOS"
這一項{{ansible_distribution}}
的值就是“CentOS”。