共计 2747 个字符,预计需要花费 7 分钟才能阅读完成。
中英文对照表
英文 | 中文 | 备注 |
---|---|---|
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 编写.