【问题标题】:Ansible: Including non-managed systems into the configurationAnsible:将非托管系统包括到配置中
【发布时间】:2016-03-18 15:51:51
【问题描述】:

我正在编写一个 Ansible 剧本,用于设置系统,在某些配置中,某些系统可能由另一个组织提供。一个很简单的例子:

库存:

  • 应用服务器
  • 数据库服务器

剧本: 设置两台服务器,并将application.properties 文件添加到应用服务器,其中包含数据库服务器的 IP、端口和用户/密码。

到目前为止工作,但随后出现了一个要求,即在某些部署中,数据库服务器由另一个组织提供,因此我无法将其包含在清单中,因为设置步骤失败,但我仍想生成属性应用服务器的文件(包含我从其他人那里获得的数据库服务器信息)。

考虑到有 6 种这样的服务器类型,而不仅仅是 2 种(所以不只是 2 种不同的场景,其中有很多排列),什么是涵盖这两种场景(我自己的数据库服务器和提供的数据库服务器)的最不痛苦的解决方案服务器是为我提供的,这是我的)。

编辑: 更具体地说,我遇到的问题是,如果我在系统不是我的时候使用 vars,而在系统是我的时候使用事实,那么我在编写 application.properties.j2 模板时会遇到问题,因为事实和变量的引用方式不同。如何在模板中使用 var,但如果未定义 var 则使用事实?

【问题讨论】:

    标签: ansible ansible-playbook ansible-2.x


    【解决方案1】:

    我假设您每个部署都有一个清单文件。因此,库存文件可能如下所示:

    [app]
    an-app.server
    
    [db]
    a-db.server
    
    [deploymentA:children]
    app
    db
    
    [deploymentA:vars]
    db_ip=foo
    dp_port=foo
    db_user=foo
    db_pass=foo
    

    您可能会将deploymentA:vars 存储为group_vars/deploymentA,但为简单起见,我只是将其放入库存中。

    现在是剧本:

    - hosts: db
      roles:
        - setup-db-server
    
    - hosts: app
      roles:
        - setup-app-server
    

    在数据库服务器不是由您自己管理的部署中,您根本不会在清单中定义数据库服务器。 db 组将为空。在这种情况下,第一个播放将简单地打印“没有匹配的主机”或类似的内容,然后继续下一个播放。

    在您管理数据库服务器的部署中,将运行角色setup-db-server,您可以使用deploymentA:vars 进行配置。

    在您的应用游戏中,无论主机是否属于您,您都拥有deploymentA:vars,并且可以推出application.properties 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 2019-12-15
      • 2018-03-19
      • 2022-06-22
      • 1970-01-01
      • 2011-10-30
      相关资源
      最近更新 更多