细说Ansible主机清单inventory
Ansible是一个系列文章,我会尽量以通俗易懂、诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些。
Ansible系列博文直达链接:Ansible入门系列
前言
关于Ansible是什么,我在之前的文章中没有说;当然了,我这里也不会说。当你看到我写的这篇文章时,我想你已经知道了Ansible是什么了,如果您还不知道什么是Ansible是什么,那我的建议是先去百度一下,知道了Ansible是什么了,知道了Ansible能干什么了以后,再回过头来继续阅读我这里的总结。
在Ansible中,有两个非常重要的概念,就是管理主机和被管理远程主机。
- 管理主机:就是管理远程主机的主机;说简单点,就是安装Ansible整套软件的主机;所有的Ansible管理命令都是从这台管理主机发出的,通过这台管理主机,从而实现对其它远程主机的管理;
- 被管理远程主机:顾名思义,就是执行具体动作的主机;Ansible管理主机下达的命令,最终都要到被管理远程主机上去落地执行。
上面也说了,管理主机就是安装Ansible的主机,那被管理远程主机的信息又在哪里配置呢?下面就细说这个被管理远程主机在Ansible中的全套配置和流程。
inventory简介
inventory,也就是主机清单。在大规模的配置管理工作中,特别是云服务提供商或者IDC厂家,需要管理不同业务的不同机器,这些机器的信息都存放在Ansible的inventory组件里面。在我们使用Ansible进行远程主机管理时,必须先将主机信息存放在inventory里面,这样才能使用Ansible对它进行操作。默认情况下,Ansible的inventory是一个静态的INI格式的文件,在上一篇《Ansible配置文件ansible.cfg详解》中说到了defaults配置中的inventory选项,这个inventory选项就是配置inventory文件的地方。当然了,我们还可以通过ANSIBLE_HOSTS环境变量指定或者运行ansible和ansible-playbook的时候用-i参数临时设置。
定义主机和主机组
先来看个我在测试环境使用的inventory文件内容。
192.168.1.2
192.168.1.4
[web]
192.168.1.2
192.168.1.4
[mysql-db]
192.168.1.5
192.168.1.6
[east:children]
web
mysql-db
上述就是我的一个简单配置,将来你在生产环境配置inventory的话,大抵上也就是这个样子。下面我们分别细说一下上面的这个inventory配置文件。
- 前两行我们定义了两个单独的主机,对于单个主机,我们可以针对单个主机进行配置,包括变量等;
[web]和[mysql-db]是我们定义的两个主机组;我们可以根据业务、地理位置等因素,对主机进行按组划分,这样方便统一批量管理;[east:children]是我们定义的一个包含其它组的组;分组是支持嵌套的,这样就更加方便了分组的管理。
定义了主机或主机组以后,我们就可以直接在命令中使用这些主机或主机组,比如这样:
ansible 192.168.1.2 -m ping
ansible web -m ping
ansible east -m ping
定义inventory列表
默认情况下,Ansible的inventory文件是一个INI的静态文件,其实Ansible还支持多个inventory文件,这样我们就可以非常方便的管理不同业务或者不同环境的机器了。
要定义inventory列表,我们先新建一个存放inventory文件的文件夹,然后将ansible.cfg配置文件中inventory的值修改为这个新建的文件夹的路径。比如我在测试环境新建了一个名为inventory文件夹来存放inventory配置文件。
使用tree /home/jelly/ansible/inventory命令输出结果如下:
/home/jelly/ansible/inventory/
|---web
|---db
在这里,我分别定义了两个inventory配置文件,其中web文件中的内容如下:
[web]
192.168.1.2
192.168.1.4
其中db文件中的内容如下:
[mysql-db]
192.168.1.5
192.168.1.6
接下来,我们就可以正常使用这些inventory中的主机配置信息了,比如可以用以下命令来看看分组下的主机进行配置验证:
ansible mysql-db --list-hosts
以后我们就可以使用这种方式来搞定inventory的配置了,当然了,对于管理主机少,配置简单的环境,使用这种方式完全是没有问题的。但是对于上千台、上万台的主机,很显然这种方式就大大不方便了,太落后了。对于这种上千台、上万台的主机的环境,我们就需要动态的从CMDB中拉去主机配置信息了,此时就要说到下面的动态inventory了。
动态inventory
上面也说到了,对于那些云服务提供商或者IDC厂家会有大量的主机列表;如果手动维护这些列表将是一个非常繁琐的事情。其实Ansible是支持动态的inventory的,动态inventory就是Ansible所有的inventory文件里面的主机列表和变量信息都是从外部拉取的。比如我们可以从CMDB系统和Zabbix监控系统拉取所有的主机信息,然后使用Ansible进行管理。这样一来我们就可以很方便的将Ansible与其它运维系统结合起来。关于引用动态inventory的功能配置起来是非常简单的;我们只需要把ansible.cfg文件中inventory的定义值改成一个执行脚本即可。这个脚本的内容不受任何编程语言限制,但是这个脚本使用参数时有一定的规范并且对脚本执行的结果也有要求。这个脚本需要支持两个参数:
--list或者-l:这个参数运行后会显示所有的主机以及主机组的信息(JSON格式);--host或者-H:这个参数后面需要指定一个host,运行结果会返回这台主机的所有信息(包括认证信息、主机变量等),也是JSON格式。
下面就是我写的一个通过Python脚本动态获取主机列表和主机信息的脚本,由于脚本是用来演示的,所以没有从数据库中获取主机列表和主机配置信息,在实际开发中,我们可以修改为从数据库获取对应的数据:
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import argparse
import json
def lists():
r = {}
h = ['192.168.1.2', '192.168.1.4']
hosts = {'hosts':h}
r['web'] = hosts
return json.dumps(r, indent=4)
def hosts(name):
r = {'ansible_ssh_user':'jelly', 'ansible_ssh_pass':'123456'}
return json.dumps(r)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('-l', '--list', help='hosts list', action='store_true')
parser.add_argument('-H', '--host', help='hosts vars')
args = vars(parser.parse_args())
if args['list']:
print(lists())
elif args['host']:
print(hosts(args['host']))
else:
parser.print_help()
接下来,我们先不修改ansible.cfg中的inventory配置,直接在命令行指定配置文件进行运行:
ansible -i inventoryDemo.py web -m ping
输出结果如下:
192.168.1.2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.1.4 | SUCCESS => {
"changed": false,
"ping": "pong"
}
在生产环境,我们需要将ansible.cfg中的inventory配置指定为这个python脚本的路径,后续正常执行各个ansible命令即可,比如这样:
ansible web -m ping
inventory内置参数
Ansible inventory中可以配置很多内置的一些参数,这些参数在我们实际工作中非常有用,我们可以直接在inventory文件中定义它,也可以在动态的inventory中使用它们。这里对这些常用inventory内置参数进行一下简单的总结:
| 参数名 | 参数说明 |
|---|---|
| ansible_ssh_host | 定义主机的ssh地址 |
| ansible_ssh_port | 定义主机的ssh端口 |
| ansible_ssh_user | 定义主机的ssh认证用户 |
| ansible_ssh_pass | 定义主机的ssh认证密码 |
| ansible_sudo | 定义主机的sudo用户 |
| ansible_sudo_pass | 定义主机的sudo密码 |
| ansible_sudo_exe | 定义主机的sudo路径 |
| ansible_connection | 定义主机连接方式;与主机的连接类型.比如:local,ssh或者paramiko;Ansible 1.2以前默认使用paramiko。1.2以后的版本默认使用‘smart’,‘smart’方式会根据是否支持ControlPersist,来判断ssh方式是否可行 |
| ansible_ssh_private_key_file | 定义主机私钥文件 |
| ansible_shell_type | 定义主机shell类型 |
| ansible_python_interpreter | 定义主机python解释器路径 |
总结
inventory是ansible中一个非常重要的概念,只有完全掌握了inventory的配置,我们才会知道我们需要对哪些主机做哪些事。希望我这里对inventory的总结能够更好的帮助你理解inventory。因为inventory是如此的重要,所以在后续的文章中,我还会总结到inventory的一些其它用法。最后,如果觉的还不错,可以点击下方的“打赏”哦。
2019年6月16日,于内蒙古呼和浩特。
细说Ansible主机清单inventory的更多相关文章
- Ansible主机清单Inventory文件hosts
Ansible主机清单Inventory文件hosts 发表于 2017-05-14 | 分类于 运维相关 , Ansible | | 阅读次数 4638 | 字数统计 1,442 | 阅读时长预计 ...
- 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配置. 添加用 ...
- (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 - ...
- inventory file 与hosts patterns (ansible 机器清单 与 主机匹配模式)
Ansible配置: ansible有两个核心配置文件: ansible.cfg 配置文件和Inventory配置文件 Ansible.cfg配置文件 Inventory机器列表配置 这里介绍Inve ...
- Ansible 小手册系列 五(inventory 主机清单)
Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置. 默认的文件路径为 /etc/ansible/hosts 主机清单示例 mail.example. ...
- Ansible组件之inventory主机清单
静态inventory 所有的主机信息都存放在Ansible的inventory组件里面,默认Ansible的inventory是一个静态的ini格式的文件/etc/ansible/hosts,当然还 ...
- 【Ansible 文档】【译文】主机清单文件
Inventory 主机清单文件 Ansible 可以对你的基础设施中多个主机系统同时进行操作.通过选择在Ansible的inventory列出的一部分主机来实现.inventory默认保存在/etc ...
随机推荐
- UWP-消息提示(仿Android)
原文:UWP-消息提示(仿Android) 在UWP中的消息提示框(一)中介绍了一些常见的需要用户主动去干涉的一些消息提示框,接下来打算聊聊不需要用户主动去干涉的一些消息提示框.效果就是像双击退出的那 ...
- vs的一个不经常用的快捷键
Ctrl+shilt+< 类似于缩小字体 Ctrl—+shift+>类似于方法字体
- wsl相关总结
启用WSL VirtualMachinePlatform是WSL2依赖功能,需要系统支持(build 18917+),硬件支持VM功能并开启,安装完成后要重启计算机. Enable-WindowsOp ...
- 修改Maven的本地仓库地址
已经配置好的设定文件: 1.创建一个本地仓库的地址 2.修改Maven中conf目录下的settings.xml文件 在此处添加修改后的本地仓库的地址 3.打开cmd 输入mvn help:sys ...
- 2016最受欢迎国产开源软件评选,2016 年度开源中国新增开源软件排行榜 TOP 100
http://www.oschina.net/news/80154/2016-cn-open-source-software-top http://www.oschina.net/project/to ...
- SetWinEventHook 事件钩子(有些windows事件并没有消息对应,譬如弹出菜单,切换窗口,获得焦点,滚动条滚动等)good
相信消息钩子大家听的比较多,消息钩子能够在应用程序处理系统消息之前将其截获,提前处理并可以决定是否继续将消息往下传送,有些windows事件并没有消息对应,譬如弹出菜单,切换窗口,获得焦点,滚动条滚动 ...
- 极简代理IP爬取代码——Python爬取免费代理IP
这两日又捡起了许久不碰的爬虫知识,原因是亲友在朋友圈拉人投票,点进去一看发现不用登陆或注册,觉得并不复杂,就一时技痒搞一搞,看看自己的知识都忘到啥样了. 分析一看,其实就是个post请求,需要的信息都 ...
- linux:清空文件内容与批量kill 指定程序名的进程
1.常规的清空文件内容方法 1)使用 cat命令显示 /dev/null 的内容然后重定向输出到某个文件,来清空 $ cat /dev/null > filename 2)清空一个文件可以通过 ...
- 有关Html页面节点的简单理解
这是之前研究web前端的一点经验,主要针对刚入门还没怎么研究的朋友. 因为我发现我在用js,css参与过网站开发项目后仍然没有理解文本节点与普通节点的差别,所以记下来拿来分享一下. 先上结论:< ...
- Unity 通用透明物体漫反射Shader(双面渲染&多光源&光照衰减&法线贴图&凹凸透明度控制)
Shader "MyUnlit/AlphaBlendDiffuse" { Properties { _Color("Color Tint(贴图染色)",Colo ...