引用:http://www.ansible.com.cn/docs/intro_inventory.html
Ansible 可同時(shí)操作屬于一個(gè)組的多臺(tái)主機(jī),組和主機(jī)之間的關(guān)系通過(guò) inventory 文件配置, 默認(rèn)的文件為 /etc/ansible/hosts
一、主機(jī)與組配置
- 添加主機(jī)與組信息
[group1] # 組名(組名中不能出現(xiàn)空格)
10.230.20.103 # 主機(jī)IP
ecsitcodis3 # 也可以是主機(jī)名哦
- 修改主機(jī)ssh端口
10.230.20.103:8888 # 若該主機(jī)的ssh端口不是默認(rèn)的22,在IP后添加ssh端口,并用冒號(hào)隔開(kāi)
- 主機(jī)別名設(shè)置
AAA ansible_ssh_host=10.230.20.103 ansible_ssh_port=22
- 批量添加相似主機(jī)名的主機(jī)
ecsitcodis[1:3]
- 為主機(jī)指定連接類型與用戶名
localhost ansible_connection=local
host1 ansible_connection=ssh ansible_ssh_user=mpdehaan
- 定義變量
-為主機(jī)添加變量
[atlanta]
host1 http_port=80 maxRequestsPerChild=808
host2 http_port=303 maxRequestsPerChild=909
- 為組添加變量
[atlanta:vars]
ntp_server=ntp.atlanta.example.com
proxy=proxy.atlanta.example.com
- 把一個(gè)組作為另一個(gè)組的子成員
[atlanta]
host1
host2
[raleigh]
host2
host3
[southeast:children]
atlanta
raleigh
- 分文件定義 Host 和 Group 變量
在 inventory 主文件中保存所有的變量并不是最佳的方式.還可以保存在獨(dú)立的文件中,這些獨(dú)立文件與 inventory 文件保持關(guān)聯(lián). 不同于 inventory 文件(INI 格式),這些獨(dú)立文件的格式為 YAML.詳見(jiàn) YAML 語(yǔ)法 .
假設(shè) inventory 文件的路徑為:
/etc/ansible/hosts
假設(shè)有一個(gè)主機(jī)名為 ‘foosball’, 主機(jī)同時(shí)屬于兩個(gè)組,一個(gè)是 ‘raleigh’, 另一個(gè)是 ‘webservers’. 那么以下配置文件(YAML 格式)中的變量可以為 ‘foosball’ 主機(jī)所用.依次為 ‘raleigh’ 的組變量,’webservers’ 的組變量,’foosball’ 的主機(jī)變量:
/etc/ansible/group_vars/raleigh
/etc/ansible/group_vars/webservers
/etc/ansible/host_vars/foosball
舉例來(lái)說(shuō),假設(shè)你有一些主機(jī),屬于不同的數(shù)據(jù)中心,并依次進(jìn)行劃分.每一個(gè)數(shù)據(jù)中心使用一些不同的服務(wù)器.比如 ntp 服務(wù)器, database 服務(wù)器等等. 那么 ‘raleigh’ 這個(gè)組的組變量定義在文件 ‘/etc/ansible/group_vars/raleigh’ 之中,可能類似這樣:
ntp_server: acme.example.org
database_server: storage.example.org
這些定義變量的文件不是一定要存在,因?yàn)檫@是可選的特性.還有更進(jìn)一步的運(yùn)用,你可以為一個(gè)主機(jī),或一個(gè)組,創(chuàng)建一個(gè)目錄,目錄名就是主機(jī)名或組名.目錄中的可以創(chuàng)建多個(gè)文件, 文件中的變量都會(huì)被讀取為主機(jī)或組的變量.如下 ‘raleigh’ 組對(duì)應(yīng)于 /etc/ansible/group_vars/raleigh/ 目錄,其下有兩個(gè)文件 db_settings 和 cluster_settings, 其中分別設(shè)置不同的變量:
/etc/ansible/group_vars/raleigh/db_settings
/etc/ansible/group_vars/raleigh/cluster_settings
‘raleigh’ 組下的所有主機(jī),都可以使用 ‘raleigh’ 組的變量.當(dāng)變量變得太多時(shí),分文件定義變量更方便我們進(jìn)行管理和組織. 還有一個(gè)方式也可參考,詳見(jiàn) Ansible Vault 關(guān)于組變量的部分. 注意,分文件定義變量的方式只適用于 Ansible 1.4 及以上版本.
- Ansible 1.2 及以上的版本中,group_vars/ 和 host_vars/ 目錄可放在 inventory 目錄下,或是 playbook 目錄下. 如果兩個(gè)目錄下都存在,那么 playbook 目錄下的配置會(huì)覆蓋 inventory 目錄的配置.
- 把你的 inventory 文件 和 變量 放入 git repo 中,以便跟蹤他們的更新,這是一種非常推薦的方式.
- Inventory 參數(shù)
ansible_ssh_host
將要連接的遠(yuǎn)程主機(jī)名.與你想要設(shè)定的主機(jī)的別名不同的話,可通過(guò)此變量設(shè)置.
ansible_ssh_port ssh
端口號(hào).如果不是默認(rèn)的端口號(hào),通過(guò)此變量設(shè)置.
ansible_ssh_user
默認(rèn)的 ssh 用戶名
ansible_ssh_pass ssh
密碼(這種方式并不安全,我們強(qiáng)烈建議使用 --ask-pass 或 SSH 密鑰)
ansible_sudo_pass sudo
密碼(這種方式并不安全,我們強(qiáng)烈建議使用 --ask-sudo-pass)
ansible_sudo_exe
(new in version 1.8) sudo 命令路徑(適用于1.8及以上版本)
ansible_connection
與主機(jī)的連接類型.比如:local, ssh 或者 paramiko. Ansible 1.2 以前默認(rèn)使用 paramiko.1.2 以后默認(rèn)使用 'smart','smart' 方式會(huì)根據(jù)是否支持 ControlPersist, 來(lái)判斷'ssh' 方式是否可行.
ansible_ssh_private_key_file sh
使用的私鑰文件.適用于有多個(gè)密鑰,而你不想使用 SSH 代理的情況.
ansible_shell_type
目標(biāo)系統(tǒng)的shell類型.默認(rèn)情況下,命令的執(zhí)行使用 'sh' 語(yǔ)法,可設(shè)置為 'csh' 或 'fish'.
ansible_python_interpreter
目標(biāo)主機(jī)的 python 路徑.適用于的情況: 系統(tǒng)中有多個(gè) Python, 或者命令路徑不是"/usr/bin/python",比如 \*BSD, 或者 /usr/bin/python,不是 2.X 版本的 Python.我們不使用 "/usr/bin/env" 機(jī)制,因?yàn)檫@要求遠(yuǎn)程用戶的路徑設(shè)置正確,且要求 "python" 可執(zhí)行程序名不可為 python以外的名字(實(shí)際有可能名為python26).與 ansible_python_interpreter 的工作方式相同,可設(shè)定如 ruby 或 perl 的路徑....