From 4f62d24a136a8b4b1557a97315ef0f4de5df4ed7 Mon Sep 17 00:00:00 2001 From: Constanze Kratel Date: Wed, 5 Feb 2014 16:20:53 -0600 Subject: [PATCH] Initial checkin of doc source Change-Id: I882acd404f3e26341ee267113b4e396ff30bd59d --- docs/.gitignore | 1 + docs/includewars.xml | 15 + docs/olink.xml | 5 + docs/pom.xml | 74 + docs/src/common/common.ent | 64 + docs/src/docbkx/chapters/apiref.xml | 61 + docs/src/docbkx/chapters/rbac.xml | 192 + docs/src/docbkx/ck-devguide.xml | 768 ++++ docs/src/docbkx/ck-gettingstarted.xml | 759 ++++ docs/src/docbkx/ck-install.xml | 60 + docs/src/docbkx/ck-releasenotes.xml | 67 + .../docbkx/images/Barbican_architecture.png | Bin 0 -> 18139 bytes docs/src/docbkx/samples/reqAuthenticate.json | 17 + docs/src/docbkx/samples/reqCreateOrder.json | 12 + docs/src/docbkx/samples/reqCreateSecret.json | 6 + docs/src/docbkx/samples/reqgenerateToken.json | 16 + .../src/docbkx/samples/reqgetversioninfo.json | 2 + docs/src/docbkx/samples/resAuthenticate.json | 147 + docs/src/docbkx/samples/resCreateSecret.json | 13 + .../src/docbkx/samples/resRetrieveSecret.json | 12 + docs/src/docbkx/samples/resgenerateToken.json | 45 + .../src/docbkx/samples/resgetversioninfo.json | 4 + docs/src/wadl/Barbican.wadl | 545 +++ docs/src/wadl/normalized/cq-devguide.wadl | 3793 +++++++++++++++++ docs/src/wadl/samples/db-auth.json | 72 + docs/src/wadl/samples/db-auth.xml | 50 + docs/src/wadl/samples/db-credentials.json | 13 + docs/src/wadl/samples/db-credentials.xml | 11 + .../wadl/samples/db-faults-badRequest.json | 11 + .../src/wadl/samples/db-faults-badRequest.xml | 10 + .../wadl/samples/db-faults-instanceFault.json | 11 + .../wadl/samples/db-faults-instanceFault.xml | 10 + .../wadl/samples/db-faults-itemNotFound.json | 11 + .../wadl/samples/db-faults-itemNotFound.xml | 10 + docs/src/wadl/samples/db-request-types.json | 15 + docs/src/wadl/samples/db-response-types.xml | 24 + docs/src/wadl/samples/reqCreateOrder.json | 12 + docs/src/wadl/samples/reqCreateSecret.json | 6 + docs/src/wadl/samples/reqDeleteOrder.json | 6 + docs/src/wadl/samples/reqDeleteSecret.json | 6 + docs/src/wadl/samples/reqGenerateToken.json | 16 + .../wadl/samples/reqGetOrderinfo copy.json | 6 + docs/src/wadl/samples/reqGetOrderinfo.json | 1 + docs/src/wadl/samples/reqGetOrders.json | 6 + docs/src/wadl/samples/reqGetSecretinfo.json | 1 + docs/src/wadl/samples/reqGetSecrets.json | 6 + docs/src/wadl/samples/reqUpdateOrder.json | 6 + docs/src/wadl/samples/reqUpdateSecret.json | 6 + docs/src/wadl/samples/resCreateOrder.json | 3 + docs/src/wadl/samples/resCreateSecret.json | 3 + docs/src/wadl/samples/resDeleteOrder.json | 6 + docs/src/wadl/samples/resDeleteSecret.json | 6 + docs/src/wadl/samples/resGetOrderinfo.json | 1 + docs/src/wadl/samples/resGetOrders.json | 6 + docs/src/wadl/samples/resUpdateOrder.json | 6 + docs/src/wadl/samples/resUpdateSecret.json | 6 + docs/src/wadl/samples/resgetSecretinfo.json | 13 + docs/src/wadl/samples/resgetSecrets.json | 48 + docs/src/wadl/samples/resgetversioninfo.json | 4 + docs/src/wadl/samples/snapshot_create.json | 8 + docs/src/wadl/samples/snapshot_create.xml | 7 + .../wadl/samples/snapshot_list_simple.json | 22 + .../src/wadl/samples/snapshot_list_simple.xml | 17 + docs/src/wadl/samples/snapshot_show.json | 11 + docs/src/wadl/samples/snapshot_show.xml | 9 + docs/src/wadl/samples/volume_create.json | 8 + docs/src/wadl/samples/volume_create.xml | 8 + docs/src/wadl/samples/volume_list_simple.json | 24 + docs/src/wadl/samples/volume_list_simple.xml | 20 + docs/src/wadl/samples/volume_show.json | 12 + docs/src/wadl/samples/volume_show.xml | 10 + docs/src/wadl/samples/volume_type_list.json | 15 + docs/src/wadl/samples/volume_type_list.xml | 9 + docs/src/wadl/samples/volume_type_show.json | 7 + docs/src/wadl/samples/volume_type_show.xml | 7 + 75 files changed, 7300 insertions(+) create mode 100644 docs/.gitignore create mode 100644 docs/includewars.xml create mode 100644 docs/olink.xml create mode 100644 docs/pom.xml create mode 100644 docs/src/common/common.ent create mode 100644 docs/src/docbkx/chapters/apiref.xml create mode 100644 docs/src/docbkx/chapters/rbac.xml create mode 100644 docs/src/docbkx/ck-devguide.xml create mode 100644 docs/src/docbkx/ck-gettingstarted.xml create mode 100644 docs/src/docbkx/ck-install.xml create mode 100644 docs/src/docbkx/ck-releasenotes.xml create mode 100644 docs/src/docbkx/images/Barbican_architecture.png create mode 100644 docs/src/docbkx/samples/reqAuthenticate.json create mode 100644 docs/src/docbkx/samples/reqCreateOrder.json create mode 100644 docs/src/docbkx/samples/reqCreateSecret.json create mode 100644 docs/src/docbkx/samples/reqgenerateToken.json create mode 100644 docs/src/docbkx/samples/reqgetversioninfo.json create mode 100644 docs/src/docbkx/samples/resAuthenticate.json create mode 100644 docs/src/docbkx/samples/resCreateSecret.json create mode 100644 docs/src/docbkx/samples/resRetrieveSecret.json create mode 100644 docs/src/docbkx/samples/resgenerateToken.json create mode 100644 docs/src/docbkx/samples/resgetversioninfo.json create mode 100644 docs/src/wadl/Barbican.wadl create mode 100644 docs/src/wadl/normalized/cq-devguide.wadl create mode 100644 docs/src/wadl/samples/db-auth.json create mode 100644 docs/src/wadl/samples/db-auth.xml create mode 100644 docs/src/wadl/samples/db-credentials.json create mode 100644 docs/src/wadl/samples/db-credentials.xml create mode 100644 docs/src/wadl/samples/db-faults-badRequest.json create mode 100644 docs/src/wadl/samples/db-faults-badRequest.xml create mode 100644 docs/src/wadl/samples/db-faults-instanceFault.json create mode 100644 docs/src/wadl/samples/db-faults-instanceFault.xml create mode 100644 docs/src/wadl/samples/db-faults-itemNotFound.json create mode 100644 docs/src/wadl/samples/db-faults-itemNotFound.xml create mode 100644 docs/src/wadl/samples/db-request-types.json create mode 100644 docs/src/wadl/samples/db-response-types.xml create mode 100644 docs/src/wadl/samples/reqCreateOrder.json create mode 100644 docs/src/wadl/samples/reqCreateSecret.json create mode 100644 docs/src/wadl/samples/reqDeleteOrder.json create mode 100644 docs/src/wadl/samples/reqDeleteSecret.json create mode 100644 docs/src/wadl/samples/reqGenerateToken.json create mode 100644 docs/src/wadl/samples/reqGetOrderinfo copy.json create mode 100644 docs/src/wadl/samples/reqGetOrderinfo.json create mode 100644 docs/src/wadl/samples/reqGetOrders.json create mode 100644 docs/src/wadl/samples/reqGetSecretinfo.json create mode 100644 docs/src/wadl/samples/reqGetSecrets.json create mode 100644 docs/src/wadl/samples/reqUpdateOrder.json create mode 100644 docs/src/wadl/samples/reqUpdateSecret.json create mode 100644 docs/src/wadl/samples/resCreateOrder.json create mode 100644 docs/src/wadl/samples/resCreateSecret.json create mode 100644 docs/src/wadl/samples/resDeleteOrder.json create mode 100644 docs/src/wadl/samples/resDeleteSecret.json create mode 100644 docs/src/wadl/samples/resGetOrderinfo.json create mode 100644 docs/src/wadl/samples/resGetOrders.json create mode 100644 docs/src/wadl/samples/resUpdateOrder.json create mode 100644 docs/src/wadl/samples/resUpdateSecret.json create mode 100644 docs/src/wadl/samples/resgetSecretinfo.json create mode 100644 docs/src/wadl/samples/resgetSecrets.json create mode 100644 docs/src/wadl/samples/resgetversioninfo.json create mode 100644 docs/src/wadl/samples/snapshot_create.json create mode 100644 docs/src/wadl/samples/snapshot_create.xml create mode 100644 docs/src/wadl/samples/snapshot_list_simple.json create mode 100644 docs/src/wadl/samples/snapshot_list_simple.xml create mode 100644 docs/src/wadl/samples/snapshot_show.json create mode 100644 docs/src/wadl/samples/snapshot_show.xml create mode 100644 docs/src/wadl/samples/volume_create.json create mode 100644 docs/src/wadl/samples/volume_create.xml create mode 100644 docs/src/wadl/samples/volume_list_simple.json create mode 100644 docs/src/wadl/samples/volume_list_simple.xml create mode 100644 docs/src/wadl/samples/volume_show.json create mode 100644 docs/src/wadl/samples/volume_show.xml create mode 100644 docs/src/wadl/samples/volume_type_list.json create mode 100644 docs/src/wadl/samples/volume_type_list.xml create mode 100644 docs/src/wadl/samples/volume_type_show.json create mode 100644 docs/src/wadl/samples/volume_type_show.xml diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 000000000..2f7896d1d --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1 @@ +target/ diff --git a/docs/includewars.xml b/docs/includewars.xml new file mode 100644 index 000000000..7cedda0a6 --- /dev/null +++ b/docs/includewars.xml @@ -0,0 +1,15 @@ + + includewars + + jar + + false + + + ${project.basedir}/target/docbkx/webhelp + + **.war + + + + \ No newline at end of file diff --git a/docs/olink.xml b/docs/olink.xml new file mode 100644 index 000000000..c06b6817f --- /dev/null +++ b/docs/olink.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/pom.xml b/docs/pom.xml new file mode 100644 index 000000000..947b1e762 --- /dev/null +++ b/docs/pom.xml @@ -0,0 +1,74 @@ + + 4.0.0 + com.rackspace.cloud.apidocs + cloud-keep-docs + 1.0.0-SNAPSHOT + jar + Cloud Keep Docs + + + + com.rackspace.cloud.api + olink-maven-plugin + 1.1.0 + + + initialize + + olink + + + + + + com.rackspace.cloud.api + clouddocs-maven-plugin + 1.13.0 + + + + generate-webhelp + + generate-sources + + + ck-devguide.xml, + ck-gettingstarted.xml, + ck-releasenotes.xml + + + + + + intranet + constanze.kratel@RACKSPACE.COM + rackspace + 1 + true + + + + org.apache.maven.plugins + maven-assembly-plugin + 2.3 + + + includewars.xml + + + + + assembly + + single + + package + + + + + + diff --git a/docs/src/common/common.ent b/docs/src/common/common.ent new file mode 100644 index 000000000..ddec2a90d --- /dev/null +++ b/docs/src/common/common.ent @@ -0,0 +1,64 @@ + + + + + + + + + A general error occured. + + + + + The format of the specified request is invalid. + + + + + + + + + + The method is unavailable + + + + + The number of items returned is above the allowed limit. + + + + + The requested service is unavailable. + + + + '> + + + Resource not found. + + + + '> + + + + + + '> diff --git a/docs/src/docbkx/chapters/apiref.xml b/docs/src/docbkx/chapters/apiref.xml new file mode 100644 index 000000000..d29dcedbe --- /dev/null +++ b/docs/src/docbkx/chapters/apiref.xml @@ -0,0 +1,61 @@ + + + + +]> + + API Operations + The operations described in this chapter allow developers to + manage groups, configurations, policies, executions, and webhooks. +
+ Groups + The operations described in this chapter allow developers to + manage groups. + + + + + + + +
+
+ Configurations + The operations described in this chapter allow developers to + manage configurations. + + + + +
+
+ Policies + The operations described in this chapter allow developers to + manage policies. + + + + + +
+
+ Executions + The operations described in this chapter allow developers to + manage executions. + + + +
+
+ Webhooks + The operations described in this chapter allow developers to + manage webhooks. + + + + +
+
diff --git a/docs/src/docbkx/chapters/rbac.xml b/docs/src/docbkx/chapters/rbac.xml new file mode 100644 index 000000000..8745ad403 --- /dev/null +++ b/docs/src/docbkx/chapters/rbac.xml @@ -0,0 +1,192 @@ + + + + + + + +]> +
+Role Based Access Control (RBAC) +Role Based Access Control (RBAC) restricts access to the + capabilities of Rackspace Cloud services, including the Cloud + &PRODNAME; API, to authorized users only. RBAC enables + Rackspace Cloud customers to specify which account users of + their Cloud account have access to which &PRODNAME; API + service capabilities, based on roles defined by Rackspace (see + ). The + permissions to perform certain operations in the &PRODNAME; + API – create, read, update, delete – are assigned to specific + roles. The account owner assigns these roles, either + multiproduct (global) or product-specific (for example, ∏ only) + to account users. +
+Assigning Roles to Account Users +The account owner (identity:user-admin) can + create account users on the account and then assign roles + to those users. The roles grant the account users + specific permissions for accessing the capabilities of the + ∏ service. Each account has only one account owner, + and that role is assigned by default to any + Rackspace Cloud account when the account is created. +See the Cloud Identity Client Developer +Guide for information about how to perform the +following tasks: + + + + + Create account users + + + + + + Assign roles to account users + + + + + + Delete roles from account users + + + + +The account owner (identity:user-admin) role cannot + hold any additional roles because it already has full + access to all capabilities. + +
+
+Roles Available for ∏ + Two roles (observer and admin) can be used to access the + ∏ API specifically. The following table describes + these roles and their permissions. + + +++ + + + + + + + + + + + + + + + +
∏ Product Roles and Capabilities
Role NameRole Permissions
+autoscale:admin +This role provides Create, Read, Update, and Delete permissions +in ∏, where access is +granted
+autoscale:observerThis role provides Read permission in ∏, where +access is granted
+ Additionally, two multiproduct roles apply to all products. + Users with multiproduct roles inherit access to future + products when those products become RBAC-enabled. The + following table describes these roles and their + permissions. + + +++ + + + + + + + + + + + + + + + +
Multiproduct (Global ) Roles and Capabilities
Role NameRole Permissions
adminCreate, Read, Update, and Delete permissions across +multiple products, where access is granted
observerRead permission across multiple products, where +access is granted
+
+
+ Resolving Conflicts Between RBAC Multiproduct vs. + Custom (Product-specific) Roles + + The account owner can set roles for both multiproduct and ∏ scope, and it is + important to understand how any potential conflicts among these roles are resolved. When + two roles appear to conflict, the role that provides the more extensive permissions takes + precedence. Therefore, admin roles take precedence over observer roles, because admin + roles provide more permissions. + + + The following table shows two examples of how + potential conflicts between user roles in the Control Panel are resolved: + + + + + Permission Configuration + View of Permission in the Control Panel + Can the User Perform Product Admin Functions in the Control Panel? + + + + + User is assigned the following roles: + multiproduct observer and ∏ admin + + Appears that the user has only the + multiproduct observer role. + Yes, for ∏ only. The user has the + observer + role for the rest of the products. + + + User is assigned the following roles: + multiproduct admin and ∏ observer + Appears that the user has only the + multiproduct admin role. + Yes, for all the products. The ∏ + observer role is ignored. + + + +
+
+ RBAC Permissions Cross-reference to ∏ Operations + API operations for ∏ may or may not be available to all roles. + To see which operations are permitted to invoke which calls, review + + + the Knowledge Center article. +
+
\ No newline at end of file diff --git a/docs/src/docbkx/ck-devguide.xml b/docs/src/docbkx/ck-devguide.xml new file mode 100644 index 000000000..d61113151 --- /dev/null +++ b/docs/src/docbkx/ck-devguide.xml @@ -0,0 +1,768 @@ + + + + Rackspace Barbican API Developer Guide + + + 2012 + Rackspace US, Inc. + + API v1.0 + Rackspace Barbican API + + + + 2014-01-25 + + + + Ipsum lorem. + + + + + + + + Copyright details are filled in by the build system. + + + + + API Developer Guide + keep + 20 + + + + Preface +
+ Intended Audience + This document is intended for software developers + interested in developing applications using the Rackspace + Barbican Application Programming Interface + (API). +
+
+ Document Change History + This version of the Developer Guide replaces and obsoletes + all previous versions. The most recent changes are described + in the table above. + + + +
+
+ + Overview + + + + Barbican Core Concepts + +
+ Barbican Architecture + The following diagram provides a visual overview of the + Barbican API Architecture: + +
+ Barbican API Architecture + + + + + +
+
+ The Barbican API architecture consists of several API + node(s) which handle incoming REST requests to Barbican. These + nodes can interact with the database directly if the request + can be completed synchronously (such as for GET requests), + otherwise the queue supports asynchronous processing by worker + nodes. + The latter could include interactions with third parties + such as certificate authorities. As implied in the diagram, + the architecture supports multiple API and worker nodes being + added/removed to/from the network, to support advanced + features such as auto scaling. Eventually, the database could + be replicated across data centers supporting region-agnostic + storage and retrieval of secured information, albeit with lags + possible during data synchronization. Also note that detailed + audit information will be written to the database as well, + capturing a history of actions that change the state of the + system. +
+
+ + General API Information +
+ Authentication + Retrieving the + Authentication Token + Every REST request for Barbican requires the inclusion of + a specific authentication token, supplied by the + X-Auth-Token HTTP header. Customers obtain this + token by first using the Rackspace Cloud Identity service and + supplying a valid user name and API access key. +
+ Retrieving the Authentication Token + The authenticate operation provides users with an + authentication token and a list of regional cloud endpoints. + The sample requests and responses in this section illustrate + a general case. In your authentication request, use your own + credentials rather than the sample values shown for + username and apiKey. When you + authenticate successfully, the response to your + authentication request includes a catalog of the services to + which you have subscribed rather than the sample values + shown. + The following table describes a request for an + authentication token and the examples that follow show the + request and response in JSON format. + + + + + + + + + +
Request for Authentication Token
POST v2.0/tokens Authenticate to receive a token and a + service catalog.
+ Normal Response Code(s): + 200, + 203 + + Error Response Code(s): unauthorized + (401), userDisabled + (403), badRequest + (400), authFault + (500), serviceUnavailable + (503) + + Authentication Request for US Endpoint: JSON + + + + + + + + + + + + + The username supplied here is your + common Rackspace Cloud user name. + + + The key is your API access key. You can obtain the + key from the Rackspace + Cloud Control Panel in the <Your + Account>/API + Access section. + + + + Authentication Response for US Endpoint: JSON + + + + + + + + + + + + + + + + + + + + + + + The information shown in the authentication response + example is for US-based accounts. If you authenticate + against the UK endpoint, the response you receive shows + the service catalog information for UK-based + accounts. + + + + This token can be presented to a service as evidence + of authentication. Tokens are valid for a finite + duration; a token's default lifespan is 24 hours. + The token's expires attribute denotes + the time after which the token automatically becomes + invalid. A token can be manually revoked before the time + identified by the expires attribute. + Theexpires attribute predicts a token's + maximum possible lifespan but does not guarantee that it + will reach that lifespan. Users are encouraged to cache + a token until it expires. + Authentication tokens are typically valid for 24 + hours. Applications should be designed to + re-authenticate after receiving a + 401 (Unauthorized) response + from a service endpoint. + + The token's expiration time is formatted + differently in the US and UK. These response examples + show the US format. For examples of the UK format, see + http://docs.rackspace.com/auth/api/v2.0/auth-client-devguide/content/POST_authenticate_v2.0_tokens_.html. + + + + + Users can be assigned a default region. If multiple + endpoints are associated with a service in the user's + catalog, the endpoint for the user's default region is + selected if it is available. In this example, the user's + default region is DFW, and several of the services in + the user's catalog offer endpoints in that region and + the ORD region; whenever possible, the user's work is + directed to the DFW region. + + + + Users can be assigned multiple roles, with each role + providing specific privileges. In this example, + jsmith is the administrative user for the + account and holds the fully-privileged + identity:admin role. Other users might + hold other roles with different privileges. Roles are + not necessarily associated with actual job functions + such as Administrator, Operator, Developer, Tester, or + Trainer. + + + + The service catalog lists the services this user can + access. + + + Some services recognize the specification of a + tenant. If a service does recognize tenants, the format + of the tenant specification is defined only by the + service. For details about whether and how to specify a + tenant, check the documentation for the service that you + are using. + + + + An endpoint can be assigned public and internal + URLs. A public URL is accessible from anywhere. Access + to a public URL usually incurs traffic charges. Internal + URLs are accessible only to services within the same + region. Access to an internal URL is free of charge. + + + + A service can expose endpoints in different regions. + Regional endpoints allow users to provision resources in + a manner that provides high availability. + Some services are not region specific. These + services supply a single, non-regional endpoint and do + not provide access to internal URLs. + + + + The service name attribute identifies each unique + service in the catalog. After a service is created, its + name does not change. However, new services of the same + service type can be added to the catalog with new names. + + If you are programmatically parsing an + authentication response, use service type rather than + service name to determine whether a user has access to + a particular kind of service. Service type is stable + across all releases. New service types might be + developed, but existing service types are not renamed. + It is possible to subscribe to multiple services of + the same type. Whatever those services are named, you + can always recognize them by parsing for service type + in the authentication response's service catalog. + + + + + + The service type attribute identifies services that + perform similar functions, regardless of service names. + In this example, the service named cloudFiles is + identified as type="store", indicating that + it is a storage service even though the word "storage" + does not appear in its name. + + Use service type as the primary value for locating + a service. If multiple endpoints of the same service + type exist in the same region, use service name to + locate the appropriate service. + + + + +
+
+
+ Service Access Endpoints + Barbican s a regionalized service. The user of the service + is therefore responsible for appropriate replication, caching, + and overall maintenance of Barbican data across regional + boundaries to other Barbian servers. + The following table lists the service access endpoints for + Barbican. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Regionalized Service Endpoints
RegionEndpoint
Chicago (ORD)https://ord.secrets.api.rackspacecloud.com/v1.0/1234/ +
Dallas/Ft. Worth (DFW)https://dfw.secrets.api.rackspacecloud.com/v1.0/1234/ +
London (LON) + https://lon.secrets.api.rackspacecloud.com/v1.0/1234/ +
Sydney (SYD) + https://syd.secrets.api.rackspacecloud.com/v1.0/1234/ +
Hong Kong (HKG)https://hkg.secrets.api.rackspacecloud.com/v1.0/1234/ +
+
+ Replace the Tenant ID, 1234, with + your actual Tenant ID. + You will find your tenant Id after the final '/' in the + publicURL field returned by the authentication + response. For example, in Example 2, + “Authentication Response for US Endpoint: JSON” the + publicURL field for secrets + ("https://ord.secrets.api.rackspacecloud.com/v1.0/1100111") shows that the tenant Id is + 1100111. +
+
+ Contract Versions + The version defines the contract and build information + for the API. + The contract version denotes the data model and behavior + that the API supports. The requested contract version is + included in all request URLs. Different contract versions of + the API might be available at any given time and are not + guaranteed to be compatible with one another. + + Sample Request URL for Contract Version 1.0 + https://ord.secrets.api.rackspacecloud.com/v1.0/1234 + + + This document pertains to contract version 1.0. + +
+
+ Request and Response Types + The Rackspace Barbican API supports JSON data + serialization formats. You specify the request format by using + the Content-Type header. The request format is + required for calls that + have a request body. You can specify the response format in + requests either by using the Accept header or by + adding a .json extension to the request URI. JSON + is also used for the response format. + + + + + + + + + + + + + + + + + + + + + + + + + +
Response Format
FormatAccept HeaderQuery ExtensionDefault
JSONapplication/json.jsonYes
XMLapplication/xml.xmlNo
+
+ +
+ Limits + All accounts, by default, have a preconfigured set of + thresholds (or limits) to manage capacity and prevent abuse of + the system. The system recognizes rate + limits and absolute + limits. Rate limits are thresholds that are + reset after a certain amount of time passes. Absolute limits + are fixed. +
+ + Rate Limits + Rate limits are specified in terms of both a + human-readable wildcard URI and a machine-processable + regular expression. The regular expression boundary matcher + '^' takes effect after the root URI path. + For example, the regular expression + ^/v1.0/execute would match the bolded portion + of the following URI: + https://ord.secrets.api.rackspacecloud.com/v1.0/execute. + For any user, all operations are limited to 1,000 calls + per minute. + If you exceed the thresholds established for your + account, a 413 (Rate Control) HTTP + response is returned with a Retry-After header + to notify the client when it can attempt to try again. + +
+
+
+ + + General API Information +
+ Secrets Resource + The secrets resource is the heart of the Barbican service. + It provides access to the secret / keying material stored in + the system. + The secret scheme represents the actual secret or key that + will be presented to the application. Secrets can be of any + format, but additional functionality may be available for + known types of symmetric or asymmetric keys. The schema for + creating a secret differs from the retrieval schema is shown + next. + Secrets can be created in two ways: Via POST including a + payload, or with a POST without a payload followed by a PUT. + + + Note that the POST calls create secret metadata. If the payload is + provided with the POST call, then it is encrypted and + stored, and then linked with this metadata. Otherwise, the + PUT call provides this payload. Hence clients must provide + the secret information to store via these 'create' + operations. This should not be confused with the secret + 'generation' process via the orders resource below, + whereby Barbican generates the secret information. + + +
Examples of Secret Combinations + The tables in this section are focused on the + content-types and content-encodings of the various REST verb + flows, even though each flow might have a different way to + specify these values (either via http header settings or + JSON request field). The reason for this approach is that + while each flow has a different means to specify the + mime-type and encoding, the values set for them must still + be consistent with valid mime-type or encoding + selections. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
One-Step UTF-8/ACII Secret + Create/Retrieve
Actioncontent-typecontent-encodingResult
POST secretspayload_content_type = text/plainpayload_content_encoding not neededSupplied payload is encrypted
GET secrets (meta)Accept: application/jsonNot required/ignoredJSON metadata, with content-type set to + 'default':'text/plain'
GET SecretsAccept: text/plain Not required/ignoredPrevious payload is decrypted
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
One-Step Binary Secret Create/Retrieve
Actioncontent-typecontent-encodingResult
POST secretspayload_content_type = application/octet-streampayload_content_encoding = base64Supplied payload is converted from base64 to binary, + then encrypted
GET secrets (meta)Accept: application/jsonNot required/ignoredJSON metadata, with content-type set to + 'default':'application/octet-stream'
GET SecretsAccept: text/plain Not specifiedPrevious payload is decrypted and returned as raw + binary, even if the PUT request provided data in + base64.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Two-Step Binary Secret Create/Retrieve
Actioncontent-typecontent-encodingResult
POST secretspayload_content_type optionally specifiedpayload_content_encoding optionally specifiedOnly metadata is created. If the + payload_content_type or payload_content_encoding + fields were provided, they are not used or saved + with the metadata. The PUT request (next) will + determine the secret's content type
GET secrets (meta)Content-type: application/octet-streamContent-Encoding: base64Supplied request body is converted from base64 to binary, then + encrypted
GET SecretsContent-type: application/octet-streamNot specifiedSupplied request body is encrypted as is
POST secretsAccept: application/jsonNot required/ignoredJSON metadata, with Content-Types set to + 'default':'application/octet-stream'
POST secretsAccept: application/octet-streamNot specifiedPrevious request is decrypted and returned as raw + binary, even if the PUT + provided the data in base64.
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Two-Step Plain-Text Secret + Create/Retrieve
Actioncontent-typecontent-encodingResult
POST secretspayload_content_type = optionally specifiedpayload_content_encoding optionally specifiedOnly metadata is created. If the + payload_content_type or payload_content_encoding + fields were provided, they are not used or saved + with the metadata. The PUT request (next) will + determine the secret's content format
PUT secretsContent-type: text/plain Not required/ignoredJSON metadata, with content-type set to + 'default':'text/plain'
GET secrets (meta)Accept: application/jsonNot required/ignoredJSON metadata, with Content-Types set to + 'default':'text/plain'
GET secrets (decrypted)Accept: text/plainNot specifiedPrevious request is decrypted and returned as + utf-8 text
+
+
+
+
+ Orders Resource + The orders resource allows for the generation of secret + material by Barbican. The ordering object encapsulates the + workflow and history for the creation of a secret. This + interface is implemented as an asynchronous process since the + time to generate a secret can vary depending on the type of + secret.
+ + + API Operations + This chapter describes each of the operations. The following + table summarizes all of the operations that are + available: + + + +
diff --git a/docs/src/docbkx/ck-gettingstarted.xml b/docs/src/docbkx/ck-gettingstarted.xml new file mode 100644 index 000000000..8e0336987 --- /dev/null +++ b/docs/src/docbkx/ck-gettingstarted.xml @@ -0,0 +1,759 @@ + + + + Rackspace Barbican API Getting Started Guide + + + + + + + + Rackspace Cloud + + + + 2013 + Rackspace US, Inc. + + API v1.0 + Rackspace Barbican + + + + Copyright details are filled in by the + template. + + + + This document is intended for software developers + who want to programmatically manage orders and secrets + using the Barbican API. + + + + 2013-12-12 + + + + Created initial outline + + + + + + + Getting Started Guide + keep + 10 + + + + Document Change History + This version of the Getting Started replaces and + obsoletes all previous versions. The most recent changes + are described in the table below: + + + + Rackspace Barbican API Overview + Barbican is a REST API designed for the secure storage, + provisioning and management of secrets. +
+ What is Barbican? + Barbican is a REST API designed for the secure + storage, provisioning and management of secrets. + Barbican supports the following types of + secrets: + + + + + + + + + + + + + + + + + + + + + + + + + +
Secret Types Supported by + Barbican
Secret TypeDescription
Symmetric KeysPerform reversible encryption of data + at rest, typically using the AES + algorithm set. Symmetric keys are + required to enable features, such as + encrypted Swift containers and Cinder + volumes, encrypted Cloud Backups, + etc.
Asymmetric KeysAsymmetric key pairs (sometimes + referred to as public / private keys) + are used in many scenarios where + communication between untrusted + parties is desired. The most common + case is with SSL/TLS certificates. + Asymmetric keys but are also used in + solutions like SSH keys, S/MIME (mail) + encryption and digital + signatures.
Raw SecretsBarbican stores secrets as binary + blocks of data (encrypted, naturally). + Clients can use the API to store any + secrets in any format they desire. +
+
+
+
+ Prerequisites for Running Examples + In order to run the examples in this guide, you must + have the following: + + A Rackspace Cloud account + + + A Rackspace Cloud username and password, + as specified during registration + + +
+
+ Service Access and Endpoints + +
+
+ + Send Requests to the API + You have several options for sending requests through an + API: + + + Developers and testers may prefer to use cURL, + the command-line tool from http://curl.haxx.se/. + With cURL you can send HTTP requests and receive + responses back from the command line. + + + If you like to use a more graphical interface, + the ReST client for Firefox also works well for + testing and trying out commands, see https://addons.mozilla.org/en-US/firefox/addon/restclient/. + + + + You can also download and install rest-client, a + Java application to test ReSTful web services, + from http://code.google.com/p/rest-client/. + + + +
+ Send API Requests Using cURL + cURL is a command-line tool that is available on + most UNIX®-like environments and Mac OS X® and can be + downloaded for Windows® in order to interact with the + ReST interfaces. For more information on cURL, visit + http://curl.haxx.se/. + cURL allows you to transmit and receive HTTP + requests and responses from the command-line or from + within a shell script. This makes it possible to work + with the ReST API directly without using one of the + client APIs. + The following cURL command-line options will be used + in this guide to run the examples: + + cURL Command-Line Options + + + + Sends the specified data in a post + request to the HTTP server. + + + + + + Includes the HTTP header in the + output. + + + + + + Specify an HTTP header in the + request. + + + + + + Specifies the request method to use when + communicating with the HTTP server. The + specified request is used instead of the + default method, which is GET. For example, + specifies to + use the PUT request method. + + + + + If you have the tools, you can run the cURL JSON + request examples with the following options to + format the output from cURL: <curl + JSON request example> | python + -mjson.tool. + +
+
+ + Generate an Authentication Token + You need to generate a token whether you use cURL or a + ReST client. + In order to use the ReST API, you will first need to + obtain an authentication token, which will need to be + passed in for each request using the + X-Auth-Token header. + The following example demonstrates how to use cURL to + obtain the authentication token and the account number. + You will need to supply the authentication token and + account number when making subsequent Cloud Databases API + calls. + Remember to replace the names in the Authenticate + Request examples below with their respective + values: + + your_username The username is + your common Rackspace Cloud username, as + supplied during registration. + + + your_api_key The key is your + API access key. + To find your API + Key: + + + Log in to the Cloud Control Panel + (https://mycloud.rackspace.com). + + + On the upper-right side of the top + navigation pane, click your + username. + + + From the menu, select + Account + Settings. + + + In the Login Details section of the + Account Settings page, locate the + API Key field + and click + Show. + + + Copy the value of the API Key and + paste it into a text editor of your + choice. + + + Click Hide to + hide the value of the API Key. + + + You also need your cloud account number. In + the documentation, the account number is often + referred to as your tenant name or tenant ID + (technically, the ID is different from the + name, but at Rackspace, they are the same + thing). Together, three components—your + username, your API Key, and your tenant ID or + cloud account number—form the authentication + credentials that are required to connect to + the Rackspace cloud. To find your tenant ID or + cloud account number, locate your username on + the upper-right side of the top navigation + pane in the Cloud Control Panel. The tenant ID + or account number is in parentheses just to + the right of your username. + + + Notice that you authenticate using a special URL for + Cloud authentication services. For example, you may use + https://identity.api.rackspacecloud.com/v2.0/tokens, + as shown in the following Authenticate Request examples. + Note that the v2.0 component in the URL + indicates that you are using version 2.0 of the Cloud Auth + API. + + cURL Authenticate Request: XML + + curl \ +'<?xml version="1.0" encoding="UTF-8"?> +<auth> + <apiKeyCredentials + xmlns="http://docs.rackspace.com/identity/api/ext/RAX-KSKEY/v1.0" + username="your_username" + apiKey="your_api_key"/> +</auth>' \ + \ + \ +'https://identity.api.rackspacecloud.com/v2.0/tokens' + + + cURL Authenticate Request: JSON + + curl \ +'{ + "auth": + { + "RAX-KSKEY:apiKeyCredentials": + { + "username": "your_username", + "apiKey": "your_api_key"} + } +}' \ + \ +'https://identity.api.rackspacecloud.com/v2.0/tokens' + + + For UK-based accounts, you may decide to use + 'https://lon.identity.api.rackspacecloud.com/v2.0/tokens' + instead. + + The authentication token id is returned + along with an expires attribute that + specifies when the token expires. + + + + For all response examples in this guide, the + field values you receive in your responses + will vary from those shown here since they + will be specific to your account. + + + The information shown in the Authenticate + Response examples above is for US-based + accounts. If you authenticate against the + UK-endpoint for auth, you will see the service + catalog information for UK-based + accounts. + + + The id attribute in the + Authenticate Response specifies the + authentication token. Tokens are valid for a + finite duration. + Remember to supply your authentication token + wherever you see the field your_auth_token in + the examples in this guide. + + + The expires attribute denotes + the time after which the token will + automatically become invalid. A token may be + manually revoked before the time identified by + the expires attribute; expires + predicts a token's maximum possible lifespan + but does not guarantee that it will reach that + lifespan. Clients are encouraged to cache a + token until it expires. + + + Applications should be designed to + re-authenticate after receiving a 401 + (Unauthorized) response from a service + endpoint. + + + + The publicURL endpoints for + cloudDatabases (for example + https://ord.databases.api.rackspacecloud.com/v1.0/1100111) + are also returned in the response. + You will find the actual account number after the final + '/' in the publicURL field. In this example, + you can see that the account number is 1100111. + + + Prepare your Workstation to Use Barbican + To prepare your workstation to use Barbican, you need to + have several tools and applications install on your + workstation. + The following table lists the tools that must be + installed prior to installing Barbican: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Prerequisites for installing + Barbican
ToolDescription
pyenv Python Version Management tool. Available + for download from GitHub.
pyenv-virtualenvpyenv plugin that provides a pyenv + virtualenv command to create virtualenv + for Python on UNIX-like systems. Available + for download from GitHub.
GitGit client. Available for download from + http://git-scm.com/downloads.
cURLCommand line tool for transferring data + with URL syntax. Available for download + from: http://curl.haxx.se/.
pipPython installer tool. Available for + download from: http://www.pip-installer.org/en/latest/installing.html.
+ For Unix distributions, you may also need to install the + python and sqlite3 development packages. The following + example shows how to install Python and Sqlite3 from Red + Hat distributions, such as CentOS: + sudo yum install python-devel +sudo yum install sqlite-devel The following example shows how to install Python and Sqlite3 + from Debian distributions, such as Ubuntu: + sudo apt-get install python-dev +sudo apt-get install libsqlite3-dev + To use Barbican for development and evaluation purposes, + it is recommended that you run Barbican from a virtual + environment. We recommend that you use pyenv virtual environment + framework because this framework works best with our + install script. + To install the pyenv + virtual environment framework, complete the following + steps: + + + + Install the pyenv tool by following the + installation instructions on GitHub that are + available from this link: https://github.com/yyuu/pyenv. + + + Install the pyenv-virtualenv plugin by + following the installation instructions on + Github that are available from this link: + https://github.com/yyuu/pyenv-virtualenv. + + + At a command-line interface run the + following command to install the latest + version of Python: + + + pyenv install 2.7.5 + + + + Type the following command to create the + Barbican virtual environment: + + + pyenv virtualenv 2.7.5 barbican27 + + + + To start the Barbican virtual environment, + type the following command: + + + pyenv shell barbican27 + + + + +
+ + Install Barbican + The Barbican source code is stored on Github. In order + to download the latest Barbican source code, you need to + make sure that you have Git installed on you + workstation. + To install Barbican, you need to complete the following + steps: + + + + Download the Barbican GitHub + repository + + + Install the Barbican application + server + + + Verify Barbican installation + + + +
Download Barbican GitHub RepositoryTo download the Barbican GitHub repository, complete the + following steps: + + + + On your workstation, change to the + directory to which you want to download + Barbican. + + + Run the following command to create the + Barbican repository: + + git clone https://github.com/stackforge/barbican.git + + + Run the following command to change the + root of your local Barbican + repository: + + cd barbican + + +
+
Install Barbican Application ServerTo install the Barbican application server, type the following + at a command-line interface: + bin/barbican.sh install
+
+ Verify Barbican + Installation + You can verify that you have successfully installed + Barbican by doing the following: + + + + At a command-line interface, type the + following: + + + curl localhost:9311 + + + If Barbican has installed successfully, + you should see a response that looks like + the following example: + + + {"v1": "current", "build": "2013.2.{build_id}"} + + + +
+
+ + Integration Environment + We have set up an insecure integration environment at http://iad-int-api.cloudkeep.io:9311 so that + you can try the Barbican API without having to install and + configure it first. + + + This endpoint is provided for evaluation + purposes only, with no attempt made to secure or + persist data stored therein. Therefore, please do + not store any data that is sensitive, critical or + that you otherwise care about. + + + + + Authentication is currently turnd off or the + integration environment. + + +
Obtaining a Barbican Version Resource + First, you need to generate a valid token on + keystone. The integration environment provides a + Keystone server at http://keystone-int.cloudkeep.io as + shown in the following example: + + If successful, this request will return the following response, + which contains the token information: + + From the response you need to record the following + two values: + + + + Token + id, which is + 39a8b7f62dcb4095a74a4e65a68c85d8 in the + example above. + + + Tenant + id, which is + 0239200f037f4520aadd9791fad19af8 in the + example above. + + + + + + For PKI-authenticated Keystone + configurations, the token id value will be + much larger. + + + After you have obtained the token, you can use it to + make a requests to the Barbican API using the + integration environment. The following example shows + how to make a request for version information from + Barbican: + + If successful, the above command will return version + information for Barbican as shown in the following + example: + +
+
+ + Using the Barbican API + In this chapter you will learn how to use the Barbican + API to create and retrieve secrets. + The first step in using the Barbican API is to create a + secret. In this section you will learn how to create your + first secret using the Barbican API. +
+ Create a Secret + To generate a secret, you need to use the orders + resource, which is described in more detail in the + Barbican Developer Guide. You use the orders resource + to generate an order, which will then generate a + secret. + To generate an order, complete the following + steps: + + + + Upload a plain-text order by submitting + a POST request as shown in the following + example: + + + + + + You will receive a response like the + following. Make sure to note the order-ref + id that is returned in the URL. You will + use this id for the next request. + + {"order_ref": + "http://localhost:9311/v1/12345/orders/62d57f53-ecfe-4ae4-87bd-fab2f24e29bc"} + + + + Retrieve the order by typing the + following at a command-line + interface: + + curl -H 'Accept: text/plain' <'order_ref' obtained from the previous call> + + + + The call will return a response like the + following, Make sure to note the + secret-ref id that is returned in the + URL. + + + + + + Retrieve the metadata for the generated + secret by typing the following at a + command-line interface: + + curl -H 'Accept: text/plain' <secret_ref id from the previous call> + + + + This call will return a response like + the following: + + + + + + +
+
+ Retrieve a Secret + After you have generated a secret, you need to + verify that you can retrieve and view the + secret. + To view the secret in the format of random bytes, + type the following at a command line-interface: + + curl -H 'Accept: application/octet-stream' <secret_ref id from the previous call> + + You will receive an intelligible response like the + following: + �l6[F���#��r�|gd�fe~��� + +
+
+ + Next Steps + To learn more details about the Barbican API, please + read the Barbican API Developer Guide. + +
diff --git a/docs/src/docbkx/ck-install.xml b/docs/src/docbkx/ck-install.xml new file mode 100644 index 000000000..d80e22406 --- /dev/null +++ b/docs/src/docbkx/ck-install.xml @@ -0,0 +1,60 @@ + + + + Cloud Keep Installation + + + + + + + + Rackspace Cloud + + + + 2013 + Rackspace US, Inc. + + API v1.0 + Cloud Keep + + + + Copyright details are filled in by the + template. + + + + This document is intended for software developers + who want to develop applications by using... + + + + 2013-06-17 + + + + Ipsum Lorem... + + + + + + + Installation Guide + keep + 10 + + + + Introduction + Ipsum lorem + + diff --git a/docs/src/docbkx/ck-releasenotes.xml b/docs/src/docbkx/ck-releasenotes.xml new file mode 100644 index 000000000..641b92f74 --- /dev/null +++ b/docs/src/docbkx/ck-releasenotes.xml @@ -0,0 +1,67 @@ + + + + Cloud Keep Release Notes + + + + + + + + Rackspace Cloud + + + + 2013 + Rackspace US, Inc. + + API v1.0 + Cloud Keep + + + + Copyright details are filled in by the + template. + + + + This document is intended for software developers who want + to develop applications by using... + + + + 2013-06-17 + + + + Ipsum lorem. + + + + + + + Release Notes + keep + 30 + + + + Preface + Ipsum lorem + This document describes new features, changes, known issues, + supported images, and a summary of differences between first + generation and next generation Cloud Servers APIs. + We welcome feedback, comments, and bug reports at support@rackspacecloud.com. + + diff --git a/docs/src/docbkx/images/Barbican_architecture.png b/docs/src/docbkx/images/Barbican_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..17ab1eb346370acd62c938210a09244dc0280cf0 GIT binary patch literal 18139 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

-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 X^iA*dPY?A`FZEMT^;K`KApih7H>Tfg literal 0 HcmV?d00001 diff --git a/docs/src/docbkx/samples/reqAuthenticate.json b/docs/src/docbkx/samples/reqAuthenticate.json new file mode 100644 index 000000000..f84a7d202 --- /dev/null +++ b/docs/src/docbkx/samples/reqAuthenticate.json @@ -0,0 +1,17 @@ +POST /v2.0/tokens HTTP/1.1 +User-Agent: curl/7.21.0 (x86_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.15 libssh2/1.2.6 +Host: identity.api.rackspacecloud.com +Accept: application/json +Content-Type: application/json +Content-Length: 54 + +{ + "auth": + { + "RAX-KSKEY:apiKeyCredentials": + { + "username": "jsmith", + "apiKey": "aaaaabbbbbccccc12345678" + } + } +} \ No newline at end of file diff --git a/docs/src/docbkx/samples/reqCreateOrder.json b/docs/src/docbkx/samples/reqCreateOrder.json new file mode 100644 index 000000000..cb3a67ea0 --- /dev/null +++ b/docs/src/docbkx/samples/reqCreateOrder.json @@ -0,0 +1,12 @@ +curl -X POST -d \ + '{ + "secret": + { + "name": "secretname", + "algorithm": "aes", + "bit_length": 256, + "mode": "cbc", + "payload_content_type": "application/octet-stream" + } +}'\ +http://localhost:9311/v1/12345/orders \ No newline at end of file diff --git a/docs/src/docbkx/samples/reqCreateSecret.json b/docs/src/docbkx/samples/reqCreateSecret.json new file mode 100644 index 000000000..462ea59c8 --- /dev/null +++ b/docs/src/docbkx/samples/reqCreateSecret.json @@ -0,0 +1,6 @@ +curl -X POST -d \ +'{ + "payload": "my-secret-here", + "payload_content_type": "text/plain" + }'\ + http://localhost:9311/v1/12345/secrets \ No newline at end of file diff --git a/docs/src/docbkx/samples/reqgenerateToken.json b/docs/src/docbkx/samples/reqgenerateToken.json new file mode 100644 index 000000000..d1ee51458 --- /dev/null +++ b/docs/src/docbkx/samples/reqgenerateToken.json @@ -0,0 +1,16 @@ +# get a token +$ curl -H "Accept: applicaton/json" -H "Content-Type: application/json"\ + --data +'{ + "auth": + { + "tenantName":"demo", + "passwordCredentials": + { + "username":"admin", + "password":"password" + } + } +}'\ +http://keystone-int.cloudkeep.io:5000/v2.0/tokens + diff --git a/docs/src/docbkx/samples/reqgetversioninfo.json b/docs/src/docbkx/samples/reqgetversioninfo.json new file mode 100644 index 000000000..1c5cfd7ce --- /dev/null +++ b/docs/src/docbkx/samples/reqgetversioninfo.json @@ -0,0 +1,2 @@ +$ curl -H "Accept: application/json" -H "X-Auth-Token: 39a8b7f62dcb4095a74a4e65a68c85d8" \ + http://iad-int-api.cloudkeep.io:9311 diff --git a/docs/src/docbkx/samples/resAuthenticate.json b/docs/src/docbkx/samples/resAuthenticate.json new file mode 100644 index 000000000..0aaa308c5 --- /dev/null +++ b/docs/src/docbkx/samples/resAuthenticate.json @@ -0,0 +1,147 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=UTF-8 +Content-Length: 477 +Date: Thu, 8 Aug 2013 18:45:13 GMT + +{ + "access": { + + "token": { + "expires": "2013-08-09T22:51:02.000-06:00", + "id": "vvvvvvvv-wwww-xxxx-yyyy-zzzzzzzzzzzz" + }, + "user": { + "id": "123456", + "name": "jsmith", + "RAX-AUTH:defaultRegion": "DFW", + "roles": [ + { + "description": "Admin Role.", + "id": "identity:admin", + "name": "identity:admin" + }, + { + "description": "Default Role.", + "id": "identity:default", + "name": "identity:default" + } + ] + }, + "serviceCatalog": [ + { + "endpoints": [ + { + "publicURL": "https://dfw.databases.api.rackspacecloud.com/v1.0/1100111", + "region": "DFW", + "tenantId": "1100111" + }, + { + "publicURL": "https://ord.databases.api.rackspacecloud.com/v1.0/1100111", + "region": "ORD", + "tenantId": "1100111" + } + ], + "name": "cloudDatabases", + "type": "rax:database" + }, + { + "endpoints": [ + { + "publicURL": "https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/1100111", + "region": "DFW", + "tenantId": "1100111" + }, + { + "publicURL": "https://ord.loadbalancers.api.rackspacecloud.com/v1.0/1100111", + "region": "ORD", + "tenantId": "1100111" + } + ], + "name": "cloudLoadBalancers", + "type": "rax:load-balancer" + }, + { + "endpoints": [ + { + "tenantId": "1100111", + "region": "DFW", + "publicURL": "https://dfw.servers.api.rackspacecloud.com/v2/1100111", + "versionId": "2", + "versionInfo": "https://dfw.servers.api.rackspacecloud.com/v2/", + "versionList": "https://dfw.servers.api.rackspacecloud.com/" + }, + { + "tenantId": "1100111", + "region": "ORD", + "publicURL": "https://ord.servers.api.rackspacecloud.com/v2/1100111", + "versionId": "2", + "versionInfo": "https://ord.servers.api.rackspacecloud.com/v2/", + "versionList": "https://ord.servers.api.rackspacecloud.com/" + } + ], + "name": "cloudServersOpenStack", + "type": "compute" + }, + { + "endpoints": [ + { + "publicURL": "https://monitoring.api.rackspacecloud.com/v1.0/1100111", + "tenantId": "1100111" + } + ], + "name": "cloudMonitoring", + "type": "rax:monitor" + }, + { + "endpoints": [ + { + "publicURL": "https://dfw.autoscale.api.rackspacecloud.com/v1.0/1100111", + "region": "DFW", + "tenantId": "1100111", + "versionId": "1.0", + "versionInfo": null, + "versionList": null + }, + { + "publicURL": "https://ord.autoscale.api.rackspacecloud.com/v1.0/1100111", + "region": "ORD", + "tenantId": "1100111", + "versionId": "1.0", + "versionInfo": null, + "versionList": null + } + ], + "name": "autoscale", + "type": "rax:autoscale" + }, + { + "endpoints": [ + { + "tenantId": "MossoCloudFS_aaaaaaaa-bbbb-cccc-dddd-eeeeeeee", + "publicURL": "https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_aaaaaaaa-bbbb-cccc-dddd-eeeeeeee", + "internalURL": "https://snet-storage101.dfw1.clouddrive.com/v1/MossoCloudFS_aaaaaaaa-bbbb-cccc-dddd-eeeeeeee", + "region": "DFW" + }, + { + "tenantId": "MossoCloudFS_aaaaaaaa-bbbb-cccc-dddd-eeeeeeee", + "publicURL": "https://storage101.ord1.clouddrive.com/v1/MossoCloudFS_aaaaaaaa-bbbb-cccc-dddd-eeeeeeee", + "internalURL": "https://snet-storage101.ord1.clouddrive.com/v1/MossoCloudFS_aaaaaaaa-bbbb-cccc-dddd-eeeeeeee", + "region": "ORD" + } + ], + "name": "cloudFiles", + "type": "object-store" + }, + { + "endpoints": [ + { + "tenantId": "1100111", + "publicURL": "https://dns.api.rackspacecloud.com/v1.0/1100111" + } + ], + "name": "cloudDNS", + "type": "rax:dns" + } + ] + } +} \ No newline at end of file diff --git a/docs/src/docbkx/samples/resCreateSecret.json b/docs/src/docbkx/samples/resCreateSecret.json new file mode 100644 index 000000000..463731fa6 --- /dev/null +++ b/docs/src/docbkx/samples/resCreateSecret.json @@ -0,0 +1,13 @@ +{ + "status": "ACTIVE", + "secret_ref": "http://localhost:9311/v1/12345/secrets/2df8d196-76b6-4f89-a6d2-c9e764900791", + "updated": "2013-11-04T16:39:13.608659", + "created": "2013-11-04T16:39:13.574489", + "secret": {"name": "secretname", + "algorithm": "aes", + "payload_content_type": "application/octet-stream", + "expiration": null, + "bit_length": 256, + "mode": "cbc" +}, + "order_ref": "http://localhost:9311/v1/12345/orders/62d57f53-ecfe-4ae4-87bd-fab2f24e29bc"} \ No newline at end of file diff --git a/docs/src/docbkx/samples/resRetrieveSecret.json b/docs/src/docbkx/samples/resRetrieveSecret.json new file mode 100644 index 000000000..8fe588e19 --- /dev/null +++ b/docs/src/docbkx/samples/resRetrieveSecret.json @@ -0,0 +1,12 @@ +{ + "status": "ACTIVE", + "secret_ref": "http://localhost:9311/v1/12345/secrets/2df8d196-76b6-4f89-a6d2-c9e764900791", + "updated": "2013-11-04T16:39:13.593962", + "name": "secretname", + "algorithm": "aes", + "created": "2013-11-04T16:39:13.593956", + "content_types": {"default": "application/octet-stream"}, + "mode": "cbc", + "bit_length": 256, + "expiration": null +} diff --git a/docs/src/docbkx/samples/resgenerateToken.json b/docs/src/docbkx/samples/resgenerateToken.json new file mode 100644 index 000000000..094279eee --- /dev/null +++ b/docs/src/docbkx/samples/resgenerateToken.json @@ -0,0 +1,45 @@ +{ + "access": { + "token": { + "expires": "2013-06-01T18:41:56Z", + "id": "39a8b7f62dcb4095a74a4e65a68c85d8", + "tenant": { + "description": null, + "enabled": true, + "id": "f378ae2a0b9142e6a482f437ef444dd7", + "name": "demo" + } + }, + "serviceCatalog": [{ + "endpoints": [{ + "adminURL": "http://localhost:9312", + "region": "RegionOne", + "internalURL": "http://localhost:9313", + "publicURL": "http://localhost:9311" + }], + "endpoints_links": [], + "type": "key-store", + "name": "barbican" + }, { + "endpoints": [{ + "adminURL": "http://localhost:35357/v2.0", + "region": "RegionOne", + "internalURL": "http://localhost:5000/v2.0", + "publicURL": "http://localhost:5000/v2.0" + }], + "endpoints_links": [], + "type": "identity", + "name": "keystone" + }], + "user": { + "username": "demo", + "roles_links": [], + "id": "0239200f037f4520aadd9791fad19af8", + "roles": [{ + "id": "1dc8065a23f54c0abab098c94fe2f3c8", + "name": "Member" + }], + "name": "demo" + } + } +} diff --git a/docs/src/docbkx/samples/resgetversioninfo.json b/docs/src/docbkx/samples/resgetversioninfo.json new file mode 100644 index 000000000..6e6a28bcf --- /dev/null +++ b/docs/src/docbkx/samples/resgetversioninfo.json @@ -0,0 +1,4 @@ +{ + "v1": "current", + "build": "2013.2.20130913025647" +} diff --git a/docs/src/wadl/Barbican.wadl b/docs/src/wadl/Barbican.wadl new file mode 100644 index 000000000..be55c3d34 --- /dev/null +++ b/docs/src/wadl/Barbican.wadl @@ -0,0 +1,545 @@ + + + + + + %common; + + +]> + + + + + + + + + + + + + + + + + + + A subscriber to the Barbican service + + + + + + + + + + + + + + + + A secret + + + + + + + + + + + + + + + + + + An order + + + + + + + + + + + + + + + + + + + This method retrieves all secrets. + This method lists all the secrets for a tenant. Calling this method does not provide information for an indiviual secret. + + + + + + + + + + This status code is returned when the secrets have been successfully retrieved for the tenant. + + + + + + + + + + + + + + + This method creates a secret. + This method creates a new secret. + Note: Making a POST request creates metadata for a secret. If the payload is provided with the POST request, it is encrypted and stored, and then linked with this metadata. If no payload is provided in the POST request, you need to make a subsequent PUT request and provide the payload. Clients must provide the secret information either via the PUT or POST request. Please note that this process differs from creating a secret by using the orders resource, whereby Barbican generates the actual secret information. + + + + + Specifies the human readable name for the secret. + This parameter is optional. If no name is + supplied, the UUID will be displayed for this + parameter on subsequent GET calls. + + + + Specifies the expiration date for the secret in + ISO-8601 format. ISO-8601 formats dates by using + the following representation: + yyyy-mm-ddThh:mm:ss[.mmm]. For example, September + 27, 2012 is represented as 2012-09-27. Once the + secret has expired, it will no longer be returned + by the API or agent. This parameter is optinal. If + this parameter is not supplied, the secret has no + expiration date. + + + + Specifies the algorithm type used to generate the secret. This parameter is optional. + + + + + Specifies the bit length of the secret. Must be a positive integer. This parameter is optional. + + + + + Specifies the type/mode of the algorithm associated with the secret information. This parameter is optional. + + + + + Specifies the secret's unencrypted plain text. If + provided, this parameter's value must be + non-empty, and you must also provide the + payload_content_type. This field can be omitted + allowing for the secret information to be provided + via a subsequent PUT request. If the payload is + not provided, only the secret metadata will be + retrievable from Barbican and any attempt to + retrieve decrypted data for that secret will fail. + Defering the secret information to a PUT request + is useful for secrets that are in binary format + and are not suitable for base64 encoding. + + + + Specifies the type/format the secret data is provided in. This parameter is required if the payload parameter is specified. +The following values are supported: + - "text/plain" - This value is used to store plain text secrets. + Other options are "text/plain; charset=utf-8". + If the charset value is omitted, utf-8 will be assumed. Note + that Barbican normalizes some formats before storing them + as secret metadata, for example + "text/plain; charset=utf-8" is converted to "text/plain." Retrieved metadata may not exactly match what was originally + specified in the POST or PUT request. + When the payload_content_type parameter is set to "text/plain" you cannot specify a value for the payload_content_encoding parameter.. + - "application/octet-stream" - This value is used to store binary + secrets from a base64 encoded payload. If this + value is used, you must also include the payload_content_encoding parameter. + + + + Specifies the encoding format used to provide the + payload data. Barbican might translate and store + the secret data into another format. This + parameter is required if the payload_content_type + parameter is set to "application/octet-stream." + The only possible value for this parameter is + "base64," which specifies base64 encoded payloads. + + + + + + + + + + This status code is returned when the secret has been successfully created. + + + + + + + + This error code is returned if the secret has invalid data. This response may include schema violations + such as mime-type not specified. + + + This error code is returned if the "payload" parameter is empty. This response indicates that the 'payload' JSON attribute was provided, but no value was assigned to it. + + + This error code is returned if the value specified in the "payload_content_type" parameter is not supported. It is caused when no crypto plugin supports the payload_content_type requested + + + This error code is returned when the secret specified in the "payload" parameter is too large. + + + + + + + + + This method retrieves secret information. + This method retrieves the information for the specified secret. For the application/json accept type, only metadata about the secret is returned. If one of the 'content_types' accept types is specified instead, that portion of the secret will be decrypted and returned. + + + + + + + + + + This status code is returned when the secret has been successfully retrieved. + + + + + + + + This error code is returned when the supplied UUID doesn't match the secret in the datastore. + + + This error code is returned when the secret metadata has been created, but the encrypted data for it has not yet been supplied, hence cannot be retrieved via a non 'application/json' mime type + + + This error code is returned when the secret data cannot be retrieved in the requested Accept header mime-type + + + + + + + + + + This method updates a specified secret. + This method updates a secret. To provide secret information after the secret is created, submit a PUT request to the secret URI. Note that a PUT request can only be performed once after a POST call that does not include a payload. Also note that no other attributes of a secret can be modified via PUT after it is POST-ed. + The PUT request should include the payload, as well as the appropriate Content-Type and Content-Encoding definitions. + GET - Decrypted Secret Data + + To retrieve the decrypted secret information, perform a GET with the Accept header set to one of the content_types specified in the GET metadata call. Note that even if a binary secret is provided in the base64 format, it is converted to binary by Barbican prior to encryption and storage. Thereafter the secret will only be decrypted and returned as raw binary. + + + + + Specifies the name of the last queue received in a previous request, or none to get the first page of results. + + + + + Specifies the number of queues to return. The default value for the number of queues returned is 10. If you do not specify this parameter, the default number of queues is returned. + + + + + Determines whether queue metadata is included in the response. The default value for this parameter is false, which excludes the metadata. + + + + + + + + + + This status code is returned when the secret has been successfully updated. + + + + + + + + This error code is returned when the supplied UUID doesn't match the secret in the datastore for the specified tenant.. + + + This error code is returned when no crypto plugin supports the payload_content_type requested in the Content-Type + + + This error code is returned when the secret already has encrypted data associated with it + + + This error code is returned when no value was provided for the "payload" parameter. + + + This error code is returned when the secret specified in the "payload" parameter is too large. + + + + + + + + + Deletes the specified secret. + This operation immediately deletes a queue and all of its existing messages. + + + + + + + + + + This status code is returned when the secret has been successfully deleted. + + + + + + + + This error code is returned when the supplied UUID doesn't match the secret in the datastore. + + + + + + + + + + + + + + This method retrieves all orders. + This method lists all orders for a specified tenant. Performing a GET on the secrets resource with no UUID retrieves a batch of the most recent orders per the requesting tenant. + The retrieved list of orders is ordered by oldest to newest created date. + + + + + + + + + + This status code is returned when the orders have been successfully retrieved. + + + + + + + + + + + + + + + This method creates an order. + This method creates a new order. + + + + + This parameter specifies the name of the secret. + + + + + Specifies the algorithm type used to generate the secret. This parameter is optional. + + + + + Specifies the bit length of the secret. Must be a positive integer. This parameter is optional. + + + + + Specifies the type/mode of the algorithm associated with the secret information. This parameter is optional. + + + + + Specifies the type/format the secret data is provided in. This parameter is required if the payload parameter is specified. + The following values are supported: + - "text/plain" - This value is used to store plain text secrets. + Other options are "text/plain; charset=utf-8". + If the charset value is omitted, utf-8 will be assumed. Note + that Barbican normalizes some formats before storing them + as secret metadata, for example + "text/plain; charset=utf-8" is converted to "text/plain." Retrieved metadata may not exactly match what was originally + specified in the POST or PUT request. + When the payload_content_type parameter is set to "text/plain" you cannot specify a value for the payload_content_encoding parameter.. + - "application/octet-stream" - This value is used to store binary + secrets from a base64 encoded payload. If this + value is used, you must also include the payload_content_encoding parameter. + + + + + + + + + This status code is returned when the order was successfully created. + + + + + + + + This error code is returned when the data provided in the POST request is invalid. This can include schema violations such as the secret's mime-type not specified + + + This error code is returned when the value provided in the "payload_content_type" parameter is invalid. This is caused when thre is no crypto plugin available that supports the payload_content_type requested + + + + + + + + + + + This method retrieves information about a specified order. + This method retrieves information for the specified order including g a link to the secret that was generated as a result of the order (if available). + + + + + + + + + + This status code is returned when the order info was successfully retrieved. + + + + + + + + This error code is returned when the supplied UUID doesn't match a order in the data store, which means the order doesn't exist. + + + + + + + + + + This method updates an order. + + + + + Specifies the name of the last queue received in a previous request, or none to get the first page of results. + + + + + Specifies the number of queues to return. The default value for the number of queues returned is 10. If you do not specify this parameter, the default number of queues is returned. + + + + + Determines whether queue metadata is included in the response. The default value for this parameter is false, which excludes the metadata. + + + + + + + + + + + + + + + + + + + + + + + This method deletes the specified order. + This method cancels an exisitng order. + + + + + + + + + + This status code is returned when the order was successfully cancelled. + + + + + + + + This error code is returned when the supplied UUID doesn't match a order in the data store, which means the order doesn't exist. + + + + + diff --git a/docs/src/wadl/normalized/cq-devguide.wadl b/docs/src/wadl/normalized/cq-devguide.wadl new file mode 100644 index 000000000..841dffa1c --- /dev/null +++ b/docs/src/wadl/normalized/cq-devguide.wadl @@ -0,0 +1,3793 @@ + + + + + Arbitrary character string generated by the + authentication service in response to + valid credentials. + + + + Gets the home document. + This operation gets the home document. + The entire API is discoverable from a single starting point, the home document. To explore the entire API, you need to know only this one URI. This document is cacheable. + The home document lets you write clients by using relational links, so clients do not have to construct their own URLs. You can click through and view the JSON doc in your browser. + For more information about home documents, see http://tools.ietf.org/html/draft-nottingham-json-home-02. + + + + + + GET /v1 HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com + + + + + + + + + + HTTP/1.0 200 OK +Cache-Control: max-age=86400 +Content-Length: 4345 +Content-Type: application/json-home +Date: Tue, 06 Sep 2013 16:31:48 GMT +Server: WSGIServer/0.1 Python/2.7.3 + +{ + "resources": { + "rel/queue": { + "href-template": "/queues/{queue_name}", + "href-vars": { + "queue_name": "param/queue_name" + }, + "hints": { + "allow": [ + "GET", + "HEAD", + "PUT", + "DELETE" + ], + "formats": { + "application/json": {} + } + } + }, + "rel/queue-metadata": { + "href-template": "/queues/{queue_name}/metadata", + "href-vars": { + "queue_name": "param/queue_name" + }, + "hints": { + "allow": [ + "GET", + "PUT" + ], + "formats": { + "application/json": {} + } + } + }, + "rel/queue-stats": { + "href-template": "/queues/{queue_name}/stats", + "href-vars": { + "queue_name": "param/queue_name" + }, + "hints": { + "allow": [ + "GET" + ], + "formats": { + "application/json": {} + } + } + }, + "rel/queues": { + "href-template": "/queues{?marker,limit,detailed}", + "href-vars": { + "marker": "param/marker", + "detailed": "param/detailed", + "limit": "param/queue_limit" + }, + "hints": { + "allow": [ + "GET" + ], + "formats": { + "application/json": {} + } + } + }, + "rel/post-messages": { + "href-template": "/v1/queues/{queue_name}/messages", + "href-vars": { + "queue_name": "param/queue_name" + }, + "hints": { + "accept-post": [ + "application/json" + ], + "allow": [ + "POST" + ], + "formats": { + "application/json": {} + } + } + }, + "rel/messages": { + "href-template": "/queues/{queue_name}/messages{?marker,limit,echo,include_claimed}", + "href-vars": { + "marker": "param/marker", + "include_claimed": "param/include_claimed", + "queue_name": "param/queue_name", + "limit": "param/messages_limit", + "echo": "param/echo" + }, + "hints": { + "allow": [ + "GET" + ], + "formats": { + "application/json": {} + } + } + }, + "rel/claim": { + "href-template": "/v1/queues/{queue_name}/claims{?limit}", + "href-vars": { + "queue_name": "param/queue_name", + "limit": "param/claim_limit" + }, + "hints": { + "accept-post": [ + "application/json" + ], + "allow": [ + "POST" + ], + "formats": { + "application/json": {} + } + } + } + } +} + + + + + + + + + Lists queues. + A request to list queues when you have no queues in your account returns 204, instead of 200, because there was no information to send back. + This operation lists queues for the project. The queues are sorted alphabetically by name. + + + + + Specifies the name of the last queue received in a previous request, or none to get the first page of results. + + + + + Specifies the number of queues to return. The default value for the number of queues returned is 10. If you do not specify this parameter, the default number of queues is returned. + + + + + Determines whether queue metadata is included in the response. The default value for this parameter is false, which excludes the metadata. + + + + + + GET /v1/queues HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + HTTP/1.1 200 OK +Content-Length: 3170 +Content-Type: application/json; charset=utf-8 +Content-Location: /v1/queues + +{ + "queues": [ + { + "href": "/v1/queues/036b184b28fcb548349af623079119c6a966cbc", + "name": "036b184b28fcb548349af623079119c6a966cbc" + }, + { + "href": "/v1/queues/0441f28617afbdecf4887e635fd0777fb3cec38", + "name": "0441f28617afbdecf4887e635fd0777fb3cec38" + }, + { + "href": "/v1/queues/0f8f0eff158922874536efa9cf8412b9e0fd07a", + "name": "0f8f0eff158922874536efa9cf8412b9e0fd07a" + }, + { + "href": "/v1/queues/160f981379972a4a0afaee5f5394a5d960c410e", + "name": "160f981379972a4a0afaee5f5394a5d960c410e" + }, + { + "href": "/v1/queues/2888a4527d0a11a3d82202d800f8e90eebd60ea", + "name": "2888a4527d0a11a3d82202d800f8e90eebd60ea" + }, + { + "href": "/v1/queues/2ad8eeca7f53d480d8ca4885d620643bfc6a7f9", + "name": "2ad8eeca7f53d480d8ca4885d620643bfc6a7f9" + }, + { + "href": "/v1/queues/3926ce2051db957d76a04cb2ea2d89fd49e6894", + "name": "3926ce2051db957d76a04cb2ea2d89fd49e6894" + }, + { + "href": "/v1/queues/46b30ebd60186c30194039824e6405300dc0903", + "name": "46b30ebd60186c30194039824e6405300dc0903" + }, + { + "href": "/v1/queues/486d5af3e057ee1a430eee3ee845aeb60c900d3", + "name": "486d5af3e057ee1a430eee3ee845aeb60c900d3" + }, + { + "href": "/v1/queues/58e8622645f07c7673412acbed51abb97ddb25d", + "name": "58e8622645f07c7673412acbed51abb97ddb25d" + } + ], + "links": [ + { + "href": "/v1/queues?marker=58e8622645f07c7673412acbed51abb9", + "rel": "next" + } + ] +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies the name of the queue. + + + + Creates a queue. + This operation creates a new queue. + The body of the request is empty. + + + queue_name is the name that you give to the queue. The name must not exceed 64 bytes in length, and it is limited to US-ASCII letters, digits, underscores, and hyphens. + + + + + + + PUT /v1/queues/demoqueue HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Accept: application/json +X-Project-Id: 806067 + +{ + +} + + + + + + + + + + + HTTP/1.1 201 Created +Content-Length: 0 +Location: /v1/queues/demoqueue + + + + + + + + + + + + + + + + + + + + + + + + + Deletes the specified queue. + This operation immediately deletes a queue and all of its existing messages. + + + queue_name is the name that you give to the queue. The name must not exceed 64 bytes in length, and it is limited to US-ASCII letters, digits, underscores, and hyphens. + + + + + + + DELETE /v1/queues/demoqueue HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + + HTTP/1.1 204 No Content + + + + + + + + + + + + + + + + + + + + + + + + Verifies whether the specified queue exists. + This operation verifies whether the specified queue exists. + You can also use HEAD instead of GET for the verb. + + + queue_name is the name that you give to the queue. The name must not exceed 64 bytes in length, and it is limited to US-ASCII letters, digits, underscores, and hyphens. + + + + + Checks to + + GET /v1/queues/demoqueue HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +X-Project-Id: 806067 + + + + + + + + + HTTP/1.0 204 OK + + + + + + + + + + + + + + + + Sets metadata for the specified queue. + This operation sets metadata for the specified queue. + The request body has a limit of 256 KB, excluding whitespace. + This operation replaces any existing metadata document in its entirety. Ensure that you do not accidentally overwrite existing metadata that you want to retain. + The body of the request includes contextual information about the way a particular application interacts with the queue. The maximum size of this body is 256 KB, excluding whitespace (when re-serialized as JSON). The document must be valid JSON. (Cloud Queues validate it.) + + + queue_name is the name that you give to the queue. The name must not exceed 64 bytes in length, and it is limited to US-ASCII letters, digits, underscores, and hyphens. + + + + + + + PUT /v1/queues/demoqueue/metadata HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Accept: application/json +X-Project-Id: 806067 + +{ + "new metadata": "Omega" +} + + + + + + + + + + HTTP/1.1 204 No Content +Location: /v1/queues/demoqueue/metadata + + + + + + + + + + + + + + + + + + + + + + + + Returns metadata for the specified queue. + This operation returns metadata, such as message TTL, for the queue. + + + queue_name is the name that you give to the queue. The name must not exceed 64 bytes in length, and it is limited to US-ASCII letters, digits, underscores, and hyphens. + + + + + + + GET /v1/queues/demoqueue/metadata HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + HTTP/1.1 200 OK +Content-Length: 25 +Content-Type: application/json; charset=utf-8 +Content-Location: /v1/queues/demoqueue/metadata + +{"new metadata": "Omega"} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Returns statistics for the specified queue. + This operation returns queue statistics, including how many messages are in the queue, categorized by status. + + If the value of the total attribute is 0, then oldest and newest message statistics are not included in the response. + + + + + + + GET /v1/queues/demoqueue/stats HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + HTTP/1.1 200 OK +Content-Length: 53 +Content-Type: application/json; charset=utf-8 +Content-Location: /v1/queues/demoqueue/stats + +{ + "messages": { + "claimed": 2409, + "free": 146929, + "total": 149338, + "newest": { + "age": 12, + "created": "2013-08-12T20:45:46Z", + "href": "/v1/queues/fizbit/messages/50b68a50d6f5b8c8a7c62b01" + }, + "oldest": { + "age": 63, + "created": "2013-08-12T20:44:55Z", + "href": "/v1/queues/fizbit/messages/50b68a50d6f5b8c8a7c62b01" + } + } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Posts the message or messages for the specified queue. + This operation posts the specified message or messages. + You can submit up to 10 messages in a single request, but you must always encapsulate the messages in a collection container (an array in JSON). The resulting value of the Location header or response body might be used to retrieve the created messages for further processing. + The client specifies only the body and TTL for the message. The server inserts metadata, such as ID and age. + The response body contains a list of resource paths that correspond to each message submitted in the request, in the order of the messages. If a server-side error occurs during the processing of the submitted messages, a partial list is returned, the partial attribute is set to true, and the client tries to post the remaining messages again. If the server cannot enqueue any messages, the server returns a 503 Service Unavailable error message. + The body attribute specifies an arbitrary document that constitutes the body of the message being sent. The size of this body is limited to 256 KB, excluding whitespace. The document must be valid JSON. (Cloud Queues validates it.) + The ttl attribute specifies how long the server waits before marking the message as expired and removing it from the queue. The value of ttl must be between 60 and 1209600 seconds (14 days). Note that the server might not actually delete the message until its age has reached up to (ttl + 60) seconds, to allow for flexibility in storage implementations. + + + + + + POST /v1/queues/demoqueue/messages HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +Client-ID: e58668fc-26eb-11e3-8270-5b3128d43830 +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Accept: application/json +X-Project-Id: 806067 + +[ + { + "ttl": 300, + "body": { + "event": "BackupStarted" + } + }, + { + "ttl": 60, + "body": { + "play": "hockey" + } + } +] + + + + + + + + + + HTTP/1.1 201 Created +Content-Length: 149 +Content-Type: application/json; charset=utf-8 +Location: /v1/queues/demoqueue/messages?ids=51db6f78c508f17ddc924357,51db6f78c508f17ddc924358 + +{ + "partial": false, + "resources": [ + "/v1/queues/demoqueue/messages/51db6f78c508f17ddc924357", + "/v1/queues/demoqueue/messages/51db6f78c508f17ddc924358" + ] +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gets the message or messages in the specified queue. + A request to list messages when the queue is not found or when messages are not found returns 204, instead of 200, because there was no information to send back. Messages with malformed IDs or messages that are not found by ID are ignored. + This operation gets the message or messages in the specified queue. + Message IDs and markers are opaque strings. Clients should make no assumptions about their format or length. Furthermore, clients should assume that there is no relationship between markers and message IDs (that is, one cannot be derived from the other). This allows for a wide variety of storage driver implementations. + Results are ordered by age, oldest message first. + + + + + Specifies an opaque string that the client can use to request the next batch of messages. The marker parameter communicates to the server which messages the client has already received. If you do not specify a value, the API returns all messages at the head of the queue (up to the limit). + + + + When more messages are available than can be returned in a single request, the client can pick up the next batch of messages by simply using the URI template parameters returned from the previous call in the "next" field. + Specifies up to 10 messages (the default value) to return. If you do not specify a value for the limit parameter, the default value of 10 is used. + + + + + Determines whether the API returns a client's own messages. The echo parameter is a Boolean value (true or false) that determines whether the API returns a client's own messages, as determined by the uuid portion of the User-Agent header. If you do not specify a value, echo uses the default value of false. If you are experimenting with the API, you might want to set echo=true in order to see the messages that you posted. + + + + + Determines whether the API returns claimed messages and unclaimed messages. The include_claimed parameter is a Boolean value (true or false) that determines whether the API returns claimed messages and unclaimed messages. If you do not specify a value, include_claimed uses the default value of false (only unclaimed messages are returned). + + + + + + GET /v1/queues/demoqueue/messages?echo=true HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +Client-ID: e58668fc-26eb-11e3-8270-5b3128d43830 +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + HTTP/1.1 204 No Content + +HTTP/1.1 200 OK +Content-Length: 602 +Content-Type: application/json; charset=utf-8 +Content-Location: /v1/queues/demoqueue/messages?echo=true + +{ + "messages": [ + { + "body": { + "event": "BackupStarted" + }, + "age": 198, + "href": "/v1/queues/demoqueue/messages/51db6ecac508f17ddc9242ad", + "ttl": 300 + }, + { + "body": { + "event": "BackupStarted" + }, + "age": 97, + "href": "/v1/queues/demoqueue/messages/51db6f2f821e727dc24df623", + "ttl": 300 + }, + { + "body": { + "event": "BackupStarted" + }, + "age": 24, + "href": "/v1/queues/demoqueue/messages/51db6f78c508f17ddc924357", + "ttl": 300 + }, + { + "body": { + "play": "hockey" + }, + "age": 24, + "href": "/v1/queues/demoqueue/messages/51db6f78c508f17ddc924358", + "ttl": 60 + } + ], + "links": [ + { + "href": "/v1/queues/demoqueue/messages?marker=8&echo=true", + "rel": "next" + } + ] +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gets a specified set of messages from the specified queue. + This operation provides a more efficient way to query multiple messages compared to using a series of individual GET. Note that the list of IDs cannot exceed 20. If a malformed ID or a nonexistent message ID is provided, it is ignored, and the remaining messages are returned. + Unlike the Get Messages operation, a client's own messages are always returned in this operation. If you use the ids parameter, the echo parameter is not used and is ignored if it is specified. + The message attributes are defined as follows: + + + href is an opaque relative URI that the client can use to uniquely identify a message resource and interact with it. + + + + ttl is the TTL that was set on the message when it was posted. The message expires after (ttl - age) seconds. + + + + age is the number of seconds relative to the server's clock. + + + + body is the arbitrary document that was submitted with the original request to post the message. + + + + + + + + Specifies the IDs of the messages to get. Format multiple message ID values by separating them with commas (comma-separated). + + + + + Specifies the claim ID with which the message is associated. + + + + + + GET /v1/queues/demoqueue/messages?ids=51db6f78c508f17ddc924357,51db6ecac508f17ddc9242ad HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Client-ID: e58668fc-26eb-11e3-8270-5b3128d43830 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + + HTTP/1.1 200 OK +Content-Location: /v1/queues/fizbat/messages?ids=50b68a50d6f5b8c8a7c62b01,f5b8c8a7c62b0150b68a50d6 + +... + +[ + { + "href": "/v1/queues/fizbit/messages/50b68a50d6f5b8c8a7c62b01", + "ttl": 800, + "age": 32, + "body": { + "cmd": "EncodeVideo", + "jobid": 58229 + } + }, + { + "href": "/v1/queues/fizbit/messages/f5b8c8a7c62b0150b68a50d6", + "ttl": 800, + "age": 790, + "body": { + "cmd": "EncodeAudio", + "jobid": 58201 + } + } +] + + + + + + + + + + + + + + + + + + + + + + + + + + + + Provides a bulk delete for messages. + This operation immediately deletes the specified messages. If any of the message IDs are malformed or non-existent, they are ignored. The remaining valid messages IDs are deleted. + + + + + Specifies the IDs of the messages to delete. + + + + + + DELETE /v1/queues/demoqueue/messages?ids=50b68a50d6f5b8c8a7c62b01,50b68a50d6f5b8c8a7c62b02 HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Client-ID: e58668fc-26eb-11e3-8270-5b3128d43830 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + HTTP/1.1 204 No Content + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies the message ID. + + + + Gets the specified message from the specified queue. + This operation gets the specified message from the specified queue. + If either the message ID is malformed or nonexistent, no message is returned. + Message fields are defined as follows: + + + href is an opaque relative URI that the client can use to uniquely identify a message resource and interact with it. + + + + ttl is the TTL that was set on the message when it was posted. The message expires after (ttl - age) seconds. + + + + age is the number of seconds relative to the server's clock. + + + + body is the arbitrary document that was submitted with the original request to post the message. + + + + + + + + + GET /v1/queues/demoqueue/messages/51db6ecac508f17ddc9242ad HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Client-ID: e58668fc-26eb-11e3-8270-5b3128d43830 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + HTTP/1.1 200 OK +Content-Length: 126 +Content-Type: application/json; charset=utf-8 +Content-Location: /v1/queues/demoqueue/messages/51db6ecac508f17ddc9242ad + +{ + "body": { + "event": "BackupStarted" + }, + "age": 240, + "href": "/v1/queues/demoqueue/messages/51db6ecac508f17ddc9242ad", + "ttl": 300 +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + Deletes the specified message from the specified queue. + This operation immediately deletes the specified message. + The claim_id parameter specifies that the message is deleted only if it has the specified claim ID and that claim has not expired. This specification is useful for ensuring only one worker processes any given message. When a worker's claim expires before it can delete a message that it has processed, the worker must roll back any actions it took based on that message because another worker can now claim and process the same message. + If you do not specify claim_id, but the message is claimed, the operation fails. You can only delete claimed messages by providing an appropriate claim_id. + + + + + Identifies the claim. + + + + + + DELETE /v1/queues/demoqueue/messages/51db6f78c508f17ddc924358 HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Client-ID: e58668fc-26eb-11e3-8270-5b3128d43830 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + HTTP/1.1 204 No Content + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Claims a set of messages from the specified queue. + This operation claims a set of messages (up to the value of the limit parameter) from oldest to newest and skips any messages that are already claimed. If no unclaimed messages are available, the API returns a 204 No Content message. + When a client (worker) finishes processing a message, it should delete the message before the claim expires to ensure that the message is processed only once. As part of the delete operation, workers should specify the claim ID (which is best done by simply using the provided href). If workers perform these actions, then if a claim simply expires, the server can return an error and notify the worker of the race condition. This action gives the worker a chance to roll back its own processing of the given message because another worker can claim the message and process it. + The age given for a claim is relative to the server's clock. The claim's age is useful for determining how quickly messages are getting processed and whether a given message's claim is about to expire. + When a claim expires, it is released. If the original worker failed to process the message, another client worker can then claim the message. + + Note that claim creation is best-effort, meaning the worker may claim and return less than the requested number of messages. + + The ttl attribute specifies how long the server waits before releasing the claim. The ttl value must be between 60 and 43200 seconds (12 hours). You must include a value for this attribute in your request. + The grace attribute specifies the message grace period in seconds. The value of grace value must be between 60 and 43200 seconds (12 hours). You must include a value for thia attribute in your request. To deal with workers that have stopped responding (for up to 1209600 seconds or 14 days, including claim lifetime), the server extends the lifetime of claimed messages to be at least as long as the lifetime of the claim itself, plus the specified grace period. If a claimed message would normally live longer than the grace period, its expiration is not adjusted. + + + + + Specifies the number of messages to return, up to 20 messages. If limit is not specified, limit defaults to 10. + + + + + + POST /v1/queues/demoqueue/claims HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +Client-ID: e58668fc-26eb-11e3-8270-5b3128d43830 +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Accept: application/json +X-Project-Id: 806067 + +{ + "ttl": 300, + "grace": 300 +} + + + + + + + + + HTTP/1.1 201 OK +Content-Length: 162 +Content-Type: application/json; charset=utf-8 +Location: /v1/queues/demoqueue/claims/51db7067821e727dc24df754 + +[ + { + "body": { + "event": "BackupStarted" + }, + "age": 239, + "href": "/v1/queues/demoqueue/messages/51db6f78c508f17ddc924357?claim_id=51db7067821e727dc24df754", + "ttl": 300 + } +] + + + + + + + + + + + + + + + + + + + + + + + + + + + + Specifies the claim ID. + + + + Queries the specified claim for the specified queue. + This operation queries the specified claim for the specified queue. Claims with malformed IDs or claims that are not found by ID are ignored. + + + + + + GET /v1/queues/demoqueue/claims/51db7067821e727dc24df754 HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Client-ID: e58668fc-26eb-11e3-8270-5b3128d43830 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + HTTP/1.1 200 OK +Content-Length: 263 +Content-Type: application/json; charset=utf-8 +Content-Location: /v1/queues/demoqueue/claims/51db7067821e727dc24df754 + +{ + "age": 57, + "href": "/v1/queues/demoqueue/claims/51db7067821e727dc24df754", + "messages": [ + { + "body": { + "event": "BackupStarted" + }, + "age": 296, + "href": "/v1/queues/demoqueue/messages/51db6f78c508f17ddc924357?claim_id=51db7067821e727dc24df754", + "ttl": 300 + } + ], + "ttl": 300 +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Updates the specified claim for the specified queue. + This operation updates the specified claim for the specified queue. Claims with malformed IDs or claims that are not found by ID are ignored. + Clients should periodically renew claims during long-running batches of work to avoid losing a claim while processing a message. The client can renew a claim by issuing a PATCH command to a specific claim resource and including a new TTL for the claim (which can be different from the original TTL). The server resets the age of the claim and applies the new TTL. + + + + + + PATCH /v1/queues/demoqueue/claims/51db7067821e727dc24df754 HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Client-ID: e58668fc-26eb-11e3-8270-5b3128d43830 +Accept: application/json +X-Project-Id: 806067 + +{ + "ttl": 300, + "grace": 300 +} + + + + + + + + + HTTP/1.1 204 No Content + + + + + + + + + + + + + + + + + + + + + + + + + + + + Releases the specified claim for the specified queue. + This operation immediately releases a claim, making any remaining, undeleted) messages that are associated with the claim available to other workers. Claims with malformed IDs or claims that are not found by ID are ignored. + This operation is useful when a worker is performing a graceful shutdown, fails to process one or more messages, or is taking longer than expected to process messages, and wants to make the remainder of the messages available to other workers. + + + + + + DELETE /v1/480924/queues/demoqueue/claims/51db7067821e727dc24df754 HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Client-ID: e58668fc-26eb-11e3-8270-5b3128d43830 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + HTTP/1.1 204 No Content + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gets the home document. + This operation gets the home document. + The entire API is discoverable from a single starting point, the home document. To explore the entire API, you need to know only this one URI. This document is cacheable. + The home document lets you write clients by using relational links, so clients do not have to construct their own URLs. You can click through and view the JSON doc in your browser. + For more information about home documents, see http://tools.ietf.org/html/draft-nottingham-json-home-02. + + + + + + GET /v1 HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com + + + + + + + + + + HTTP/1.0 200 OK +Cache-Control: max-age=86400 +Content-Length: 4345 +Content-Type: application/json-home +Date: Tue, 06 Sep 2013 16:31:48 GMT +Server: WSGIServer/0.1 Python/2.7.3 + +{ + "resources": { + "rel/queue": { + "href-template": "/queues/{queue_name}", + "href-vars": { + "queue_name": "param/queue_name" + }, + "hints": { + "allow": [ + "GET", + "HEAD", + "PUT", + "DELETE" + ], + "formats": { + "application/json": {} + } + } + }, + "rel/queue-metadata": { + "href-template": "/queues/{queue_name}/metadata", + "href-vars": { + "queue_name": "param/queue_name" + }, + "hints": { + "allow": [ + "GET", + "PUT" + ], + "formats": { + "application/json": {} + } + } + }, + "rel/queue-stats": { + "href-template": "/queues/{queue_name}/stats", + "href-vars": { + "queue_name": "param/queue_name" + }, + "hints": { + "allow": [ + "GET" + ], + "formats": { + "application/json": {} + } + } + }, + "rel/queues": { + "href-template": "/queues{?marker,limit,detailed}", + "href-vars": { + "marker": "param/marker", + "detailed": "param/detailed", + "limit": "param/queue_limit" + }, + "hints": { + "allow": [ + "GET" + ], + "formats": { + "application/json": {} + } + } + }, + "rel/post-messages": { + "href-template": "/v1/queues/{queue_name}/messages", + "href-vars": { + "queue_name": "param/queue_name" + }, + "hints": { + "accept-post": [ + "application/json" + ], + "allow": [ + "POST" + ], + "formats": { + "application/json": {} + } + } + }, + "rel/messages": { + "href-template": "/queues/{queue_name}/messages{?marker,limit,echo,include_claimed}", + "href-vars": { + "marker": "param/marker", + "include_claimed": "param/include_claimed", + "queue_name": "param/queue_name", + "limit": "param/messages_limit", + "echo": "param/echo" + }, + "hints": { + "allow": [ + "GET" + ], + "formats": { + "application/json": {} + } + } + }, + "rel/claim": { + "href-template": "/v1/queues/{queue_name}/claims{?limit}", + "href-vars": { + "queue_name": "param/queue_name", + "limit": "param/claim_limit" + }, + "hints": { + "accept-post": [ + "application/json" + ], + "allow": [ + "POST" + ], + "formats": { + "application/json": {} + } + } + } + } +} + + + + + + + + Creates a queue. + This operation creates a new queue. + The body of the request is empty. + + + queue_name is the name that you give to the queue. The name must not exceed 64 bytes in length, and it is limited to US-ASCII letters, digits, underscores, and hyphens. + + + + + + + PUT /v1/queues/demoqueue HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Accept: application/json +X-Project-Id: 806067 + +{ + +} + + + + + + + + + + + HTTP/1.1 201 Created +Content-Length: 0 +Location: /v1/queues/demoqueue + + + + + + + + + + + + + + + + + + + + + + + + + Lists queues. + A request to list queues when you have no queues in your account returns 204, instead of 200, because there was no information to send back. + This operation lists queues for the project. The queues are sorted alphabetically by name. + + + + + Specifies the name of the last queue received in a previous request, or none to get the first page of results. + + + + + Specifies the number of queues to return. The default value for the number of queues returned is 10. If you do not specify this parameter, the default number of queues is returned. + + + + + Determines whether queue metadata is included in the response. The default value for this parameter is false, which excludes the metadata. + + + + + + GET /v1/queues HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + HTTP/1.1 200 OK +Content-Length: 3170 +Content-Type: application/json; charset=utf-8 +Content-Location: /v1/queues + +{ + "queues": [ + { + "href": "/v1/queues/036b184b28fcb548349af623079119c6a966cbc", + "name": "036b184b28fcb548349af623079119c6a966cbc" + }, + { + "href": "/v1/queues/0441f28617afbdecf4887e635fd0777fb3cec38", + "name": "0441f28617afbdecf4887e635fd0777fb3cec38" + }, + { + "href": "/v1/queues/0f8f0eff158922874536efa9cf8412b9e0fd07a", + "name": "0f8f0eff158922874536efa9cf8412b9e0fd07a" + }, + { + "href": "/v1/queues/160f981379972a4a0afaee5f5394a5d960c410e", + "name": "160f981379972a4a0afaee5f5394a5d960c410e" + }, + { + "href": "/v1/queues/2888a4527d0a11a3d82202d800f8e90eebd60ea", + "name": "2888a4527d0a11a3d82202d800f8e90eebd60ea" + }, + { + "href": "/v1/queues/2ad8eeca7f53d480d8ca4885d620643bfc6a7f9", + "name": "2ad8eeca7f53d480d8ca4885d620643bfc6a7f9" + }, + { + "href": "/v1/queues/3926ce2051db957d76a04cb2ea2d89fd49e6894", + "name": "3926ce2051db957d76a04cb2ea2d89fd49e6894" + }, + { + "href": "/v1/queues/46b30ebd60186c30194039824e6405300dc0903", + "name": "46b30ebd60186c30194039824e6405300dc0903" + }, + { + "href": "/v1/queues/486d5af3e057ee1a430eee3ee845aeb60c900d3", + "name": "486d5af3e057ee1a430eee3ee845aeb60c900d3" + }, + { + "href": "/v1/queues/58e8622645f07c7673412acbed51abb97ddb25d", + "name": "58e8622645f07c7673412acbed51abb97ddb25d" + } + ], + "links": [ + { + "href": "/v1/queues?marker=58e8622645f07c7673412acbed51abb9", + "rel": "next" + } + ] +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sets metadata for the specified queue. + This operation sets metadata for the specified queue. + The request body has a limit of 256 KB, excluding whitespace. + This operation replaces any existing metadata document in its entirety. Ensure that you do not accidentally overwrite existing metadata that you want to retain. + The body of the request includes contextual information about the way a particular application interacts with the queue. The maximum size of this body is 256 KB, excluding whitespace (when re-serialized as JSON). The document must be valid JSON. (Cloud Queues validate it.) + + + queue_name is the name that you give to the queue. The name must not exceed 64 bytes in length, and it is limited to US-ASCII letters, digits, underscores, and hyphens. + + + + + + + PUT /v1/queues/demoqueue/metadata HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Accept: application/json +X-Project-Id: 806067 + +{ + "new metadata": "Omega" +} + + + + + + + + + + HTTP/1.1 204 No Content +Location: /v1/queues/demoqueue/metadata + + + + + + + + + + + + + + + + + + + + + + + + Returns metadata for the specified queue. + This operation returns metadata, such as message TTL, for the queue. + + + queue_name is the name that you give to the queue. The name must not exceed 64 bytes in length, and it is limited to US-ASCII letters, digits, underscores, and hyphens. + + + + + + + GET /v1/queues/demoqueue/metadata HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + HTTP/1.1 200 OK +Content-Length: 25 +Content-Type: application/json; charset=utf-8 +Content-Location: /v1/queues/demoqueue/metadata + +{"new metadata": "Omega"} + + + + + + + + + + + + + + + + + + + + + + + + + + + + Returns statistics for the specified queue. + This operation returns queue statistics, including how many messages are in the queue, categorized by status. + + If the value of the total attribute is 0, then oldest and newest message statistics are not included in the response. + + + + + + + GET /v1/queues/demoqueue/stats HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + HTTP/1.1 200 OK +Content-Length: 53 +Content-Type: application/json; charset=utf-8 +Content-Location: /v1/queues/demoqueue/stats + +{ + "messages": { + "claimed": 2409, + "free": 146929, + "total": 149338, + "newest": { + "age": 12, + "created": "2013-08-12T20:45:46Z", + "href": "/v1/queues/fizbit/messages/50b68a50d6f5b8c8a7c62b01" + }, + "oldest": { + "age": 63, + "created": "2013-08-12T20:44:55Z", + "href": "/v1/queues/fizbit/messages/50b68a50d6f5b8c8a7c62b01" + } + } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + Deletes the specified queue. + This operation immediately deletes a queue and all of its existing messages. + + + queue_name is the name that you give to the queue. The name must not exceed 64 bytes in length, and it is limited to US-ASCII letters, digits, underscores, and hyphens. + + + + + + + DELETE /v1/queues/demoqueue HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + + HTTP/1.1 204 No Content + + + + + + + + + + + + + + + + + + + + + + + + Verifies whether the specified queue exists. + This operation verifies whether the specified queue exists. + You can also use HEAD instead of GET for the verb. + + + queue_name is the name that you give to the queue. The name must not exceed 64 bytes in length, and it is limited to US-ASCII letters, digits, underscores, and hyphens. + + + + + Checks to + + GET /v1/queues/demoqueue HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +X-Project-Id: 806067 + + + + + + + + + HTTP/1.0 204 OK + + + + + + + + + + + + + + + Posts the message or messages for the specified queue. + This operation posts the specified message or messages. + You can submit up to 10 messages in a single request, but you must always encapsulate the messages in a collection container (an array in JSON). The resulting value of the Location header or response body might be used to retrieve the created messages for further processing. + The client specifies only the body and TTL for the message. The server inserts metadata, such as ID and age. + The response body contains a list of resource paths that correspond to each message submitted in the request, in the order of the messages. If a server-side error occurs during the processing of the submitted messages, a partial list is returned, the partial attribute is set to true, and the client tries to post the remaining messages again. If the server cannot enqueue any messages, the server returns a 503 Service Unavailable error message. + The body attribute specifies an arbitrary document that constitutes the body of the message being sent. The size of this body is limited to 256 KB, excluding whitespace. The document must be valid JSON. (Cloud Queues validates it.) + The ttl attribute specifies how long the server waits before marking the message as expired and removing it from the queue. The value of ttl must be between 60 and 1209600 seconds (14 days). Note that the server might not actually delete the message until its age has reached up to (ttl + 60) seconds, to allow for flexibility in storage implementations. + + + + + + POST /v1/queues/demoqueue/messages HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +Client-ID: e58668fc-26eb-11e3-8270-5b3128d43830 +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Accept: application/json +X-Project-Id: 806067 + +[ + { + "ttl": 300, + "body": { + "event": "BackupStarted" + } + }, + { + "ttl": 60, + "body": { + "play": "hockey" + } + } +] + + + + + + + + + + HTTP/1.1 201 Created +Content-Length: 149 +Content-Type: application/json; charset=utf-8 +Location: /v1/queues/demoqueue/messages?ids=51db6f78c508f17ddc924357,51db6f78c508f17ddc924358 + +{ + "partial": false, + "resources": [ + "/v1/queues/demoqueue/messages/51db6f78c508f17ddc924357", + "/v1/queues/demoqueue/messages/51db6f78c508f17ddc924358" + ] +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gets the message or messages in the specified queue. + A request to list messages when the queue is not found or when messages are not found returns 204, instead of 200, because there was no information to send back. Messages with malformed IDs or messages that are not found by ID are ignored. + This operation gets the message or messages in the specified queue. + Message IDs and markers are opaque strings. Clients should make no assumptions about their format or length. Furthermore, clients should assume that there is no relationship between markers and message IDs (that is, one cannot be derived from the other). This allows for a wide variety of storage driver implementations. + Results are ordered by age, oldest message first. + + + + + Specifies an opaque string that the client can use to request the next batch of messages. The marker parameter communicates to the server which messages the client has already received. If you do not specify a value, the API returns all messages at the head of the queue (up to the limit). + + + + When more messages are available than can be returned in a single request, the client can pick up the next batch of messages by simply using the URI template parameters returned from the previous call in the "next" field. + Specifies up to 10 messages (the default value) to return. If you do not specify a value for the limit parameter, the default value of 10 is used. + + + + + Determines whether the API returns a client's own messages. The echo parameter is a Boolean value (true or false) that determines whether the API returns a client's own messages, as determined by the uuid portion of the User-Agent header. If you do not specify a value, echo uses the default value of false. If you are experimenting with the API, you might want to set echo=true in order to see the messages that you posted. + + + + + Determines whether the API returns claimed messages and unclaimed messages. The include_claimed parameter is a Boolean value (true or false) that determines whether the API returns claimed messages and unclaimed messages. If you do not specify a value, include_claimed uses the default value of false (only unclaimed messages are returned). + + + + + + GET /v1/queues/demoqueue/messages?echo=true HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +Client-ID: e58668fc-26eb-11e3-8270-5b3128d43830 +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + HTTP/1.1 204 No Content + +HTTP/1.1 200 OK +Content-Length: 602 +Content-Type: application/json; charset=utf-8 +Content-Location: /v1/queues/demoqueue/messages?echo=true + +{ + "messages": [ + { + "body": { + "event": "BackupStarted" + }, + "age": 198, + "href": "/v1/queues/demoqueue/messages/51db6ecac508f17ddc9242ad", + "ttl": 300 + }, + { + "body": { + "event": "BackupStarted" + }, + "age": 97, + "href": "/v1/queues/demoqueue/messages/51db6f2f821e727dc24df623", + "ttl": 300 + }, + { + "body": { + "event": "BackupStarted" + }, + "age": 24, + "href": "/v1/queues/demoqueue/messages/51db6f78c508f17ddc924357", + "ttl": 300 + }, + { + "body": { + "play": "hockey" + }, + "age": 24, + "href": "/v1/queues/demoqueue/messages/51db6f78c508f17ddc924358", + "ttl": 60 + } + ], + "links": [ + { + "href": "/v1/queues/demoqueue/messages?marker=8&echo=true", + "rel": "next" + } + ] +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gets the specified message from the specified queue. + This operation gets the specified message from the specified queue. + If either the message ID is malformed or nonexistent, no message is returned. + Message fields are defined as follows: + + + href is an opaque relative URI that the client can use to uniquely identify a message resource and interact with it. + + + + ttl is the TTL that was set on the message when it was posted. The message expires after (ttl - age) seconds. + + + + age is the number of seconds relative to the server's clock. + + + + body is the arbitrary document that was submitted with the original request to post the message. + + + + + + + + + GET /v1/queues/demoqueue/messages/51db6ecac508f17ddc9242ad HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Client-ID: e58668fc-26eb-11e3-8270-5b3128d43830 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + HTTP/1.1 200 OK +Content-Length: 126 +Content-Type: application/json; charset=utf-8 +Content-Location: /v1/queues/demoqueue/messages/51db6ecac508f17ddc9242ad + +{ + "body": { + "event": "BackupStarted" + }, + "age": 240, + "href": "/v1/queues/demoqueue/messages/51db6ecac508f17ddc9242ad", + "ttl": 300 +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gets a specified set of messages from the specified queue. + This operation provides a more efficient way to query multiple messages compared to using a series of individual GET. Note that the list of IDs cannot exceed 20. If a malformed ID or a nonexistent message ID is provided, it is ignored, and the remaining messages are returned. + Unlike the Get Messages operation, a client's own messages are always returned in this operation. If you use the ids parameter, the echo parameter is not used and is ignored if it is specified. + The message attributes are defined as follows: + + + href is an opaque relative URI that the client can use to uniquely identify a message resource and interact with it. + + + + ttl is the TTL that was set on the message when it was posted. The message expires after (ttl - age) seconds. + + + + age is the number of seconds relative to the server's clock. + + + + body is the arbitrary document that was submitted with the original request to post the message. + + + + + + + + Specifies the IDs of the messages to get. Format multiple message ID values by separating them with commas (comma-separated). + + + + + Specifies the claim ID with which the message is associated. + + + + + + GET /v1/queues/demoqueue/messages?ids=51db6f78c508f17ddc924357,51db6ecac508f17ddc9242ad HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Client-ID: e58668fc-26eb-11e3-8270-5b3128d43830 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + + HTTP/1.1 200 OK +Content-Location: /v1/queues/fizbat/messages?ids=50b68a50d6f5b8c8a7c62b01,f5b8c8a7c62b0150b68a50d6 + +... + +[ + { + "href": "/v1/queues/fizbit/messages/50b68a50d6f5b8c8a7c62b01", + "ttl": 800, + "age": 32, + "body": { + "cmd": "EncodeVideo", + "jobid": 58229 + } + }, + { + "href": "/v1/queues/fizbit/messages/f5b8c8a7c62b0150b68a50d6", + "ttl": 800, + "age": 790, + "body": { + "cmd": "EncodeAudio", + "jobid": 58201 + } + } +] + + + + + + + + + + + + + + + + + + + + + + + + + + + + Deletes the specified message from the specified queue. + This operation immediately deletes the specified message. + The claim_id parameter specifies that the message is deleted only if it has the specified claim ID and that claim has not expired. This specification is useful for ensuring only one worker processes any given message. When a worker's claim expires before it can delete a message that it has processed, the worker must roll back any actions it took based on that message because another worker can now claim and process the same message. + If you do not specify claim_id, but the message is claimed, the operation fails. You can only delete claimed messages by providing an appropriate claim_id. + + + + + Identifies the claim. + + + + + + DELETE /v1/queues/demoqueue/messages/51db6f78c508f17ddc924358 HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Client-ID: e58668fc-26eb-11e3-8270-5b3128d43830 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + HTTP/1.1 204 No Content + + + + + + + + + + + + + + + + + + + + + + + + + + + + Provides a bulk delete for messages. + This operation immediately deletes the specified messages. If any of the message IDs are malformed or non-existent, they are ignored. The remaining valid messages IDs are deleted. + + + + + Specifies the IDs of the messages to delete. + + + + + + DELETE /v1/queues/demoqueue/messages?ids=50b68a50d6f5b8c8a7c62b01,50b68a50d6f5b8c8a7c62b02 HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Client-ID: e58668fc-26eb-11e3-8270-5b3128d43830 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + HTTP/1.1 204 No Content + + + + + + + + + + + + + + + + + + + + + + + + + + + + Claims a set of messages from the specified queue. + This operation claims a set of messages (up to the value of the limit parameter) from oldest to newest and skips any messages that are already claimed. If no unclaimed messages are available, the API returns a 204 No Content message. + When a client (worker) finishes processing a message, it should delete the message before the claim expires to ensure that the message is processed only once. As part of the delete operation, workers should specify the claim ID (which is best done by simply using the provided href). If workers perform these actions, then if a claim simply expires, the server can return an error and notify the worker of the race condition. This action gives the worker a chance to roll back its own processing of the given message because another worker can claim the message and process it. + The age given for a claim is relative to the server's clock. The claim's age is useful for determining how quickly messages are getting processed and whether a given message's claim is about to expire. + When a claim expires, it is released. If the original worker failed to process the message, another client worker can then claim the message. + + Note that claim creation is best-effort, meaning the worker may claim and return less than the requested number of messages. + + The ttl attribute specifies how long the server waits before releasing the claim. The ttl value must be between 60 and 43200 seconds (12 hours). You must include a value for this attribute in your request. + The grace attribute specifies the message grace period in seconds. The value of grace value must be between 60 and 43200 seconds (12 hours). You must include a value for thia attribute in your request. To deal with workers that have stopped responding (for up to 1209600 seconds or 14 days, including claim lifetime), the server extends the lifetime of claimed messages to be at least as long as the lifetime of the claim itself, plus the specified grace period. If a claimed message would normally live longer than the grace period, its expiration is not adjusted. + + + + + Specifies the number of messages to return, up to 20 messages. If limit is not specified, limit defaults to 10. + + + + + + POST /v1/queues/demoqueue/claims HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +Client-ID: e58668fc-26eb-11e3-8270-5b3128d43830 +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Accept: application/json +X-Project-Id: 806067 + +{ + "ttl": 300, + "grace": 300 +} + + + + + + + + + HTTP/1.1 201 OK +Content-Length: 162 +Content-Type: application/json; charset=utf-8 +Location: /v1/queues/demoqueue/claims/51db7067821e727dc24df754 + +[ + { + "body": { + "event": "BackupStarted" + }, + "age": 239, + "href": "/v1/queues/demoqueue/messages/51db6f78c508f17ddc924357?claim_id=51db7067821e727dc24df754", + "ttl": 300 + } +] + + + + + + + + + + + + + + + + + + + + + + + + + + + + Queries the specified claim for the specified queue. + This operation queries the specified claim for the specified queue. Claims with malformed IDs or claims that are not found by ID are ignored. + + + + + + GET /v1/queues/demoqueue/claims/51db7067821e727dc24df754 HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Client-ID: e58668fc-26eb-11e3-8270-5b3128d43830 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + HTTP/1.1 200 OK +Content-Length: 263 +Content-Type: application/json; charset=utf-8 +Content-Location: /v1/queues/demoqueue/claims/51db7067821e727dc24df754 + +{ + "age": 57, + "href": "/v1/queues/demoqueue/claims/51db7067821e727dc24df754", + "messages": [ + { + "body": { + "event": "BackupStarted" + }, + "age": 296, + "href": "/v1/queues/demoqueue/messages/51db6f78c508f17ddc924357?claim_id=51db7067821e727dc24df754", + "ttl": 300 + } + ], + "ttl": 300 +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Updates the specified claim for the specified queue. + This operation updates the specified claim for the specified queue. Claims with malformed IDs or claims that are not found by ID are ignored. + Clients should periodically renew claims during long-running batches of work to avoid losing a claim while processing a message. The client can renew a claim by issuing a PATCH command to a specific claim resource and including a new TTL for the claim (which can be different from the original TTL). The server resets the age of the claim and applies the new TTL. + + + + + + PATCH /v1/queues/demoqueue/claims/51db7067821e727dc24df754 HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Client-ID: e58668fc-26eb-11e3-8270-5b3128d43830 +Accept: application/json +X-Project-Id: 806067 + +{ + "ttl": 300, + "grace": 300 +} + + + + + + + + + HTTP/1.1 204 No Content + + + + + + + + + + + + + + + + + + + + + + + + + + + + Releases the specified claim for the specified queue. + This operation immediately releases a claim, making any remaining, undeleted) messages that are associated with the claim available to other workers. Claims with malformed IDs or claims that are not found by ID are ignored. + This operation is useful when a worker is performing a graceful shutdown, fails to process one or more messages, or is taking longer than expected to process messages, and wants to make the remainder of the messages available to other workers. + + + + + + DELETE /v1/480924/queues/demoqueue/claims/51db7067821e727dc24df754 HTTP/1.1 +Host: ord.queues.api.rackspacecloud.com +Content-type: application/json +X-Auth-Token: 0f6e9f63600142f0a970911583522217 +Client-ID: e58668fc-26eb-11e3-8270-5b3128d43830 +Accept: application/json +X-Project-Id: 806067 + + + + + + + + + HTTP/1.1 204 No Content + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/src/wadl/samples/db-auth.json b/docs/src/wadl/samples/db-auth.json new file mode 100644 index 000000000..583b584c0 --- /dev/null +++ b/docs/src/wadl/samples/db-auth.json @@ -0,0 +1,72 @@ +HTTP/1.1 200 OK +Content-Type: application/json; charset=UTF-8 +Content-Length: 477 +Date: Thu, 12 Apr 2012 18:45:13 GMT + +{ + "auth": { + "serviceCatalog": { + "cloudDNS": [ + { + "publicURL": "https://dns.api.rackspacecloud.com/v1.0/1234" + } + ], + "cloudDatabases": [ + { + "publicURL": "https://dfw.databases.api.rackspacecloud.com/v1.0/1234", + "region": "DFW" + }, + { + "publicURL": "https://ord.databases.api.rackspacecloud.com/v1.0/1234", + "region": "ORD" + } + ], + "cloudFiles": [ + { + "internalURL": "https://snet-storage101.dfw1.clouddrive.com/v1/ MossoCloudFS_aaaa-bbbbb-cccc-ddddd ", + "publicURL": "https://storage101.dfw1.clouddrive.com/v1/ MossoCloudFS_aaaa-bbbbb-cccc-ddddd ", + "region": "DFW", + "v1Default": true + } + ], + "cloudFilesCDN": [ + { + "publicURL": "https://cdn1.clouddrive.com/v1/MossoCloudFS_aaaa-bbbbb-cccc-ddddd", + "region": "DFW", + "v1Default": true + } + ], + "cloudLoadBalancers": [ + { + "publicURL": "https://ord.loadbalancers.api.rackspacecloud.com/v1.0/1234", + "region": "ORD" + }, + { + "publicURL": "https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/1234", + "region": "DFW" + } + ], + "cloudMonitoring": [ + { + "publicURL": "https://monitoring.api.rackspacecloud.com/v1.0/1234" + } + ], + "cloudServers": [ + { + "publicURL": "https://servers.api.rackspacecloud.com/v1.0/1234", + "v1Default": true + } + ], + "cloudServersOpenStack": [ + { + "publicURL": "https://dfw.servers.api.rackspacecloud.com/v2/1234", + "region": "DFW" + } + ] + }, + "token": { + "expires": "2012-04-12T13:15:52.000-05:00", + "id": "aaaaa-bbbbbb-cccccc-ddddd" + } + } +} diff --git a/docs/src/wadl/samples/db-auth.xml b/docs/src/wadl/samples/db-auth.xml new file mode 100644 index 000000000..35bb35e28 --- /dev/null +++ b/docs/src/wadl/samples/db-auth.xml @@ -0,0 +1,50 @@ +HTTP/1.1 200 OK +Content-Type: application/xml; charset=UTF-8 +Content-Length: 477 +Date: Thu, 12 Apr 2012 18:50:20 GMT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/src/wadl/samples/db-credentials.json b/docs/src/wadl/samples/db-credentials.json new file mode 100644 index 000000000..bf15936f9 --- /dev/null +++ b/docs/src/wadl/samples/db-credentials.json @@ -0,0 +1,13 @@ +POST /v1.1/auth HTTP/1.1 +User-Agent: curl/7.21.0 (x86_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.15 libssh2/1.2.6 +Host: auth.api.rackspacecloud.com +Accept: application/json +Content-Type: application/json +Content-Length: 54 + +{ + "credentials" : { + "username" : "hub_cap", + "key" : "a86850deb2742ec3cb41518e26aa2d89" + } +} diff --git a/docs/src/wadl/samples/db-credentials.xml b/docs/src/wadl/samples/db-credentials.xml new file mode 100644 index 000000000..ae7f8971e --- /dev/null +++ b/docs/src/wadl/samples/db-credentials.xml @@ -0,0 +1,11 @@ +POST /v1.1/auth HTTP/1.1 +User-Agent: curl/7.21.0 (x86_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.15 libssh2/1.2.6 +Host: auth.api.rackspacecloud.com +Accept: application/xml +Content-Type: application/xml +Content-Length: 88 + + + diff --git a/docs/src/wadl/samples/db-faults-badRequest.json b/docs/src/wadl/samples/db-faults-badRequest.json new file mode 100644 index 000000000..fcb4571af --- /dev/null +++ b/docs/src/wadl/samples/db-faults-badRequest.json @@ -0,0 +1,11 @@ +HTTP/1.1 400 None +Content-Length: 120 +Content-Type: application/json; charset=UTF-8 +Date: Tue, 29 Nov 2011 00:33:48 GMT + +{ + "badRequest": { + "code": 400, + "message": "Volume 'size' needs to be a positive integer value, -1.0 cannot be accepted." + } +} diff --git a/docs/src/wadl/samples/db-faults-badRequest.xml b/docs/src/wadl/samples/db-faults-badRequest.xml new file mode 100644 index 000000000..43a6c7fe8 --- /dev/null +++ b/docs/src/wadl/samples/db-faults-badRequest.xml @@ -0,0 +1,10 @@ +HTTP/1.1 400 None +Content-Type: application/xml +Content-Length: 121 +Date: Mon, 28 Nov 2011 18:19:37 GMT + + + + Volume 'size' needs to be a positive integer value, -1.0 cannot be accepted. + + diff --git a/docs/src/wadl/samples/db-faults-instanceFault.json b/docs/src/wadl/samples/db-faults-instanceFault.json new file mode 100644 index 000000000..c1235773a --- /dev/null +++ b/docs/src/wadl/samples/db-faults-instanceFault.json @@ -0,0 +1,11 @@ +HTTP/1.1 500 Internal Server Error +Content-Length: 120 +Content-Type: application/json; charset=UTF-8 +Date: Tue, 29 Nov 2011 00:33:48 GMT + +{ + "instance_fault": { + "code": 500, + "message": "The server has either erred or is incapable of performing the requested operation." + } +} diff --git a/docs/src/wadl/samples/db-faults-instanceFault.xml b/docs/src/wadl/samples/db-faults-instanceFault.xml new file mode 100644 index 000000000..40a1ecfb4 --- /dev/null +++ b/docs/src/wadl/samples/db-faults-instanceFault.xml @@ -0,0 +1,10 @@ +HTTP/1.1 500 Internal Server Error +Content-Type: application/xml +Content-Length: 121 +Date: Mon, 28 Nov 2011 18:19:37 GMT + + + + The server has either erred or is incapable of performing the requested operation. + + diff --git a/docs/src/wadl/samples/db-faults-itemNotFound.json b/docs/src/wadl/samples/db-faults-itemNotFound.json new file mode 100644 index 000000000..df2edda30 --- /dev/null +++ b/docs/src/wadl/samples/db-faults-itemNotFound.json @@ -0,0 +1,11 @@ +HTTP/1.1 404 Not Found +Content-Length: 78 +Content-Type: application/json; charset=UTF-8 +Date: Tue, 29 Nov 2011 00:35:24 GMT + +{ + "item_not_found": { + "code": 404, + "message": "The resource could not be found." + } +} diff --git a/docs/src/wadl/samples/db-faults-itemNotFound.xml b/docs/src/wadl/samples/db-faults-itemNotFound.xml new file mode 100644 index 000000000..7a09fc608 --- /dev/null +++ b/docs/src/wadl/samples/db-faults-itemNotFound.xml @@ -0,0 +1,10 @@ +HTTP/1.1 404 Not Found +Content-Length: 147 +Content-Type: application/xml; charset=UTF-8 +Date: Mon, 28 Nov 2011 19:50:15 GMT + + + + The resource could not be found. + + diff --git a/docs/src/wadl/samples/db-request-types.json b/docs/src/wadl/samples/db-request-types.json new file mode 100644 index 000000000..7d7283da0 --- /dev/null +++ b/docs/src/wadl/samples/db-request-types.json @@ -0,0 +1,15 @@ +POST /v1.0/1234/instances HTTP/1.1 +Host: ord.databases.api.rackspacecloud.com +Content-Type: application/json +Accept: application/xml +X-Auth-Token: eaaafd18-0fed-4b3a-81b4-663c99ec1cbb + +{ + "instance": { + "name": "'my_instance_name'", + "flavor_ref": "https://ord.databases.api.rackspacecloud.com/v1.0/1234/flavors/1", + "volume": { + "size": "2" + } + } +} \ No newline at end of file diff --git a/docs/src/wadl/samples/db-response-types.xml b/docs/src/wadl/samples/db-response-types.xml new file mode 100644 index 000000000..186b77924 --- /dev/null +++ b/docs/src/wadl/samples/db-response-types.xml @@ -0,0 +1,24 @@ +HTTP/1.1 200 OK +Content-Type: application/xml +Content-Length: 380 +Date: Thu, 17 Nov 2011 02:37:37 GMT + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/src/wadl/samples/reqCreateOrder.json b/docs/src/wadl/samples/reqCreateOrder.json new file mode 100644 index 000000000..ef859a94c --- /dev/null +++ b/docs/src/wadl/samples/reqCreateOrder.json @@ -0,0 +1,12 @@ +curl -X POST -d \ + '{ + "secret": + { + "name": "secretname", + "algorithm": "aes", + "bit_length": 256, + "mode": "cbc", + "payload_content_type": "application/octet-stream" + } +}'\ +http://localhost:9311/v1/12345/orders \ No newline at end of file diff --git a/docs/src/wadl/samples/reqCreateSecret.json b/docs/src/wadl/samples/reqCreateSecret.json new file mode 100644 index 000000000..462ea59c8 --- /dev/null +++ b/docs/src/wadl/samples/reqCreateSecret.json @@ -0,0 +1,6 @@ +curl -X POST -d \ +'{ + "payload": "my-secret-here", + "payload_content_type": "text/plain" + }'\ + http://localhost:9311/v1/12345/secrets \ No newline at end of file diff --git a/docs/src/wadl/samples/reqDeleteOrder.json b/docs/src/wadl/samples/reqDeleteOrder.json new file mode 100644 index 000000000..462ea59c8 --- /dev/null +++ b/docs/src/wadl/samples/reqDeleteOrder.json @@ -0,0 +1,6 @@ +curl -X POST -d \ +'{ + "payload": "my-secret-here", + "payload_content_type": "text/plain" + }'\ + http://localhost:9311/v1/12345/secrets \ No newline at end of file diff --git a/docs/src/wadl/samples/reqDeleteSecret.json b/docs/src/wadl/samples/reqDeleteSecret.json new file mode 100644 index 000000000..462ea59c8 --- /dev/null +++ b/docs/src/wadl/samples/reqDeleteSecret.json @@ -0,0 +1,6 @@ +curl -X POST -d \ +'{ + "payload": "my-secret-here", + "payload_content_type": "text/plain" + }'\ + http://localhost:9311/v1/12345/secrets \ No newline at end of file diff --git a/docs/src/wadl/samples/reqGenerateToken.json b/docs/src/wadl/samples/reqGenerateToken.json new file mode 100644 index 000000000..d1a1a3e84 --- /dev/null +++ b/docs/src/wadl/samples/reqGenerateToken.json @@ -0,0 +1,16 @@ +# get a token +$ curl -H "Accept: applicaton/json" -H "Content-Type: application/json"\ + --data +'{ + "auth": + { + "tenantName":"demo", + "passwordCredentials": + { + "username":"admin", + "password":"password" + } + } +}'\ +http://keystone-int.cloudkeep.io:5000/v2.0/tokens + diff --git a/docs/src/wadl/samples/reqGetOrderinfo copy.json b/docs/src/wadl/samples/reqGetOrderinfo copy.json new file mode 100644 index 000000000..462ea59c8 --- /dev/null +++ b/docs/src/wadl/samples/reqGetOrderinfo copy.json @@ -0,0 +1,6 @@ +curl -X POST -d \ +'{ + "payload": "my-secret-here", + "payload_content_type": "text/plain" + }'\ + http://localhost:9311/v1/12345/secrets \ No newline at end of file diff --git a/docs/src/wadl/samples/reqGetOrderinfo.json b/docs/src/wadl/samples/reqGetOrderinfo.json new file mode 100644 index 000000000..159822152 --- /dev/null +++ b/docs/src/wadl/samples/reqGetOrderinfo.json @@ -0,0 +1 @@ +curl http://localhost:9311/v1/12345/orders/62d57f53-ecfe-4ae4-87bd-fab2f24e29bc \ No newline at end of file diff --git a/docs/src/wadl/samples/reqGetOrders.json b/docs/src/wadl/samples/reqGetOrders.json new file mode 100644 index 000000000..462ea59c8 --- /dev/null +++ b/docs/src/wadl/samples/reqGetOrders.json @@ -0,0 +1,6 @@ +curl -X POST -d \ +'{ + "payload": "my-secret-here", + "payload_content_type": "text/plain" + }'\ + http://localhost:9311/v1/12345/secrets \ No newline at end of file diff --git a/docs/src/wadl/samples/reqGetSecretinfo.json b/docs/src/wadl/samples/reqGetSecretinfo.json new file mode 100644 index 000000000..a88abbf5b --- /dev/null +++ b/docs/src/wadl/samples/reqGetSecretinfo.json @@ -0,0 +1 @@ +GET v1/{tenant_id}/secrets/888b29a4-c7cf-49d0-bfdf-bd9e6f26d718 \ No newline at end of file diff --git a/docs/src/wadl/samples/reqGetSecrets.json b/docs/src/wadl/samples/reqGetSecrets.json new file mode 100644 index 000000000..462ea59c8 --- /dev/null +++ b/docs/src/wadl/samples/reqGetSecrets.json @@ -0,0 +1,6 @@ +curl -X POST -d \ +'{ + "payload": "my-secret-here", + "payload_content_type": "text/plain" + }'\ + http://localhost:9311/v1/12345/secrets \ No newline at end of file diff --git a/docs/src/wadl/samples/reqUpdateOrder.json b/docs/src/wadl/samples/reqUpdateOrder.json new file mode 100644 index 000000000..462ea59c8 --- /dev/null +++ b/docs/src/wadl/samples/reqUpdateOrder.json @@ -0,0 +1,6 @@ +curl -X POST -d \ +'{ + "payload": "my-secret-here", + "payload_content_type": "text/plain" + }'\ + http://localhost:9311/v1/12345/secrets \ No newline at end of file diff --git a/docs/src/wadl/samples/reqUpdateSecret.json b/docs/src/wadl/samples/reqUpdateSecret.json new file mode 100644 index 000000000..462ea59c8 --- /dev/null +++ b/docs/src/wadl/samples/reqUpdateSecret.json @@ -0,0 +1,6 @@ +curl -X POST -d \ +'{ + "payload": "my-secret-here", + "payload_content_type": "text/plain" + }'\ + http://localhost:9311/v1/12345/secrets \ No newline at end of file diff --git a/docs/src/wadl/samples/resCreateOrder.json b/docs/src/wadl/samples/resCreateOrder.json new file mode 100644 index 000000000..fefcf5282 --- /dev/null +++ b/docs/src/wadl/samples/resCreateOrder.json @@ -0,0 +1,3 @@ +{ + "order_ref": "http://localhost:9311/v1/12345/orders/62d57f53-ecfe-4ae4-87bd-fab2f24e29bc" +} \ No newline at end of file diff --git a/docs/src/wadl/samples/resCreateSecret.json b/docs/src/wadl/samples/resCreateSecret.json new file mode 100644 index 000000000..547c814ec --- /dev/null +++ b/docs/src/wadl/samples/resCreateSecret.json @@ -0,0 +1,3 @@ +{ + "secret_ref": "http://localhost:9311/v1/{tenant_id}/secrets/a8957047-16c6-4b05-ac57-8621edd0e9ee" +} \ No newline at end of file diff --git a/docs/src/wadl/samples/resDeleteOrder.json b/docs/src/wadl/samples/resDeleteOrder.json new file mode 100644 index 000000000..462ea59c8 --- /dev/null +++ b/docs/src/wadl/samples/resDeleteOrder.json @@ -0,0 +1,6 @@ +curl -X POST -d \ +'{ + "payload": "my-secret-here", + "payload_content_type": "text/plain" + }'\ + http://localhost:9311/v1/12345/secrets \ No newline at end of file diff --git a/docs/src/wadl/samples/resDeleteSecret.json b/docs/src/wadl/samples/resDeleteSecret.json new file mode 100644 index 000000000..462ea59c8 --- /dev/null +++ b/docs/src/wadl/samples/resDeleteSecret.json @@ -0,0 +1,6 @@ +curl -X POST -d \ +'{ + "payload": "my-secret-here", + "payload_content_type": "text/plain" + }'\ + http://localhost:9311/v1/12345/secrets \ No newline at end of file diff --git a/docs/src/wadl/samples/resGetOrderinfo.json b/docs/src/wadl/samples/resGetOrderinfo.json new file mode 100644 index 000000000..159822152 --- /dev/null +++ b/docs/src/wadl/samples/resGetOrderinfo.json @@ -0,0 +1 @@ +curl http://localhost:9311/v1/12345/orders/62d57f53-ecfe-4ae4-87bd-fab2f24e29bc \ No newline at end of file diff --git a/docs/src/wadl/samples/resGetOrders.json b/docs/src/wadl/samples/resGetOrders.json new file mode 100644 index 000000000..462ea59c8 --- /dev/null +++ b/docs/src/wadl/samples/resGetOrders.json @@ -0,0 +1,6 @@ +curl -X POST -d \ +'{ + "payload": "my-secret-here", + "payload_content_type": "text/plain" + }'\ + http://localhost:9311/v1/12345/secrets \ No newline at end of file diff --git a/docs/src/wadl/samples/resUpdateOrder.json b/docs/src/wadl/samples/resUpdateOrder.json new file mode 100644 index 000000000..462ea59c8 --- /dev/null +++ b/docs/src/wadl/samples/resUpdateOrder.json @@ -0,0 +1,6 @@ +curl -X POST -d \ +'{ + "payload": "my-secret-here", + "payload_content_type": "text/plain" + }'\ + http://localhost:9311/v1/12345/secrets \ No newline at end of file diff --git a/docs/src/wadl/samples/resUpdateSecret.json b/docs/src/wadl/samples/resUpdateSecret.json new file mode 100644 index 000000000..462ea59c8 --- /dev/null +++ b/docs/src/wadl/samples/resUpdateSecret.json @@ -0,0 +1,6 @@ +curl -X POST -d \ +'{ + "payload": "my-secret-here", + "payload_content_type": "text/plain" + }'\ + http://localhost:9311/v1/12345/secrets \ No newline at end of file diff --git a/docs/src/wadl/samples/resgetSecretinfo.json b/docs/src/wadl/samples/resgetSecretinfo.json new file mode 100644 index 000000000..66239c2c3 --- /dev/null +++ b/docs/src/wadl/samples/resgetSecretinfo.json @@ -0,0 +1,13 @@ +{ + "status": "ACTIVE", + "updated": "2013-06-28T15:23:33.092660", + "name": "AES key", + "algorithm": "AES", + "mode": "cbc", + "bit_length": 256, + "content_types": { + "default": "application/octet-stream" + }, + "expiration": "2013-05-08T16:21:38.134160", + "secret_ref": "http://localhost:8080/v1/12345/secrets/888b29a4-c7cf-49d0-bfdf-bd9e6f26d718", +} \ No newline at end of file diff --git a/docs/src/wadl/samples/resgetSecrets.json b/docs/src/wadl/samples/resgetSecrets.json new file mode 100644 index 000000000..a4d0bda4b --- /dev/null +++ b/docs/src/wadl/samples/resgetSecrets.json @@ -0,0 +1,48 @@ +{ + "secrets": [ + { + "status": "ACTIVE", + "updated": "2013-06-28T15:23:30.668641", + "mode": "cbc", + "name": "Main Encryption Key", + "algorithm": "AES", + "created": "2013-06-28T15:23:30.668619", + "secret_ref": "http://localhost:9311/v1/12345/secrets/e171bb2d-f14f-433e-84f0-3dfcac7a7311", + "expiration": "2014-06-28T15:23:30.668619", + "bit_length": 256, + "content_types": { + "default": "application/octet-stream" + } + }, + { + "status": "ACTIVE", + "updated": "2013-06-28T15:23:32.210474", + "mode": "cbc", + "name": "Backup Key", + "algorithm": "AES", + "created": "2013-06-28T15:23:32.210467", + "secret_ref": "http://localhost:9311/v1/12345/secrets/6dba7827-c232-4a2b-8f3d-f523ca3a3f99", + "expiration": null, + "bit_length": 256, + "content_types": { + "default": "application/octet-stream" + } + }, + { + "status": "ACTIVE", + "updated": "2013-06-28T15:23:33.092660", + "mode": null, + "name": "PostgreSQL admin password", + "algorithm": null, + "created": "2013-06-28T15:23:33.092635", + "secret_ref": "http://localhost:9311/v1/12345/secrets/6dfa448d-c35a-4158-abaf-e4c249efb580", + "expiration": null, + "bit_length": null, + "content_types": { + "default": "text/plain" + } + } + ], + "next": "http://localhost:9311/v1/12345/secrets?limit=3&offset=5", + "previous": "http://localhost:9311/v1/12345/secrets?limit=3&offset=0" +} \ No newline at end of file diff --git a/docs/src/wadl/samples/resgetversioninfo.json b/docs/src/wadl/samples/resgetversioninfo.json new file mode 100644 index 000000000..7b6c1505b --- /dev/null +++ b/docs/src/wadl/samples/resgetversioninfo.json @@ -0,0 +1,4 @@ +{ + "v1": "current", + "build": "2013.2.20130913025647" +} diff --git a/docs/src/wadl/samples/snapshot_create.json b/docs/src/wadl/samples/snapshot_create.json new file mode 100644 index 000000000..48fc7b560 --- /dev/null +++ b/docs/src/wadl/samples/snapshot_create.json @@ -0,0 +1,8 @@ +{ + "snapshot": { + "display_name": "snap-001", + "display_description": "Daily backup", + "volume_id": "521752a6-acf6-4b2d-bc7a-119f9148cd8c", + "force": true + } +} diff --git a/docs/src/wadl/samples/snapshot_create.xml b/docs/src/wadl/samples/snapshot_create.xml new file mode 100644 index 000000000..3d6d95aa1 --- /dev/null +++ b/docs/src/wadl/samples/snapshot_create.xml @@ -0,0 +1,7 @@ + + diff --git a/docs/src/wadl/samples/snapshot_list_simple.json b/docs/src/wadl/samples/snapshot_list_simple.json new file mode 100644 index 000000000..7e216f3c7 --- /dev/null +++ b/docs/src/wadl/samples/snapshot_list_simple.json @@ -0,0 +1,22 @@ +{ + "snapshots": [ + { + "id": "3fbbcccf-d058-4502-8844-6feeffdf4cb5", + "display_name": "snap-001", + "display_description": "Daily backup", + "volume_id": "521752a6-acf6-4b2d-bc7a-119f9148cd8c", + "status": "available", + "size": 100, + "createdAt": "2012-02-29T03:50:07Z" + }, + { + "id": "e479997c-650b-40a4-9dfe-77655818b0d2", + "display_name": "snap-002", + "display_description": "Weekly backup", + "volume_id": "76b8950a-8594-4e5b-8dce-0dfa9c696358", + "status": "available", + "size": 100, + "createdAt": "2012-03-19T01:52:47Z" + } + ] +} diff --git a/docs/src/wadl/samples/snapshot_list_simple.xml b/docs/src/wadl/samples/snapshot_list_simple.xml new file mode 100644 index 000000000..9eb4c754d --- /dev/null +++ b/docs/src/wadl/samples/snapshot_list_simple.xml @@ -0,0 +1,17 @@ + + + + + diff --git a/docs/src/wadl/samples/snapshot_show.json b/docs/src/wadl/samples/snapshot_show.json new file mode 100644 index 000000000..9ef042a50 --- /dev/null +++ b/docs/src/wadl/samples/snapshot_show.json @@ -0,0 +1,11 @@ +{ + "snapshot": { + "id": "3fbbcccf-d058-4502-8844-6feeffdf4cb5", + "display_name": "snap-001", + "display_description": "Daily backup", + "volume_id": "521752a6-acf6-4b2d-bc7a-119f9148cd8c", + "status": "creating", + "size": 100, + "createdAt": "2012-02-29T03:50:07Z" + } +} diff --git a/docs/src/wadl/samples/snapshot_show.xml b/docs/src/wadl/samples/snapshot_show.xml new file mode 100644 index 000000000..8b78bf502 --- /dev/null +++ b/docs/src/wadl/samples/snapshot_show.xml @@ -0,0 +1,9 @@ + + diff --git a/docs/src/wadl/samples/volume_create.json b/docs/src/wadl/samples/volume_create.json new file mode 100644 index 000000000..6189d29b6 --- /dev/null +++ b/docs/src/wadl/samples/volume_create.json @@ -0,0 +1,8 @@ +{ + "volume": { + "display_name": "vol-001", + "display_description": "Another volume.", + "size": 100, + "volume_type": "SATA", + } +} diff --git a/docs/src/wadl/samples/volume_create.xml b/docs/src/wadl/samples/volume_create.xml new file mode 100644 index 000000000..5f9522a54 --- /dev/null +++ b/docs/src/wadl/samples/volume_create.xml @@ -0,0 +1,8 @@ + + + + diff --git a/docs/src/wadl/samples/volume_list_simple.json b/docs/src/wadl/samples/volume_list_simple.json new file mode 100644 index 000000000..2ed92e367 --- /dev/null +++ b/docs/src/wadl/samples/volume_list_simple.json @@ -0,0 +1,24 @@ +{ + "volumes": [ + { + "id": "521752a6-acf6-4b2d-bc7a-119f9148cd8c", + "display_name": "vol-001", + "display_description": "Another volume.", + "size": 100, + "volume_type": "1", + "snapshot_id": null, + "attachments": [], + "createdAt": "2012-02-14T20:53:07Z" + }, + { + "id": "76b8950a-8594-4e5b-8dce-0dfa9c696358", + "display_name": "vol-002", + "display_description": "Yet another volume.", + "size": 100, + "volume_type": "1", + "snapshot_id": null, + "attachments": [], + "createdAt": "2012-03-15T19:10:03Z" + } + ] +} diff --git a/docs/src/wadl/samples/volume_list_simple.xml b/docs/src/wadl/samples/volume_list_simple.xml new file mode 100644 index 000000000..9b4b01cf5 --- /dev/null +++ b/docs/src/wadl/samples/volume_list_simple.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/docs/src/wadl/samples/volume_show.json b/docs/src/wadl/samples/volume_show.json new file mode 100644 index 000000000..d24fdbd14 --- /dev/null +++ b/docs/src/wadl/samples/volume_show.json @@ -0,0 +1,12 @@ +{ + "volume": { + "id": "521752a6-acf6-4b2d-bc7a-119f9148cd8c", + "display_name": "vol-001", + "display_description": "Another volume.", + "size": 100, + "volume_type": "1", + "snapshot_id": null, + "attachments": [], + "createdAt": "2012-02-14T20:53:07Z" + } +} diff --git a/docs/src/wadl/samples/volume_show.xml b/docs/src/wadl/samples/volume_show.xml new file mode 100644 index 000000000..40abfae97 --- /dev/null +++ b/docs/src/wadl/samples/volume_show.xml @@ -0,0 +1,10 @@ + + + diff --git a/docs/src/wadl/samples/volume_type_list.json b/docs/src/wadl/samples/volume_type_list.json new file mode 100644 index 000000000..596fb5d1c --- /dev/null +++ b/docs/src/wadl/samples/volume_type_list.json @@ -0,0 +1,15 @@ +{ + "volume_types": [ + { + "id": 1, + "name": "SATA", + "extra_specs": {}, + }, + { + "id": 2, + "name": "SSD", + "extra_specs": {}, + } + ] +} + diff --git a/docs/src/wadl/samples/volume_type_list.xml b/docs/src/wadl/samples/volume_type_list.xml new file mode 100644 index 000000000..bb5b1d495 --- /dev/null +++ b/docs/src/wadl/samples/volume_type_list.xml @@ -0,0 +1,9 @@ + +> + + + + + + + diff --git a/docs/src/wadl/samples/volume_type_show.json b/docs/src/wadl/samples/volume_type_show.json new file mode 100644 index 000000000..fbff156e1 --- /dev/null +++ b/docs/src/wadl/samples/volume_type_show.json @@ -0,0 +1,7 @@ +{ + "volume_type": { + "id": "1", + "name": "SATA", + "extra_specs": {}, + } +} \ No newline at end of file diff --git a/docs/src/wadl/samples/volume_type_show.xml b/docs/src/wadl/samples/volume_type_show.xml new file mode 100644 index 000000000..3fd35f725 --- /dev/null +++ b/docs/src/wadl/samples/volume_type_show.xml @@ -0,0 +1,7 @@ + + + + + +