<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="../xslt/schema.xsl"?>

<!-- (C) 2011 OpenStack Foundation., All Rights Reserved -->

<schema
    elementFormDefault="qualified"
    attributeFormDefault="unqualified"
    xmlns="http://www.w3.org/2001/XMLSchema"
    xmlns:csapi="http://docs.openstack.org/compute/api/v1.1"
    xmlns:xsdxt="http://docs.rackspacecloud.com/xsd-ext/v1.0"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
    targetNamespace="http://docs.openstack.org/compute/api/v1.1"
>
  <annotation>
    <xsd:appinfo
        xml:lang="EN"
        xmlns="http://www.w3.org/1999/xhtml">
      <xsdxt:title>Servers and Related Types</xsdxt:title>
      <xsdxt:link rel="index" href="api.xsd" />
    </xsd:appinfo>
    <xsd:documentation
        xml:lang="EN"
        xmlns="http://www.w3.org/1999/xhtml">
      <p>
        This schema file defines a <a href="#type_Server"
        title="Server Type Definition"> Server</a> and all internal
        entities related to servers including <a
        href="#type_Addresses" title="Addresses type
        definition">Addresses</a> and <a href="#type_File" title="File
        type definition">Files</a>.
      </p>
    </xsd:documentation>
  </annotation>

  <!-- Import ATOM specific schema definitions -->
  <import namespace="http://www.w3.org/2005/Atom" schemaLocation="atom/atom.xsd" />

  <include schemaLocation="common.xsd">
    <annotation>
      <xsd:documentation
          xml:lang="EN"
          xmlns="http://www.w3.org/1999/xhtml">
        <p>
          Common types used by multiple entities and possibly spanning
          several types of requests.
        </p>
      </xsd:documentation>
    </annotation>
  </include>
  <include schemaLocation="image.xsd">
    <annotation>
      <xsd:documentation
          xml:lang="EN"
          xmlns="http://www.w3.org/1999/xhtml">
        <p>
          Types related to images.
        </p>
      </xsd:documentation>
    </annotation>
  </include>
  <include schemaLocation="flavor.xsd">
    <annotation>
      <xsd:documentation
          xml:lang="EN"
          xmlns="http://www.w3.org/1999/xhtml">
        <p>
          Types related to flavors.
        </p>
      </xsd:documentation>
    </annotation>
  </include>
  <include schemaLocation="faults.xsd">
    <annotation>
      <xsd:documentation
          xml:lang="EN"
          xmlns="http://www.w3.org/1999/xhtml">
        <p>
          All fault types.
        </p>
      </xsd:documentation>
    </annotation>
  </include>

  <element name="server" type="csapi:Server">
    <annotation>
      <xsd:documentation
          xml:lang="EN"
          xmlns="http://www.w3.org/1999/xhtml">
        <p>
          The element defines a server.
        </p>
      </xsd:documentation>
      <xsd:appinfo>
        <xsdxt:samples>
          <xsdxt:sample>
            <xsdxt:code type="application/xml" href="../samples/server.xml" />
          </xsdxt:sample>
          <xsdxt:sample>
            <xsdxt:code type="application/json" href="../samples/server.json" />
          </xsdxt:sample>
        </xsdxt:samples>
      </xsd:appinfo>
    </annotation>
  </element>

  <element name="servers" type="csapi:Servers">
    <annotation>
      <xsd:documentation
          xml:lang="EN"
          xmlns="http://www.w3.org/1999/xhtml">
        <p>
          A collection of servers.
        </p>
      </xsd:documentation>
      <xsd:appinfo>
        <xsdxt:samples>
          <xsdxt:sample>
            <xsdxt:code type="application/xml" href="../samples/servers.xml" />
          </xsdxt:sample>
          <xsdxt:sample>
            <xsdxt:code type="application/json" href="../samples/servers.json" />
          </xsdxt:sample>
        </xsdxt:samples>
      </xsd:appinfo>
    </annotation>
  </element>

  <element name="addresses" type="csapi:Addresses">
    <annotation>
      <xsd:documentation
          xml:lang="EN"
          xmlns="http://www.w3.org/1999/xhtml">
        <p>
          The element defines list of addresses by network: (public,
          private, ...).
        </p>
      </xsd:documentation>
      <xsd:appinfo>
        <xsdxt:samples>
          <xsdxt:sample>
            <xsdxt:code type="application/xml" href="../samples/addresses.xml" />
          </xsdxt:sample>
          <xsdxt:sample>
            <xsdxt:code type="application/json" href="../samples/addresses.json" />
          </xsdxt:sample>
        </xsdxt:samples>
      </xsd:appinfo>
    </annotation>
  </element>

  <element name="network" type="csapi:AddressList">
    <annotation>
      <xsd:documentation
          xml:lang="EN"
          xmlns="http://www.w3.org/1999/xhtml">
        <p>
            The element defines a list of addresses in a network.
        </p>
      </xsd:documentation>
      <xsd:appinfo>
        <xsdxt:samples>
          <xsdxt:sample>
            <xsdxt:code type="application/xml" href="../samples/public.xml" />
          </xsdxt:sample>
          <xsdxt:sample>
            <xsdxt:code type="application/json" href="../samples/public.json" />
          </xsdxt:sample>
        </xsdxt:samples>
      </xsd:appinfo>
    </annotation>
  </element>

   <element name="ip" type="csapi:Address">
    <annotation>
      <xsd:documentation
          xml:lang="EN"
          xmlns="http://www.w3.org/1999/xhtml">
        <p>
          The element defines an individual IP address.
        </p>
      </xsd:documentation>
      <xsd:appinfo>
        <xsdxt:samples>
          <xsdxt:sample>
            <xsdxt:code type="application/xml" href="../samples/address.xml" />
          </xsdxt:sample>
          <xsdxt:sample>
            <xsdxt:code type="application/json" href="../samples/address.json" />
          </xsdxt:sample>
        </xsdxt:samples>
      </xsd:appinfo>
    </annotation>
  </element>


  <!-- Complex Types -->
  <complexType name="Server">
    <annotation>
      <xsd:documentation
          xml:lang="EN"
          xmlns="http://www.w3.org/1999/xhtml">
        <p>
          A server is a virtual machine instance in the Cloud Servers
          system.  Note that this complex type defines all elements
          and attributes as optional because a server instance may
          take many different forms depending on the operation.  When
          creating a server, for example, the name, imageRef, and
          flavorRef attributes are required.  In addition, optional
          metadata and personality file elements may be specified:
        </p>
        <xsdxt:samples>
          <xsdxt:sample>
            <xsdxt:code type="application/xml" href="../samples/server-post-req.xml" />
          </xsdxt:sample>
          <xsdxt:sample>
            <xsdxt:code type="application/json" href="../samples/server-post-req.json" />
          </xsdxt:sample>
        </xsdxt:samples>
        <p>
          The response to such a crate operation will include the
          administration password, host ID, and addresses associated
          with the server:
        </p>
        <xsdxt:samples>
          <xsdxt:sample>
            <xsdxt:code type="application/xml" href="../samples/server-post-resp.xml" />
          </xsdxt:sample>
          <xsdxt:sample>
            <xsdxt:code type="application/json" href="../samples/server-post-resp.json" />
          </xsdxt:sample>
        </xsdxt:samples>
        <p>
          When modifying a server only the name and administration
          password should be specified as these are the only
          attributes that are modifiable.
        </p>
        <xsdxt:samples>
          <xsdxt:sample>
            <xsdxt:code type="application/xml" href="../samples/server-put-req.xml" />
          </xsdxt:sample>
          <xsdxt:sample>
            <xsdxt:code type="application/json" href="../samples/server-put-req.json" />
          </xsdxt:sample>
        </xsdxt:samples>
      </xsd:documentation>
    </annotation>
    <sequence>
      <element name="image" type="csapi:Image" minOccurs="0">
          <annotation>
              <xsd:documentation
                  xml:lang="EN"
                  xmlns="http://www.w3.org/1999/xhtml">
                  <p>
                      A reference to an image used to create the
                      server. External images must contian a link that
                      provides the full path to the image resource.
                  </p>
              </xsd:documentation>
          </annotation>
      </element>
      <element name="flavor" type="csapi:Flavor" minOccurs="0">
          <annotation>
              <xsd:documentation
                  xml:lang="EN"
                  xmlns="http://www.w3.org/1999/xhtml">
                  <p>
                      The current server flavor. This may not contais
                      all flavor detials but will always contain an
                      ID, a name, as well as self and bookmark links.
                  </p>
              </xsd:documentation>
          </annotation>
      </element>
      <element name="metadata" type="csapi:Metadata" minOccurs="0">
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              A collection of meta data items associated with the server.
            </p>
          </xsd:documentation>
        </annotation>
      </element>
      <element ref="csapi:addresses" minOccurs="0">
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              A server's public and private address.
            </p>
          </xsd:documentation>
        </annotation>
      </element>
      <element name="personality" type="csapi:Personality" minOccurs="0">
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              A collection of small <a href="#type_File" title="See
              definition of file">files</a> used to personalize a new
              server instance.
            </p>
          </xsd:documentation>
        </annotation>
      </element>
      <element name="fault" type="csapi:AsyncAPIFault" minOccurs="0">
          <annotation>
              <xsd:documentation
                  xml:lang="EN"
                  xmlns="http://www.w3.org/1999/xhtml">
                  <p>
                      The details of a fault that may have occurred
                      while cerating the server or performing a server
                      action.
                  </p>
              </xsd:documentation>
          </annotation>
      </element>
      <element vc:minVersion="1.1" ref="atom:link" minOccurs="0" maxOccurs="unbounded" />
      <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
    </sequence>
    <attribute type="xsd:string" name="name" use="optional">
      <annotation>
        <xsd:documentation
            xml:lang="EN"
            xmlns="http://www.w3.org/1999/xhtml">
          <p>
            The name of the server.
          </p>
        </xsd:documentation>
      </annotation>
    </attribute>
    <attribute type="xsd:anyURI" name="imageRef" use="optional">
      <annotation>
        <xsd:documentation
            xml:lang="EN"
            xmlns="http://www.w3.org/1999/xhtml">
          <p>
              A reference to an image.  This is used exclusevely when
              creating a server. Using an image ID here indicates that
              the image is locally hosted.
          </p>
        </xsd:documentation>
      </annotation>
    </attribute>
    <attribute type="xsd:anyURI" name="flavorRef" use="optional">
      <annotation>
        <xsd:documentation
            xml:lang="EN"
            xmlns="http://www.w3.org/1999/xhtml">
          <p>
              A reference to a flavor.  This is used exclusevely when
              creating a server. Using a flavorRef here indicates that
              the flavor is locally hosted.
          </p>
        </xsd:documentation>
      </annotation>
    </attribute>
    <attribute type="xsd:string" name="accessIPv4" use="optional">
      <annotation>
        <xsd:documentation
            xml:lang="EN"
            xmlns="http://www.w3.org/1999/xhtml">
          <p>
              The IPv4 primary IP.
          </p>
        </xsd:documentation>
      </annotation>
    </attribute>
    <attribute type="xsd:string" name="accessIPv6" use="optional">
      <annotation>
        <xsd:documentation
            xml:lang="EN"
            xmlns="http://www.w3.org/1999/xhtml">
          <p>
              The IPv6 primary IP.
          </p>
        </xsd:documentation>
      </annotation>
    </attribute>    <attribute type="csapi:UUID" name="id"   use="optional">
      <annotation>
        <xsd:documentation
            xml:lang="EN"
            xmlns="http://www.w3.org/1999/xhtml">
          <p>
            The ID of the server.
          </p>
        </xsd:documentation>
      </annotation>
    </attribute>
    <attribute type="xsd:string" name="adminPass" use="optional">
      <annotation>
        <xsd:documentation
            xml:lang="EN"
            xmlns="http://www.w3.org/1999/xhtml">
          <p>
            The server's administration password.
          </p>
        </xsd:documentation>
      </annotation>
    </attribute>
    <attribute type="xsd:string"    name="tenantId" use="optional">
      <annotation>
        <xsd:documentation
            xml:lang="EN"
            xmlns="http://www.w3.org/1999/xhtml">
          <p>
            A unique ID that identifies the tenant that contains
            the server.
          </p>
        </xsd:documentation>
      </annotation>
    </attribute>
    <attribute type="xsd:string"    name="userId" use="optional">
      <annotation>
        <xsd:documentation
            xml:lang="EN"
            xmlns="http://www.w3.org/1999/xhtml">
          <p>
            A unique ID that identifies the user who created
            the server.
          </p>
        </xsd:documentation>
      </annotation>
    </attribute>
    <attribute type="xsd:string"    name="hostId" use="optional">
      <annotation>
        <xsd:documentation
            xml:lang="EN"
            xmlns="http://www.w3.org/1999/xhtml">
          <p>
            A unique ID that identifies the physical host that the VM
            is running on. This ID is unique <strong>per
            account</strong> and not globally unique.
          </p>
        </xsd:documentation>
      </annotation>
    </attribute>
    <attribute type="csapi:Progress"  name="progress"  use="optional">
      <annotation>
        <xsd:documentation
            xml:lang="EN"
            xmlns="http://www.w3.org/1999/xhtml">
          <p>
            The progress of the current server operation.
          </p>
        </xsd:documentation>
      </annotation>
    </attribute>
    <attribute type="csapi:ExtensibleServerStatus" name="status" use="optional">
      <annotation>
        <xsd:documentation
            xml:lang="EN"
            xmlns="http://www.w3.org/1999/xhtml">
          <p>
            The current state (or <a href="#type_ExtensibleServerStatus"
            title="See definition of ExtensibleServerStatus">status</a>) of the
            server.
          </p>
        </xsd:documentation>
      </annotation>
    </attribute>
    <attribute type="xsd:dateTime" name="updated" use="optional">
      <annotation>
        <xsd:documentation
            xml:lang="EN"
            xmlns="http://www.w3.org/1999/xhtml">
          <p>
              The time the server was updated.
          </p>
        </xsd:documentation>
      </annotation>
    </attribute>
    <attribute type="xsd:dateTime" name="created" use="optional">
      <annotation>
        <xsd:documentation
            xml:lang="EN"
            xmlns="http://www.w3.org/1999/xhtml">
          <p>
              The time the server was created.
          </p>
        </xsd:documentation>
      </annotation>
    </attribute>
    <anyAttribute namespace="##other" processContents="lax"/>
  </complexType>

  <complexType name="ServerWithOnlyIDNameLinks">
      <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
              <p>
                  The only allowed attribute for this Server type is
                  the name, ID, and links. This type is used for
                  non-detailed server lists.
              </p>
          </xsd:documentation>
      </annotation>
      <complexContent>
          <restriction base="csapi:Server">
              <sequence>
                  <element ref="atom:link" minOccurs="1" maxOccurs="unbounded" />
                  <any vc:minVersion="1.1" namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
              </sequence>
              <attribute type="xsd:string" name="name" use="required"/>
              <attribute type="csapi:UUID" name="id"   use="required"/>
              <attribute type="xsd:string" name="accessIPv4" use="prohibited"/>
              <attribute type="xsd:string" name="accessIPv6" use="prohibited" />
              <attribute type="xsd:string" name="adminPass" use="prohibited"/>
              <attribute type="xsd:string" name="tenantId" use="prohibited"/>
              <attribute type="xsd:string" name="userId" use="prohibited"/>
              <attribute type="xsd:string" name="hostId" use="prohibited"/>
              <attribute type="csapi:Progress" name="progress"  use="prohibited"/>
              <attribute type="csapi:ExtensibleServerStatus" name="status" use="prohibited"/>
              <attribute type="xsd:dateTime" name="updated" use="prohibited"/>
              <attribute type="xsd:dateTime" name="created" use="prohibited"/>
              <anyAttribute namespace="##other" processContents="lax"/>
              <assert vc:minVersion="1.1" test="atom:link[@rel='self']/@href and atom:link[@rel='bookmark']/@href">
                  <annotation>
                      <xsd:documentation
                          xml:lang="EN"
                          xmlns="http://www.w3.org/1999/xhtml">
                          <p>
                              Here the server <strong>MUST</strong>
                              contain a name, an ID, a bookmark link,
                              and a self link.
                          </p>
                      </xsd:documentation>
                  </annotation>
              </assert>
          </restriction>
      </complexContent>
  </complexType>

  <complexType name="ServerForCreate">
      <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
              <p>
                  When creating a server the server must contain a
                  name and a reference to an image and flavor.
              </p>
          </xsd:documentation>
      </annotation>
      <complexContent>
          <restriction base="csapi:Server">
              <sequence>
                  <element name="metadata" type="csapi:Metadata" minOccurs="0">
                      <annotation>
                          <xsd:documentation
                              xml:lang="EN"
                              xmlns="http://www.w3.org/1999/xhtml">
                              <p>
                                  A collection of meta data items associated with the server.
                              </p>
                          </xsd:documentation>
                      </annotation>
                  </element>
                  <element name="personality" type="csapi:Personality" minOccurs="0">
                      <annotation>
                          <xsd:documentation
                              xml:lang="EN"
                              xmlns="http://www.w3.org/1999/xhtml">
                              <p>
                                  A collection of small <a href="#type_File" title="See
                                  definition of file">files</a> used to personalize a new
                                  server instance.
                              </p>
                          </xsd:documentation>
                      </annotation>
                  </element>
                  <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
              </sequence>
              <attribute type="xsd:string" name="name" use="required"/>
              <attribute type="xsd:anyURI" name="imageRef" use="required"/>
              <attribute type="xsd:anyURI" name="flavorRef" use="required"/>
              <attribute type="xsd:string" name="accessIPv4" use="optional"/>
              <attribute type="xsd:string" name="accessIPv6" use="optional" />
              <attribute type="xsd:string" name="adminPass" use="optional"/>
              <attribute type="csapi:UUID" name="id"   use="prohibited"/>
              <attribute type="xsd:string" name="tenantId" use="prohibited"/>
              <attribute type="xsd:string" name="userId" use="prohibited"/>
              <attribute type="xsd:string" name="hostId" use="prohibited"/>
              <attribute type="csapi:Progress" name="progress"  use="prohibited"/>
              <attribute type="csapi:ExtensibleServerStatus" name="status" use="prohibited"/>
              <attribute type="xsd:dateTime" name="updated" use="prohibited"/>
              <attribute type="xsd:dateTime" name="created" use="prohibited"/>
              <anyAttribute namespace="##other" processContents="lax"/>
          </restriction>
      </complexContent>
  </complexType>

  <complexType name="ServerForUpdate">
      <complexContent>
          <extension base="csapi:Server">
              <assert vc:minVersion="1.1" test="@name or @accessIPv4 or @accessIPv6 or csapi:metadata">
                  <annotation>
                      <xsd:documentation
                          xml:lang="EN"
                          xmlns="http://www.w3.org/1999/xhtml">
                          <p>
                              When updating a server.  The server
                              <strong>MUST</strong> contain either a
                              name or metadata or access address. The
                              other fields are not editabile on a
                              server update.
                          </p>
                      </xsd:documentation>
                  </annotation>
              </assert>
          </extension>
      </complexContent>
  </complexType>

  <complexType name="Servers">
    <sequence>
      <element name="server" type="csapi:Server" minOccurs="0" maxOccurs="1000">
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              A collection of servers.
            </p>
          </xsd:documentation>
        </annotation>
      </element>
      <element vc:minVersion="1.1" ref="atom:link" minOccurs="0" maxOccurs="unbounded" />
      <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
    </sequence>
    <anyAttribute namespace="##other" processContents="lax"/>
  </complexType>

  <complexType name="ServersWithOnlyIDsNamesLinks">
      <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
              <p>
                  A collection of servers with only IDs, names, and
                  links.  A collection of this type is returned in
                  non-detailed server list.
              </p>
          </xsd:documentation>
      </annotation>
      <complexContent>
          <restriction base="csapi:Servers">
              <sequence>
                  <element name="server" type="csapi:ServerWithOnlyIDNameLinks" minOccurs="0" maxOccurs="1000">
                  </element>
                  <element vc:minVersion="1.1" ref="atom:link" minOccurs="0" maxOccurs="unbounded" />
                  <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
              </sequence>
          </restriction>
      </complexContent>
  </complexType>

  <complexType name="Personality">
    <annotation>
      <xsd:documentation
          xml:lang="EN"
          xmlns="http://www.w3.org/1999/xhtml">
        A collection of small <a href="#type_File" title="See
        definition of file">files</a> used to personalize a server
        instance.
      </xsd:documentation>
    </annotation>
    <sequence>
      <element name="file" type="csapi:File" minOccurs="0" maxOccurs="5">
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              A collection of files.
            </p>
          </xsd:documentation>
        </annotation>
      </element>
      <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
    </sequence>
    <anyAttribute namespace="##other" processContents="lax"/>
  </complexType>

  <complexType name="File">
    <annotation>
      <xsd:documentation
          xml:lang="EN"
          xmlns="http://www.w3.org/1999/xhtml">
        <p>
          A file is simply a full path along with base64 file
          content. The name of the file is specified in the path
          attribute and the <a href="#type_FileContent" title="See
          definition of FileContent">file content</a> is included
          inline.
        </p>
        <xsdxt:code type="application/xml">
          <![CDATA[
          <file xmlns="http://docs.openstack.org/compute/api/v1.0"
                path="/etc/banner.txt">
            ICAgICAgDQoiQSBjbG91ZCBkb2VzIG5vdCBrbm93IHdoeSBpdCBtb3ZlcyBpbiBqdXN0IHN1Y2gg
            YSBkaXJlY3Rpb24gYW5kIGF0IHN1Y2ggYSBzcGVlZC4uLkl0IGZlZWxzIGFuIGltcHVsc2lvbi4u
            LnRoaXMgaXMgdGhlIHBsYWNlIHRvIGdvIG5vdy4gQnV0IHRoZSBza3kga25vd3MgdGhlIHJlYXNv
            bnMgYW5kIHRoZSBwYXR0ZXJucyBiZWhpbmQgYWxsIGNsb3VkcywgYW5kIHlvdSB3aWxsIGtub3cs
            IHRvbywgd2hlbiB5b3UgbGlmdCB5b3Vyc2VsZiBoaWdoIGVub3VnaCB0byBzZWUgYmV5b25kIGhv
            cml6b25zLiINCg0KLVJpY2hhcmQgQmFjaA==
          </file>
          ]]>
        </xsdxt:code>
      </xsd:documentation>
    </annotation>
    <simpleContent>
      <extension base="csapi:FileContent">
	<attribute name="path"  type="csapi:FileName" use="required">
          <annotation>
            <xsd:documentation
                xml:lang="EN"
                xmlns="http://www.w3.org/1999/xhtml">
              <p>
                Full file path.
              </p>
            </xsd:documentation>
          </annotation>
        </attribute>
        <anyAttribute namespace="##other" processContents="lax"/>
      </extension>
    </simpleContent>
  </complexType>

  <complexType name="Addresses">
    <sequence>
        <element name="network" type="csapi:AddressList" minOccurs="0" maxOccurs="1000"/>
        <element vc:minVersion="1.1" ref="atom:link" minOccurs="0" maxOccurs="unbounded" />
        <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
    </sequence>
    <anyAttribute namespace="##other" processContents="lax"/>
  </complexType>

  <complexType name="AddressList">
    <sequence>
      <element name="ip" type="csapi:Address" minOccurs="0" maxOccurs="1000">
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              A collection of addresses.
            </p>
          </xsd:documentation>
        </annotation>
      </element>
      <element vc:minVersion="1.1" ref="atom:link" minOccurs="0" maxOccurs="unbounded" />
      <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
    </sequence>
    <attribute type="xsd:string" name="id" use="optional">
        <annotation>
            <xsd:documentation
                xml:lang="EN"
                xmlns="http://www.w3.org/1999/xhtml">
                <p>
                    A id of an address list.  This is typically a name
                    used to identify a network.
                </p>
            </xsd:documentation>
        </annotation>
    </attribute>
    <anyAttribute namespace="##other" processContents="lax"/>
  </complexType>
  <complexType name="Address">
    <sequence>
      <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
    </sequence>
    <attribute name="addr" type="xsd:string" use="required">
      <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              An IP address.
            </p>
          </xsd:documentation>
        </annotation>
    </attribute>
    <attribute name="version" type="csapi:AddressVersion" use="optional">
      <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
                The IP Address version can be 4 or 6. The version
                attribute is optional if it is left off, the type of
                address will be determined by from its address
                format. If it is specified it <strong>should</strong>
                match the address format.
            </p>
            <p>
                The OpenStack compute API will always fill in the
                version number as a convinence to the client.
            </p>
          </xsd:documentation>
        </annotation>
    </attribute>
    <anyAttribute namespace="##other" processContents="lax"/>
  </complexType>

  <!-- Simple Types -->
  <simpleType name="ExtensibleServerStatus">
      <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
              <p>
                  An extensible server status type allows all of the
                  strings defined in <a href="#type_ServerStatus"
                  title="See definition of
                  ServerStatus">ServerStatus</a> or an alias prefixed
                  status.
              </p>
          </xsd:documentation>
      </annotation>
      <union memberTypes="csapi:ServerStatus csapi:ExtendedStatus"/>
  </simpleType>

  <simpleType name="ServerStatus">
    <restriction base="xsd:string">
      <enumeration value="ACTIVE">
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              The server is ready to use.
            </p>
          </xsd:documentation>
        </annotation>
      </enumeration>
      <enumeration value="SUSPENDED">
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              The server is in an inactive (suspended) state.
            </p>
          </xsd:documentation>
        </annotation>
      </enumeration>
      <enumeration value="DELETED">
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              The server has been deleted.
            </p>
          </xsd:documentation>
        </annotation>
      </enumeration>
      <enumeration value="RESIZE">
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              The server is being resized.
            </p>
          </xsd:documentation>
        </annotation>
      </enumeration>
      <enumeration value="VERIFY_RESIZE">
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              The server is waiting for the resize operation to be
              confirmed so that the original server may be removed.
            </p>
          </xsd:documentation>
        </annotation>
      </enumeration>
      <enumeration value="ERROR">
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              The requested operation failed, the server is in an
              error state.
            </p>
          </xsd:documentation>
        </annotation>
      </enumeration>
      <enumeration value="BUILD">
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              The server is being built.
            </p>
          </xsd:documentation>
        </annotation>
      </enumeration>
      <enumeration value="PASSWORD">
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              The server password is being changed.
            </p>
          </xsd:documentation>
        </annotation>
      </enumeration>
      <enumeration value="REBUILD">
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              The server is being rebuilt.
            </p>
          </xsd:documentation>
        </annotation>
      </enumeration>
      <enumeration value="REBOOT">
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              The server is going through a <a
              href="actions.xsd#type_RebootType" title="See definition
              of RebootType">SOFT</a> reboot.
            </p>
          </xsd:documentation>
        </annotation>
      </enumeration>
      <enumeration value="HARD_REBOOT">
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              The server is going through a <a
              href="actions.xsd#type_RebootType" title="See definition
              of RebootType">HARD</a> reboot.
            </p>
          </xsd:documentation>
        </annotation>
      </enumeration>
      <enumeration value="UNKNOWN">
        <annotation>
          <xsd:documentation
              xml:lang="EN"
              xmlns="http://www.w3.org/1999/xhtml">
            <p>
              The server is in an unknown state.
            </p>
          </xsd:documentation>
        </annotation>
      </enumeration>
    </restriction>
  </simpleType>

  <simpleType name="FileName">
    <restriction base="xsd:string">
      <maxLength value="255" />
    </restriction>
  </simpleType>

  <simpleType name="FileContent">
    <restriction base="xsd:base64Binary">
      <maxLength value="10240" />
    </restriction>
  </simpleType>

  <simpleType name="AddressVersion">
      <restriction base="xsd:int">
          <enumeration value="4">
              <annotation>
                  <xsd:documentation
                      xml:lang="EN"
                      xmlns="http://www.w3.org/1999/xhtml">
                      <p>
                          Denotes IPv4.
                      </p>
                  </xsd:documentation>
              </annotation>
          </enumeration>
          <enumeration value="6">
              <annotation>
                  <xsd:documentation
                      xml:lang="EN"
                      xmlns="http://www.w3.org/1999/xhtml">
                      <p>
                          Denotes IPv6.
                      </p>
                  </xsd:documentation>
              </annotation>
          </enumeration>
      </restriction>
  </simpleType>
</schema>
