【问题标题】:Where to put common variables for groups in Ansible在 Ansible 中将组的公共变量放在哪里
【发布时间】:2017-12-19 15:36:11
【问题描述】:

我们有一些脚本可以帮助我们在 AWS 中设置具有多达 6 个虚拟机的 VPC。现在我想登录到这些机器中的每一个。出于安全原因,我们只能通过 SSH 访问其中一个,然后通过隧道/代理连接到其他机器。所以在我们的清单中,我们有 SSH 主机的 IP 地址(我们称之为 Redcarpet)和其他一些主机,如 ElasticsearchMongodb 和 工人:

#inventory/hosts

[redcarpet]
57.44.113.25

[services]
10.0.1.2

[worker]
10.0.5.77
10.0.1.200

[elasticsearch]
10.0.5.30

[mongodb]
10.0.1.5

现在我需要告诉每个组,除了红地毯使用某些 SSH 设置。如果这些适用于所有组,我会将它们放入inventory/group_vars/all.yml,但现在我必须将它们放入:

  • inventory/group_vars/services.yml
  • inventory/group_vars/worker.yml
  • inventory/group_vars/elasticsearch.yml
  • inventory/group_vars/mongodb.yml

这会导致重复。因此,我想使用includeinclude_vars 来包含来自公共文件的一个或两个变量(例如inventory/common.yml)。但是,当我尝试在上面的任何 group_var 文件中执行此操作时,它不会获取变量。使用多个组共有的变量的最佳做法是什么?

【问题讨论】:

    标签: ssh deployment ansible


    【解决方案1】:

    如果您想使用 group_vars 方法,我建议您添加另一个组,并将依赖组作为子组添加到该组。

    #inventory/hosts
    
    [redcarpet]
    57.44.113.25
    
    [services]
    10.0.1.2
    
    [worker]
    10.0.5.77
    10.0.1.200
    
    [elasticsearch]
    10.0.5.30
    
    [mongodb]
    10.0.1.5
    
    [redcarpet_deps:children]
    mongodb
    elasticsearch
    worker
    services
    

    现在您可以拥有一个名为 redcarpet_deps.yml 的 group_vars 文件,他们应该从那里获取 var。

    【讨论】:

    • 哦,天哪,这确实是一个非常简单明了的解决方案。我仍然想知道为什么包含不起作用,但这当然可以解决我的直接问题。
    猜你喜欢
    • 2017-11-06
    • 2015-12-13
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-18
    相关资源
    最近更新 更多