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

简介:

本节书摘来自华章出版社《Ansible权威指南》一书中的第2章,第2.5节,作者 李松涛 魏 巍 甘 捷 更多章节内容可以访问云栖社区“华章计算机”公众号查看。


2.5 Ansible Inventory配置及详解

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

ansible –i etcansiblehosts webs –m ping

如果只有一个Inventory时可不用指定路径,默认读取etcansiblehosts。Inventory可以同时存在多个,而且支持动态生成,如AWS EC2、Cobbler等均支持,本节我们来学习Inventory的使用规则。

2.5.1 定义主机和组

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

# “# ”开头的行表示该行为注释行,即当时行的配置不生效

# Inventory可以直接为IP地址

192.168.37.149

# Inventory同样支持Hostname的方式,后跟冒号加数字表示端口号,默认22号端口

ntp.magedu.com2222

nfs.magedu.com

# 中括号内的内容表示一个分组的开始,紧随其后的主机均属于该组成员,空行后的主机亦属于该组,即web2.magedu.com这台主机也属于[websevers]组

[websevers]

web1.magedu.com

web[1020].magedu.com # [1020]表示10~20之间的所有数字(包括10和20),即表示web10.magedu.com、web11.magedu.com……web20.magedu.com的所有主机

 

web2.magedu.com[dbservers]

db-a.magedu.com

db-[bf].magedu.com # [bf]表示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

 

[groupserversvars]

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

 

[webserverschildren]

apache

nginx

 

[webserversvars]

ntp_server=ntp.magedu.com

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

2.5.5 多重变量定义

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

Inventory配置文件(默认etcansiblehosts)

Playbook中vars定义的区域

Roles中vars目录下的文件

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

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

etcansiblegroup_varsraleigh # can optionally end in '.yml', '.yaml', or '.json'

etcansiblegroup_varswebservers

etcansiblehost_varsfoosball

对于变量的读取,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文件中,以覆盖配置文件中的定义。更多参数请参考官网。

相关文章
|
6月前
|
Kubernetes Linux 持续交付
在 Alibaba Cloud Linux 上搭建并配置 Ansible
本场景简单介绍了在Alibaba Cloud Linux上安装并配置Ansible的方式。
|
7月前
|
Linux 网络安全 数据安全/隐私保护
在 Alibaba Cloud Linux 上配置 Ansible
本场景是在 Alibaba Cloud Linux 上配置 Ansible
146 0
|
8月前
|
网络协议 网络安全 数据安全/隐私保护
Ansible模块介绍——配置网络模块、上传下载文件模块
Ansible模块介绍——配置网络模块、上传下载文件模块
256 0
|
网络安全 数据安全/隐私保护
Ansible中的inventory主机清单(预祝你我有数不尽的鲜花和浪漫)
Ansible中的inventory主机清单(预祝你我有数不尽的鲜花和浪漫)
98 0
Ansible中的inventory主机清单(预祝你我有数不尽的鲜花和浪漫)
【初始环境】ansible配置/免密登录配置
文章目录 前言 一、ansible 二、结语
256 0
|
Shell 网络安全 数据安全/隐私保护
ansible主机清单配置以及变量解释(二)
1.配置ansible主机清单 清单文件位于/etc/ansible/hosts
487 0
ansible主机清单配置以及变量解释(二)
|
Python
Ansible 通过数组嵌套循环把 yaml 内容写入 ini 配置的新思路
把一个多层级的 yaml 配置内容,转换成 ini 配置的内容。
844 0
ansible 剧本部署配置nfs
ansible 剧本部署配置nfs
|
弹性计算 Shell 应用服务中间件
在 Cloud Shell 中使用 Ansible 编排配置阿里云资源
简介 Ansible 是一个开源的用于自动执行资源的配置管理和应用程序部署产品。云命令行 Cloud Shell 已经为我们安装、配置完成 Ansible v2.8.5,我们可以直接使用。同时阿里云提供了 Ansible 的 阿里云模块。
1699 0
|
JSON 缓存 Shell
Ansible Dynamic Inventory 管理阿里云资源
![屏幕快照 2019-01-14 下午10.40.53.png](http://ata2-img.cn-hangzhou.img-pub.aliyun-inc.com/934598a35f0ad25a6d21979547642603.png) Ansible 作为一款主流的自动化运维工具,可同时操作一台或者多台机器。当机器逐渐增多,机器角色越来越复杂多样时,分组管理就变得必不可少了。Ans
2927 0