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

时间:2017-11-20 13:04:50

标签: 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未定义。

2 个答案:

答案 0 :(得分:7)

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

  

Variable Scopes

     

Ansible有3个主要范围:

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

  •   
  • 播放:每个播放和包含的结构,vars条目(vars; vars_files; vars_prompt),角色默认值和vars。

  •   
  • 主机:与主机直接关联的变量,如库存,include_vars,事实或已注册的任务输出

  •   

你在游戏中声明的任何内容因此只能是一个播放变量或一个(主机)事实。

定义一个变量,您可以在loggin_required声明中使用:

  • 使用hosts选项运行ansible-playbook并传递参数中的值;

或实现相同的功能(决定在之前的游戏中运行游戏的主机):

答案 1 :(得分:0)

你似乎想要的是一个清单(http://docs.ansible.com/ansible/latest/intro_inventory.html),看起来你有一个静态的IP列表,可能是prod服务器(或dev,或其他),因此你可以创建静态库存。

在你的第二次游戏中,你想使用IP列表作为主机来运行任务,这不是Ansible所期望的。在"主持人"之后在游戏声明中,Ansible需要库存中的组名。

如果在opossite上,您的prod服务器不时发生变化,您可能需要创建一个动态库存。您可以查看https://github.com/ansible/ansible/tree/devel/contrib/inventory中的示例(例如,有基于Amazon或vsphere的EC2的动态广告资源示例)

问候