简介

Inventory是ansible管理主机信息的配置文件,相当于我们系统的hosts文化的功能,默认存放在/etc/ansible/hosts。为了批量管理主机,便捷使用其中的主机分组,ansible通过Inventory来定义其主机和组,在使用时通过-i 或--inventoty-file指定读取,与ansible命令结合使用如下:

ansible  -i   /etc/ansible/hosts    webs   -m   ping

如果只有一个Inventory时可以不指定路径,默认读取/etc/ansible/hosts。

注意:

前面我们说过在后期的ansible使用的过程中,我们建议针对每个项目创建一个ansible执行目录,同时针对项目使用ansible.cfg配置文件和hosts管理文件;因此我们只需要在对应项目的ansible.cfg文件中指定相应的hosts即可。

Inventory定义规则

1.    定义主机和组

Inventory配置文件遵循INI文件风格,中括号中的字符串为组名。其支持将同一个主机同时归并到多个不同的组中。此外若目标主机使用了非默认的ssh端口,还可以在主机名称之后使用冒号加端口号来标明,以行为单位分隔配置。示例如下:

#  ‘#’开头表示该行为注释行,即当行不生效。(1)Inventory可以直接为ip
10.10.10.134(2)Inventory同样支持Hostname的方式,后面跟冒号加数字表示端口号,默认为22
client.xhz.com:2222(3)中括号内的内容表示一个分组的开始,紧随其后的主机均属于该组成员,空行后的主机也属于改组。如:
[webservers]
web1.xhz.com
web[10:20].xhz.com   #[10:20]表示10~20之间的数字(包括10和20),即web10.xhz.com,web11.xhz.com ....web20.xhz.com的所有主机。web2.xhz.com[dbservers]
db-a.xhz.com
db-[b:f].xhz.com  #[b:f]表示b~f之间的字母,包括b和f

2.    定义主机变量

在日常工作中,通常会遇到非标准化的需求配置,由于考虑到安全性问题,通常将企业内部的web服务器80端口修改为其他端口,而该功能可以直接通过修改Inventory配置来实现,在定义主机的时候为其添加主机变量,以便在playbook中使用。

[webserver]
web1.xhz.com  http_port=808  maxRequestPerChild=801  #定义http_port的端口为808,配置maxRequestPerChild为801

Ansible其实支持多种方式修改或自定义变量,Inventory是其中的一种方式,后面我们还会介绍其他方式定义变量。

3.    定义组变量

Ansible支持定义组变量,主要针对大量机器的变量定义需求,赋予指定组内所有主机在Playbook中可用的变量,等同于逐一给改组下的所有主机赋予同一变量,如:

[groupservers]
web1.xhz.com
web2.xhz.com[groupservers:vars]
ntp_server=ntp.xhz.com   ##定义groupservers组中所有主机ntp_server值为ntp.xhz.comnfs_server=nfs.xhz.com   ##定义groupservers组中所有主机nfs_server值为nfs.xhz.com

4.    定义组嵌套

Inventory中,组还可以包含其他的组(嵌套),并且可用向指定组中的主机指定变量,不过,这些变量只能在ansible-playbook中使用,按ansible  ad-hoc不支持,组与组间可用相互调用,并且可用向组中的主机指定变量。

[apache]
httpd1.xhz.com
http2.xhz.com[nginx]
nginx1.xhz.com
nginx2.xhz.com[webservers:children]
apache
nginx[webserver:vars]
ntp_server=ntp.xhz.com

5.    多重变量定义

变量除了可以在Inventory中一并定义,也可以独立于Inventory文件之外单独存储到YAML格式的配置文件中,这些文件通常以.yaml,.yml,.json为后缀或者无后缀,变量通常在如下4个位置进行检索(遵循从事到下的顺序)。

·    Inventory配置文件(默认为/etc/ansible/hosts,在ansible.cfg中可定义)

·    playbook中的var区域

·    Roles中的var目录下的文件

`    Roles同级目录下group_vars和hosts_vars目录下的文件

假如foosball主机属于raleigh和webservers组,那么变量在如下文件中设置均有效:

/etc/ansible/group_vars/raleigh

/etc/ansible/group_vars/webservers

/etc/ansible/hosts_vars/foosball

6.    Inventory其他参数列表

除了支持如上的功能外,Ansible基于ssh连接Inventory中指定的远程主机时,还内置了很多其他参数,用于指定其交互方式,如:

ansible_ssh_host:    指定连接主机
ansible_ssh_port:   指定ssh连接端口
ansible_ssh_user:    指定ssh连接用户
ansible_ssh_pass:   指定ssh连接密码
ansible_sudo_pass:  指定ssh连接时sudo密码
ansible_ssh_private_key_file:    指定特有私钥文件

这些参数可以直接卸载命令行或者playbook文件中,以覆盖配置文件中的定义。

Ansible主机匹配规则

正则表达式是各类高级语言的必定支持方法之一,ansible也不例外。其正则功能等同于正则表达式,语法使用也一样。ansible ad-hoc使用正则的语法如下:

ansible   <正则匹配主机>    -m   <module_name>  -a  <argument>

该功能主要针对Inventory的主机列表使用,在以下案例中主要针对webservers进行正则匹配:

#  重启webservers组中的所有主机的httpd服务
ansible  webserver  -m service  -a  "name=httpd state=restarted"

1.    ALL(全量)匹配

匹配所有的主机,all  或者 * 号功能相同。

##  all和*功能相同,但是*好需要引起来
[root@clinet test1]# ansible all -m ping[root@clinet test1]# ansible '*' -m ping ## 检查hosts中10.10.10.0/24网段的所有主机
[root@clinet test1]# ansible 10.10.10.* -m ping 

2.    逻辑或(or)匹配

同时对多台或多个组同时指向,相互之间用‘:’(冒号)分隔即可。

[root@clinet test1]# cat hosts
[web]
10.10.10.[134:136] ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123'[db]
10.10.10.[137:138] ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123'
[root@clinet test1]#[root@clinet test1]# ansible 'web:db' -m ping

3.   逻辑非(!)匹配

逻辑非用感叹号(!)表示,主要针对多重条件的匹配规则,使用如下:

[root@clinet test1]# cat hosts
[web]
10.10.10.[134:136] ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123'
#10.10.10.135 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123'[db]
10.10.10.[136:138] ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123'
[root@clinet test1]# ## 在web组中,但是不在db组的多有主机,因此要过滤掉136[root@clinet test1]# ansible 'web:!db' -m ping
10.10.10.134 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
10.10.10.135 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
[root@clinet test1]#

4.    逻辑与(&)匹配

逻辑与用&表示,主要针对多重条件的匹配规则,示例如下:

[root@clinet test1]# cat hosts
[web]
10.10.10.[134:136] ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123'
#10.10.10.135 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123'[db]
10.10.10.[136:138] ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123'
[root@clinet test1]# ##  在web组中同时也在db组中的所有主机,因此只匹配了136
[root@clinet test1]# ansible 'web:&db' -m ping
10.10.10.136 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}

5.    多条件匹配

ansible支持多条件匹配,就是将上述几种匹配方式联合起来,了解即可。

## web组合db组中的所有主机,然后再和clinet组取都有的主机,然后再和lvs组过滤掉都有的主机。##例如:
[web]
10.10.10.133
10.10.10.134[db]
10.10.10.135
10.10.10.136[clinet]
10.10.10.133
10.10.10.136
10.10.10.137[lvs]
10.10.10.133
10.10.10.138匹配:
web:db ==> 10.10.10.{133,134,135,136}
web:db:&clinet  ==>10.10.10.{133,136}
web:db:&clinet:!lvs ==> 10.10.10.{136}[root@clinet test1]# ansible  'web:db:&clinet:!lvs'  -m  ping
10.10.10.136 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}

6.    模糊匹配

*通配符在ansible表示0个或多个任意字符,主要应用于模糊匹配。

匹配所有10.10.10.0段的主机
10.10.10.*
[root@clinet test1]# ansible 10.10.10.* -m ping
10.10.10.135 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
10.10.10.136 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
10.10.10.137 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}1*.136
[root@clinet test1]# ansible 1*.136 -m ping
10.10.10.136 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
[root@clinet test1]#

7.   域切割

ansible底层基于Python,因此支持切割,示例如下:

[root@clinet test1]# cat hosts
[web]
10.10.10.133
10.10.10.134
[root@clinet test1]# ##
web[0]=10.10.10.133
web[1]=10.10.1.134[root@clinet test1]# ansible web[1] -m ping
10.10.10.134 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"
}
[root@clinet test1]#

8.    正则匹配

ansible同样完整支持正则匹配功能,‘~’开始表示正则匹配。

##检测beta.example.com,web.example.com,green..example.com,beta..example.org,web..example.org,green..example.org的存活。ansible  "~(beta|web|green)\.example\.(cpm|oorg)"  -m   ping

注意:

--list-host 可以查看到匹配的主机。例:

anisble   web  --list-host     查看web组中匹配到的主机。

[ansible系列③]Ansible Inventory配置及详解相关推荐

  1. Equinox OSGi系列之三 Equinox配置参数详解

    1.概述 上文我们对Equinox OSGi运行环境的组成及搭建过程做了详细讲述.本文主要对Equinox OSGi运行环境的可配置参数及其作用加以介绍,从而使用户在实际使用过程中可以对Equinox ...

  2. 全网最详系列教程-nacos配置中心详解-NameSpace、Group、DataID

    特别喜欢李白的一句诗:俱怀逸兴壮思飞,欲上青天揽明月.其表达了对光明世界的执着追求.我亦身为三等码农,也向往着能够改变世界. 文章目录 1.命名空间.分组.DataID三者之间的关系 2.DataID ...

  3. SpringSecurity权限管理框架系列(六)-Spring Security框架自定义配置类详解(二)之authorizeRequests配置详解

    1.预置演示环境 这个演示环境继续沿用 SpringSecurit权限管理框架系列(五)-Spring Security框架自定义配置类详解(一)之formLogin配置详解的环境. 2.自定义配置类 ...

  4. Spring Boot笔记—多线程系列(三)—配置参数详解

    前言 前两篇文章,我们已经学会了如何使用spring boot的多线程和自定义线程池.这篇文章,我们要深入了解上一篇文章中线程池的配置具体含义. 准备工作 说明 为了方便观察线程的情况(如执行完毕数量 ...

  5. Ceph优化系列(二):Ceph主要配置参数详解

    转载:Ceph配置参数详解 概述 Ceph的配置参数很多,从网上也能搜索到一大批的调优参数,但这些参数为什么这么设置?设置为这样是否合理?解释的并不多 本文从当前我们的ceph.conf文件入手,解释 ...

  6. kubernetes系列11—PV和PVC详解

    kubernetes系列11-PV和PVC详解 原文:kubernetes系列11-PV和PVC详解 本文收录在容器技术学习系列文章总目录 1.认识PV/PVC/StorageClass 1.1 介绍 ...

  7. NT Server无盘站配置技术详解

    NT Server无盘站配置技术详解    无盘工作站(简称无盘站)即不使用本地磁盘的计算机工作站.由于无盘站具有低配置.低价格.安全性好.易于管理等特点,所以它在我国应用很广.目前,无盘工作站对于学 ...

  8. 【夯实Spring Cloud】Spring Cloud分布式配置中心详解

    本文属于[夯实Spring Cloud]系列文章,该系列旨在用通俗易懂的语言,带大家了解和学习Spring Cloud技术,希望能给读者带来一些干货.系列目录如下: [夯实Spring Cloud]D ...

  9. 华为、H3C、锐捷三家交换机配置命令详解

    一.华为交换机基础配置命令 1.创建vlan: <Quidway> //用户视图,也就是在Quidway模式下运行命令. <Quidway>system-view //进入配置 ...

最新文章

  1. RabbitMQ(四):RabbitMQ与Spring Boot简单整合 快速尝鲜版
  2. 《富爸爸 辞职创业前的10堂课》文摘
  3. 在html中加入滚动条,html在div中显示滚动条
  4. FM之DATE_CHECK_PLAUSIBILITY
  5. 共济失调对我们的危害你知道吗
  6. 计算机怎么更改用户头像像,Win10系统电脑账户头像怎么改成系统默认状态?
  7. 《Spring实战》系列之Bean的装配-Days01
  8. MongoDB数据查询
  9. linux配置usb主从_技术 | 手把手教你搭建MySQL主从架构
  10. Ubuntu 16.04 + Caffe
  11. TUIO学习笔记2-TUIO C++ Reference Implementation and Demo Application参考实现和Demo程序(图片版,防查重)
  12. ZYJ7型转辙设备安装调试工法
  13. Fisheye-Crucible2.4.3安装破解
  14. php laravel model,如何使用 Laravel Eloquent Model
  15. Windows Sockets错误码方案
  16. python一个月工资多少钱_Python工资一般是多少 看完吓你一跳【python教程是什么】...
  17. flash花屏 html,Flash中轻松制作电视花屏闪屏的效果
  18. 什么是MES生产制造执行系统?实施系统有哪些好处?
  19. Active Directory渗透
  20. js各类验证和数据处理

热门文章

  1. 国开电大 公共关系学 形考任务答案 实训项目
  2. Openlayer图层载入时进行坐标系的转换
  3. java读写word模板_Java操作Word模板插入列表
  4. 利用阿里云实现异地容灾的解决方案
  5. 天津商业大学计算机科学学院,天津商业大学信息工程学院
  6. mac解压缩命令大全
  7. AVD安装XPOSED环境
  8. 分享:你必须知道的H5加速器九大常识!
  9. transformer:self-attention,muti-head attention,positional encoding
  10. 内燃机 vs 外燃机