自定义 Service Broker 请求表单时,您可以根据 vRealize Orchestrator 操作的结果确定某些字段的行为。
可以通过多种方法使用 vRealize Orchestrator 操作。您可以从第三个源提取数据,也可以使用定义大小和成本的脚本。
第一个示例基于手动添加的字段,以便您了解基础流程。第二个示例使用的前提假设不变,但依赖于模板字段。
第三个示例基于添加到目录请求表单中的自定义选项,即用户根据自定义 vRealize Orchestrator 操作的结果选择文件夹。
第四个示例使用 vRealize Orchestrator 工作流属性自定义请求表单中的字段。
除了以下示例之外,还可以在 VMware Cloud Management 博客中查看其他示例。
大小和成本作为手动添加字段的示例
在此用例中,您希望目录用户选择虚拟机大小,然后显示该计算机的每日成本。在此示例中,您通过 vRealize Orchestrator 脚本将大小和成本关联起来。然后,将大小字段和成本字段添加到模板自定义表单。大小字段决定了将在成本字段中显示的值。
- 在 vRealize Orchestrator 中,配置名为 getWindows10Cost 的操作。
- 添加脚本。
可以使用以下示例脚本。
var cost = "Unknown"; switch(deploymentSize) { case 'small' : cost = "$15";break; case 'medium' : cost = "$25";break; case 'large' : cost = "$45";break ; default : break ; } return cost;
- 将 deploymentSize 作为输入字符串添加。
- 在 Service Broker 中,将大小字段添加到模板自定义表单并进行配置。
将大小字段配置为下拉元素,提供值 Small、Medium 和 Large。
在值选项卡上,配置以下属性值。
- 默认值 = Large
- 值选项
- 值源 = 常数
- 值定义 = small|Small,medium|Medium,large|Large
- 将成本字段作为文本字段添加,使其根据大小字段中选择的值按照 vRealize Orchestrator 操作中的定义来显示成本。
在值选项卡上,配置以下属性值。
- 默认值 = 外部源
- 选择操作 = <您的 vRealize Orchestrator 操作文件夹>/getWindows10Cost
- 操作输入
- deploymentSize。此值在操作中配置为输入。
- 字段
- 大小。这是之前创建的字段。
- 启用自定义表单并保存。
- 要验证该项目是否起作用,请在目录中请求该项目。您应该会看到根据所选的大小值填充的“成本”字段。
成本基于结构定义元素的示例
在此用例中,您希望目录用户了解基于模板中特定实例属性的该计算机的每日成本。要实现此示例,需要使用上一示例中的 vRealize Orchestrator 脚本。但在此用例中,成本基于用户在请求 Service Broker 目录项时在自定义表单中选择的特定实例大小。
基于自定义操作示例的目标文件夹
在此用例中,您希望目录用户在将计算机从一个文件夹移至另一个文件夹时,从可供他们使用的文件夹中进行选择。要实现此示例,需要在 vRealize Orchestrator 中创建一个自定义操作,以返回可供从目录请求操作的用户使用的文件夹。然后,在目录请求表单中自定义目标文件夹字段。
在目录中,此示例使用的将虚拟机移至文件夹工作流将显示为在 Cloud Assembly 中创建的自定义资源操作。
- 在 vRealize Orchestrator 中,创建名为 getFolderForUser 的操作。
- 在脚本选项卡上,添加操作输入,选择输出的返回类型,并添加脚本。
可以使用以下示例脚本。
var parentTargetDirName = "users"; var sdkConnection = VcPlugin.findSdkConnectionForUUID(vcUuid); var rootFolder = sdkConnection.getAllVmFolders(null, "xpath:matches(name,'" + parentTargetDirName + "')")[0]; var result = new Array(); for each(var folder in rootFolder.childEntity) { if (folder instanceof VcFolder && folder.permission.length > 0) { var entityPrivilege = sdkConnection.authorizationManager.hasUserPrivilegeOnEntities([folder], username, ["System.Read"])[0]; if (entityPrivilege.privAvailability[0].isGranted) { result.push(folder); } } } return result;
- 完成编辑操作时,单击保存。
- 在脚本选项卡上,添加操作输入,选择输出的返回类型,并添加脚本。
- 在 Cloud Assembly 中,创建名为 ChangeFolder 的自定义资源操作。
- 选择 Cloud.vSphere.Machine 资源类型。
- 选择将虚拟机移至文件夹工作流。
- 自定义用户在请求操作时看到的请求表单。
- 打开 ChangeFolder 操作。
- 单击编辑请求参数。
- 自定义向用户显示目标文件夹字段的方式。
值选项 示例值 值源 外部源 选择操作 getFolderForUser 操作输入 username Field
单击 。单击选择。
操作输入 vcUuid
单击 。单击选择。
- 单击保存。
当用户请求目录中的操作时,可以从可供他们使用的文件夹中为虚拟机选择目标文件夹。
基于工作流属性的主机名示例
- 在 vRealize Orchestrator 中,创建或克隆现有工作流。例如,克隆添加 REST 主机工作流。
- 在变量选项卡上,添加变量并将其绑定到配置元素。
值选项 示例值 名称 hostname 类型 string 配置 启用绑定到配置选项。 在配置文本框中,选择要将变量绑定到的配置。例如,选择自定义 vRO 配置: 主机名元素。
- 保存工作流。
- 在变量选项卡上,添加变量并将其绑定到配置元素。
- 在 Service Broker 中导入工作流。
- 自定义请求表单。
- 单击表单设计器中的 URL 元素。
- 在值选项卡上,将值源设置为绑定字段。
- 单击 。
- 选择 hostname 变量或任意可用的工作流属性。
- 保存并启用表单。
用户从目录请求工作流时,将根据 hostname 变量填充 URL 字段。
如果切换到其他项目,则会重新计算工作流属性,因为工作流可能来自不同的 vRealize Orchestrator 集成。