Jump to: navigation, search

Difference between revisions of "QuantumAPISpec"

m (Text replace - "__NOTOC__" to "")
 
(27 intermediate revisions by 2 users not shown)
Line 1: Line 1:
__NOTOC__
 
= Quantum API Specification =
 
  
<<[[TableOfContents]]()>>
+
Please see: http://docs.openstack.org/api/openstack-network/2.0/content/index.html
 
 
== Introduction ==
 
~+~-
 
Quantum is a project to provide "network connectivity as a service" between devices managed by other Openstack services such as nova.
 
For more information on Quantum and the other network-related projects please check the [[Quantum|Quantum home page]] and the [[Network|Network projects home page]].
 
 
 
This document constitutes a first attempt in defining an API for the Quantum service. The operation list cannot be deemed complete, and formats for request and response messages have not yet been defined. Moreover, authentication, authorization, and extension mechanisms, as well as the URL structure, are not defined in this document. -~+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">Since Quantum provides “network connectivity as a service”, this API defines Layer-2 operations only. </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">We first introduce the operation list, and then discuss how these operations can be used to accomplish some common use cases.</span> </span>
 
 
 
== Glossary ==
 
{| border="1" cellpadding="2" cellspacing="0"
 
|<#4F91BD>|Entity
 
|-
 
| Network
 
|-
 
|<#4F91BD>|Plugin
 
|-
 
| Logical Port
 
|-
 
|<#4F91BD>|VIF
 
|-
 
| Attachment
 
|}
 
 
 
== Theory of Operation ==
 
 
 
This section presents the objects and semantics of quantum’s logical model. 
 
Quantum abstracts the physical implementation of the network, allowing plugins to configure and manage physical resources.
 
 
 
Quantum is a standalone service, in that it requires no other projects within Openstack to function correctly. Further quantum is agnostic to the entities it allows to connect. While we anticipate Nova created instances will be a heavy user of quantum, any entity can make use of any quantum created network so long as it implements a standard interface (VIF). In this way it our intent to future proof quantum to allow additional entity types such as Load Balancers, Firewalls, Volumes (VaaS) or other entities to connect.
 
Virtual Interfaces(VIF) in the logical model are analogous to physical network interface cards (NIC). In the same way as a physical NIC a VIF may have and advertise capabilities. The VIF is instantiated with these capabilities when it is created as part of the entity. Use of the VIF capabilities is out of scope of this document. However intelligently schedulers may chose to place entities on physical hardware best capable of honouring these capabilities, much as logical processors of virtual memory requirements may be used to schedule in a virtual machine instances.
 
 
 
The VIF will be connected to the network via a logical port.  The logical port begins in a “down” state. Logic ports are transient when in the “down” state, by this we mean they don’t have any binding to a physical implementation.  The plugin must create this binding as a part of the attachment process.
 
When a VIF is attached to a logical port the plugin creates the binding to the physical hardware required to allow operation of the VIF. This is indicated by the change in port state from “down” to “active”.  As a result of the attachment operation, quantum can now knows the capabilities of the VIF as dictated by the physical binding. As a result the logical port may advertise capabilities once it moves to the “active” state.
 
 
 
Entities attached to an “active” port are required to have access to the L2 broadcast domain. The entity shall be capable of exchanging L2 traffic with all other entities attached through an “Active” port. At this point any additional behaviour is outside the scope of quantum. However in practice the VIF is likely to make use of additional services or extensions to add L3 protocols on top of this interface.
 
 
 
{{http://i56.tinypic.com/vem4c6.jpg}}
 
 
 
== Operation List ==
 
 
 
List of error response codes:
 
{| border="1" cellpadding="2" cellspacing="0"
 
| '''Code'''
 
| '''Name'''
 
|-
 
|<#4F91BD><<Anchor(400-[[MalformedRequest]])>|>400
 
|<#4F91BD>|Malformed Request
 
|-
 
|<<Anchor(401-Unauthorized)>|>401
 
| Unauthorized
 
|-
 
|<#4F91BD><<Anchor(420-[[NetworkNotFound]])>|>420
 
|<#4F91BD>|NetworkNotFound
 
|-
 
|<<Anchor(421-[[NetworkInUse]])>|>421
 
| NetworkInUse
 
|-
 
|<#4F91BD><<Anchor(430-[[PortNotFound]])>|>430
 
|<#4F91BD>|PortNotFound
 
|-
 
|<<Anchor(431-[[RequestedStateInvalid]])>|>431
 
| RequestedStateInvalid
 
|-
 
|<#4F91BD><<Anchor(432-[[PortInUse]])>|>432
 
|<#4F91BD>|PortInUse
 
|-
 
|<<Anchor(440-[[AlreadyAttached]])>|>440
 
| AlreadyAttached
 
|}
 
 
 
<span style="font-size: larger"><span id="op1"></span><<Anchor([[GetNetworks]])>>  </span>
 
----
 
=== List networks ===
 
----
 
~+
 
{| border="1" cellpadding="2" cellspacing="0"
 
| Verb
 
| URI
 
|-
 
| GET
 
| /tenants/{tenant-id}/networks
 
|}
 
+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Request Body:'' </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">This operation does not require a request body. </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Description:'' </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">This operation returns the list of all networks currently defined in Quantum; returned list includes at least the network’s unique identifier. </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Sample Request/Response:'' </span></span>
 
 
 
'''XML'''
 
Request:
 
 
 
<pre><nowiki>
 
GET /tenants/XYZ/networks.xml
 
</nowiki></pre>
 
 
 
Network list response (XML):
 
 
 
<pre><nowiki>
 
<networks>
 
    <network id="8bec1293-16bd-4568-ba75-1f58bec0b4c3"/>
 
    <network id="2a39409c-7146-4501-8429-3579e03e9b56"/>
 
</networks>
 
</nowiki></pre>
 
 
 
 
 
'''JSON''':
 
Request:
 
 
 
<pre><nowiki>
 
GET /tenants/XYZ/networks.json
 
</nowiki></pre>
 
 
 
Network list response (JSON):
 
 
 
<pre><nowiki>
 
{"networks":
 
        [
 
        {"id": "8bec1293-16bd-4568-ba75-1f58bec0b4c3"},
 
        {"id": "2a39409c-7146-4501-8429-3579e03e9b56"}
 
        ]
 
}
 
</nowiki></pre>
 
 
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Response Codes:'' </span></span>
 
 
 
~+~-Normal Response code: 200
 
 
 
Error response code(s):  [[#470-ServiceUnavailable]], [[#401-Unauthorized]] -~ +~
 
 
 
<span style="font-size: larger"><span id="op2"></span><<Anchor([[GetNetworkDetails]])>>  </span>
 
 
 
----
 
=== List network details ===
 
----
 
~+
 
{| border="1" cellpadding="2" cellspacing="0"
 
| Verb
 
| URI
 
|-
 
| GET
 
| /tenants/{tenant-id}/networks/{network-idid}
 
|}
 
+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Request Body:'' </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">This operation does not require a request body. </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Description:'' </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">This operation provides detailed output for a specific network configured in Quantum.' </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Sample Request/Response:'' </span></span>
 
 
 
'''XML'''
 
Request:
 
 
 
<pre><nowiki>
 
GET /tenants/XYZ/networks.xml
 
</nowiki></pre>
 
 
 
Network list response (XML):
 
 
 
<pre><nowiki>
 
<networks>
 
    <network id="8bec1293-16bd-4568-ba75-1f58bec0b4c3"/>
 
    <network id="2a39409c-7146-4501-8429-3579e03e9b56"/>
 
</networks>
 
</nowiki></pre>
 
 
 
 
 
'''JSON''':
 
Request:
 
 
 
<pre><nowiki>
 
GET /tenants/XYZ/networks.json
 
</nowiki></pre>
 
 
 
Network list response (JSON):
 
 
 
<pre><nowiki>
 
{"networks":
 
        [
 
        {"id": "8bec1293-16bd-4568-ba75-1f58bec0b4c3"},
 
        {"id": "2a39409c-7146-4501-8429-3579e03e9b56"}
 
        ]
 
}
 
</nowiki></pre>
 
 
 
 
 
 
 
<pre><nowiki>
 
<Network>
 
<id> Universily Unique ID </id>
 
<Name>Short description of network </Name>
 
<dateCreated>Date of Creation in format YYYY-MM-DD HH:MM:SS </dateCreated>
 
<NumAttachedPorts>Number of ports currently in “Active” state </NumAttachedPorts>
 
</Network>
 
</nowiki></pre>
 
 
 
 
 
Details about ports configured for the network and resources attached to can be retrieved using the ''detail'' action for this operation:
 
<code><nowiki> GET /tenants/{tenant-id}/networks/{network-id}/detail </nowiki></code>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Response Codes:'' </span></span>
 
 
 
~+~-Normal Response code: 200
 
 
 
Error response code(s):  [[#470-ServiceUnavailable]], [[#401-Unauthorized]], [[#402-NetworkNotFound]] -~+~
 
 
 
<span style="font-size: larger"> <span id="op3"></span><<Anchor([[PostNetwork]])>>  </span>
 
----
 
=== Create Network ===
 
----
 
~+
 
{| border="1" cellpadding="2" cellspacing="0"
 
| Verb
 
| URI
 
|-
 
| POST
 
| /networks
 
|}
 
+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Request Body:'' </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">The body for this network should contain a symbolic name for the network. </span></span>
 
 
 
<pre><nowiki>
 
<Network>
 
<Name>Short description of network </Name>
 
</Network>
 
</nowiki></pre>
 
 
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Description:'' </span></span>
 
 
 
~+~-This operation asynchronously creates a Layer-2 network in Quantum based on the information provided in the request body. 
 
 
 
Quantum validates the request, and dispatches it to the plugin, and then returns the unique identifier of the network to the caller, who can check the progress of the operation performing a GET on networks/id.
 
 
 
Resources for the new network can be either provided at create time or when virtual interfaces are plugged into this network depending on the particular plugin implementation. 
 
 
 
If the validation phase fails, the network object is not created at all, and a 400 error is returned to the caller. -~+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Response Codes:'' </span></span>
 
 
 
~+~-Normal Response code: 202
 
 
 
Error response code(s):  [[#470-ServiceUnavailable]],[[#401-Unauthorized]],[[#400-MalformedRequest]]
 
 
 
-~ <span id="op4"></span><<Anchor([[PutNetwork]])>>  +~
 
----
 
=== Update Network ===
 
----
 
~+
 
{| border="1" cellpadding="2" cellspacing="0"
 
| Verb
 
| URI
 
|-
 
| PUT
 
| /networks/{id}
 
|}
 
+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Request Body:'' </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">The request body for this operation will possibly contain the new symbolic name for the network. </span></span>
 
 
 
<pre><nowiki>
 
<Network>
 
<Name>Short description of network </Name>
 
</Network>
 
</nowiki></pre>
 
 
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Description:'' This operation asynchronously updates a network in Quantum according to the information provided in the request body.  </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Response Codes:'' </span></span>
 
 
 
~+~-Normal Response code: 202
 
 
 
Error response code(s):  [[#470-ServiceUnavailable]],[[#401-Unauthorized]],[[#400-MalformedRequest]],[[#471-PluginFault]] -~ <span id="op5"></span><<Anchor([[DeleteNetwork]])>> 
 
----
 
+~
 
=== Delete Network ===
 
~+
 
----
 
{| border="1" cellpadding="2" cellspacing="0"
 
| Verb
 
| URI
 
|-
 
| DELETE
 
| /networks/{net_id}
 
|}
 
 
 
+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Request Body:'' </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">This operation does not require a request body. </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Description:'' </span></span>
 
 
 
~+~-This operation removes the network specified in the URI. This request will fail as long as there is at least one "active" port on the network. Logical ports will be destroyed together with the network.
 
 
 
The operation is asynchronous. Quantum forwards the request to the plugin, which will then destroy the network. Callers can check the current status of the operation by performing a GET on networks/id. The operation has complete when a [[#402-NetworkNotFound]] is returned.
 
 
 
This operation is not recoverable. -~+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Response Codes:'' </span></span>
 
 
 
~+~-Normal Response code: 202
 
 
 
Error response code(s):  [[#470-Service Unavailable]],[[#401-Unauthorized]],[[#471-PluginFault]],[[#460-NetworkInUse]] -~
 
<span id="op6"></span><<Anchor([[GetPorts]])>>  +~
 
 
 
----
 
=== List logical ports for network ===
 
----
 
~+
 
{| border="1" cellpadding="2" cellspacing="0"
 
| Verb
 
| URI
 
|-
 
| GET
 
| /networks/{net_id}/ports
 
|}
 
+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Request Body:'' </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">This operation does not require a request body. </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Description:'' </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">This operation lists all the ports currently configured for a network. Response for each port includes at least its unique identifier. If no logical ports have been created on the network an empty list will be returned. </span></span>
 
 
 
 
 
<pre><nowiki>
 
<PortList>
 
<port-id>xxxxxxxxxxxxxxxx</port-id>
 
<port-id>yyyyyyyyyyyyyyyy</port-id>
 
<port-id>zzzzzzzzzzzzzzzz</port-id>
 
</Port>
 
</nowiki></pre>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Response Codes:'' </span></span>
 
 
 
~+~-Normal Response code: 200
 
 
 
Error response code(s):  [[#470-ServiceUnavailable]],[[#401-Unauthorized]] -~ <span id="op7"></span><<Anchor([[GetPortDetails]])>>  +~
 
----
 
=== List port details ===
 
----
 
~+
 
{| border="1" cellpadding="2" cellspacing="0"
 
| Verb
 
| URI
 
|-
 
| GET
 
| networks/{net_id}/ports/{port_id}
 
|}
 
+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Request Body:'' </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">This operation does not require a request body. </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Description:'' </span></span>
 
 
 
~+~-This operation provides detailed output for a specific port configured for a given network.
 
 
 
<pre><nowiki>
 
<Port>
 
<port_id> Universally Unique ID </port_id>
 
<vif_id> Universily Unique ID or None </vif_id>
 
<state> ACTIVE| DOWN</state>
 
</Port>
 
</nowiki></pre>
 
 
 
 
 
This operation will return all the attributes of the port -~+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Response Codes:'' </span></span>
 
 
 
~+~-Normal Response code: 200
 
 
 
Error response code(s):  [[#470-ServiceUnavailable]],[[#401-Unauthorized]] -~ <span id="op8"></span><<Anchor([[PostPort]])>>  +~
 
----
 
=== Create Port ===
 
----
 
~+
 
{| border="1" cellpadding="2" cellspacing="0"
 
| Verb
 
| URI
 
|-
 
| POST
 
| networks/{net_id}/ports
 
|}
 
+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Request Body:'' </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">The request body is not mandatory. </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Description:'' </span></span>
 
 
 
~+~-This operation asynchronously creates a port on a Quantum network based on the information provided in the request body.  Quantum validates the request, and dispatches the request to the plugin, which creates the logical port and attaches it to the appropriate network.
 
 
 
Resources for the new port can be either provided at create time or when virtual interfaces are plugged into this port depending on the particular plugin implementation. Also, this operation could not be implemented for some plugins as the number of ports available might be fixed when the network is created. If the validation phase fails, the port object is not created at all, and a [[#400-MalformedRequest]] error is returned to the caller.
 
 
 
<pre><nowiki>
 
<Port>
 
<port_id> Universally Unique ID </port_id>
 
<vif_id> Universily Unique ID or None </vif_id>
 
<state> ACTIVE| DOWN</state>
 
</Port>
 
</nowiki></pre>
 
 
 
 
 
The operation returns a port with an identifier, vif_id set to none, and state set to DOWN.
 
 
 
-~+~
 
<span style="font-size: larger"><span style="font-size: smaller">''Response Codes:'' </span></span>
 
 
 
~+~-Normal Response code: 202
 
 
 
Error response code(s):  [[#470-ServiceUnavailable]],[[#401-Unauthorized]],[[#400-MalformedRequest]] -~
 
 
 
<span id="op9"></span><<Anchor([[DeletePort]])>>  +~
 
----
 
=== Delete Port ===
 
----
 
~+
 
{| border="1" cellpadding="2" cellspacing="0"
 
| Verb
 
| URI
 
|-
 
| DELETE
 
| /networks/{net_id}/ports/{port_id}
 
|}
 
+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Request Body:'' This operation does not require a request body. </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Description:'' </span></span>
 
 
 
~+~-This operation removes a logical port from a Quantum network.  This operation might not be available for plugins in which the number of ports is fixed at network creation; in this case ports should not be deleted, just as they cannot be created.
 
 
 
The operation is not recoverable and will fail if an attachment is plugged into the port. -~+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Response Codes:'' </span></span>
 
 
 
~+~-Normal Response code: 202
 
 
 
Error response code(s):  [[#470-ServiceUnavailable]],[[#401-Unauthorized]],[[#471-PluginFault]],[[#462-PortInUse]].  
 
-~ <span id="op10"></span><<Anchor([[GetPortAttachment]])>>  +~
 
 
 
----
 
=== Set Port State ===
 
----
 
~+
 
{| border="1" cellpadding="2" cellspacing="0"
 
| Verb
 
| URI
 
|-
 
| PUT
 
| /networks/{net_id}/ports/{port_id}
 
|}
 
+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Request Body:'' The operation's request body contains a state to set the Port. Valid values are "Down" and "Active" </span></span>
 
 
 
<pre><nowiki>
 
<Port>
 
<state> ACTIVE| DOWN</state>
 
</Port>
 
</nowiki></pre>
 
 
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Description:'' </span></span>
 
 
 
~+~-This operation attempts to set the state of the logical port.
 
 
 
Currently quantum recognizes two port states: DOWN and ACTIVE. In the DOWN state a port is not required to be bound to physical resources of the network. Setting a currently active port to down allows plugins to make intelligent use of current resources. Additionally it allows the tenant the ability to take entities offline without destroying their logical topology. The port may be set to active so long as there is still an attachment between a VIF and the logical port. In the down state the port loses it’s capabilities, when it resumes operation in the active state that set of capabilities may have been renegotiated by the plugin.
 
 
 
The operation will return [[#400-MalformedRequest]] if the state requested is not DOWN or ACTIVE. A request to change a logical port to active if the port doesn’t have an existing attachment will return a [[403-RequestedStateInvalid]]. Failure to change state due to other resource conflicts will result in a [[#471-PluginFault]] error. -~+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Response Codes:'' </span></span>
 
 
 
~+~-Normal Response code: 202
 
 
 
Error response code(s):  [[#470-ServiceUnavailable]],[[#400-MalformedRequest]],[[#401-Unauthorized]],[[403-RequestedStateInvalid]], [[#471-PluginFault]].
 
-~ <span id="op10"></span><<Anchor([[GetPortAttachment]])>>  +~
 
 
 
----
 
=== List attachment details for port ===
 
----
 
~+
 
{| border="1" cellpadding="2" cellspacing="0"
 
| Verb
 
| URI
 
|-
 
| GET
 
| /networks/{net_id}/ports/{port_id}/attachment
 
|}
 
+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Request Body:'' </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">This operation does not require a request body. </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Description:'' </span></span>
 
 
 
~+~-This operation returns configuration details for the attachment plugged into the port specified in the request URI.
 
 
 
This information might include:
 
* Type of the attachment (e.g.: virtual network interface, bridge device);
 
* A reference to the resource being attached (If managed by Quantum);
 
* A reference to an external resource being attached (If not managed by Quantum); -~+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Response Codes:'' </span></span>
 
 
 
~+~-Normal Response code: 200
 
 
 
Error response code(s):  [[#470-ServiceUnavailable]],[[#400-MalformedRequest]],[[#401-Unauthorized]] -~ <span id="op11"></span><<Anchor([[PutPortAttachment]])>>  +~
 
----
 
=== Attach resource to port ===
 
----
 
~+
 
{| border="1" cellpadding="2" cellspacing="0"
 
| Verb
 
| URI
 
|-
 
| PUT
 
| /networks/{net_id}/ports/{port_id}/attachment
 
|}
 
+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Request Body:'' </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">The request body for this network should contain a reference to the resource to plug into the logical port.  Plugged resources can either be managed by or external to Quantum. In both cases, the request body will contain an identifier for that resource. </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Description:'' </span></span>
 
 
 
~+~-This operation asynchronously plugs a resource, or attachment, into the logical port specified in the request URL.  A resource can be either a virtual network interface belonging to a VM instance, or any kind of device or service which can be plugged into the Quantum network in order to provide different services, such as IP addressing management. Different kinds of resources can be defined in the future.
 
 
 
The request will be first validated by Quantum and then dispatched to the plugin. As the request is asynchronous, control is immediately returned to the caller. Progress of the operation can then be checked by querying the attachment (or the logical port) with a GET request.
 
 
 
The validation can fail if:
 
* The attachment is already plugged somewhere else;
 
* There is already another attachment plugged into the specified logical port.
 
 
 
If the validation phase fails, the attachment object is not created at all, and a 400 error is returned to the caller. -~+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Response Codes:'' </span></span>
 
 
 
~+~-Normal Response code: 202
 
 
 
Error response code(s):  [[#470-ServiceUnavailable]], [[#400-MalformedRequest]], [[#401-Unauthorized]],[[#461-AlreadyAttached]],[[#462-PortInUse]],[[#471-PluginFault]] -~ <span id="op12"></span><<Anchor([[DeletePortAttachment]])>>  +~
 
----
 
=== Remove attachment from port ===
 
----
 
~+
 
{| border="1" cellpadding="2" cellspacing="0"
 
| Verb
 
| URI
 
|-
 
| DELETE
 
| /networks/{net_id}/ports/{port_id}/attachment
 
|}
 
+~
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Request Body:'' </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">This operation does not require a request body. </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Description:'' </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">This operation asynchronously removes an attachment from a logical port.  This operation cannot be undone. </span></span>
 
 
 
<span style="font-size: larger"><span style="font-size: smaller">''Response Codes:'' </span></span>
 
 
 
~+~-Normal Response code: 202
 
 
 
Error response code(s):  [[#470-ServiceUnavailable]], [[#400-MalformedRequest]], [[#401-Unauthorized]], [[#471-PluginFault]] -~ <span id="op13"></span>
 

Latest revision as of 23:30, 17 February 2013

Please see: http://docs.openstack.org/api/openstack-network/2.0/content/index.html