04-Ansible Inventory

简介: 04-Ansible Inventory

一、概述
由01节可知,当安装完 Ansible 以后,会提供一个默认的管理清单( Inventory ),即 /etc/ansible/hosts 文件。除默认文件外,我们还可以同时使用多个 Inventory 文件,也可以从动态源或云上拉取 Inventory 配置信息。本节介绍 Inventory 文件的书写方法。
二、主机和组
Inventory 是一个静态的 INI 格式的文件,中括号中的字符为组名。其支持将同一主机同时分到多个不同组中。此外,若被管理主机使用了非默认的 SSH 端口,还可以在主机名称之后使用冒号加端口号来标明。
下面为示例:

# 可以直接为IP地址
192.168.128.83

# 同样支持hostname的方式
ansible-demo3

# 同一主机可以分到不同组中
web1.ding.com

ntp.ding.com

# 如果有主机的 SSH 端口不是标准的 22 端口,可在主机名之后加上端口号,用冒号分隔
proxy.ding.com:2222

# [01:50] 表示 01-50 之间的所有数字。即表示 www01.ding.com,www02.ding.com,......, www50.ding.com 的所有主机
www[01:50].ding.com

# [a:f] 表示 a 到 f 之间的所有字母。即表示 db-a.ding.com,db-b.ding.com,......,db-f.ding.com 的所有主机
db-[a:f].ding.com

# 方括号中是组名,用于对主机进行分类管理
[webservers]
web1.ding.com
hostname
192.168.1.200


[dbservers]
db1.ding.com
db2.ding.com
db3.ding.com

[IDC]
192.168.1.[100:190]

三、主机变量
可以在定义主机时为其添加主机变量,以便在 Playbook 中使用。
下面为示例:

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

四、组变量
可以指定组内的所有主机在 Playbook 中使用的变量,等同于逐一给该组下的所有主机赋予这些变量。
下面为示例:

[webservers]
web1.ding.com
web2.ding.com

[webservers:vars]
# 定义 webservers 组下所有主机 ntp_server 的值为 ntp.ding.com
ntp_server=ntp.ding.com
# 定义 webservers 组下所有主机 proxy 的值为 proxy.ding.com
proxy=proxy.ding.com

五、组嵌套和组变量
可以把一个组作为另一个组的子成员(嵌套),以及分配变量给整个组使用。这些变量可以给 ansible-playbook 命令使用,但不能给 ansible 命令使用。
下面为示例:

[apache]
web1.ding.com
web2.ding.com

[nginx]
web3.ding.com
web4.ding.com

# children 表示当前组中存在子组,当我们操作 webservers 组时,相当于同时操作 apache 组和 nginx 组的所有主机
[webservers:children]
apache
nginx

# webservers 组的所有变量,也同时是子组 apache 和 nginx 的变量
[webservers:vars]
ntp_server=ntp.ding.com

关于组嵌套的补充说明:
任何属于子组的成员都自动成为父组的成员。
子组的变量将具有更高的优先级(覆盖父组的变量)。
组可以有多个父母和孩子,但不是循环关系。
主机也可以在多个组中,但只有一个主机实例,合并来自多个组的数据。
六、默认组
有两个默认组:all 和 ungrouped 。
all 包含每个主机。
ungrouped 包含所有没有在分组中的主机。
下面为示例,配置清单包含 3 个主机:
ansible-demo1
[groupA]
ansible-demo2
ansible-demo3

all 包含了所有主机:

[root@ansible-manager ~]# ansible all -m ping
ansible-demo3 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
ansible-demo2 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
ansible-demo1 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

ungrouped 包含了未分组的主机:

[root@ansible-manager ~]# ansible ungrouped -m ping
ansible-demo1 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
目录
相关文章
|
机器学习/深度学习 Java 网络架构
YOLOv5改进 | TripletAttention三重注意力机制(附代码+机制原理+添加教程)
YOLOv5改进 | TripletAttention三重注意力机制(附代码+机制原理+添加教程)
809 0
|
前端开发 网络协议 API
什么是WebSocket?
WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。
2782 0
什么是WebSocket?
|
存储 弹性计算 监控
快速部署 Zabbix 社区版
Zabbix 是一款监控网络的众多参数以及服务器、虚拟机、应用程序、服务、数据库、网站、云等的健康和完整性的软件。Zabbix 使用灵活的通知机制,允许用户为几乎任何事件配置基于电子邮件的告警,以实现对服务器问题做出快速反应。Zabbix 基于存储的数据提供出色的报告和数据可视化功能。这使得 Zabbix 成为容量规划的理想选择。本文介绍如何通过计算巢快速部署 Zabbix 社区版。
快速部署 Zabbix 社区版
|
JSON API 数据格式
如何使用Flask request对象处理请求
在 Flask 中,request对象是处理 HTTP 请求的重要工具之一。它提供了许多属性和方法,可以帮助我们获取请求的相关信息和数据。本文将向你介绍request对象的常用方法以及如何在 Flask 应用程序中使用它。
405 3
|
SQL Oracle 关系型数据库
sql开发
【5月更文挑战第20天】sql开发
888 1
|
运维 Cloud Native Docker
云端漫步:构建你的第一个云原生应用
在这篇文章中,我们将一起踏上一段激动人心的旅程,探索如何从零开始构建一个云原生应用。我们将深入理解云原生的核心概念,并通过实际代码示例,学习如何利用云平台的强大功能来部署和管理应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的指导和启发。让我们一起开启这场云端之旅,发现云原生应用的魅力吧!
273 3
|
机器学习/深度学习 数据采集 数据可视化
使用Python实现深度学习模型:智能交通信号优化
使用Python实现深度学习模型:智能交通信号优化
631 9
|
SQL 存储 关系型数据库
Hologres SQL 查询优化技巧
【9月更文第1天】随着大数据处理的需求日益增长,如何高效地进行数据查询和分析变得尤为重要。Hologres 是阿里云推出的一款实时数仓产品,它基于 PostgreSQL 构建,并针对在线分析处理(OLAP)场景进行了优化,支持实时数据写入与查询,能够实现毫秒级的查询响应。本文将探讨在使用 Hologres 时如何编写高效的 SQL 查询,并介绍一些特定于 Hologres 的优化技巧。
839 2
|
人工智能 算法 安全
人工智能伦理:技术发展与道德责任的交汇点
在人工智能(AI)技术的迅猛发展中,伦理问题逐渐成为一个不容忽视的重要议题。本文深入探讨了AI技术在带来便利和效率的同时,可能引发的伦理挑战,包括数据隐私、算法偏见、自动化失业和机器人权利等问题。通过分析当前的研究动态和案例,文章旨在揭示AI伦理问题的复杂性和多维性,并呼吁建立全面的伦理框架以指导AI技术的发展和应用。
572 15
|
算法 Java Go
【经典算法】LeetCode 69. x 的平方根(Java/C/Python3/Golang实现含注释说明,Easy)
【经典算法】LeetCode 69. x 的平方根(Java/C/Python3/Golang实现含注释说明,Easy)
269 1