Ansible 主机模式

Ansible 主机模式

通过主机模式,可以更高效地为play或命令选择受控主机。除了常规的使用组名或清单中的IP地址以及all、ungrouped外,你还可以使用以下方式匹配受控主机。

使用通配符匹配

使用'*'匹配模式会与all主机模式具有相同的效果,它会匹配任意字符串,会使用清单中的全部主机。

1
2
3
- hosts: all
...
- hosts: '*'

也可以使用*与文字进行匹配,使用通配符匹配以.example.com结尾的全部主机例子如下:

1
- hosts: '*.example.com'

匹配192.168开头的全部主机或主机组的名称:

1
- hosts: '192.168*'

⚠️注意:使用匹配模式匹配时,Ansible不会区分它是主机还是组的名字。如果主机的域名和组名有被匹配到,那么不管是主机还是主机组中全部的主机都会被匹配。

使用逗号匹配多个主机和组

使用逗号可以来匹配多个主机和组,可以混合使用受控主机、主机组和通配符。

1
- hosts: 'server1.com,*.example.com,192.168.1.1'

也可以使用:冒号作为分隔符进行分隔,特别是将IPv6地址用作受管主机名称时。不过在较老的例子中依旧可以见到使用冒号进行分隔。

使用&!

如果在使用逗号的列表中某一项与&结合,则主机必须与该项也匹配才会匹配主机模式。

如下例子,主机模式匹配同时出现在lab组和datacenter组中的主机才能作为受控主机。

1
- hosts: 'lab,&datacenter'

也可以通过在主机模式前面使用感叹号!,从列表中排除匹配某以模式的主机。他的工作方式类似于逻辑NOT。

如下例子:主机模式匹配datacenter中的所有主机,但是server1.example.com主机除外!

1
- hosts: 'datacenter,!server1.example.com'

管理动态清单

目前为止使用静态清单很容易编写,对于管理小型的主机架构很方便。但是如果要操作一个大型的集群中许许多多的计算机,或者在机器交替非常快的环境工作,在面对维护主机静态清单想必是不太好受。

在大型IT环境下,通常会有系统来跟踪服务器资产,比如有外部目录服务通过Zabbix等监控系统维护,或者位于FreeIPA或Active Directory服务器上。Cobbler等安装服务器或红帽卫星等管理服务可能跟踪部署的逻辑系统。

Ansible支持动态清单脚本,这些清单脚本在Ansible执行时会执行脚本并检索当前信息,时清单能够得到实时的更新。这些脚本时可以执行的程序,能够从一些外部来源收集信息,并以JSON格式输出清单。

动态清单脚本的使用和静态清单一样。清单的位置可以直接在ansible.cfg中配置,也可以通过-i选型指定。如果清单文件可以执行,则会被视作动态清单程序,Ansible会尝试运行脚本来生成清单。如果文件不可执行,则它会被视作静态清单。

在使用动态清单时要确保该脚本具有执行权限并且返回值为JSON数据类型。

管理多个清单

Ansible支持在同一运行中使用多个清单,如果配置清单的地址是一个目录,那么会使用该目录下所有的清单文件,如果可执行文件会作为动态清单文件对待。