如何在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_files; vars_prompt),角色默认值和变量。
- 主机:与主机直接关联的变量,如库存,include_vars,事实或已注册的任务输出
因此,您在游戏中声明的任何内容都只能是播放变量或(主机)事实。
要定义一个变量,可以在hosts
声明中使用它:
ansible-playbook
选项运行--extra-vars
并传递参数中的值;或者实现相同的功能(决定在前一个游戏中运行游戏的主机):
你似乎想要的是一个库存(http://docs.ansible.com/ansible/latest/intro_inventory.html),看起来你有一个静态的IP列表,可能是prod服务器(或dev,或其他),因此你可以创建一个静态库存。
在你的第二次游戏中,你想使用IP列表作为主机来运行任务,这不是Ansible所期望的。在播放声明中的“hosts”关键字之后,Ansible需要清单中的组名。
如果在opossite上,您的prod服务器不时发生变化,您可能需要创建一个动态库存。您可以查看https://github.com/ansible/ansible/tree/devel/contrib/inventory中的示例(例如,有基于Amazon或vsphere的EC2的动态库存示例)
问候