编辑 - 我开始研究 Perl 的模板工具包。它似乎很适合下面描述的问题。有人玩过吗?任何(详细)建议?
我问了一个关于配置管理的问题,还没有看到回复。可能我的问题太模糊了,所以让我们开始吧。以下是我们在将新客户实例加入托管应用程序时遵循的流程:您将如何管理?我倾向于使用 Perl 脚本来填充模板以生成 shell 脚本、配置文件、XML 配置文件等。简要介绍一下 CFengine 和 Chef,它们似乎不会减少工作量,因为我d 仍然必须手动指定工具中的所有更改/编辑。直接接触配置文件似乎并没有太大的收获。
- 我们在核心(第 3 方)应用程序的主配置文件中添加一个节。这节的价值观是
- 定义实例(客户)名称
- 此实例的 TCP 侦听器端口(当前未使用)
- DB2 数据库名称(序列数字标识符,已经存在,它们由 DBA 为我们预留)
- 三个子配置文件,按名称 - 它们需要从 3 个模板创建并以实例命名
- 子配置文件定义:
- DB2 卷的文件路径
- 存储对象的文件路径
- 仅一个 DB2 卷的文件路径(是的,对于第一项是多余的。
- 我们运行一些应用命令,启动实例
- 我们做一些 LDAP 事情(为实例创建一个 OU,等等)
- 我们将一个节添加到我们的安全侦听器的配置文件中,作为 LDAP 的传递
- 实例名称
- LDAP OU
- 例如 TCP 端口
- DB2 数据库名称
- 我们重新启动安全侦听器(非工作时间),从第 1 项更改主配置文件,停止并重新启动实例。它现在通过 LDAP 进行身份验证。
- 我们将此实例的停止和启动命令添加到 HA 故障转移脚本中。
- 我们将 XML 配置文件导入到实例中,该文件为客户的实际应用程序定义事物 - 用户名、组、权限和业务规则。XML 由实施团队提供。
现在,我们配置数据加载应用程序
- 我们向现有的顶级配置文件添加一个节,该节指向一个新的客户级配置文件。新的客户级配置文件包括:
- 实例(客户)名称
- DB2 数据库名称
- 任意数量的子配置文件,按名称
- 每个子配置文件定义:
- 用于摄取、反馈、备份和失败的目录的文件路径
- 这些文件路径具有指向客户特定文件夹的公共路径,然后每个子配置文件都有一个文件夹
- 需要创建每个文件路径
- 我们需要将此客户实例添加到我们的监控脚本中,以确认正确的进程正在运行并且可以登录。当然,这些监控配置文件包括实例名称、TCP 端口、DB2 数据库名称等。
- 还有一个需要为新实例配置的报告应用程序。你明白了。
- 还有由中间件团队加载到 WAS 中的 XML。我们为他们提供插入 XML 的值——他们可以很容易地将模板交给我们,我们可以将完整的 XML 还给他们。
我认为您可以非常成功地使用Bcfg2 。它是一个非常灵活和可扩展的配置管理系统。它带有 Genshi 用于基本的模板逻辑,但允许任意内联 Python 代码执行更复杂的事情。
您可以拥有一个包含每个实例的所有信息的数据库,然后设置 Bcfg2 以基于该数据库生成每一位配置。作为额外的好处,如果您必须在大量实例(或所有实例)中更改某些内容,那将是完全轻松的。
这看起来很定制,所以我会考虑使用Fabric制作我自己的工具来运行所有这些,并使用Django来运行Web 前端。
使用 fabric 作为后端,你也可以在没有 django 的 ssh 中使用它。