ansible之variable

變量的命名

和大多數編程語言類似,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”。

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