Ansible2:主机清单
简介
在使用Ansible来批量管理主机的时候,通常我们需要先定义要管理哪些主机或者主机组,而这个用于管理主机与主机组的文件就叫做Inventory,也叫主机清单。该文件默认位于/etc/ansible/hosts。当然我们也可以通过修改ansible配置文件的hostfile配置项来修改默认inventory的位置。
定义主机和组
对于/etc/ansible/hosts最简单的定义格式像下面:
1. 简单的主机和组
# 中括号中的名字代表组名,可以根据自己的需求将庞大的主机分成具有标识的组,如上面分了两个组webservers和dbservers组;
# 主机(hosts)部分可以使用域名、主机名、IP地址表示;当然使用前两者时,也需要主机能反解析到相应的IP地址,一般此类配置中多使用IP地址;
mail.yanruogu.com
[webservers]
web1.yanruogu.com
web2.yanruogu.com
[dbservers]
db1.yanruogu.com
db2.yanruogu.com
2. 指定主机范围
# 下面指定了从web01到web50,webservers组共计50台主机;databases组有db-a到db-f共6台主机
[webservers]
www[01:50].yanruogu.com
[databases]
db-[a:f].yanruogu.com
3. 定义主机组嵌套
一个主机组可以包含若干个子主机组:
# 如下示例中,production组包含两个子组,分别为webservers和dbservers,webservers和dbservers组分别包含若干主机
[webservers]
web1.lab.example.com
web2.lab.example.com
[dbservers]
db1.lab.example.com
db2.lab.example.com
[production:children]
webservers
dbservers
选择主机与组
在前面定义Inventory的时候,我们会把所有被管理主机通过主机组的方式定义到Inventory当中,但是当我们实际使用的时候,可能只需要对某一主机或主机组进行操作,这个时候就需要通过匹配的方式指定某一特定主机或主机组。
在此之间,我们先定义一个主机清单示例:
srv1.example.com
srv2.example.com
s1.lab.example.com
s2.lab.example.com
[web]
jupiter.lab.example.com
saturn.example.com
[db]
db1.example.com
db2.example.com
db3.example.com
[lb]
lb1.lab.example.com
lb2.lab.example.com
[boston]
db1.example.com
jupiter.lab.example.com
lb2.lab.example.com
[london]
db2.example.com
db3.example.com
file1.lab.example.com
lb1.lab.example.com
[dev]
web1.lab.example.com
db3.example.com
[stage]
file2.example.com
db2.example.com
[prod]
lb2.lab.example.com
db1.example.com
jupiter.lab.example.com
[function:children]
web
db
lb
city
[city:children]
boston
london
environments
[environments:children]
dev
stage
prod
new
[new]
172.25.252.23
172.25.252.44
1. 匹配所有主机
可以通过all
或者*
来指定匹配所有主机,通过如下指令查看all
匹配到的主机:
# ansible all --list-hosts
hosts (16):
srv1.example.com
srv2.example.com
s1.lab.example.com
s2.lab.example.com
jupiter.lab.example.com
saturn.example.com
db1.example.com
db2.example.com
db3.example.com
lb1.lab.example.com
lb2.lab.example.com
file1.lab.example.com
web1.lab.example.com
file2.example.com
172.25.252.23
172.25.252.44
172.25.252.32
2. 匹配指定的主机或主机组
- 匹配单个组
# ansible prod --list-hosts
hosts (3):
lb2.lab.example.com
db1.example.com
jupiter.lab.example.com
- 匹配单个主机
# ansible db2.example.com --list-hosts
hosts (1):
db2.example.com
- 匹配多个主机
# ansible 'lb1.lab.example.com,s1.lab.example.com,db1.example.com' --list-hosts
hosts (3):
lb1.lab.example.com
s1.lab.example.com
db1.example.com
- 匹配多个组
# ansible 'london,boston' --list-hosts
hosts (7):
db2.example.com
db3.example.com
file1.lab.example.com
lb1.lab.example.com
db1.example.com
jupiter.lab.example.com
lb2.lab.example.com
- 匹配不属于任何组的主机
# ansible ungrouped --list-hosts
hosts (4):
srv1.example.com
srv2.example.com
s1.lab.example.com
s2.lab.example.com
3. 通配符匹配
- 匹配'*.example.com':
# ansible '*.example.com' --list-hosts
hosts (14):
srv1.example.com
srv2.example.com
s1.lab.example.com
s2.lab.example.com
jupiter.lab.example.com
saturn.example.com
db1.example.com
db2.example.com
db3.example.com
lb1.lab.example.com
lb2.lab.example.com
file1.lab.example.com
web1.lab.example.com
file2.example.com
- 匹配
172.25.*
的主机:
# ansible '172.25.*' --list-hosts
hosts (3):
172.25.252.23
172.25.252.44
172.25.252.32
- 匹配以
s
开头的主机及主机组:
# ansible 's*' --list-hosts
hosts (7):
file2.example.com
db2.example.com
srv1.example.com
srv2.example.com
s1.lab.example.com
s2.lab.example.com
saturn.example.com
4. 通配符组合匹配
- 匹配包含
*.example.com
但不包含*.lab.example.com
的主机:
# ansible '*.example.com,!*.lab.example.com' --list-hosts
hosts (7):
srv1.example.com
srv2.example.com
saturn.example.com
db1.example.com
db2.example.com
db3.example.com
file2.example.com
- 匹配包含prod以及172开头、包含lab关键字的主机或组
# ansible 'prod,172*,*lab*' --list-hosts
hosts (11):
lb2.lab.example.com
db1.example.com
jupiter.lab.example.com
172.25.252.23
172.25.252.44
172.25.252.32
s1.lab.example.com
s2.lab.example.com
lb1.lab.example.com
file1.lab.example.com
web1.lab.example.com
- 匹配属于db组同时还属于london组的主机:
# ansible 'db,&london' --list-hosts
hosts (2):
db2.example.com
db3.example.com
- 匹配在london组或者boston组,还必须在prod组中且必须不在lb组中的主机:
# ansible 'boston,london,&prod,!lb' --list-hosts
hosts (2):
db1.example.com
jupiter.lab.example.com
4. 正则表达式匹配
在开头的地方使用”~”,用来表示这是一个正则表达式:
# ansible '~(s|db).*example\.com' --list-hosts
hosts (8):
srv1.example.com
srv2.example.com
s1.lab.example.com
s2.lab.example.com
saturn.example.com
db1.example.com
db2.example.com
db3.example.com
5. 通过--limit
明确指定主机或组
- 通过
--limit
在选定的组中明确指定主机:
# ansible ungrouped --limit srv1.example.com --list-hosts
hosts (1):
srv1.example.com
- 通过
--limit
参数,还可以指定一个文件,该文件中定义明确指定的主机的列表,定义一个retry_hosts.txt如下:
srv1.example.com
再次执行ansible指令如下:
# ansible ungrouped --limit @retry_hosts.txt --list-hosts
hosts (1):
srv1.example.com
后续学习中,在ansible-playbook命令行中也可以通过复杂的主机表达式来选定主机,不过需要使用-e参数来指定:ansible-palybook -e webservers:!{{excluded}}:&{{required}} 。不过这个用法并不常用。
Ansible2:主机清单的更多相关文章
- Ansible2:主机清单【转】
Ansible 通过读取默认的主机清单配置/etc/ansible/hosts,可以同时连接到多个远程主机上执行任务, 默认路径可以通过修改 ansible.cfg 的 hostfile 参数指定路径 ...
- ansible-3 主机清单hosts的设置
主机清单的设置参考:http://www.ansible.com.cn/docs/intro_inventory.html [ceshi]192.168.220.98log ansible_ssh_h ...
- 【Ansible 文档】【译文】主机清单文件
Inventory 主机清单文件 Ansible 可以对你的基础设施中多个主机系统同时进行操作.通过选择在Ansible的inventory列出的一部分主机来实现.inventory默认保存在/etc ...
- Ansible 小手册系列 五(inventory 主机清单)
Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置. 默认的文件路径为 /etc/ansible/hosts 主机清单示例 mail.example. ...
- (2)ansible主机清单文件inventory
1)inventory作用 作用:通常用于定义要管理主机的认证信息,例如ssh登录用户名,密码等相关信息 缺省文件:/etc/ansible/hosts 2)定义主机组方式 #vim /etc/ans ...
- ansible 主机清单 /etc/ansible/hosts
主机清单 [webservers] ansible01 ansible02 ansible03 ansible04 [root@ftp:/root] > ansible webservers - ...
- 细说Ansible主机清单inventory
Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. Ansible系列博文直达链接:Ansible入门系列 前言 关于Ansible是 ...
- Ansible安装部署和常用命令,及其主机清单inventory(二)
1.ansible的安装方式 1.1使用yum源安装 yum install ansible -y 1.2使用rpm包安装 https://dl.fedoraproject.org/pub/epel/ ...
- Ansible-免密登录与主机清单Inventory
Ansible的指定用户与密码登录.免密登录.指定ssh端口以及主机清单Inventory配置 在实际使用中并不需要对ansible配置进行修改,或者说只有需要的时候才修改ansible配置. 添加用 ...
随机推荐
- webpack入门指南-step04
一.建立项目 建一个文件夹,然后新建一个package.json的文件在项目根目录下 如果你使用git管理你的这个项目的话,建议你新建一个.gitignore文件,不要让git提交一些node依赖的模 ...
- Daily Srum 10.21
到目前为止,我们组处在学习阶段,很多知识点都还不太清楚,所以现在我们还在看相关书籍和博客,任务. 而我们此间主要是在阅读一些材料: 陈谋一直在看学长的代码,其中C#的很多方式我都不太明白(尽管和Jav ...
- 2-Fifth Scrum Meeting20151205
任务安排 闫昊: 今日完成:设计本地数据库. 明日任务:请假.(最近代码写得多……很累……) 唐彬: 今日完成:ios客户端代码的了解. 明日任务:ios客户端代码的深度学习. 史烨轩: 今日完成: ...
- 20162314 《Program Design & Data Structures》Learning Summary Of The Fifth Week
20162314 2017-2018-1 <Program Design & Data Structures>Learning Summary Of The Fifth Week ...
- connect by prior id= pid start with id='1' 树结构查询
基础表创建: with temp as ( ' id, '' pid from dual union all ' pid from dual union all ' pid from dual uni ...
- 冲刺One之站立会议7 /2015-5-20
2015-5-20 在登陆成功之后要实现的是聊天界面的交互过程,不同的IP进行信息和数据的传递,这方面我们上学期Java实验里面有过相关的内容,我们把它拿过来改了一下格式,试着看能不能成功,目前还没实 ...
- diliucizuoye
NABCD N(Need 需求) 互联网的高速发展,造就了二十一世纪这个追求高品质.高体验的信息时代,随其发展改变的是信息记录与分享方式,从传统的面对面交流.手机通话.写日记本,到现如今的社交平台.信 ...
- Unity删除或更换天空盒
Unity版本:5.6.2 点击菜单栏Window-->Lighting-->Settings 在弹出的窗口中,设置Skybox Material选项,从原来的默认天空盒更换成别的,或者选 ...
- TCP系列52—拥塞控制—15、前向重传与RACK重传拥塞控制处理对比
一.概述 这里主要简单分析一个丢包重传并恢复的场景,通过不同的设置让这个相同的场景分别触发RACK重传和前向重传,通过对比说明以下问题: Forward Retransmit可以产生只有重传标记的数据 ...
- 简单复利计算java板
一.要求: 1.客户说:帮我开发一个复利计算软件. 2如果按照单利计算,本息又是多少呢? 3.假如30年之后要筹措到300万元的养老金,平均的年回报率是3%,那么,现在必须投入的本金是多少呢? 4.利 ...