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

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

时间:2023-01-15 20:32:01浏览次数:38  
标签: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>"

1.

例如:


ansible webservers -m service -a "name=httpd state=restarted"

1.

⚠️ 注意:


如果 shell 是 zsh,<pattern> 需要用双引号括起来,如下:


✅ ansible “component*” -m ping

❌ ansible component* -m ping ,这个会报错:「zsh: no matches found: component*」

在剧本中,模式是每个剧本的 hosts: 行内容:


- name: <play_name>

 hosts: <pattern>

1.

2.

例如:


- name: restart webservers

 hosts: webservers

1.

2.

由于您经常希望一次针对多个主机运行命令或剧本,因此模式通常引用库存组。特别命令和上面的剧本都将对 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

1.

针对 “webservers” 组和 “dbservers” 组中所有也在 “staging” 组中的机器,除了 “phoenix” 组中的机器。


您可以对 FQDN 或 IP 地址使用通配符模式,只要目录中的主机是通过 FQDN 或 IP 地址命名的:


192.0.\*

\*.example.com

\*.com

1.

2.

3.

你可以同时混合通配符模式和组:


one*.com:dbservers

1.

模式的限制

模式取决于库存。如果一个主机或组没有列在你的目录中,你不能使用模式来锁定它。如果你的模式包含一个 IP 地址或主机名,但没有出现在库存中,你会看到这样的错误:


[WARNING]: No inventory was parsed, only implicit localhost is available

[WARNING]: Could not match supplied host pattern, ignoring: *.not_in_inventory.com

1.

2.

您的模式必须与库存语法匹配。如果将主机定义为别名:


atlanta:

 host1:

   http_port: 80

   maxRequestsPerChild: 808

   host: 127.0.0.2

1.

2.

3.

4.

5.

您必须在模式中使用别名。在上面的示例中,必须在模式中使用 host1。如果你使用 IP 地址,你将再次报错:


[WARNING]: Could not match supplied host pattern, ignoring: 127.0.0.2

1.

高级模式选项

上面描述的通用模式将满足您的大多数需求,但是 Ansible 提供了其他几种方法来定义您想要目标的主机和组。


在模式中使用变量

你可以通过 -e 参数使用变量来向 ansible-playbook 传递组说明符:


webservers:!{{ excluded }}:&{{ required }}

1.

在模式中使用组位置

可以根据主机在组中的位置定义主机或主机子集。例如,给定下列组:


[webservers]

cobweb

webbing

weber

1.

2.

3.

4.

您可以使用下标来选择单独的主机或范围内的 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

1.

2.

3.

4.

5.

6.

在模式中使用正则

你可以以 ~ 开头,指定一个模式作为一个正则表达式:


~(web|db).*\.example\.com

1.

模式和 ansible-playbook 标志

您可以使用命令行选项更改剧本中定义的模式的行为。例如,可以通过指定 -i 127.0.0.2, (注意末尾的逗号),在单个主机上运行一个定义了所有主机的剧本。即使你的目标主机没有在你的库存中定义,这也可以工作。你也可以使用 --limit 标志来限制你的目标主机:


ansible-playbook site.yml --limit datacenter2

1.

最后,您可以使用 --limit 从文件中读取主机列表,方法是在文件名前加上 @ 前缀:


ansible-playbook site.yml --limit @retry_hosts.txt

1.

如果 RETRY_FILES_ENABLED 设置为 True, ansible-playbook 运行后将创建一个 .retry 文件,其中包含所有剧本中失败的主机列表。每次 ansible-playbook 运行结束时,该文件都会被覆盖。


ansible-playbook site.yml –limit @site.retry

1.

要使用 Ansible 命令和脚本应用您的模式知识,请阅读 特别命令介绍和 脚本介绍。

标签:webservers,主机,ansible,模式,Ansible,笔记,playbook
From: https://blog.51cto.com/u_15927413/6008885

相关文章

  • linux学习笔记
    如何创建ubanto网上的教程已经很多了我使用virtualbox自己创建了一个虚拟机中文包安装遇到了语言问题,安装的时候默认语言没有中文找到了一个中文语言包教程......
  • ABB 800XA学习笔记12:系统架构4
    这一篇学习笔记我在新浪博客发表过,地址是ABB800XA学习笔记12:系统架构4_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里也发一遍,以免丢失接着学习。我把学习内容切成一小......
  • ABB 800XA学习笔记11:系统架构3
    这一篇学习笔记我再新浪发过,地址是ABB800XA学习笔记11:系统架构3_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里也发一遍,以免丢失继续学习培训文档的内容。不得不吐槽一......
  • ABB 800XA学习笔记10:系统架构2
    这一篇学习笔记我在新浪博客发表过,地址是AB800XA学习笔记10:800XA架构2_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里我也记录一次,以免丢失1.2.1整合的力量为了保持......
  • fabric学习笔记5
    fabric学习笔记520201303张奕博2023.1.15fabric中的docker命令1.查看本机的镜像列表dockerimages2.拉取镜像dockerpullhyperledger/fabric-peer:x86_64-1.1.0-......
  • ABB 800XA学习笔记08:连接模拟器初步
    这一篇学习笔记我在新浪博客发表过,地址是ABB800XA学习笔记08:连接模拟器初步_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里再记录一遍,以免丢失前面配置的学习暂告一个......
  • 汇编学习笔记
    dosbox使用:挂载盘符:mountcd:\asm 物理地址cpu中两个16位地址合为一个20位物理地址实现方法:物理地址=段地址*16+偏移地址 段寄存器:   Cs,ip指示cpu将要读......
  • ABB 800XA学习笔记07:继续学习系统配置
    这一篇学习笔记我在新浪博客发表过,地址是ABB800XA学习笔记07:继续学习系统配置_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里也记录一次,避免丢失。我打开ABBstartmen......
  • ABB 800XA学习笔记06:临时授权设置
    这一篇学习笔记我在新浪发表过,地址是ABB80XA学习笔记06:临时授权设置_来自金沙江的小鱼_新浪博客(sina.com.cn)在这里也记录一遍,避免丢失。800XA系统需要授权,我从别处找......
  • ABB 800XA学习笔记05:配置的导出和导入
    我越来越觉得某浪博客会关闭了,访问量不再增加,审核慢。这一篇学习笔记我发表过,为了避免丢失,我在这里也发表一次。原地址:ABB800XA学习笔记05:配置的导出和导入_来自金沙江的......