为增强数据中心的自动化选项,Orchestrator 2012 公开了一个 REST OData Web 服务。此 Web 服务支持以编程方式访问 Orchestrator 运行时资源,如 Runbook、作业和事件,还支持用户启动 Runbook 和停止作业。
Web 服务的一个目标是支持从任何应用程序轻松实现 Orchestrator 运行时的自动化。为此,属于 Orchestrator 2012 一部分的 Orchestration 控制台使用 Web 服务与 Orchestrator 连接。
OData
OData 是一个为客户端设计的 Web 协议,用于查询和更新数据服务中的数据。OData 基于 REST,也就是说它使用标准 HTTP 语法和方法(例如 GET、POST)支持 CRUD 对数据的操作。数据查询使用标准 URL 语法定义,响应数据以标准 AtomPub 或 JSON 格式传输。
Orchestrator OData
OData 服务将数据表示为资源或资源之间的关系。对于 Orchestrator,公开的资源是下图文块 1 中列出的那些资源。对于指定的资源,还公开了与其他资源的关系;这意味着像 Runbook 这样的资源将使用元数据 (URL) 表示与其他资源(如作业和活动)的关系(有关示例,请参见图文块 3)。
查询 Orchestrator 资源集合
指向 Orchestrator Web 服务的基本 URL 如下所示:
- http://SERVER:81/Orchestrator2012/Orchestrator.svc/
为响应此 HTTP GET 请求,Web 服务将默认返回 AtomPub 格式的 XML,其中包括对由该服务公开的所有 Orchestrator 资源的引用(图文块 1)。
图文块 1:Orchestrator 资源集合(AtomPub 格式) |
注意:在 Internet Explorer 中,要作为 XML 而非数据源查看 Web 服务响应,请执行以下操作:
- 浏览到“选项”>“内容”>“源和网页快讯”>“设置”,并取消选中“打开源阅读视图”。
使用 PowerShell 连接到 Orchestrator Web 服务
Orchestrator Web 服务的一个关键用途是通过 PowerShell 脚本实现自动化。连接 Web 服务很简单。下面是一个连接 Web 服务并检索上面(图文块 1)所示的集合列表的基本脚本(图文块 2):
图文块2. 用于连接 Orchestrator Web 服务并获取响应 xml 的 PowerShell 脚本 |
检索特定的资源集合
为获取特定资源的记录,URL 采用以下形式:
- http://SERVER:81/Orchestrator2012/Orchestrator.svc/COLLECTION-HREF/
其中,COLLECTION-HREF 可以在 Collection xml(图文块 1)中找到,如下所示:
- <collection href="Runbooks">
因此,要检索 Runbook 资源,请使用以下 URL:
- http://SERVER:81/Orchestrator2012/Orchestrator.svc/Runbooks/
图文块 3:Web 服务返回的 Runbook 资源(AtomPub 格式) |
每个 <entry> 节点都包含一个资源的信息。使用 PowerShell,可以非常简单地将此 xml 解析为可以由其他脚本轻松使用的自定义对象。
分页
出于性能方面的考虑,Orchestrator Web 服务对每页返回的资源数有一个限制 - 在安装时,该限制被配置为每页 50 个资源。要了解特定资源的总数以及要逐页获取资源,请在 URL 查询中使用以下结构:
- $skip=0&$top=50&$inlinecount=allpages
- $skip 是跳过的记录数
- $top 是返回的记录数(如果未重新配置,最大为 50 个)
- $inlinecount=allpages 指示 Web 服务包括所有记录数
例如:
- http://SERVER:81/Orchestrator2012/Orchestrator.svc/Jobs()?$skip=100&$top=50&$inlinecount=allpages
- 将返回第三页作业资源(有 50 个记录)
- 计数显示在响应 xml 中,如下所示:
- <m:count>153</m:count>
- 指示总共有 153 个作业(需要 4 页才能全部检索)
示例 PowerShell 模块
为说明如何使用 PowerShell 从 Orchestrator Web 服务中获取资源,我创建了一个 PowerShell 模块,该模块能够支持本博客中的所有示例以及其他示例。说明的场景包括:
- 获取 Web 服务公开的集合
- 获取一个 Runbook
- 获取系统中的所有 Runbook
- 获取一个作业
- 获取系统中的所有作业
- 获取特定 Runbook 服务器上的所有作业
- 获取具有特定状态的所有作业
- 获取特定 Runbook 的所有作业
- 获取特定作业的所有 Runbook 实例
您可以从 http://orchestrator.codeplex.com/releases/view/82959下载该模块和测试文件。
编写自己的 PowerShell
本博客中讨论并在该模块中实施的功能只是其中的一个示例。例如,可能需要对整个范围的资源进行筛选。了解如何通过 REST 与 Web 服务通信的一个良好方法是打开 Orchestration 控制台,启动 Fiddler,并查看控制台中的各种操作在控制台与 Web 服务之间的通信方式。
总结
Orchestrator Web 服务公开了所有关键的运行时资源。在本博客中,我介绍了使用 HTTP GET 获取这些资源的关键概念。在相关博客中,我将介绍如何使用 HTTP POST 启动 Runbook 和停止作业;这些操作提供了与 Orchestrator 的另一级别的编程交互。