是否有充足的理由拥有多个Ansible清单(所有主机的清单都超过一个)?

时间:2019-08-01 07:43:36

标签: ansible ansible-inventory

第一次创建Ansible库存时,我创建了按角色大致分开的单独文件,但位于一个目录中。因此,我的目录结构如下所示(由角色组成):

ansible\
  inventory\
    dbservers
    logservers
    webservers
  host_vars\
  roles\

例如,这使得在所有DB服务器或所有Web服务器上运行剧本变得容易,但是我现在意识到我也可以通过使用主机组(无论如何我已经拥有)来做到这一点。

我现在遇到的一个问题是,我想在一个清单中列出主机,而在另一个清单上运行剧本。例如,dbserver可能具有防火墙规则以允许从Web服务器进行访问,而我想做lookup('inventory_hostnames', 'webservers')-但是,当在“ webservers”清单中定义了“ webservers”组并且我正在运行时,该规则不起作用与-i inventory/dbservers。另一个问题是,除角色以外的其他主机组(例如服务器的物理位置)在文件之间重复。

为解决这个问题,我很想将所有内容都移到一个库存中。这样做有不利之处吗?

(我知道我可以与-i inventory_dir一起运行,因此我仍然可以拥有多个清单文件,但可以将它们用作一个逻辑清单。)

3 个答案:

答案 0 :(得分:1)

每种解决方案都有其优缺点。

当然,如果您有2个数据库服务器,1个日志和3个Web服务器,那么在一个文件中声明所有6个数据库服务器是可以的。
但是,当您管理更大的系统时,您可能有100台服务器。在这种情况下,将它们分开将更加有益,并且更不会出错。

因此,如果问题是哪种方法更好,那就没有答案了。每个人都有自己的喜好。
如果问题是将所有服务器声明在一个文件中是否不好?那么答案是否定的。只要您保持井井有条,并且情况适合您。

答案 1 :(得分:1)

我认为没有“正确的方法”或“错误的方法”,但让我从过去几年部署Ansible所做的事情中提供一些见解。

我们使用单独的库存来指示生产与分期或测试,这对我们非常有用。这样,我们可以使用组来表示剧本中的不同机器角色(不要与Ansible角色混淆),但是我们可以轻松地在生产和登台之间进行切换。

在库存中,我们设置了某些标准变量和组,以方便确定我们是在测试机器还是在生产机器。

这样,当我们运行剧本时,我们使用诸如:

ansible-playbook -i prod name-of-playbook.yml

如果在舞台计算机上运行prod,则将stage替换为[db-servers] db1.foo.net [web-servers] web.foo.net [all:vars] env: prod

这不是所有人的解决方案,但是对我们来说非常有效。

对我们来说,标准库存文件看起来像:

db-servers

然后,我们将在剧本的剧本中使用web-serversenv,如果需要知道我们是在使用生产还是演出,则可以在必要时检查{{1}}系统。

答案 2 :(得分:0)

正如已经提到的,这两种方法都有其局限性。 我们在各个阶段分别处理库存:DEMO TEST等。 主要是将各个阶段明确分开,以避免意外配置错误。 和戏剧的应用。另外,您还必须明确设置要使用的清单。 使用多个库存时的主要缺点是必须多次设置vars布局更改(对childs进行分组等)。

现在由您决定:)