文章 Kelly Huang · 四月 22 6m read

IRIS 配置管理器 —— 一款开源浏览器插件,轻松比对异构但等效的 IRIS/Cache 实例!

痛点所在

我们在将 IRIS 实例迁移到另一台机器(甚至可能是升级版本)后,有多少次是在几天之后才猛然惊觉:我们忘了迁移那个对于业务操作(Business Operations)至关重要的 SSL 配置?或者是漏掉了某个凭据(Credential),又或是某个包里孤零零的一个类?

解决方案

最简单的法子就是列一张清单¹。把我们必须迁移的实体项都罗列出来。但是,Word 文档里的简易清单往往会被人抛诸脑后,甚至干脆被无视。

管理学的基本原理告诉我们:如果你希望人们遵循流程,你可以采取以下手段:

  1. 通过监控行为来强制他们执行;
  2. 将某项活动系统地锁定在某个流程之后(例如使用流水线部署代码,并要求自动化测试通过才能合并 PR);
  3. 让流程比人工操作更便捷、更省力。​ 这样人们才会心甘情愿地去用。(这正是我的目标所在)

Python 脚本固然可行,但人们可能会忘记脚本放在哪儿,或者去哪儿下载。一旦有了新版本,所有使用者都得重新下载。

IRIS 类或任务似乎也是理想选择,直到你意识到有时你是迁移到另一个网络的服务器,一个实例根本无法访问另一个。

这就是为什么我选择了浏览器插件。一旦安装,它便触手可及(哪怕你几个月不用它);更新会自动完成。即便你换了浏览器或出于某种原因弄丢了插件,从应用商店重新安装也只是点击一下的事。而且假设你总是需要访问两台服务器的管理门户(也许你不需要同时访问,比如切换 VPN 的情况),该插件也始终能够访问这两台服务器。

¹更复杂的(也是更好的)解决方案是自动化迁移过程本身。但考虑到不同的 IRIS/Cache 版本,那简直是让人头秃的大工程。

它具体比对什么?

截至本文撰写之时,它会比对 8 项 %SYS配置和每个命名空间下的 5 项配置。但由于实现方式极其简洁,每当我们有新的导出配置构想时,添加它们易如反掌。

比对范围

作用域 (Scope) 实体 (Entity)
%SYS Tasks (任务)
%SYS WebApplications (Web 应用)
%SYS SqlConnections (SQL 连接)
%SYS Users (用户)
%SYS Roles (角色)
%SYS Resources (资源)
%SYS Ssl (SSL 配置)
Namespaces Classes (类)
Namespaces Globals (全局)
Namespaces Credentials (凭据)
Namespaces ProductionItems (生产项)
Namespaces Lookups (查找表)

如何使用?

我已经将其简化到了极致:

1.为您的浏览器安装该插件。(目前支持 Chrome 和 Firefox)

2.打开源实例的管理门户(Administration Portal)。

3.点击“Save Server Data”(保存服务器数据)。

 

4.输入凭据,然后点击“Install and Continue”(安装并继续)。(仅在首次设置实例时需要)

此处我仅出于演示目的使用了 _SYSTEM用户,您应使用登录门户所用的同一用户。

 

5.打开目标实例的管理门户。

6.点击“Compare to saved server”(与已保存服务器比对)。

7.输入凭据,然后点击“Install and Continue”。

8.查看结果。

工作原理

切记,您可以在 GitHub 仓库中查看所有细节!

核心功能封装在一个 ObjectScript 类中。它包含一个供 Web 应用程序调用的主方法(返回完整的 JSON),一个用于检索每种配置并将其作为动态对象返回给主方法的子方法,以及一个通过 /api/atelier/query端点以存储过程形式创建 Web 应用程序的设置方法。

以下是我目前针对各实体使用的查询语句:

实体 (Entity) SQL 查询 (Query)
Namespaces SELECT * FROM Config.Namespaces_List()
Tasks SELECT * FROM %SYS.Task WHERE Type = 2
WebApplications SELECT * FROM Security.Applications WHERE Type = 2
SqlConnections SELECT * FROM %Library.sys_SQLConnection
Users SELECT * FROM Security.Users
Roles SELECT * FROM Security.Roles
Resources SELECT * FROM Security.Resources
Ssl SELECT * FROM Security.SSLConfigs
Classes SELECT * FROM %Library.RoutineMgr_StudioOpenDialog('*.cls',1,1,0,1,0,0) WHERE ...(过滤了 Ens, HS 等系统包)
Globals SELECT * FROM %SYS.GlobalQuery_NameSpaceList()
Credentials SELECT * FROM Ens_Config.Credentials
ProductionItems SELECT * FROM Ens_Config.Item WHERE Production = ?
Lookups SELECT * FROM Ens_Util.LookupTable

结语

这是一个正在进行中的工作(WIP),我非常欢迎所有的反馈。所以,如果您有任何建议或发现任何问题,请在下方留言或在我的 GitHub 仓库提交 Issue。

如果您想亲自上手贡献代码,请 fork 该项目并通过 Pull Request 参与,或者如果您想成为核心贡献者,请联系我。

TL;DR (太长不看版)

我开发了一款开源浏览器插件,用于导出并比对不同 IRIS/HealthShare 实例之间的配置。您可以在这里查看代码,并在 ChromeFirefox上安装它。

 

在 InterSystems Open Exchange 上查看相关应用