首页 > 其他分享 >Ansible 学习笔记 - 定位主机和组的模式

Ansible 学习笔记 - 定位主机和组的模式

时间:2023-01-15 09:55:30浏览次数:68  
标签:webservers 主机 ansible 模式 Ansible 笔记 playbook

中英文对照表

英文 中文 备注
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 编写.

标签:webservers,主机,ansible,模式,Ansible,笔记,playbook
From: https://www.cnblogs.com/east4ming/p/17053102.html

相关文章

  • 机器学习 吴恩达 第七章 笔记
    七、神经网络:表述(NeuralNetworks:Representation)7.1非线性假设 &emsp假设有一个监督学习的训练集如下所示:  如果我们用逻辑回归来解决问题,可能需要构造多个......
  • Matlab笔记--Matlab概述(初登场)
    Matlab概述安装MATLAB教程可以参考这里:https://www.cnblogs.com/sixuwuxian/p/15858196.htmlMatlab的启动右键图标,选择属性,可以设置Matlab的启动目录Matlab的退出1、......
  • 算法学习笔记(8.1): 网络最大流算法 EK, Dinic, ISAP
    网络最大流目录网络最大流EK增广路算法DinicISAP作者有话说前置知识以及更多芝士参考下述链接网络流合集链接:网络流最大流,值得是在不超过管道(边)容量的情况下从源点......
  • 算法学习笔记(8.2): 上下界网络流
    上下界网络流目录上下界网络流无源汇可行流有源汇上下界可行流有源汇上下界最大流有源汇上下界最小流作者有话说前置知识以及更多芝士参考下述链接网络流合集链接:网络......
  • 同余最短路学习笔记
    同余最短路通常可以解决形如给出若干整数,用它们拼出大整数而产生的问题。其工作原理是选择一个模数\(m\),将整数分成\(m\)个同余类,将每个同余类看做一个状态。那么拼\(......
  • “动手学强化学习Pytorch版”笔记
    书籍一:2.3.3梯度:梯度就是对张量中的每个变量都求偏导,求出某点的值,然后将他们按照原先张量的对应顺序写成一个新张量,这个新张量就是原先张量在某点的梯度如:importtor......
  • 线段树 复习笔记
    线段树是一类处理区间问题的优秀算法,通过用空间换时间来得到相对平均的复杂度。同时,也是一个OIer从萌新到提高的重要过渡。1.线段树的基本概念不难看出线段树是一棵......
  • 笔记本在使用一段时间后莫名卡顿的解决方法——CPU莫名锁频
    首先要看看是不是因为CPU锁频了。键盘按下Ctrl+Shift+Esc,看看CPU内的速度部分是否保持在零点几。解决方案如果是的话,可以先将电脑关机,然后将所有的外设拔掉,电源也拔掉......
  • Google_Book_20Things.前言以及前四项学习笔记
    20THINGSILEARNEDABOUTBROWSERSANDTHEWEBIllustratedbyChristophNiemann.WrittenbytheGoogleChromeTeam.关于浏览器与网络的20件事前言(Foreword)任何......
  • 线段树优化建图学习笔记
    使用场景:单点向区间,区间向单点或区间向区间建边。实现原理:用线段树的一个节点管辖一段图上区间的顶点。实现步骤:将原图中的顶点拆点(理论上,实际代码中不需要),出点和入点......