Ansible 学习笔记 - 定位主机和组的模式
中英文对照表
| 英文 | 中文 | 备注 |
|---|---|---|
| host | 主机 | |
| group | (主机)组 | |
| pattern | 模式 | |
| ad hoc | 特别命令 | |
| playbook | 剧本 | Ansible 专有名词,一段复杂的编排 |
| inventory | 库存 | Ansible 专有名词 |
| flag | 标志 | |
| alias | 别名 |
模式(Patterns):定位主机和主机组
当您通过一个特别命令(ad hoc)或运行一个剧本(playbook)执行 Ansible 时,您必须选择要针对哪个受管节点或组执行。模式允许您针对库存(inventory)中的特定主机和/或组运行命令和剧本。Ansible 模式可以引用单个主机、IP地址、库存组、一组 组或库存中的所有主机。模式非常灵活——您可以排除或要求主机子集,使用通配符或正则表达式,等等。Ansible 在模式中包含的所有库存主机上执行。
使用模式
几乎在执行特别命令或剧本时都要使用模式。模式是特别命令(ad hoc command )中唯一没有标志的元素。其通常是第二个元素:
ansible <pattern> -m <module_name> -a "<module options>"
例如:
ansible webservers -m service -a "name=httpd state=restarted"
️ 注意:
如果 shell 是 zsh,
<pattern>需要用双引号括起来,如下:
- ansible "component*" -m ping
- ansible component* -m ping ,这个会报错:「zsh: no matches found: component*」
在剧本中,模式是每个剧本的 hosts: 行内容:
- name: <play_name>
hosts: <pattern>
例如:
- name: restart webservers
hosts: webservers
由于您经常希望一次针对多个主机运行命令或剧本,因此模式通常引用库存组。特别命令和上面的剧本都将对 webservers 组中的所有机器执行。
常用模式
该表列出了针对库存主机和组的常见模式。
| 描述 | 模式 | 目标 |
|---|---|---|
| 所有主机 | all (或 *) | |
| 一台主机 | host1 | |
| 多台主机 | host1:host2 (或 host1,host2) | |
| 一个(主机)组 | webservers | |
| 多个(主机)组 | webservers:dbservers | webservers 组中的所有主机加上 dbservers 中的所有主机 |
| 排除(主机)组 | webservers:!atlanta | 在 webservers 且不在 atlanta 组中的所有主机 |
| 组的交集 | webservers:&staging | 既在 webservers 又在 staging 中的所有主机 |
✍️ 笔记:
可以使用逗号(
,)或冒号(:)分隔主机列表。在处理范围和 IPv6 地址时,首选逗号。
一旦你知道了基本的模式,你就可以把它们组合起来。举个例子:
webservers:dbservers:&staging:!phoenix
针对 “webservers” 组和 “dbservers” 组中所有也在 “staging” 组中的机器,除了 “phoenix” 组中的机器。
您可以对 FQDN 或 IP 地址使用通配符模式,只要目录中的主机是通过 FQDN 或 IP 地址命名的:
192.0.\*
\*.example.com
\*.com
你可以同时混合通配符模式和组:
one*.com:dbservers
模式的限制
模式取决于库存。如果一个主机或组没有列在你的目录中,你不能使用模式来锁定它。如果你的模式包含一个 IP 地址或主机名,但没有出现在库存中,你会看到这样的错误:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: Could not match supplied host pattern, ignoring: *.not_in_inventory.com
您的模式必须与库存语法匹配。如果将主机定义为别名:
atlanta:
host1:
http_port: 80
maxRequestsPerChild: 808
host: 127.0.0.2
您必须在模式中使用别名。在上面的示例中,必须在模式中使用 host1。如果你使用 IP 地址,你将再次报错:
[WARNING]: Could not match supplied host pattern, ignoring: 127.0.0.2
高级模式选项
上面描述的通用模式将满足您的大多数需求,但是 Ansible 提供了其他几种方法来定义您想要目标的主机和组。
在模式中使用变量
你可以通过 -e 参数使用变量来向 ansible-playbook 传递组说明符:
webservers:!{{ excluded }}:&{{ required }}
在模式中使用组位置
可以根据主机在组中的位置定义主机或主机子集。例如,给定下列组:
[webservers]
cobweb
webbing
weber
您可以使用下标来选择单独的主机或范围内的 webservers 组:
webservers[0] # == cobweb
webservers[-1] # == weber
webservers[0:2] # == webservers[0],webservers[1]
# == cobweb,webbing
webservers[1:] # == webbing,weber
webservers[:3] # == cobweb,webbing,weber
在模式中使用正则
你可以以 ~ 开头,指定一个模式作为一个正则表达式:
~(web|db).*\.example\.com
模式和 ansible-playbook 标志
您可以使用命令行选项更改剧本中定义的模式的行为。例如,可以通过指定 -i 127.0.0.2, (注意末尾的逗号),在单个主机上运行一个定义了所有主机的剧本。即使你的目标主机没有在你的库存中定义,这也可以工作。你也可以使用 --limit 标志来限制你的目标主机:
ansible-playbook site.yml --limit datacenter2
最后,您可以使用 --limit 从文件中读取主机列表,方法是在文件名前加上 @ 前缀:
ansible-playbook site.yml --limit @retry_hosts.txt
如果 RETRY_FILES_ENABLED 设置为 True, ansible-playbook 运行后将创建一个 .retry 文件,其中包含所有剧本中失败的主机列表。每次 ansible-playbook 运行结束时,该文件都会被覆盖。
ansible-playbook site.yml –limit @site.retry
要使用 Ansible 命令和脚本应用您的模式知识,请阅读特别命令介绍和脚本介绍。
三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.
Ansible 学习笔记 - 定位主机和组的模式的更多相关文章
- ansible学习笔记一
ansible学习笔记一 参考博客: ansible学习 - 51CTO博客 一.安装 1 .下载epel源 wget -O /etc/yum.repos.d/epel.repo http://mir ...
- thinkphp学习笔记3—项目编译和调试模式
原文:thinkphp学习笔记3-项目编译和调试模式 1.项目编译 在章节2.4项目编译中作者讲到使用thinkphp的项目在第一次运行的时候会吧核心需要加载的文件去掉空白和注释合并到一个文件中编译并 ...
- Ansible学习笔记
一.Ansible简介 Ansible是一种agentless(基于ssh),可实现批量配置.命令执行和控制,基于Python实现的自动化运维工具. 其特性有: ①模块化:通过调用相关模块,完成指定任 ...
- ASP.Net MVC开发基础学习笔记:一、走向MVC模式
一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...
- 再起航,我的学习笔记之JavaScript设计模式08(建造者模式)
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前几 ...
- 再起航,我的学习笔记之JavaScript设计模式09(原型模式)
我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 我们 ...
- ansible学习笔记三:playbook和roles
参考博客: Ansible 系列之 Playbooks 剧本 -飞走不可(博客园) linux运维学习之ansible的playbook及roles的使用 - 51CTO博客 nginx 基于uwsg ...
- ansible学习笔记二
Ad-Hoc命令: 所谓Ad-Hoc,简而言之是"临时命令",英文中作为形容词有"特别的,临时"的含义.Ad-Hoc只是官方对Ansible命令的一种称谓. 从 ...
- 我的Ansible学习笔记
Ansible常见错误 http://afewbug.com/article/26官方文档 http://docs.ansible.com/ansible/安装配置 http://sofar.blog ...
- Ansible 学习笔记
最近因为需要管理很多台机器,而这些机器又需要频繁重新安装,实在受不了Puppet需要在每个客户机上都安装一遍,于是转头开始学些Ansible.根据这段时间的使用,这个确实是神器,唯一的感觉就是相见恨晚 ...
随机推荐
- 齐博x1 小程序与公众号长期永久订阅消息的申请方法
要给用户发送消息提醒的话,需要申请订阅消息.订阅消息分一次性订阅与长期永久性订阅.一次性订阅没有实际意义,用户订阅一次就只能发送一次.这里主要是指导大家如何申请永久长期订阅功能.对于公众号而言,大家先 ...
- 都卷Java,你看看你得学多少技术栈才能工作!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言:授业解惑 我知道,你不知道的还有很多! 你了解计算机要从哪里开始学习吗?你清楚为了能 ...
- 基于YOLO和PSPNet的目标检测与语义分割系统(python)
基于YOLO和PSPNet的目标检测与语义分割系统 源代码地址 概述 这是我的本科毕业设计 它的主要功能是通过YOLOv5进行目标检测,并使用PSPNet进行语义分割. 本项目YOLOv5部分代码基于 ...
- 关于Object.keys()和Object.values()的使用
关于Object.keys()和Object.values()的使用 1. 关于Object.keys() 1) 处理对象,返回可枚举的所有可枚举属性的字符串数组 let person ={ name ...
- 题解 CF630L Cracking the Code
前言 为什么没有人暴力快速幂啊,Ta不香嘛/kel 题意 设读入为 \(abcde\) ,求 \(acedb^5\mod{10^5}\) 的结果. \(\sf {Solution}\) 显然暴力啊. ...
- 支持向量机(SVM)公式整理
支持向量机可以分为三类: 线性可分的情况 ==> 硬间隔最大化 ==> 硬间隔SVM 近似线性可分的情况 ==> 软间隔最大化 ==> 线性支持向量机 线性不可分的情况 ==& ...
- 「浙江理工大学ACM入队200题系列」问题 L: 零基础学C/C++85——完美数
本题是浙江理工大学ACM入队200题第八套中的L题 我们先来看一下这题的题面. 题面 题目描述 任何一个自然数的约数中都有1和它本身,我们把小于它本身的因数叫做这个自然数的真约数. 如6的所有真约数是 ...
- 2022-11-05 Acwing每日一题
本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我会认真改正的.同时也希望 ...
- CodeQL(1)
前言 开始学习使用CodeQL,做一些笔记,可供参考的资料还是比较少的,一个是官方文档,但是Google翻译过来,总觉得怪怪的,另一个就是别人的一个资源整合,其中可供参考的也不是很多,大多也是官方文档 ...
- Ian Lance Taylor
https://img.mukewang.com/5a9dfda50001933e23006728.png 在GCC的世界中,没有人比Ian更火.在GCC maillist中,Ian的身影呈现在前端中 ...