1. 程式人生 > >自動化運維系列之Ansible的YAML、基礎元素介紹

自動化運維系列之Ansible的YAML、基礎元素介紹

ocs 模型 ntp python 執行 缺省 cfg lin ldr

自動化運維系列之Ansible的YAML、基礎元素介紹

YAML簡介

YAML是一種用來表達資料序列的格式。YAML是YAML Ain‘t Markup Lanaguage的縮寫,即YAML不是XML。

  • 特點

1、具有很好的可讀性,易於實現;

2、表達能力強,擴展性好;

3、和腳本語言的交互性好;

4、有一個一致的信息模型;

5、可以基於流來處理。

YAML語法

YAML的語法和其他語言類似,也可以表達散列表、標量等數據結構。

YAML結構通過空格來展示;序列裏的項用“-”來代表;Map裏的鍵值對用“:”來分割。YAML文件擴展名通常為:yaml,如:example.yaml。

  • 基本語法規則:

1.大小寫敏感

2.使用縮進表示層級關系

3.縮進時不允許使用Tab鍵,只允許使用空格

4.縮進的空格數目不重要,只要相同層級的元素左側對齊即可

示例:

name:zhangsan
age:20
name:lisi
age:22
people:
-name:zhangsan
      age:20
      -name:lisi
      age:22

常用的數據類型

YAML支持的數據結構:

1.對象:鍵值對的集合,又稱為映射(mapping)/ 哈希(hashes) / 字典(dictionary)
 例如:name:Example Developer
        鍵     值

2.數組:一組按次序排列的值,又稱為序列(sequence) / 列表(list)
 例如:
 -Apple
 -Orange

3.純量:單個的、不可再分的值
 例如:
 number:12.30
 sure:true

Ansible基礎元素介紹

Ansible基本元素主要包括:Inventory(主機清單)、變量、條件測試

其中細分為:

Inventory(主機清單):①、主機變量 ②、組變量 ③、組嵌套 ④、Inventory參數

變量:①、通過命令行傳遞變量 ②、通過roles傳遞變量

條件測試:when語句和叠代

Ansible基礎元素詳解

  • Inventory(主機清單)

Ansible為了更加便捷的管理主機,在主機清單中將被管理主機進行分組命名,默認的主機清單為/etc/ansible/hosts文件。

Inventory文件中以中括號中的字符標識為組名,將主機分組管理,也可以將同一主機同時劃分到不同的組中,如:

[webserver]
172.16.10.147

[mysql]
172.16.10.133

①、主機變量

可以在定義時,添加主機變量,以便在後續的Playbook中使用,如:

[webserver]
www1.magedu.com http_port=80 maxRequestsChild=808

②、組變量

組變量是指給指定主機設置可以在Playbook中直接使用的變量,如:

[webserver]
ntp_server=ntp.example.org
nfs_server=nfs.example.org

③、組嵌套

[tomcat]
http.example.org

[nginx]
nginx.example.org

[webserver:children]
tomcat
nginx

④、Inventory參數

參數 含義
ansible_ssh_host 將要連接的遠程主機名.與你想要設定的主機的別名不同的話,可通過此變量設置.
ansible_ssh_port ssh 端口號.如果不是默認的端口號,通過此變量設置.
ansible_ssh_user 默認的 ssh 用戶名
ansible_ssh_pass ssh 密碼(這種方式並不安全,我們強烈建議使用 --ask-pass 或 SSH 密鑰)
ansible_ssh_private_key_file ssh 使用的私鑰文件.適用於有多個密鑰,而你不想使用 SSH 代理的情況.
ansible_ssh_common_args 此設置附加到sftp,scp和ssh的缺省命令行
ansible_sftp_extra_args 此設置附加到默認sftp命令行。
ansible_scp_extra_args 此設置附加到默認scp命令行。
ansible_ssh_extra_args 此設置附加到默認ssh命令行。
ansible_ssh_pipelining 確定是否使用SSH管道。 這可以覆蓋ansible.cfg中得設置。
ansible_shell_type 目標系統的shell類型.默認情況下,命令的執行使用 ‘sh‘ 語法,可設置為 ‘csh‘ 或 ‘fish‘.
ansible_python_interpreter 目標主機的 python 路徑.適用於的情況: 系統中有多個 Python, 或者命令路徑不是"/usr/bin/python",比如 *BSD, 或者 /usr/bin/python
ansible_*_interpreter 這裏的"*"可以是ruby 或perl 或其他語言的解釋器,作用和 ansible_python_interpreter 類似
ansible_shell_executable 這將設置ansible控制器將在目標機器上使用的shell,覆蓋ansible.cfg中的配置,默認為/bin/sh。
  • 變量

在ansible中變量名僅能由字母、數字和下劃線組成,並且只能以字母開頭。

①、通過命令行傳遞變量

ansible-playbook abc.yml -extra-vars "hosts-www user-mageedu"

②、通過roles傳遞變量

-hosts:webservers
roles:
-common
-{role:foo_app_instance,dir:‘/web/htdocs/a.com‘,port:8080}

自動化運維系列之Ansible的YAML、基礎元素介紹