murano-agent/docs/src/glazier-manual/src/docbkx/glazier-manual.xml

1911 lines
86 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!--
Copyright (c) 2013 Mirantis, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<book xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:m="http://www.w3.org/1998/Math/MathML"
xmlns:html="http://www.w3.org/1999/xhtml" version="5.0" status="DRAFT"
xsi:schemaLocation="http://docbook.org/ns/docbook http://www.docbook.org/xml/5.0/xsd/docbook.xsd
http://www.w3.org/1999/xlink http://www.w3.org/1999/xlink.xsd
http://docbook.org/ns/docbook " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<title>Glazier Project Documentation</title>
<info>
<author>
<personname>
<firstname/>
<surname/>
</personname>
<affiliation>
<orgname>Mirantis, Inc.</orgname>
</affiliation>
</author>
<copyright>
<year>2013</year>
<holder>Mirantis, Inc.</holder>
</copyright>
<releaseinfo>v0.1</releaseinfo>
<productname>Glazier™</productname>
<pubdate>2013-04-04</pubdate>
<legalnotice role="apache2">
<annotation>
<remark>Copyright details are filled in by the template. Change
the value of the role
attribute on the legalnotice element to change the license.
</remark>
</annotation>
</legalnotice>
<abstract>
<para>This document is intended for individuals who wish to
configure
and use our product or intend to contribute.
</para>
</abstract>
<cover>
<para>this is a placeholder for the front cover</para>
</cover>
<cover>
<para>this is a placeholder for the back cover</para>
</cover>
</info>
<chapter>
<title>Overview</title>
<para>Welcome to Glazier Project.
</para>
<section>
<title>Intended Audience</title>
<para>This guide is intended to individuals who want to contribute
to our
project.
</para>
</section>
<section>
<title>Document Change History</title>
<para>This version of the Glazier Manual replaces and obsoletes all
previous versions. The
most recent changes are described in the table below:
</para>
<informaltable rules="all">
<thead>
<tr>
<td align="center" colspan="1">Revision Date</td>
<td align="center" colspan="4">Summary of Changes</td>
</tr>
</thead>
<tbody>
<tr>
<td colspan="1" align="center">April. 4, 2013</td>
<td colspan="4">
<itemizedlist spacing="compact">
<listitem>
<para>Initial document creation.</para>
</listitem>
</itemizedlist>
</td>
</tr>
</tbody>
</informaltable>
</section>
<section>
<title>Additional Resources</title>
<itemizedlist spacing="compact">
<listitem>
<para>
<link xlink:href="http://www.mirantis.com">
Mirantis - Cloud Software
</link>
</para>
</listitem>
</itemizedlist>
</section>
</chapter>
<chapter id="architecture">
<title>Architecture</title>
<figure xml:id="glazierarchitecture">
<title>Architecture</title>
<mediaobject>
<imageobject role="fo">
<imagedata fileref="figures/architecture_diagram.png"
contentwidth="5in"/>
</imageobject>
<imageobject role="html">
<imagedata fileref="figures/architecture_diagram.png"/>
</imageobject>
</mediaobject>
</figure>
<para>
The Glazier architecture has the following components:
<itemizedlist spacing="compact">
<listitem>
<para>Glazier Dashboard - UI for the Glazier, extends
Horizon
</para>
</listitem>
<listitem>
<para>REST API - exposes Glazier API via REST. Maintains
environment configurations in Database
</para>
</listitem>
<listitem>
<para>Glazier Python Client - Python client for Glazier
REST API
</para>
</listitem>
<listitem>
<para>Orchestration Engine - builds the environment as
configured by the user.
Turns environment configurations into a Heat templates
for VM provision and Glazier Agent commands for service
deployment
</para>
</listitem>
<listitem>
<para>Glazier Agent - built into Windows Server VM images.
Executes commands sent by Orchestration Engine
</para>
</listitem>
</itemizedlist>
</para>
</chapter>
<chapter>
<title>API Specification</title>
<informaltable rules="all">
<thead>
<tr>
<td align="center" colspan="1">Revision Date</td>
<td align="center" colspan="4">Summary of Changes</td>
</tr>
</thead>
<tbody>
<tr>
<td colspan="1" align="center">February 4, 2013</td>
<td colspan="4">
<itemizedlist spacing="compact">
<listitem>
<para>Initial document creation</para>
</listitem>
</itemizedlist>
</td>
</tr>
<tr>
<td colspan="1" align="center">February 22, 2013</td>
<td colspan="4">
<itemizedlist spacing="compact">
<listitem>
<para>Enhance API with latest architecture
changes
</para>
</listitem>
</itemizedlist>
</td>
</tr>
<tr>
<td colspan="1" align="center">March 06, 2013</td>
<td colspan="4">
<itemizedlist spacing="compact">
<listitem>
<para>Fix specification according to remarks
from Dmitry Teselkin
</para>
</listitem>
</itemizedlist>
</td>
</tr>
</tbody>
</informaltable>
<section>
<title>Introduction</title>
<para>Glazier Service API is a programmatic interface used for interaction
with Glazier. Other interaction
mechanisms like Glazier Dashboard or Glazier CLI should use API as underlying
protocol for interaction.
</para>
<glossary>
<para>For detailed information about entities and terms used in this document, please refer first to
<xref
linkend="architecture"/>.
</para>
<glossentry>
<glossterm>Environment</glossterm>
<glossdef>
<para>Environment is a set of logically related Services managed by a single tenant. Environment
defines Windows environment boundaries.
</para>
<para>Services within single Environment may comprise some complex configuration while Services
in different Environments are always independent from one another. Each Environment is
associated with single OpenStack project (tenant).
</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>Service</glossterm>
<glossdef>
<para>Service is building block of Windows environment. Service is a set of one or more Virtual
Machines sharing a common purpose and configured together. Each service belongs to a single
Environment and single Service Type.
</para>
<para>Services are comprised from one or more Service Units.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>Service Type</glossterm>
<glossdef>
<para>Service type is definition for describing set of features exposed by service.</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>Service Unit</glossterm>
<glossdef>
<para>Service Units are the actual Windows Server VMs instantiated by OpenStack and then
configured according to its Service Type (this may also correspond to one of predefined
Windows Server roles).
</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>Service Metadata</glossterm>
<glossdef>
<para>Service Metadata is a JSON-encoded definition of Environment, its Services and their
Service Units along with all their attributes. Service Metadata may describe both current
and the intended state of the Environment.
</para>
</glossdef>
</glossentry>
<glossentry>
<glossterm>Session</glossterm>
<glossdef>
<para>All changes to environment done in scope of Session. After all changes to Environment
state are accumulated, changes actually are applied only after session is deployed.
</para>
</glossdef>
</glossentry>
</glossary>
</section>
<section>
<title>Return codes and errors</title>
<para>All REST API calls return the natural HTTP response codes for the operations, e.g. a successful GET
returns a HTTP 200, a successful PUT returns a HTTP 201, a GET for a non-existent entity returns HTTP
404, unauthorized operations return HTTP 401 or HTTP 403, internal errors return HTTP 500.
</para>
</section>
<section>
<title>Response of POSTs and PUTs</title>
<para>All POST and PUT requests by convention should return the created object (in the case of POST, with a
generated ID) as if it was requested by GET.
</para>
</section>
<section>
<title>Authentication</title>
<para>All requests include a Keystone authentication token header (X-Auth-Token). Clients must authenticate
with Keystone before interacting with the Glazier service.
</para>
</section>
<section>
<title>Workflow</title>
<figure xml:id="api_workflow">
<title>Sample Workflow</title>
<mediaobject>
<imageobject role="fo">
<imagedata fileref="figures/api_workflow.png"
contentwidth="5in"/>
</imageobject>
<imageobject role="html">
<imagedata fileref="figures/api_workflow.png"/>
</imageobject>
</mediaobject>
</figure>
<para>Lets review a sample workflow (series of API calls) for creating new Environment with Active
Directory Service deployment:
<orderedlist spacing="compact">
<listitem>
<para>POST /environments/ - Creating new Environment</para>
</listitem>
<listitem>
<para>POST /environments/id/configure Creating new configuration session for Environment
</para>
</listitem>
<listitem>
<para>POST /environments/id/activeDirectory Creating new ActiveDirectory service</para>
</listitem>
<listitem>
<para>POST /environments/id/sessions/session_id/deploy Saving and deploying changes</para>
</listitem>
</orderedlist>
</para>
</section>
<section>
<title>API</title>
<section>
<title>Environment API</title>
<para>This section describes API calls for Environment management.</para>
<table frame='all'>
<title>Environment Object</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="1*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Attribute</entry>
<entry>Type</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>id</entry>
<entry>guid</entry>
<entry>Unique ID</entry>
</row>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>User-friendly name</entry>
</row>
<row>
<entry>created</entry>
<entry>datetime</entry>
<entry>Creation date and time in ISO format</entry>
</row>
<row>
<entry>updated</entry>
<entry>datetime</entry>
<entry>Modification date and time in ISO format</entry>
</row>
<row>
<entry>tenant_id</entry>
<entry>guid</entry>
<entry>Open Stack tenant id</entry>
</row>
<row>
<entry>status</entry>
<entry>string</entry>
<entry>Deployment status: draft, pending, inprogress, finished</entry>
</row>
</tbody>
</tgroup>
</table>
<section>
<title>Get a List of existing Environments</title>
<section>
<title>Call</title>
<table frame='all'>
<title>GET /environments Call</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="4*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Method</entry>
<entry>URI</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>GET</entry>
<entry>/environments</entry>
<entry>Get a list of existing Environments</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section>
<title>Payload</title>
<para>None</para>
</section>
<section>
<title>Returns</title>
<para>This call returns list of environments. Only the basic properties are returned. For details see "Get Environment Detailed Information":
<programlisting>
<![CDATA[
{
"environments": [
{
"id": "0ce373a477f211e187a55404a662f968",
"name": "dc1",
"created": "2010-11-30T03:23:42Z",
"updated": "2010-11-30T03:23:44Z",
"tenant_id": "0849006f7ce94961b3aab4e46d6f229a"
},
{
"id": "c697bd2429304820a928d145aa42af59",
"name": "dc2",
"created": "2010-11-30T03:23:42Z",
"updated": "2010-11-30T03:23:44Z",
"tenant_id": "0849006f7ce94961b3aab4e46d6f229a"
}
]
}
]]>
</programlisting>
</para>
</section>
</section>
<section>
<title>Create Environment instance</title>
<section>
<title>Call</title>
<table frame='all'>
<title>POST /environments Call</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="4*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Method</entry>
<entry>URI</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>POST</entry>
<entry>/environments</entry>
<entry>Create new Environment</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section>
<title>Payload</title>
<programlisting>
<![CDATA[
{
"name": "env1"
}
]]>
</programlisting>
</section>
<section>
<title>Returns</title>
<para>This call returns created environment:
<programlisting>
<![CDATA[
{
"id": "ce373a477f211e187a55404a662f968",
"name": "env1",
"created": "2010-11-30T03:23:42Z",
"updated": "2010-11-30T03:23:44Z",
"tenant_id": "0849006f7ce94961b3aab4e46d6f229a"
}
]]>
</programlisting>
</para>
</section>
</section>
<section>
<title>Update Environment Instance</title>
<section>
<title>Call</title>
<table frame='all'>
<title>PUT /environments/&lt;id&gt; Call</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="4*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Method</entry>
<entry>URI</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>PUT</entry>
<entry>/environments/&lt;id&gt;</entry>
<entry>Update properties of Environment instance</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section>
<title>Payload</title>
<programlisting>
<![CDATA[
{
"name": "env1-changed"
}
]]>
</programlisting>
</section>
<section>
<title>Returns</title>
<para>This call returns modified environment object:
<programlisting>
<![CDATA[
{
"id": "ce373a477f211e187a55404a662f968",
"name": "env1-changed",
"created": "2010-11-30T03:23:42Z",
"updated": "2010-11-30T03:23:44Z",
"tenant_id": "0849006f7ce94961b3aab4e46d6f229a"
}
]]>
</programlisting>
</para>
</section>
</section>
<section>
<title>Get Environment Instance Detailed Information</title>
<section>
<title>Call</title>
<table frame='all'>
<title>GET /environments/&lt;id&gt; Call</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="4*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Method</entry>
<entry>URI</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>GET</entry>
<entry>/environments/&lt;id&gt;</entry>
<entry>Returns detailed information about Environment including child entities</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section>
<title>Payload</title>
<para>None</para>
</section>
<section>
<title>Returns</title>
<para>This call returns modified environment object:
<programlisting>
<![CDATA[
{
"id": "ce373a477f211e187a55404a662f968",
"name": "env1",
"created": "2010-11-30T03:23:42Z",
"updated": "2010-11-30T03:23:44Z",
"tenant_id": "0849006f7ce94961b3aab4e46d6f229a",
"status": "pending"
}
]]>
</programlisting>
</para>
</section>
</section>
<section>
<title>Remove Environment</title>
<section>
<title>Call</title>
<table frame='all'>
<title>DELETE /environments/&lt;id&gt; Call</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="4*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Method</entry>
<entry>URI</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>DELETE</entry>
<entry>/environments/&lt;id&gt;</entry>
<entry>Remove specified Environment.</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section>
<title>Payload</title>
<para>None</para>
</section>
<section>
<title>Returns</title>
<para>None</para>
</section>
</section>
</section>
<section>
<title>Environment Configuration API</title>
<para>Only one Environment can be configured at a time by only one user. This behavior archived by opening "configuration session" for some Environment by user, and locking this Environment for changes by other users. Only one open session per Environment is available.</para>
<table frame='all'>
<title>Configuration Session Object</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="1*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Attribute</entry>
<entry>Type</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>id</entry>
<entry>guid</entry>
<entry>Session unique ID</entry>
</row>
<row>
<entry>environment_id</entry>
<entry>guid</entry>
<entry>Environment that going to be modified during this session</entry>
</row>
<row>
<entry>created</entry>
<entry>datetime</entry>
<entry>Creation date and time in ISO format</entry>
</row>
<row>
<entry>updated</entry>
<entry>datetime</entry>
<entry>Modification date and time in ISO format</entry>
</row>
<row>
<entry>user_id</entry>
<entry>guid</entry>
<entry>Session owner guid</entry>
</row>
<row>
<entry>state</entry>
<entry>string</entry>
<entry>Session state. Could be: open, deploying, deployed</entry>
</row>
</tbody>
</tgroup>
</table>
<section>
<title>Get a List of Sessions</title>
<para>Only one open session can be for one Environment.</para>
<section>
<title>Call</title>
<table frame='all'>
<title>GET /environments/&lt;id&gt;/sessions Call</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="4*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Method</entry>
<entry>URI</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>GET</entry>
<entry>/environments/&lt;id&gt;/sessions</entry>
<entry>Get a list of open sessions</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section>
<title>Payload</title>
<para>None</para>
</section>
<section>
<title>Returns</title>
<para>This call returns list of open sessions:
<programlisting>
<![CDATA[
{
"sessions": [
{
"id": "108bbd04084d4dc8a2e8986fa8fa5bf2",
"environment_id": "4dc8a2e8986fa8fa5bf24dc8a2e8986fa8",
"created": "2010-11-30T03:23:42Z",
"updated": "2010-11-30T03:23:54Z",
"user_id": "d7b501094caf4daab08469663a9e1a2b",
"state": "deployed"
},
{
"id": "4aecdc2178b9430cbbb8db44fb7ac384",
"environment_id": "4dc8a2e8986fa8fa5bf24dc8a2e8986fa8",
"created": "2010-11-30T03:23:42Z",
"updated": "2010-11-30T03:23:54Z",
"user_id": "d7b501094caf4daab08469663a9e1a2b",
"state": "open"
}
]
}
]]>
</programlisting>
</para>
</section>
</section>
<section>
<title>Open session</title>
<para>During this call new working session is created, and session ID should be sent in header (X-Configuration-Session) to all next API calls.</para>
<section>
<title>Call</title>
<table frame='all'>
<title>POST /environments/&lt;id&gt;/configure Call</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="4*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Method</entry>
<entry>URI</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>POST</entry>
<entry>/environments/&lt;id&gt;/configure</entry>
<entry>Creating new configuration change session</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section>
<title>Payload</title>
<para>None</para>
</section>
<section>
<title>Returns</title>
<para>This call returns created session:
<programlisting>
<![CDATA[
{
"id": "4aecdc2178b9430cbbb8db44fb7ac384",
"environment_id": "4dc8a2e8986fa8fa5bf24dc8a2e8986fa8",
"created": "2010-11-30T03:23:42Z",
"updated": "2010-11-30T03:23:54Z",
"user_id": "d7b501094caf4daab08469663a9e1a2b",
"state": "open"
}
]]>
</programlisting>
</para>
</section>
</section>
<section>
<title>Deploy changes from Session</title>
<section>
<title>Call</title>
<table frame='all'>
<title>POST /environments/&lt;id&gt;/sessions/&lt;sessionId&gt;/deploy Call</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="4*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Method</entry>
<entry>URI</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>POST</entry>
<entry>/environments/&lt;id&gt;/sessions/&lt;sessionId&gt;/deploy</entry>
<entry>Deploying changes made in session with specified &lt;sessionId&gt;</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section>
<title>Payload</title>
<para>None</para>
</section>
<section>
<title>Returns</title>
<para>This call returns deployed session:
<programlisting>
<![CDATA[
{
"id": "4aecdc2178b9430cbbb8db44fb7ac384",
"environment_id": "4dc8a2e8986fa8fa5bf24dc8a2e8986fa8",
"created": "2010-11-30T03:23:42Z",
"updated": "2010-11-30T03:23:54Z",
"user_id": "d7b501094caf4daab08469663a9e1a2b",
"state": "deploying"
}
]]>
</programlisting>
</para>
</section>
</section>
<section>
<title>Get session information</title>
<section>
<title>Call</title>
<table frame='all'>
<title>GET /environments/&lt;id&gt;/sessions/&lt;sessionId&gt; Call</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="4*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Method</entry>
<entry>URI</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>GET</entry>
<entry>/environments/&lt;id&gt;/sessions/&lt;sessionId&gt;</entry>
<entry>Getting details about session with specified &lt;sessionId&gt;</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section>
<title>Payload</title>
<para>None</para>
</section>
<section>
<title>Returns</title>
<para>This call returns session information:
<programlisting>
<![CDATA[
{
"id": "4aecdc2178b9430cbbb8db44fb7ac384",
"environment_id": "4dc8a2e8986fa8fa5bf24dc8a2e8986fa8",
"created": "2010-11-30T03:23:42Z",
"updated": "2010-11-30T03:23:54Z",
"user_id": "d7b501094caf4daab08469663a9e1a2b",
"state": "deploying"
}
]]>
</programlisting>
</para>
</section>
</section>
<section>
<title>Delete Session </title>
<section>
<title>Call</title>
<table frame='all'>
<title>DELETE /environments/&lt;id&gt;/sessions/&lt;sessionId&gt; Call</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="4*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Method</entry>
<entry>URI</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>DELETE</entry>
<entry>/environments/&lt;id&gt;/sessions/&lt;sessionId&gt;</entry>
<entry>Delete session with specified &lt;sessionId&gt;</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section>
<title>Payload</title>
<para>None</para>
</section>
<section>
<title>Returns</title>
<para>None</para>
</section>
</section>
</section>
<section>
<title>Active Directory API</title>
<para>This section describes API calls for Active Directory service management.</para>
<section>
<title>Get a List of existing Active Directory instances</title>
<table frame='all'>
<title>Active Directory Object</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="1*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Attribute</entry>
<entry>Type</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>id</entry>
<entry>guid</entry>
<entry>Unique ID</entry>
</row>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>Domain name</entry>
</row>
<row>
<entry>created</entry>
<entry>datetime</entry>
<entry>Creation date and time in ISO format</entry>
</row>
<row>
<entry>updated</entry>
<entry>datetime</entry>
<entry>Modification date and time in ISO format</entry>
</row>
<row>
<entry>configuration</entry>
<entry>string</entry>
<entry>AD configuration: site, standalone, inTree</entry>
</row>
<row>
<entry>domain</entry>
<entry>string</entry>
<entry>Domain name (same as name)</entry>
</row>
<row>
<entry>units</entry>
<entry>object</entry>
<entry>Active Directory Unit object</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame='all'>
<title>Active Directory Unit Object</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="1*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Attribute</entry>
<entry>Type</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>id</entry>
<entry>guid</entry>
<entry>Unique ID</entry>
</row>
<row>
<entry>isMaster</entry>
<entry>boolean</entry>
<entry>Is unit is master domain?</entry>
</row>
<row>
<entry>location</entry>
<entry>string</entry>
<entry>AvailabilityZone or specific physical datacenter.</entry>
</row>
</tbody>
</tgroup>
</table>
<section>
<title>Call</title>
<table frame='all'>
<title>GET /environments/&lt;id&gt;/activeDirectories Call</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="4*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Method</entry>
<entry>URI</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>GET</entry>
<entry>/environments/&lt;id&gt;/activeDirectories</entry>
<entry>Get a list of Active Directory instances</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section>
<title>Payload</title>
<para>None</para>
</section>
<section>
<title>Returns</title>
<para>This call returns list of Active Directory instances:
<programlisting>
<![CDATA[
{
"activeDirectories": [{
"id": "96365940588b479294fe8e6dc073db04",
"name": "acme.dc",
"created": "2010-11-30T03:23:42Z",
"updated": "2010-11-30T03:23:44Z",
"configuration": "standalone",
"units": [{
"id": "d08887df15b94178b244904b506fe85b",
"isMaster": true,
"location": "west-dc"
}, {
"id": "dcf0de317e7046bea555539f19b8ea84",
"isMaster": false,
"location": "west-dc"
}]
}]
}
]]>
</programlisting>
</para>
</section>
</section>
<section>
<title>Create Active Directory instance</title>
<table frame='all'>
<title>Active Directory Object</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="1*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Attribute</entry>
<entry>Type</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>Domain name</entry>
</row>
<row>
<entry>configuration</entry>
<entry>string</entry>
<entry>AD configuration: site, standalone, inTree</entry>
</row>
<row>
<entry>adminPassword</entry>
<entry>string</entry>
<entry>Password from domain administrator account</entry>
</row>
<row>
<entry>domain</entry>
<entry>string</entry>
<entry>Domain name (same as name)</entry>
</row>
<row>
<entry>units</entry>
<entry>object</entry>
<entry>Active Directory Unit object</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame='all'>
<title>Active Directory Unit Object</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="1*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Attribute</entry>
<entry>Type</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>isMaster</entry>
<entry>boolean</entry>
<entry>Is unit is master domain?</entry>
</row>
<row>
<entry>recoveryPassword</entry>
<entry>string</entry>
<entry>Recovery password</entry>
</row>
<row>
<entry>location</entry>
<entry>string</entry>
<entry>AvailabilityZone or specific physical datacenter.</entry>
</row>
</tbody>
</tgroup>
</table>
<section>
<title>Call</title>
<table frame='all'>
<title>POST /environments/&lt;id&gt;/activeDirectories Call</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="4*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Method</entry>
<entry>URI</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>POST</entry>
<entry>/environments/&lt;id&gt;/activeDirectories</entry>
<entry>Create new Active Directory</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section>
<title>Payload</title>
<programlisting>
<![CDATA[
{
"name": "acme.dc",
"configuration": "standalone",
"adminPassword": "password",
"domain": "acme.dc",
"units": [
{
"isMaster": true,
"recoveryPassword": "password",
"location": "west-dc"
},
{
"isMaster": false,
"recoveryPassword": "password",
"location": "west-dc"
}
]
}
]]>
</programlisting>
</section>
<section>
<title>Returns</title>
<para>This call returns created active directory domain:
<programlisting>
<![CDATA[
{
"id": "96365940588b479294fe8e6dc073db04",
"name": "acme.dc",
"created": "2010-11-30T03:23:42Z",
"updated": "2010-11-30T03:23:44Z",
"domain": "acme.dc",
"configuration": "standalone",
"units": [{
"id": "d08887df15b94178b244904b506fe85b",
"isMaster": true,
"location": "west-dc"
}, {
"id": "dcf0de317e7046bea555539f19b8ea84",
"isMaster": false,
"location": "west-dc"
}]
}
]]>
</programlisting>
</para>
</section>
</section>
<section>
<title>Update Active Directory instance</title>
<table frame='all'>
<title>Active Directory Object</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="1*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Attribute</entry>
<entry>Type</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>id</entry>
<entry>guid</entry>
<entry>Unique ID</entry>
</row>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>Domain name</entry>
</row>
<row>
<entry>configuration</entry>
<entry>string</entry>
<entry>AD configuration: site, standalone, inTree</entry>
</row>
<row>
<entry>adminPassword</entry>
<entry>string</entry>
<entry>Password from domain administrator account</entry>
</row>
<row>
<entry>domain</entry>
<entry>string</entry>
<entry>Domain name (same as name)</entry>
</row>
<row>
<entry>units</entry>
<entry>object</entry>
<entry>Active Directory Unit object</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame='all'>
<title>Active Directory Unit Object</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="1*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Attribute</entry>
<entry>Type</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>id</entry>
<entry>guid</entry>
<entry>Unique ID</entry>
</row>
<row>
<entry>isMaster</entry>
<entry>boolean</entry>
<entry>Is unit is master domain?</entry>
</row>
<row>
<entry>recoveryPassword</entry>
<entry>string</entry>
<entry>Recovery password</entry>
</row>
<row>
<entry>location</entry>
<entry>string</entry>
<entry>AvailabilityZone or specific physical datacenter.</entry>
</row>
</tbody>
</tgroup>
</table>
<section>
<title>Call</title>
<table frame='all'>
<title>PUT /environments/&lt;id&gt;/activeDirectories/&lt;serviceId&gt; Call</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="4*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Method</entry>
<entry>URI</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>PUT</entry>
<entry>/environments/&lt;id&gt;/activeDirectories/&lt;serviceId&gt;</entry>
<entry>Update existing Active Directory</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section>
<title>Payload</title>
<programlisting>
<![CDATA[
{
"name": "acme.dc",
"configuration": "standalone",
"adminPassword": "password",
"domain": "acme.dc",
"units": [
{
"isMaster": true,
"recoveryPassword": "new-rpassword",
"location": "west-dc"
},
{
"isMaster": false,
"recoveryPassword": "new-rpassword",
"location": "west-dc"
}
]
}
]]>
</programlisting>
</section>
<section>
<title>Returns</title>
<para>This call returns updated active directory domain:
<programlisting>
<![CDATA[
{
"id": "96365940588b479294fe8e6dc073db04",
"name": "acme.dc",
"created": "2010-11-30T03:23:42Z",
"updated": "2010-11-30T03:23:44Z",
"configuration": "standalone",
"domain": "acme.dc",
"units": [{
"id": "d08887df15b94178b244904b506fe85b",
"isMaster": true,
"location": "west-dc"
}, {
"id": "dcf0de317e7046bea555539f19b8ea84",
"isMaster": false,
"location": "west-dc"
}]
}
]]>
</programlisting>
</para>
</section>
</section>
<section>
<title>Get Information about Active Directory instance</title>
<table frame='all'>
<title>Active Directory Object</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="1*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Attribute</entry>
<entry>Type</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>id</entry>
<entry>guid</entry>
<entry>Unique ID</entry>
</row>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>Domain name</entry>
</row>
<row>
<entry>created</entry>
<entry>datetime</entry>
<entry>Creation date and time in ISO format</entry>
</row>
<row>
<entry>updated</entry>
<entry>datetime</entry>
<entry>Modification date and time in ISO format</entry>
</row>
<row>
<entry>configuration</entry>
<entry>string</entry>
<entry>AD configuration: site, standalone, inTree</entry>
</row>
<row>
<entry>domain</entry>
<entry>string</entry>
<entry>Domain name (same as name)</entry>
</row>
<row>
<entry>units</entry>
<entry>object</entry>
<entry>Active Directory Unit object</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame='all'>
<title>Active Directory Unit Object</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="1*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Attribute</entry>
<entry>Type</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>id</entry>
<entry>guid</entry>
<entry>Unique ID</entry>
</row>
<row>
<entry>isMaster</entry>
<entry>boolean</entry>
<entry>Is unit is master domain?</entry>
</row>
<row>
<entry>location</entry>
<entry>string</entry>
<entry>AvailabilityZone or specific physical datacenter.</entry>
</row>
</tbody>
</tgroup>
</table>
<section>
<title>Call</title>
<table frame='all'>
<title>GET /environments/&lt;id&gt;/activeDirectories/&lt;serviceId&gt; Call</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="4*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Method</entry>
<entry>URI</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>GET</entry>
<entry>/environments/&lt;id&gt;/activeDirectories/&lt;serviceId&gt;</entry>
<entry>Return specified Active Directory instance</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section>
<title>Payload</title>
<para>None</para>
</section>
<section>
<title>Returns</title>
<para>This call returns modified environment object:
<programlisting>
<![CDATA[
{
"id": "96365940588b479294fe8e6dc073db04",
"name": "acme.dc",
"created": "2010-11-30T03:23:42Z",
"updated": "2010-11-30T03:23:44Z",
"configuration": "standalone",
"domain": "acme.dc",
"units": [{
"id": "d08887df15b94178b244904b506fe85b",
"isMaster": true,
"location": "west-dc"
}, {
"id": "dcf0de317e7046bea555539f19b8ea84",
"isMaster": false,
"location": "west-dc"
}]
}
]]>
</programlisting>
</para>
</section>
</section>
</section>
<section>
<title>Web Server API</title>
<para>This section describes API calls for managing Windows web-server software IIS.</para>
<table frame='all'>
<title>Web Server Object</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="1*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Attribute</entry>
<entry>Type</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>id</entry>
<entry>guid</entry>
<entry>Unique ID</entry>
</row>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>User-friendly name</entry>
</row>
<row>
<entry>created</entry>
<entry>datetime</entry>
<entry>Creation date and time in ISO format</entry>
</row>
<row>
<entry>updated</entry>
<entry>datetime</entry>
<entry>Modification date and time in ISO format</entry>
</row>
<row>
<entry>domain</entry>
<entry>string</entry>
<entry>Domain name (same as name)</entry>
</row>
<row>
<entry>units</entry>
<entry>object</entry>
<entry>Web Server Unit object</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame='all'>
<title>Web Server Unit Object</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="1*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Attribute</entry>
<entry>Type</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>id</entry>
<entry>guid</entry>
<entry>Unique ID</entry>
</row>
<row>
<entry>endpoint</entry>
<entry>object</entry>
<entry>Unit Endpoint</entry>
</row>
<row>
<entry>location</entry>
<entry>string</entry>
<entry>AvailabilityZone or specific physical datacenter.</entry>
</row>
</tbody>
</tgroup>
</table>
<table frame='all'>
<title>Web Server Unit Endpoint Object</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="1*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Attribute</entry>
<entry>Type</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>host</entry>
<entry>string</entry>
<entry>Host address for IIS Management Console connection</entry>
</row>
</tbody>
</tgroup>
</table>
<section>
<title>Get a List of existing Web Servers</title>
<section>
<title>Call</title>
<table frame='all'>
<title>GET /environments/&lt;id&gt;/webServers Call</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="4*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Method</entry>
<entry>URI</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>GET</entry>
<entry>/environments/&lt;id&gt;/webServers</entry>
<entry>Get a list of existing Web Servers</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section>
<title>Payload</title>
<para>None</para>
</section>
<section>
<title>Returns</title>
<para>This call returns list of web servers:
<programlisting>
<![CDATA[
{
"webServers":
[
{
"id": "0ce373a477f211e187a55404a662f968",
"name": "frontend",
"created": "2010-11-30T03:23:42Z",
"updated": "2010-11-30T03:23:44Z",
"domain": "ACME",
"units": [{
"id": "1bf3491c409b4541b6f18ea5988a6437",
"endpoint": {
"host": "10.0.0.2"
},
"location": "west-dc"
}]
},
{
"id": "c697bd2429304820a928d145aa42af59",
"name": "backend",
"created": "2010-11-30T03:23:42Z",
"updated": "2010-11-30T03:23:44Z",
"domain": "ACME" ,
"units": [{
"id": "eb32f97866d24001baa430cb34e4049f",
"endpoint": {
"host": "10.0.0.3"
},
"location": "west-dc"
}]
}
]
} ]]>
</programlisting>
</para>
</section>
</section>
<section>
<title>Create Web Server instance</title>
<section>
<title>Call</title>
<table frame='all'>
<title>POST /environments/&lt;id&gt;/webServers Call</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="4*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Method</entry>
<entry>URI</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>POST</entry>
<entry>/environments/&lt;id&gt;/webServers</entry>
<entry>Create new Web Server</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section>
<title>Payload</title>
<programlisting>
<![CDATA[
{
"name": "frontend",
"domain": {
"name": "ACME",
"credentials": {
"username": "admin",
"password": "password"
}
},
"credentials": {
"username": "admin",
"password": "password"
}
"location": "west-dc"
}
]]>
</programlisting>
</section>
<section>
<title>Returns</title>
<para>This call returns created web server:
<programlisting>
<![CDATA[
{
"id": "ce373a477f211e187a55404a662f968",
"name": "frontend",
"created": "2010-11-30T03:23:42Z",
"updated": "2010-11-30T03:23:44Z",
"domain": "ACME",
"units": [{
"id": "1bf3491c409b4541b6f18ea5988a6437",
"location": "west-dc"
}]
}
]]>
</programlisting>
</para>
</section>
</section>
<section>
<title>Update Web Server Instance</title>
<section>
<title>Call</title>
<table frame='all'>
<title>PUT /environments/&lt;id&gt;/webServers/&lt;serviceId&gt; Call</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="4*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Method</entry>
<entry>URI</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>PUT</entry>
<entry>/environments/&lt;id&gt;/webServers/&lt;serviceId&gt;</entry>
<entry>Update properties of WebServer instance</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section>
<title>Payload</title>
<programlisting>
<![CDATA[
{
"name": "frontend-changed",
"domain": {
"name": "ACME",
"username": "admin",
"password": "password"
},
"credentials": {
"username": "admin",
"password": "password"
}
}
]]>
</programlisting>
</section>
<section>
<title>Returns</title>
<para>This call returns modified web server object:
<programlisting>
<![CDATA[
{
"id": "ce373a477f211e187a55404a662f968",
"name": "frontend",
"created": "2010-11-30T03:23:42Z",
"updated": "2010-11-30T03:23:44Z",
"domain": "ACME",
"units": [{
"id": "1bf3491c409b4541b6f18ea5988a6437",
"location": "west-dc"
}]
}
]]>
</programlisting>
</para>
</section>
</section>
<section>
<title>Get Web Server Instance Detailed Information</title>
<section>
<title>Call</title>
<table frame='all'>
<title>GET /environments/&lt;id&gt;/webServers/&lt;serviceId&gt; Call</title>
<tgroup cols='3' align='left' colsep='1' rowsep='1'>
<colspec colnum="1" colname="col1" colwidth="1*"/>
<colspec colnum="2" colname="col2" colwidth="4*"/>
<colspec colnum="3" colname="col3" colwidth="4*"/>
<thead>
<row>
<entry>Method</entry>
<entry>URI</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry>GET</entry>
<entry>/environments/&lt;id&gt;/webServers/&lt;serviceId&gt;</entry>
<entry>Returns detailed information about Web Server</entry>
</row>
</tbody>
</tgroup>
</table>
</section>
<section>
<title>Payload</title>
<para>None</para>
</section>
<section>
<title>Returns</title>
<para>This call returns modified environment object:
<programlisting>
<![CDATA[
{
"id": "c697bd2429304820a928d145aa42af59",
"name": "backend",
"created": "2010-11-30T03:23:42Z",
"updated": "2010-11-30T03:23:44Z",
"domain": "ACME" ,
"units": [{
"id": "eb32f97866d24001baa430cb34e4049f",
"endpoint": {
"host": "10.0.0.3"
},
"location": "west-dc"
}]
}
]]>
</programlisting>
</para>
</section>
</section>
</section>
</section>
</chapter>
</book>