当前位置: 首页 > 知识库问答 >
问题:

有可能在Ansible中定义playbook-global变量吗?

高朝明
2023-03-14

共有1个答案

秦永望
2023-03-14

Ansible有一个默认的all组,有趣的是,它包含清单文件中的所有主机。

因此,您可以像处理任何主机组一样,为主机组提供group_vars。

如上一个链接所示,它们可以直接在清单文件中定义,也可以包含在与清单文件相同目录级别的group_vars目录中以组命名的单独文件中。

-ansible
 |--inventory
 |  |--group_vars
 |  |  |--all
 |  |  |--dev
 |  |  |--test
 |  |  |--prod
 |  |  |--webservers
 |  |  |--databases
 |  |--dev
 |  |--test
 |  |--prod
 |--roles
  ...
[dev:children]
webservers
databases

[webservers]
web1.dev
web2.dev

[databases]
database-master.dev
database-slave.dev

所有这些主机现在都将获取任何特定于主机的配置(可以在line中定义,也可以将group_vars放入host_vars文件夹中),还可以为它们所在的特定组配置,比如webservers,然后为它们还继承的组配置,比如dev,但在默认情况下,All

然后,可以用比每个主机更粗糙的方式来配置东西。

像NTP服务器这样的东西可能需要全部定义,而DNS服务器可能需要在环境级别定义(如果您的网络被划分为开发、测试和生产,它们可能需要在/etc/resolv.conf中设置不同的DNS服务器),而不同类型的服务器可能有不同的配置,比如要安装的包列表。最后,有些事情可能需要特定于主机,比如在复制组中设置MySQL服务器id。

相反,如果您只想定义playbook全局设置,而不是跨目录(因此可以被其他playbook访问),那么您只需要在游戏定义中添加vars块,如下所示:

- hosts: webservers
  vars:
    http_port: 80
  tasks:
    - name: Task1 to be ran against all the webservers
      ...

如前所述,您也可以在这里使用All组:

- hosts: all
  vars:
    ntp_pool:
      - ntp1.domain
      - ntp2.domain
  tasks:
    - name: Task1 to be ran against all the servers
      ...

不过,总的来说,我强烈建议使用角色来构造在特定主机上运行的内容,然后使用清单来解释什么服务器是什么类型,然后在清单级别使用group_vars dir来包含这些主机组的所有变量。这样做将有助于您将事情放在合理的位置,并允许您轻松地重用代码库。

 类似资料:
  • 用户可以在Playbook中,通过vars关键字自定义变量,使用时用{{ }}引用以来即可。 Playbook中定义和使用的变量的方法 例如下面的例子中,用户定义变量名为http_port,其值为为80。在tasks firewalld中,通过{{ http_port }}引用。 --- - hosts: web vars: http_port: 80 remote_user: r

  • 我想用Ansible复制大文件。目标服务器有一个具有足够存储空间的专用分区。我注意到ansible使用由remote_tmp变量定义的临时目录。 谢谢你的回答。

  • 在本节,我们主要介绍几种最常用的变量,在后面的章节中,我们会单独介绍一些复杂情景下变量的使用和覆盖原则。 在Playbook中常用的几种变量包含一下几种情况: 在Playbook中用户自定义的变量 用户无需自定义,Ansible会在执行Playbook之前去全程主机上搜集的关于远程节点系统信息的变量 在文件模版中,可以使用里面可以直接使用上述两种变量 把task的运行结果作为一个变量来使用,这个变

  • 我正在使用ansible 2.3.1.1和Jenkins。我遇到了以下问题--我的剧本使用aws动态库存中的变量变得非常慢。最有趣的情况是,如果我在jenkins工作区之外复制这个playbook,并在任何其他目录中运行,执行速度都是可以的。为了测试它,我从工作区目录/group_vars/all中删除了所有的变量文件-之后,这个剧本在工作区中的执行速度也可以了。因此,据我所知,ansible计算

  • 我是ansible的新手,不知道如何做到这一点,因为以下内容不起作用 其中,是我的变量。