在开发 Orchestrator 插件的不同组件时,遵循部分特定做法可帮助您改进插件的质量。

表 1. 插件实现实用做法

组件

条目

描述

常规

访问第三方 API

插件应尽可能提供简化的第三方 API 访问方法。

接口

插件应向用户提供一致且标准的接口,即使 API 未能做到也是如此。

操作

脚本对象

您应该为每个创建、修改、删除及所有其他对脚本对象可用的方法创建操作。

描述

操作的描述应说明操作有何用处而不是如何运作。

脚本

使用脚本来获取对象的属性或方法时,可以检查对象值是否与 nullundefined 不同。

弃用

如果某个操作已被弃用,commentthrow 语句应指示替代操作,或操作应调用新的替代操作,从而使得在操作的已弃用版本上构建的解决方案不会失效。

工作流

编排技术中的用户界面操作

您应当为编排技术用户界面中可用的每个操作创建工作流。

描述

工作流的描述应说明工作流有何用处而不是如何运作。

展示属性 mandatory input

您必须为所有强制工作流输入设置 mandatory input 属性。

展示属性 default value

如果开发了一个配置实体的工作流,则工作流展示应加载该实体的默认配置值。例如,如果开发名为“主机配置”的工作流,则工作流的展示必须加载主机配置的默认值。

展示属性 Show in inventory

您必须设置 Show in inventory 属性以便在清单对象上拥有上下文工作流。

展示属性 specify a root parameter

如果无需从树根浏览清单,则应在工作流中使用该属性。

工作流验证

您必须验证工作流并修复所有错误。

对象创建

所有创建了新对象的工作流都应将新对象返回为输出参数。

弃用

如果某个工作流已被弃用,则 commentthrow 语句应指示替代工作流,或弃用的工作流应调用新的替代工作流以确保在工作流先前版本上构建的解决方案不会失效。

清单

主机断开连接

如果清单包含主机连接并且该主机不再可用,则应表明主机已断开连接。您可以通过重命名根对象(附加 - disconnected)或移除该对象下的对象树来执行此操作,具体方法与 vCloud Director 插件的方法相同。

Select value as list 属性

清单对象必须可选择为 treeviewlist

主机管理器

如果插件为目标系统实现了 host 对象,则应存在一个父 hostmanager 根对象,具有用于添加、移除或编辑主机属性的属性。

获取或更新对象

如果查询服务在编排技术上运行,您应使用该服务来获取多个对象。

子对象发现

如果您需要单独检索子对象,则检索过程必须采取多线程并且不能受单个错误阻止。

Orchestrator 对象更改

所有可以更改清单中元素状态的工作流必须更新清单以避免对象未能同步。

外部对象更改

您可以使用通知机制来通知编排技术中由于在 Orchestrator 外执行的操作所产生的更改。如果此类操作会将对象从编排技术中移除,您必须相应刷新清单以避免发生故障或丢失数据。例如,如果从 vCenter Server 中删除虚拟机,则 vCenter Server 插件将更新清单以移除已移除虚拟机的对象。

查找器对象

查找器对象应具有可用于区分对象的属性。这些通常都是位于用户界面中的属性。

脚本对象

实现

必须实现 equals 方法以确保 == 操作在同一对象上运行,这是因为在某些情况下对象可能拥有两个实例。

插件对象属性

具有父对象的对象应实现 parent 属性。

插件对象属性

具有子对象的对象应实现 GET 方法,以返回子对象数组。

清单对象

清单对象应可使用 Server.find 搜索。

所有清单对象应可序列化以便用作工作流中的输入或输出属性。

构造函数和方法

在大多数情况下,可编辑脚本的对象应具有构造函数,或应通过其他对象属性或方法返回。

对象 ID

如果对象具有从外部系统颁发的 ID,则在编排多台服务器时应使用内部 ID 以确保不会发生 ID 重复。

搜索对象

searchfind 方法应实现筛选器,以便可以查找指定的名称或 ID,而不是仅查找所有对象。例如,Orchestrator 服务器具有 Server.FindForId 方法,可按 ID 查找插件对象。为此,必须为插件中的每个可查找对象实现该方法。

触发器

如有可能,触发器应可用于发生更改的对象,这样 Orchestrator 可以对各类事件触发策略。例如,为确定新虚拟机何时添加、打开电源、关闭电源等,Orchestrator 可以监控 Datacenter 对象上 vCenter 插件中的触发器或事件。

对象属性

驻留在其他插件中的对象所具有的属性应可从一个插件对象轻松转换到另一个。例如,虚拟机对象需要拥有 moref(受管对象引用 ID)。

会话管理器

如果您要连接到可能存在不同会话的远程服务器,插件应实现两种会话:共享会话和单用户会话。

触发器

触发器

所有长操作和阻止方法都应能异步启动并返回任务,并在完成时生成触发器事件。

枚举

枚举

给定类型的枚举应拥有可在枚举中选择不同值的清单对象。

日志记录

日志

方法应实现不同日志级别。

版本控制

插件版本

插件版本应遵循相关标准并随插件更新一同更新。

API 文档

方法

API 文档中描述的方法不得在对象上引发异常 no xyz method / property。相反,方法应在无可用属性时返回 null,并在这些属性不可用时详细记录。

vso.xml

所有对象、方法和属性都必须记录在 vso.xml 内。