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

ansible,学习,笔记,定位,主机,模式 · 浏览次数 : 158

小编点评

| **英文** | **中文** | |---|---| | ad hoc | ad hoc模式 | | playbook |剧本 | | inventory | 库存 | | group | 组 | | patterns | 模式 | | hosts | 目标 | | shell | shell | | pattern | 模式 | | include | 包含 | | exclude | 排除 | | limit |限制 | | file | 文件 | | retry | 重试 |

正文

中英文对照表

英文 中文 备注
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 学习笔记 - 定位主机和组的模式

中英文对照表 | 英文 | 中文 | 备注 | | | | | | host | 主机 | | | group | (主机)组 | | | pattern | 模式 | | | ad hoc | 特别命令 | | | playbook | 剧本 | Ansible 专有名词,一段复杂的编排 | |

Ansible 学习笔记 - 批量巡检站点 URL 状态

前言 不拖泥带水,不东拉西扯。 速战速决,五分钟学到一个工作用得上的技巧。 通过一个个具体的实战案例,来生动演示 Ansible 的用法。 需求 我需要定期巡检或定时监控我公司的所有站点的首页的可用性状态。 Ansible Playbook 实战脚本 check_url_status.yml 如下:

Python学习之十_paramiko的简单学习

Python学习之十_paramiko的简单学习 简介 pywinrm 是python用于连接访问windows的工具 paramiko 是python用于连接访问linux的工具 ansible等工具很多也是基于类似的组件进行的处理 连接不同的系统进行命令行的操作. paramiko的简介 par

Ansible的常用模块

目录ansible常用模块1. file模块1.1 file模块的选项1.2 file模块的使用1.2.1 使用file模块在远程主机创建文件1.2.2 创建目录1.2.3 删除文件/目录2. copy模块2.1 copy模块的选项2.2 copy模块的使用3. yum_repository模块3.

ansible自定义模板部署apache服务

使用Ansible来部署Apache服务是一个很好的选择,因为它可以自动化部署过程,确保所有的服务器上都有相同的配置。以下是一个简单的步骤指南,展示如何使用Ansible来部署Apache服务: 1 创建角色目录 首先,在 /etc/ansible/roles 下创建 apache 目录: mkdi

[转帖]ansible小结(七)常用模块

ansible小结(七)常用模块 http://www.361way.com/ansible-modules/4415.html 在上一篇中介绍了commands部分模块,本篇承接上篇介绍下常用的模块。根据官方的分类,将模块按功能分类为:云模块、命令模块、数据库模块、文件模块、资产模块、消息模块、监

[转帖]ansible 安装 K8S

作者:山河已无恙链接:https://www.zhihu.com/question/315497851/answer/2898814729来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 写在前面分享一个 k8s 高可用集群部署的 Ansible 剧本以及涉及到的一些工

[转帖]太厉害了,终于有人能把Ansible讲的明明白白了,建议收藏

https://zhuanlan.zhihu.com/p/530678807 一: ansible 的概述 1. ansible简介 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。 它用Python写成,类似于saltstack和Puppet,但是有一个不同和优点是我们不需要

[转帖]别让运维太忙,一文详解 Ansible 的自动化运维

https://zhuanlan.zhihu.com/p/270655214 一、Ansible 概述 Ansible 是近年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误。 Ansible 通过本身集成的非常丰富的模块可以实现各种管

京东云开发者|IoT运维 - 如何部署一套高可用K8S集群

环境 准备工作 配置ansible(deploy 主机执行) # ssh-keygen # for i in 192.168.3.{21..28}; do ssh-copy-id -i ~/.ssh/id_rsa.pub $i; done [root@deploy ~]# cat /etc/ansi