Ansible:如何在playbook中声明全局变量?

Ansible:如何在playbook中声明全局变量?,ansible,ansible-inventory,Ansible,Ansible Inventory,如何在Ansible playbook中声明全局变量。我在谷歌搜索了一下,找到了下面的解决方案,但它并没有按预期工作 - hosts: all vars: prod-servers: - x.x.x.x - x.x.x.x - hosts: "{{prod-servers}}" tasks: - name: ping action: ping 当我尝试上面的代码时,它说变量prod servers未定义。您无法定义一个在剧本级别(全局变量)上

如何在Ansible playbook中声明全局变量。我在谷歌搜索了一下,找到了下面的解决方案,但它并没有按预期工作

- hosts: all
  vars:
    prod-servers:
     - x.x.x.x
     - x.x.x.x


- hosts: "{{prod-servers}}"
  tasks:
  - name: ping
    action: ping

当我尝试上面的代码时,它说变量
prod servers
未定义。

无法定义一个在剧本级别(全局变量)上可从剧本中访问的变量

Ansible有3个主要范围:

  • 全局:这是由配置、环境变量和命令行设置的

  • 播放:每个播放和包含的结构、vars条目(vars;vars_文件;vars_提示符)、角色默认值和vars

  • 主机:与主机直接关联的变量,如清单,包括变量、事实或已注册的任务输出

因此,在剧本中声明的任何内容只能是剧本变量或(宿主)事实


要定义可在
主机
声明中使用的变量,请执行以下操作:

  • 使用
    --extra vars
    选项运行
    ansible playbook
    ,并传递参数中的值
或者,为了实现相同的功能(从前面的播放中决定在哪个主机上运行播放):

  • 定义并针对该库存运行后续播放

您似乎想要的是一个清单(),看起来您有一个IP的静态列表,可能是prod服务器(或dev,或其他),因此您可以创建一个静态清单

在第二个重头戏中,您希望使用IP的列表作为主机来运行任务,这不是Ansible所期望的。在播放声明中的“hosts”关键字之后,Ansible希望从清单中获得一个组名

如果在opossite上,您的prod服务器不时更改,则可能需要创建动态资源清册。您可以查看中的示例(例如,有来自Amazon或vsphere的基于EC2的动态库存示例)

问候