《Ansible权威指南 》一2.5 Ansible Inventory配置及详解

2.5 Ansible Inventory配置及详解

Inventory是Ansible管理主机信息的配置文件,相当于系统HOSTS文件的功能,默认存放在/etc/ansible/hosts。为方便批量管理主机,便捷使用其中的主机分组,Ansible通过Inventory来定义其主机和组,在使用时通过–i或--inventory-file指定读取,与Ansible命令结合使用时组合如下:
ansible –i /etc/ansible/hosts webs –m ping
如果只有一个Inventory时可不用指定路径,默认读取/etc/ansible/hosts。Inventory可以同时存在多个,而且支持动态生成,如AWS EC2、Cobbler等均支持,本节我们来学习Inventory的使用规则。

2.5.1 定义主机和组

Inventory配置文件遵循INI文件风格,中括号中的字符为组名。其支持将同一个主机同时归并到多个不同的组中,分组的功能为IT人员维护主机列表提供了非常大的便利。此外,若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明,以行为单位分隔配置,详细信息可参考以下代码中的注释。

 # “# ”开头的行表示该行为注释行,即当时行的配置不生效
# Inventory可以直接为IP地址
192.168.37.149
# Inventory同样支持Hostname的方式,后跟冒号加数字表示端口号,默认22号端口
ntp.magedu.com:2222
nfs.magedu.com
# 中括号内的内容表示一个分组的开始,紧随其后的主机均属于该组成员,空行后的主机亦属于该组,即web2.magedu.com这台主机也属于[websevers]组
[websevers]
web1.magedu.com
web[10:20].magedu.com # [10:20]表示10~20之间的所有数字(包括10和20),即表示web10.magedu.com、web11.magedu.com……web20.magedu.com的所有主机

web2.magedu.com[dbservers]
db-a.magedu.com
db-[b:f].magedu.com # [b:f]表示b到f之间的所有数字(包括b和f),即表示db-b.magedu.com、db-e.magedu.com……db-f.magedu.com的所有主机

2.5.2 定义主机变量

在日常工作中,通常会遇到非标准化的需求配置,如考虑到安全性问题,业务人员通常将企业内部的Web服务80端口修改为其他端口号,而该功能可以直接通过修改Inventory配置来实现,在定义主机时为其添加主机变量,以便在Playbook中使用针对某一主机的个性化要求。

[webservers]
web1.magedu.com http_port=808 maxRequestsPerChild=801 # 自定义http_port的端口号为808,配置maxRequestsPerChild为801

Ansible其实支持多种方式修改或自定义变量,Inventory是其中的一种修改方式,在第6章中我们会详细介绍。不管哪种修改方式,大家一定要有自己的修改规范,以便于区别管理已有配置。

2.5.3 定义组变量

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

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

2.5.4 定义组嵌套及组变量

Inventory中,组还可以包含其他的组(嵌套),并且也可以向组中的主机指定变量。不过,这些变量只能在Ansible-playbook中使用,而Ansible不支持。组与组之间可以相互调用,并且可以向组中的主机指定变量。
参考示例如下:

[apache]
httpd1.magedu.com
httpd2.magedu.com

[nginx]
ngx1.magedu.com
ngx2.magedu.com

[webservers:children]
apache
nginx

[webservers:vars]
ntp_server=ntp.magedu.com

Ansible以简单为其核心理念,上述实现在业务日常使用中并不常见,大家了解其用法即可。

2.5.5 多重变量定义

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

Inventory配置文件(默认/etc/ansible/hosts)
Playbook中vars定义的区域
Roles中vars目录下的文件
Roles同级目录group_vars和hosts_vars目录下的文件

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

/etc/ansible/group_vars/raleigh # can optionally end in '.yml', '.yaml', or '.json'
/etc/ansible/group_vars/webservers
/etc/ansible/host_vars/foosball

对于变量的读取,Ansible遵循如上优先级顺序,因此大家设置变量时尽量沿用同一种方式,以方便维护人员管理。

2.5.6 其他Inventory参数列表

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

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

其他内置参数还有数十个,这些参数均可以直接写在命令行或Playbook文件中,以覆盖配置文件中的定义。更多参数请参考官网。

时间: 2024-09-09 18:35:53

《Ansible权威指南 》一2.5 Ansible Inventory配置及详解的相关文章

《Ansible权威指南》一2.5 Ansible Inventory配置及详解

2.5 Ansible Inventory配置及详解 Inventory是Ansible管理主机信息的配置文件,相当于系统HOSTS文件的功能,默认存放在etcansiblehosts.为方便批量管理主机,便捷使用其中的主机分组,Ansible通过Inventory来定义其主机和组,在使用时通过–i或--inventory-file指定读取,与Ansible命令结合使用时组合如下: ansible –i etcansiblehosts webs –m ping 如果只有一个Inventory时可

Ansible权威指南.

Linux/Unix技术丛书 Ansible权威指南 李松涛 魏 巍 甘 捷 著 图书在版编目(CIP)数据 Ansible权威指南 / 李松涛,魏巍,甘捷著. -北京:机械工业出版社,2016.11 (Linux/Unix技术丛书) ISBN 978-7-111-55329-8 I. A- II. ①李- ②魏- ③甘- III. 程序开发工具-指南 IV. TP311.561-62 中国版本图书馆CIP数据核字(2016)第258615号 Ansible权威指南 出版发行:机械工业出版社(北

《Ansible权威指南 》一 导读

前 言 为什么要写这本书 首次接触Ansible是缘于一次杭州出差.当时接触互联网3年左右,正是技能的储备阶段,看到Ansible这样的新兴自动化工具不免充满好奇.当时腾讯的蓝鲸还没有出来,但abs脚本和ijobs自动化体系已经应用多年,并在整个IEG中心广泛应用.大型企业讲究分工精细化,各司其职,强大的自我研发能力.但伴随业绩和KPI的压力,很多人其实是没有多余精力关注外界技术领域的发展,尤其是游戏行业,行业自身属性对开发人员的技术能力要求非常高,前沿开源技术与业务特殊性需求并不能很好地融合,

《Ansible权威指南》一1.5 Ansible通信发展史

1.5 Ansible通信发展史 Ansible主推的卖点是其无需任何Daemon维护进程即可实现相互间的通信,且通信方式是基于业内统一标准的安全可靠的SSH安全连接.同时因为SSH是每台Linux主机系统必装的软件,所以Ansible无需在远程主机端安装任何额外进程,即可实现Agentless(无客户端),进而助力其实现去中心化的思想.尽管稳定.快速.安全的SSH连接是Ansible通信能力的核心,但SSH的连接效率一直被诟病,所以Ansible的通信方式和效率在过去的数年中也在不停地改变和提

《Ansible权威指南》一1.4 Ansible是如何工作的

1.4 Ansible是如何工作的 Ansible没有客户端,因此底层通信依赖于系统软件,Linux系统下基于OpenSSH通信,Windows系统下基于PowerShell,管理端必须是Linux系统,使用者认证通过后在管理节点通过Ansible工具调用各应用模块将指令推送至被管理端执行,并在执行完毕后自动删除产生的临时文件.Ansible具体的工作机制官方有专栏介绍httpswww.ansible.comhow-ansible-works,但整体稍过简略.我们参考从官网视频中的截图来详细了解

《Ansible权威指南》一2.4 Ansible系列命令用法详解与使用场景介绍

2.4 Ansible系列命令用法详解与使用场景介绍 如何获取Ansible的系列命令呢?在终端键入ansible后连续按两次Tab键,会补全所有以ansible字母开头的命令,这些命令均是Ansible系列命令.本节我们来逐一介绍Ansible的系列命令使用. ansible ansible-galaxy ansible-pull ansible-doc ansible-playbook ansible-vault ansible-console 2.4.1 ansible 命令ansible

《Ansible权威指南 》一Ansible命令用法详解

2.3 Ansible命令用法详解 Ansible命令行执行方式有Ad-Hoc.Ansible-playbook两种方式,Web化执行方式其官方提供了付费产品Tower(10台以内免费),个人的话可以基于其提供的API开发类似的Web化产品.关于命令行执行的两种方式Ad-Hoc和Ansible-playbooks.什么是Ad-Hoc及Ad-Hoc与Ansible-playbook的区别我们在第3章有详细介绍,这里不再赘述.需简要说明的是两者没有本质上的区别,Ad-Hoc主要用于临时命令的执行,A

《Ansible权威指南》一2.3 Ansible命令用法详解

2.3 Ansible命令用法详解 Ansible命令行执行方式有Ad-Hoc.Ansible-playbook两种方式,Web化执行方式其官方提供了付费产品Tower(10台以内免费),个人的话可以基于其提供的API开发类似的Web化产品.关于命令行执行的两种方式Ad-Hoc和Ansible-playbooks.什么是Ad-Hoc及Ad-Hoc与Ansible-playbook的区别我们在第3章有详细介绍,这里不再赘述.需简要说明的是两者没有本质上的区别,Ad-Hoc主要用于临时命令的执行,A

《Ansible权威指南》一第2章

第2章 Ansible基础元素介绍 第1章介绍了Ansible的功能作用.通信发展史.基础的安装部署及处理Ansible安装问题所需的Python多环境管理工具Pyenv和Virutalenv.在前期基本工作准备妥当的基础上,本章进一步深入学习Ansible的基础元素,会相继接触Ansible目录结构简介.Ansible系列命令.Ansible Inventory配置规范.Ansible模式匹配规则等,其中部分内容,诸如Inventory.Ansible-playbook等在后续涉及章节会更深入