简介

在使用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. 匹配指定的主机或主机组

  1. 匹配单个组
# ansible prod --list-hosts
hosts (3):
lb2.lab.example.com
db1.example.com
jupiter.lab.example.com
  1. 匹配单个主机
# ansible db2.example.com --list-hosts
hosts (1):
db2.example.com
  1. 匹配多个主机
# 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
  1. 匹配多个组
# 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
  1. 匹配不属于任何组的主机
# ansible ungrouped --list-hosts
hosts (4):
srv1.example.com
srv2.example.com
s1.lab.example.com
s2.lab.example.com

3. 通配符匹配

  1. 匹配'*.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
  1. 匹配172.25.*的主机:
# ansible '172.25.*' --list-hosts
hosts (3):
172.25.252.23
172.25.252.44
172.25.252.32
  1. 匹配以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. 通配符组合匹配

  1. 匹配包含*.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
  1. 匹配包含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
  1. 匹配属于db组同时还属于london组的主机:
# ansible 'db,&london' --list-hosts
hosts (2):
db2.example.com
db3.example.com
  1. 匹配在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明确指定主机或组

  1. 通过--limit在选定的组中明确指定主机:
# ansible ungrouped  --limit srv1.example.com --list-hosts
hosts (1):
srv1.example.com
  1. 通过--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:主机清单的更多相关文章

  1. Ansible2:主机清单【转】

    Ansible 通过读取默认的主机清单配置/etc/ansible/hosts,可以同时连接到多个远程主机上执行任务, 默认路径可以通过修改 ansible.cfg 的 hostfile 参数指定路径 ...

  2. ansible-3 主机清单hosts的设置

    主机清单的设置参考:http://www.ansible.com.cn/docs/intro_inventory.html [ceshi]192.168.220.98log ansible_ssh_h ...

  3. 【Ansible 文档】【译文】主机清单文件

    Inventory 主机清单文件 Ansible 可以对你的基础设施中多个主机系统同时进行操作.通过选择在Ansible的inventory列出的一部分主机来实现.inventory默认保存在/etc ...

  4. Ansible 小手册系列 五(inventory 主机清单)

    Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置. 默认的文件路径为 /etc/ansible/hosts 主机清单示例 mail.example. ...

  5. (2)ansible主机清单文件inventory

    1)inventory作用 作用:通常用于定义要管理主机的认证信息,例如ssh登录用户名,密码等相关信息 缺省文件:/etc/ansible/hosts 2)定义主机组方式 #vim /etc/ans ...

  6. ansible 主机清单 /etc/ansible/hosts

    主机清单 [webservers] ansible01 ansible02 ansible03 ansible04 [root@ftp:/root] > ansible webservers - ...

  7. 细说Ansible主机清单inventory

    Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. Ansible系列博文直达链接:Ansible入门系列 前言 关于Ansible是 ...

  8. Ansible安装部署和常用命令,及其主机清单inventory(二)

    1.ansible的安装方式 1.1使用yum源安装 yum install ansible -y 1.2使用rpm包安装 https://dl.fedoraproject.org/pub/epel/ ...

  9. Ansible-免密登录与主机清单Inventory

    Ansible的指定用户与密码登录.免密登录.指定ssh端口以及主机清单Inventory配置 在实际使用中并不需要对ansible配置进行修改,或者说只有需要的时候才修改ansible配置. 添加用 ...

随机推荐

  1. 团队项目开题Scrum Meeting报告

    团队项目开题Scrum Meeting报告 在10月30号星期四的晚上我们团队找到了给我们代码的王翊学长,由学长给我们讲解了他编写IOS平台上北航MOOC系统的架构和思路, 因为我们团队没有苹果公司的 ...

  2. Bing词典vs有道词典比对测试报告——功能篇之辅助功能,差异化功能及软件的效能

    1.辅助功能: 和有道相比,必应的词典加入了换肤功能,用户可以选择喜欢的颜色,而且必应的皮肤也比较多,这一点设计给必应增色不少. 相对而言,有道则加入了调节客户端字体的大小,如下,也比较人性化 2.差 ...

  3. Daily Scrumming* 2015.10.25(Day 6)

    一.总体情况总结 1.UI今日总结:初步设计了社团详情界面 2.后端今日总结:讨论并设计数据库,表内容,属性和相互联系等,并在rails的activeRecord和activeModel中实现,同时设 ...

  4. iOS开发学习-cocoapods的配置安装

    安装coacoapods步骤: 在终端输入如下命令,升级ruby版本: sudo gem update —system 出现这个,标志着安装成功. 完成之后,再输入如下命令: gem sources ...

  5. vs2013+python+ cocos2d-x-3.3rc0环境搭建

    1.vs2013安装一路next,安装即可,时间1~2个小时 2.解压cocos2d-x-3.3rc0   build文件夹里会有名为  cocos2d-win32.vc2012的sln文件  打开  ...

  6. 《Spring2之站立会议7》

    <Spring2之站立会议7> 昨天,查相关资料解决debug:: 今天,解决了debug: 遇到问题,一些问题是得到解决了,但是一些还未被解决.

  7. c#学习路线及目录导航

    一 很久前的想法 转眼间,2018年已经过了四分之一,从我进入学校选择计算机专业到现在工作,已经过去了4年之久了.这一路走来经历了很多的曲折,对软件开发这个职业有了许多新的认识,我主要是从事NET领域 ...

  8. 初识nginx——配置解析篇

    一.nginx的介绍 nginx是由俄罗斯人开发的一款高性能的http和反向代理服务器,也可以用来作为邮件代理.相比较于其他的服务器,具有占用内存少,稳定性高等优势 二.nginx的配置 nginx的 ...

  9. MongoDB中的数据导出为excel CSV 文件

    1.打开命令行,进入我们所安装的mongodb路径下的bin文件夹 2.我们采用bin文件夹下的mongoexport方法进行导出, mongoexport -d myDB -c user -f _i ...

  10. Unity3d学习日记(六)

      今天在研究怎么在unity中将image上的图片保存到本地,主要参考下面两个链接:Unity Texture2D缩放.UNITY存储图片到本地   结合上述两个链接,我写了如下代码来将缩放后或者改 ...