前言
关于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 jsondef lists():r = {}h = ['192.168.1.2', '192.168.1.4']hosts = {'hosts':h}r['web'] = hostsreturn 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解释器路径

Ansible主机清单inventory相关推荐

  1. 如何编写yaml格式的Ansible主机清单(inventory)及清单变量使用Demo

    写在前面 嗯,学习Ansible高级特性,整理这部分笔记 博文内容涉及: ini&yaml格式的inventory相互转化 inventory 中的变量管理Demo inventory 常见报 ...

  2. 细说Ansible主机清单inventory

    Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. 前言 关于Ansible是什么,我在之前的文章中没有说:当然了,我这里也不会说.当 ...

  3. ansible主机清单和动态主机清单

    ansible主机清单 inventory主机清单文件 编辑主机清单 定义主机范围 嵌套组写法 查看主机列表(inventory)中的主机信息 主机清单内置参数 主主机组指定密码变量 对主机组设置变量 ...

  4. ansible主机清单配置详解

    ansible的基础配置: ansible安装完成后,一定需要对主机清单进行管理,所以,配置inventory是ansible安装完成后的第一步 ansible的主机清单配置有两种方式: 单机配置:将 ...

  5. Ansible中的inventory主机清单(预祝你我有数不尽的鲜花和浪漫)

    文章目录 前言 一.inventory 主机清单 1.1 inventory 中的变量 1.2 主机变量 1.3 组变量 1.4 组嵌套 前言 本篇博客主要解释Ansible主机清单的相关配置知识 一 ...

  6. Ansible 五(inventory文件 主机清单)

    Ansible 五(inventory文件  主机清单) Ansible 可同时操作属于一个组的多台主机,组和主机之间的关系通过 inventory 文件配置. 默认的文件路径为 /etc/ansib ...

  7. ansible inventory 主机清单配置

    文章目录 环境介绍 ansible ssh配置 操作 测试 /etc/hosts 配置 Inventory文件 主机与组 主机变量.组变量 把一个组变成另一个组的子成员 变量太多了,不好管理怎么办?来 ...

  8. Ansible Tower 入门 1 - 配置主机清单和访问凭证

    Ansible Tower 入门 1 - 配置主机清单和访问凭证 Ansible Tower 入门 2 - 通过模板运行 Git 上的 Playbook 和 Role Ansible Tower 入门 ...

  9. 「Python 网络自动化」Nornir—— Inventory(主机清单)介绍

    Nornir 是一个非常好用的网络自动化的框架,最近我输出了一份 Nornir 中文手册,欢迎大家阅读指正. 主机清单 主机清单(Inventory) 是 nornir 最重要的部分,它由 hosts ...

最新文章

  1. SAP IDoc E1EDP04 Z8 数据错误之对策
  2. 活动目录最佳实践分析器
  3. LeetCode 462 Minimum Moves to Equal Array Elements II
  4. 华为交换机同步linux时间服务器,华为s5720s系列交换机同步时间
  5. PowerDesigner使用教程 —— 概念数据模型
  6. Bioconductor软件安装与升级
  7. EntityFramework进阶——CodeFirst数据库迁移
  8. 求1-100的所有数的和
  9. redis快照持久化和aof日志持久化
  10. New Concept English three(13)
  11. jquery各历史版本下载地址
  12. 【Pix4d精品教程】垂直摄影空三加密生成DOM和DSM,并按10m间距提取高程点,生成等高线
  13. Sketch 55 for mac(矢量绘图软件) v55.2中文永久激活版
  14. matlab 产生时域波形,matlab时域波形图
  15. 午睡起来发现了很精美的windows壁纸
  16. cad导出pdf_如何使用CAD手机看图软件将DWG格式图纸文件转换成PDF格式?
  17. Linux 下的分屏利器-tmux安装、原理及使用
  18. 豆瓣APP上线7.0新版本,从工具到社区的进化之路
  19. (一)Siamese目标跟踪——SiamFC训练和跟踪过程:从论文细节角度出发
  20. 惠普27亿美元收购3Com 两大硬件巨头竞争升级

热门文章

  1. ACL2020-最新录用论文列表分享
  2. 服务器开机必须要按f1才能进系统,教你为什么开机必须按F1才能进入系统
  3. Eclipse编写代码时出现The word 'localhost' is not correctly spelled.禁告
  4. uni-app 文件选择、文件管理器(ios11)
  5. 同方台式计算机密码,清华同方的品牌机进bios需要密码,怎么清除它
  6. 每日10行代码82:网上购物活动满减凑单计算器
  7. 使用vue-print-nb打印element table时表格打印不全的问题
  8. number of splits 划分的条件
  9. 50位中外AI领袖论剑AI World,世界人工智能大会10大亮点全回顾
  10. Espresso之RecyclerView