Figure 1. HTTP Request to Start a Runbook |
POST http://SERVER:81/Orchestrator2012/Orchestrator.svc/Jobs HTTP/1.1
User-Agent: PowerShell API Client (PowerShell 2.0; .NET CLR 2.0.50727.5448; WinNT 6.1.7601 Service Pack 1) Accept: application/atom+xml,application/xml Content-Type: application/atom+xml Accept-Encoding: identity Accept-Language: en-US DataServiceVersion: 1.0;NetFx MaxDataServiceVersion: 2.0;NetFx Pragma: no-cache Host: SERVER:81 Content-Length: 779 Expect: 100-continue <?xml version="1.0" encoding="utf-8" standalone="yes"?> <entry xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom"> <content type="application/xml"> <m:properties> <d:RunbookId m:type="Edm.Guid">0336c79b-ca82-449e-ad55-aefa9fb47fad</d:RunbookId> <d:Parameters><Data><Parameter><ID>{60a8fa04-6293-4767-b842-46cba5790553}</ID><Value>Hello</Value></Parameter><Parameter><ID>{c24d1cc5-deba-4bb5-b02e-44caf0fb296c}</ID><Value>World</Value></Parameter></Data></d:Parameters> </m:properties> </content> </entry> |
When the Orchestrator web service gets this request it creates a job record in the database and then returns the job information, including the job id, in the HTTP response. Figure 2 illustrates the response from the request in Figure 1.
Figure 2. HTTP Response from the Request to Start a Job |
HTTP/1.1 201 Created
Cache-Control: no-cache Content-Length: 2945 Content-Type: application/atom+xml;charset=utf-8 ETag: W/"datetime'2012-02-20T02%3A48%3A55.98'" Location: http://SERVER:81/Orchestrator2012/Orchestrator.svc/Jobs(guid'42fe8a86-bdea-47c9-aecb-845fdba8f8ca') Server: Microsoft-IIS/7.5 X-AspNet-Version: 4.0.30319 DataServiceVersion: 1.0; Persistent-Auth: true X-Powered-By: ASP.NET Date: Mon, 20 Feb 2012 02:48:55 GMT <?xml version="1.0" encoding="utf-8" standalone="yes"?> <entry xml:base="http://SERVER:81/Orchestrator2012/Orchestrator.svc/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:etag="W/"datetime'2012-02-20T02%3A48%3A55.98'"" xmlns="http://www.w3.org/2005/Atom"> <id>http://SERVER:81/Orchestrator2012/Orchestrator.svc/Jobs(guid'42fe8a86-bdea-47c9-aecb-845fdba8f8ca')</id> <title type="text"></title> <published>2012-02-20T02:48:55-08:00</published> <updated>2012-02-20T02:48:55-08:00</updated> <author> <name /> </author> <link rel="edit" title="Job" href="Jobs(guid'42fe8a86-bdea-47c9-aecb-845fdba8f8ca')" /> <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Runbook" type="application/atom+xml;type=entry" title="Runbook" href="Jobs(guid'42fe8a86-bdea-47c9-aecb-845fdba8f8ca')/Runbook" /> <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Instances" type="application/atom+xml;type=feed" title="Instances" href="Jobs(guid'42fe8a86-bdea-47c9-aecb-845fdba8f8ca')/Instances" /> <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/RunbookServer" type="application/atom+xml;type=entry" title="RunbookServer" href="Jobs(guid'42fe8a86-bdea-47c9-aecb-845fdba8f8ca')/RunbookServer" /> <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Statistics" type="application/atom+xml;type=feed" title="Statistics" href="Jobs(guid'42fe8a86-bdea-47c9-aecb-845fdba8f8ca')/Statistics" /> <category term="Microsoft.SystemCenter.Orchestrator.WebService.Job" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /> <content type="application/xml"> <m:properties> <d:Id m:type="Edm.Guid">42fe8a86-bdea-47c9-aecb-845fdba8f8ca</d:Id> <d:RunbookId m:type="Edm.Guid">0336c79b-ca82-449e-ad55-aefa9fb47fad</d:RunbookId> <d:Parameters><Data><Parameter><ID>{60a8fa04-6293-4767-b842-46cba5790553}</ID><Value>World</Value></Parameter><Parameter><ID>{c24d1cc5-deba-4bb5-b02e-44caf0fb296c}</ID><Value>Hello</Value></Parameter></Data></d:Parameters> <d:RunbookServers m:null="true" /> <d:RunbookServerId m:type="Edm.Guid" m:null="true" /> <d:ParentId m:type="Edm.Guid" m:null="true" /> <d:ParentIsWaiting m:type="Edm.Boolean">false</d:ParentIsWaiting> <d:Status>Pending</d:Status> <d:CreatedBy>S-1-5-21-3461259963-3254288209-657424328-1106</d:CreatedBy> <d:CreationTime m:type="Edm.DateTime">2012-02-20T02:48:55.98</d:CreationTime> <d:LastModifiedBy>S-1-5-21-3461259963-3254288209-657424328-1106</d:LastModifiedBy> <d:LastModifiedTime m:type="Edm.DateTime">2012-02-20T02:48:55.98</d:LastModifiedTime> </m:properties> </content> </entry> |
In Orchestrator a job is stopped by updating the job record in the database and setting the job status to "Canceled".
To stop a job using the Orchestrator web service you create a HTTP POST request to the particular Job resource (Figure 3). In the request header you must set several fields including the custom fields X-HTTP-Method and If-Match (
http://msdn.microsoft.com/en-us/library/dd541168(v=prot.10).aspx
).
X-HTTP-Method: MERGE
is a custom header used with the POST method that informs the service to process the request as a MERGE.
If-Match
is used to place a condition on the request action, in this case to assure that the job record being updated in the database still has the same LastModifiedTime as the LastModifiedTime in the request.
Figure 3. HTTP Request to Stop a Job |
POST http://SERVER:81/Orchestrator2012/Orchestrator.svc/Jobs(guid'01990fbd-19a4-42bd-82c2-9d37dc8dbc33') HTTP/1.1
User-Agent: PowerShell API Client (PowerShell 2.0; .NET CLR 2.0.50727.5448; WinNT 6.1.7601 Service Pack 1) Accept: application/atom+xml,application/xml Content-Type: application/atom+xml Accept-Encoding: identity Accept-Language: en-US DataServiceVersion: 1.0;NetFx MaxDataServiceVersion: 2.0;NetFx Pragma: no-cache X-HTTP-Method: MERGE If-Match: W/"datetime'2012-02-20T03%3A16%3A37.99'" Host: SERVER:81 Content-Length: 1568 Expect: 100-continue <?xml version="1.0" encoding="utf-8" standalone="yes"?> <entry xml:base="http://SERVER:81/Orchestrator2012/Orchestrator.svc/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:etag="W/"datetime'2012-02-20T03%3A16%3A37.99'"" xmlns="http://www.w3.org/2005/Atom"> <id>http://SERVER:81/Orchestrator2012/Orchestrator.svc/Jobs(guid'01990fbd-19a4-42bd-82c2-9d37dc8dbc33')</id> <title type="text"></title> <published>2012-02-20T03:16:36.313Z</published> <updated>2012-02-20T03:16:37.99Z</updated> <author><name /></author> <category term="Microsoft.SystemCenter.Orchestrator.WebService.Job" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" /> <content type="application/xml"> <m:properties> <d:Id m:type="Edm.Guid">01990fbd-19a4-42bd-82c2-9d37dc8dbc33</d:Id> <d:RunbookId m:type="Edm.Guid">37abf178-38f6-4f21-bc15-c51ba45523af</d:RunbookId> <d:Parameters m:null="true" /> <d:RunbookServers m:null="true" /> <d:RunbookServerId m:type="Edm.Guid">b83b8f14-c011-48c5-9661-563e1a335952</d:RunbookServerId> <d:ParentId m:type="Edm.Guid" m:null="true" /> <d:ParentIsWaiting m:type="Edm.Boolean">false</d:ParentIsWaiting> <d:Status>Canceled</d:Status> <d:CreatedBy>S-1-5-21-3461259963-3254288209-657424328-1106</d:CreatedBy> <d:CreationTime m:type="Edm.DateTime">2012-02-20T03:16:36.313</d:CreationTime> <d:LastModifiedBy>S-1-5-500</d:LastModifiedBy> <d:LastModifiedTime m:type="Edm.DateTime">2012-02-20T03:16:37.99</d:LastModifiedTime> </m:properties> </content> </entry> |
When the Orchestrator web service gets this request it updates the job record in the database (if the If-Match condition is satisfied) and then returns the status. The request is successful if the response status is "No Content". Figure 4 illustrates the response from the request in Figure 3.
Figure 4. HTTP Response from the request to stop a job |
HTTP/1.1 204
No Content
Cache-Control: no-cache Content-Length: 0 ETag: W/"datetime'2012-02-20T03%3A18%3A47.437'" Server: Microsoft-IIS/7.5 X-AspNet-Version: 4.0.30319 DataServiceVersion: 1.0; Persistent-Auth: true X-Powered-By: ASP.NET Date: Mon, 20 Feb 2012 03:18:46 GMT |
To illustrate the use of PowerShell to start runbooks and stop jobs using the Orchestrator web service I created a PowerShell module with functions that enable all of the examples in this post and more. Scenarios illustrated include these:
You can download the module and test files from http://orchestrator.codeplex.com/releases/view/82959 .
The Orchestrator web service allows remote control over the execution of runbooks. In this post, I illustrated the key concepts for starting runbooks and stopping jobs using HTTP POST requests. In a related post , I show how to retrieve Orchestrator resource data using PowerShell and the web service.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.