YAML是一種用來表達資料序列的格式。YAML是YAML Ain't Markup Lanaguage的縮寫,即YAML不是XML。python
一、具備很好的可讀性,易於實現;mysql
二、表達能力強,擴展性好;nginx
三、和腳本語言的交互性好;web
四、有一個一致的信息模型;sql
五、能夠基於流來處理。shell
YAML的語法和其餘語言相似,也能夠表達散列表、標量等數據結構。數組
YAML結構經過空格來展現;序列裏的項用「-」來表明;Map裏的鍵值對用「:」來分割。YAML文件擴展名一般爲:yaml,如:example.yaml。tomcat
1.大小寫敏感安全
2.使用縮進表示層級關係ruby
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基本元素主要包括:Inventory(主機清單)、變量、條件測試
其中細分爲:
Inventory(主機清單):①、主機變量 ②、組變量 ③、組嵌套 ④、Inventory參數
變量:①、經過命令行傳遞變量 ②、經過roles傳遞變量
條件測試:when語句和迭代
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}