diff options
Diffstat (limited to 'doc/admin-guide/en-US/markdown/admin_UFO.md')
| -rw-r--r-- | doc/admin-guide/en-US/markdown/admin_UFO.md | 1219 | 
1 files changed, 1219 insertions, 0 deletions
diff --git a/doc/admin-guide/en-US/markdown/admin_UFO.md b/doc/admin-guide/en-US/markdown/admin_UFO.md new file mode 100644 index 00000000000..ed65d5ee794 --- /dev/null +++ b/doc/admin-guide/en-US/markdown/admin_UFO.md @@ -0,0 +1,1219 @@ +Managing Unified File and Object Storage +======================================== + +Unified File and Object Storage (UFO) unifies NAS and object storage +technology. It provides a system for data storage that enables users to +access the same data, both as an object and as a file, thus simplifying +management and controlling storage costs. + +Unified File and Object Storage is built upon Openstack's Object Storage +Swift. Open Stack Object Storage allows users to store and retrieve +files and content through a simple Web Service (REST: Representational +State Transfer) interface as objects and GlusterFS, allows users to +store and retrieve files using Native Fuse and NFS mounts. It uses +GlusterFS as a backend file system for Open Stack Swift. It also +leverages on Open Stack Swift's web interface for storing and retrieving +files over the web combined with GlusterFS features like scalability and +high availability, replication, elastic volume management for data +management at disk level. + +Unified File and Object Storage technology enables enterprises to adopt +and deploy cloud storage solutions. It allows users to access and modify +data as objects from a REST interface along with the ability to access +and modify files from NAS interfaces including NFS and CIFS. In addition +to decreasing cost and making it faster and easier to access object +data, it also delivers massive scalability, high availability and +replication of object storage. Infrastructure as a Service (IaaS) +providers can utilize GlusterFS Unified File and Object Storage +technology to enable their own cloud storage service. Enterprises can +use this technology to accelerate the process of preparing file-based +applications for the cloud and simplify new application development for +cloud computing environments. + +OpenStack Object Storage is scalable object storage system and it is not +a traditional file system. You will not be able to mount this system +like traditional SAN or NAS volumes and perform POSIX compliant +operations. + +Components of Object Storage +============================ + +The major components of Object Storage are: + +**Proxy Server** + +All REST requests to the UFO are routed through the Proxy Server. + +**Objects and Containers** + +An object is the basic storage entity and any optional metadata that +represents the data you store. When you upload data, the data is stored +as-is (with no compression or encryption). + +A container is a storage compartment for your data and provides a way +for you to organize your data. Containers can be visualized as +directories in a Linux system. Data must be stored in a container and +hence objects are created within a container. + +It implements objects as files and directories under the container. The +object name is a '/' separated path and UFO maps it to directories until +the last name in the path, which is marked as a file. With this +approach, objects can be accessed as files and directories from native +GlusterFS (FUSE) or NFS mounts by providing the '/' separated path. + +**Accounts and Account Servers** + +The OpenStack Object Storage system is designed to be used by many +different storage consumers. Each user is associated with one or more +accounts and must identify themselves using an authentication system. +While authenticating, users must provide the name of the account for +which the authentication is requested. + +UFO implements accounts as GlusterFS volumes. So, when a user is granted +read/write permission on an account, it means that that user has access +to all the data available on that GlusterFS volume. + +**Authentication and Access Permissions** + +You must authenticate against an authentication service to receive +OpenStack Object Storage connection parameters and an authentication +token. The token must be passed in for all subsequent container or +object operations. One authentication service that you can use as a +middleware example is called `tempauth`. + +By default, each user has their own storage account and has full access +to that account. Users must authenticate with their credentials as +described above, but once authenticated they can manage containers and +objects within that account. If a user wants to access the content from +another account, they must have API access key or a session token +provided by their authentication system. + +Advantages of using GlusterFS Unified File and Object Storage +============================================================= + +The following are the advantages of using GlusterFS UFO: + +-   No limit on upload and download files sizes as compared to Open +    Stack Swift which limits the object size to 5GB. + +-   A unified view of data across NAS and Object Storage technologies. + +-   Using GlusterFS's UFO has other advantages like the following: + +    -   High availability + +    -   Scalability + +    -   Replication + +    -   Elastic Volume management + +Preparing to Deploy Unified File and Object Storage +=================================================== + +This section provides information on pre-requisites and list of +dependencies that will be installed during the installation of Unified +File and Object Storage. + +Pre-requisites +-------------- + +GlusterFS's Unified File and Object Storage needs `user_xattr` support +from the underlying disk file system. Use the following command to +enable `user_xattr` for GlusterFS bricks backend: + +`# mount –o remount,user_xattr ` + +For example, + +`# mount –o remount,user_xattr /dev/hda1 ` + +Dependencies +------------ + +The following packages are installed on GlusterFS when you install +Unified File and Object Storage: + +-   curl + +-   memcached + +-   openssl + +-   xfsprogs + +-   python2.6 + +-   pyxattr + +-   python-configobj + +-   python-setuptools + +-   python-simplejson + +-   python-webob + +-   python-eventlet + +-   python-greenlet + +-   python-pastedeploy + +-   python-netifaces + +Installing and Configuring Unified File and Object Storage +========================================================== + +This section provides instructions on how to install and configure +Unified File and Object Storage in your storage environment. + +Installing Unified File and Object Storage +------------------------------------------ + +To install Unified File and Object Storage: + +1.  Download `rhel_install.sh` install script from [][] . + +2.  Run `rhel_install.sh` script using the following command: + +    `# sh rhel_install.sh` + +3.  Download `swift-1.4.5-1.noarch.rpm` and +    `swift-plugin-1.0.-1.el6.noarch.rpm` files from [][]. + +4.  Install `swift-1.4.5-1.noarch.rpm` and +    `swift-plugin-1.0.-1.el6.noarch.rpm` using the following commands: + +    `# rpm -ivh swift-1.4.5-1.noarch.rpm` + +    `# rpm -ivh swift-plugin-1.0.-1.el6.noarch.rpm` + +    > **Note** +    > +    > You must repeat the above steps on all the machines on which you +    > want to install Unified File and Object Storage. If you install +    > the Unified File and Object Storage on multiple servers, you can +    > use a load balancer like pound, nginx, and so on to distribute the +    > request across the machines. + +Adding Users +------------ + +The authentication system allows the administrator to grant different +levels of access to different users based on the requirement. The +following are the types of user permissions: + +-   admin user + +-   normal user + +Admin user has read and write permissions on the account. By default, a +normal user has no read or write permissions. A normal user can only +authenticate itself to get a Auth-Token. Read or write permission are +provided through ACLs by the admin users. + +Add a new user by adding the following entry in +`/etc/swift/proxy-server.conf` file: + +`user_<account-name>_<user-name> = <password> [.admin]` + +For example, + +`user_test_tester = testing .admin` + +> **Note** +> +> During installation, the installation script adds few sample users to +> the `proxy-server.conf` file. It is highly recommended that you remove +> all the default sample user entries from the configuration file. + +For more information on setting ACLs, see ?. + +Configuring Proxy Server +------------------------ + +The Proxy Server is responsible for connecting to the rest of the +OpenStack Object Storage architecture. For each request, it looks up the +location of the account, container, or object in the ring and route the +request accordingly. The public API is also exposed through the proxy +server. When objects are streamed to or from an object server, they are +streamed directly through the proxy server to or from the user – the +proxy server does not spool them. + +The configurable options pertaining to proxy server are stored in +`/etc/swift/proxy-server.conf`. The following is the sample +`proxy-server.conf` file: + +    [app:proxy-server] +    use = egg:swift#proxy +    allow_account_management=true +    account_autocreate=true + +    [filter:tempauth] +    use = egg:swift#tempauth                                   user_admin_admin=admin.admin.reseller_admin +    user_test_tester=testing.admin +    user_test2_tester2=testing2.admin +    user_test_tester3=testing3 + +    [filter:healthcheck] +    use = egg:swift#healthcheck  + +    [filter:cache] +    use = egg:swift#memcache + +By default, GlusterFS's Unified File and Object Storage is configured to +support HTTP protocol and uses temporary authentication to authenticate +the HTTP requests. + +Configuring Authentication System +--------------------------------- + +Proxy server must be configured to authenticate using ` +           +        `. + +Configuring Proxy Server for HTTPS +---------------------------------- + +By default, proxy server only handles HTTP request. To configure the +proxy server to process HTTPS requests, perform the following steps: + +1.  Create self-signed cert for SSL using the following commands: + +        cd /etc/swift +        openssl req -new -x509 -nodes -out cert.crt -keyout cert.key + +2.  Add the following lines to `/etc/swift/proxy-server.conf `under +    [DEFAULT] + +        bind_port = 443 +         cert_file = /etc/swift/cert.crt +         key_file = /etc/swift/cert.key + +3.  Restart the servers using the following commands: + +        swift-init main stop +        swift-init main start + +The following are the configurable options: + +  Option       Default      Description +  ------------ ------------ ------------------------------- +  bind\_ip     0.0.0.0      IP Address for server to bind +  bind\_port   80           Port for server to bind +  swift\_dir   /etc/swift   Swift configuration directory +  workers      1            Number of workers to fork +  user         swift        swift user +  cert\_file                Path to the ssl .crt +  key\_file                 Path to the ssl .key + +  : proxy-server.conf Default Options in the [DEFAULT] section + +  Option                          Default           Description +  ------------------------------- ----------------- ----------------------------------------------------------------------------------------------------------- +  use                                               paste.deploy entry point for the container server. For most cases, this should be `egg:swift#container`. +  log\_name                       proxy-server      Label used when logging +  log\_facility                   LOG\_LOCAL0       Syslog log facility +  log\_level                      INFO              Log level +  log\_headers                    True              If True, log headers in each request +  recheck\_account\_existence     60                Cache timeout in seconds to send memcached for account existence +  recheck\_container\_existence   60                Cache timeout in seconds to send memcached for container existence +  object\_chunk\_size             65536             Chunk size to read from object servers +  client\_chunk\_size             65536             Chunk size to read from clients +  memcache\_servers               127.0.0.1:11211   Comma separated list of memcached servers ip:port +  node\_timeout                   10                Request timeout to external services +  client\_timeout                 60                Timeout to read one chunk from a client +  conn\_timeout                   0.5               Connection timeout to external services +  error\_suppression\_interval    60                Time in seconds that must elapse since the last error for a node to be considered no longer error limited +  error\_suppression\_limit       10                Error count to consider a node error limited +  allow\_account\_management      false             Whether account `PUT`s and `DELETE`s are even callable + +  : proxy-server.conf Server Options in the [proxy-server] section + +Configuring Object Server +------------------------- + +The Object Server is a very simple blob storage server that can store, +retrieve, and delete objects stored on local devices. Objects are stored +as binary files on the file system with metadata stored in the file’s +extended attributes (xattrs). This requires that the underlying file +system choice for object servers support xattrs on files. + +The configurable options pertaining Object Server are stored in the file +`/etc/swift/object-server/1.conf`. The following is the sample +`object-server/1.conf` file: + +    [DEFAULT] +    devices = /srv/1/node +    mount_check = false +    bind_port = 6010 +    user = root +    log_facility = LOG_LOCAL2 + +    [pipeline:main] +    pipeline = gluster object-server + +    [app:object-server] +    use = egg:swift#object  + +    [filter:gluster] +    use = egg:swift#gluster + +    [object-replicator] +    vm_test_mode = yes + +    [object-updater] +    [object-auditor] + +The following are the configurable options: + +  Option         Default      Description +  -------------- ------------ ---------------------------------------------------------------------------------------------------- +  swift\_dir     /etc/swift   Swift configuration directory +  devices        /srv/node    Mount parent directory where devices are mounted +  mount\_check   true         Whether or not check if the devices are mounted to prevent accidentally writing to the root device +  bind\_ip       0.0.0.0      IP Address for server to bind +  bind\_port     6000         Port for server to bind +  workers        1            Number of workers to fork + +  : object-server.conf Default Options in the [DEFAULT] section + +  Option                 Default         Description +  ---------------------- --------------- ---------------------------------------------------------------------------------------------------- +  use                                    paste.deploy entry point for the object server. For most cases, this should be `egg:swift#object`. +  log\_name              object-server   log name used when logging +  log\_facility          LOG\_LOCAL0     Syslog log facility +  log\_level             INFO            Logging level +  log\_requests          True            Whether or not to log each request +  user                   swift           swift user +  node\_timeout          3               Request timeout to external services +  conn\_timeout          0.5             Connection timeout to external services +  network\_chunk\_size   65536           Size of chunks to read or write over the network +  disk\_chunk\_size      65536           Size of chunks to read or write to disk +  max\_upload\_time      65536           Maximum time allowed to upload an object +  slow                   0               If \> 0, Minimum time in seconds for a `PUT` or `DELETE` request to complete + +  : object-server.conf Server Options in the [object-server] section + +Configuring Container Server +---------------------------- + +The Container Server’s primary job is to handle listings of objects. The +listing is done by querying the GlusterFS mount point with path. This +query returns a list of all files and directories present under that +container. + +The configurable options pertaining to container server are stored in +`/etc/swift/container-server/1.conf` file. The following is the sample +`container-server/1.conf` file: + +    [DEFAULT] +    devices = /srv/1/node +    mount_check = false +    bind_port = 6011 +    user = root +    log_facility = LOG_LOCAL2 + +    [pipeline:main] +    pipeline = gluster container-server + +    [app:container-server] +    use = egg:swift#container + +    [filter:gluster] +    use = egg:swift#gluster + +    [container-replicator] +    [container-updater] +    [container-auditor] + +The following are the configurable options: + +  Option         Default      Description +  -------------- ------------ ---------------------------------------------------------------------------------------------------- +  swift\_dir     /etc/swift   Swift configuration directory +  devices        /srv/node    Mount parent directory where devices are mounted +  mount\_check   true         Whether or not check if the devices are mounted to prevent accidentally writing to the root device +  bind\_ip       0.0.0.0      IP Address for server to bind +  bind\_port     6001         Port for server to bind +  workers        1            Number of workers to fork +  user           swift        Swift user + +  : container-server.conf Default Options in the [DEFAULT] section + +  Option          Default            Description +  --------------- ------------------ ---------------------------------------------------------------------------------------------------------- +  use                                paste.deploy entry point for the container server. For most cases, this should be `egg:swift#container`. +  log\_name       container-server   Label used when logging +  log\_facility   LOG\_LOCAL0        Syslog log facility +  log\_level      INFO               Logging level +  node\_timeout   3                  Request timeout to external services +  conn\_timeout   0.5                Connection timeout to external services + +  : container-server.conf Server Options in the [container-server] +  section + +Configuring Account Server +-------------------------- + +The Account Server is very similar to the Container Server, except that +it is responsible for listing of containers rather than objects. In UFO, +each gluster volume is an account. + +The configurable options pertaining to account server are stored in +`/etc/swift/account-server/1.conf` file. The following is the sample +`account-server/1.conf` file: + +    [DEFAULT] +    devices = /srv/1/node +    mount_check = false +    bind_port = 6012 +    user = root +    log_facility = LOG_LOCAL2 + +    [pipeline:main] +    pipeline = gluster account-server + +    [app:account-server] +    use = egg:swift#account + +    [filter:gluster] +    use = egg:swift#gluster  + +    [account-replicator] +    vm_test_mode = yes + +    [account-auditor] +    [account-reaper] + +The following are the configurable options: + +  Option         Default      Description +  -------------- ------------ ---------------------------------------------------------------------------------------------------- +  swift\_dir     /etc/swift   Swift configuration directory +  devices        /srv/node    mount parent directory where devices are mounted +  mount\_check   true         Whether or not check if the devices are mounted to prevent accidentally writing to the root device +  bind\_ip       0.0.0.0      IP Address for server to bind +  bind\_port     6002         Port for server to bind +  workers        1            Number of workers to fork +  user           swift        Swift user + +  : account-server.conf Default Options in the [DEFAULT] section + +  Option          Default          Description +  --------------- ---------------- ---------------------------------------------------------------------------------------------------------- +  use                              paste.deploy entry point for the container server. For most cases, this should be `egg:swift#container`. +  log\_name       account-server   Label used when logging +  log\_facility   LOG\_LOCAL0      Syslog log facility +  log\_level      INFO             Logging level + +  : account-server.conf Server Options in the [account-server] section + +Starting and Stopping Server +---------------------------- + +You must start the server manually when system reboots and whenever you +update/modify the configuration files. + +-   To start the server, enter the following command: + +    `# swift_init main start` + +-   To stop the server, enter the following command: + +    `# swift_init main stop` + +Working with Unified File and Object Storage +============================================ + +This section describes the REST API for administering and managing +Object Storage. All requests will be directed to the host and URL +described in the `X-Storage-URL HTTP` header obtained during successful +authentication. + +Configuring Authenticated Access +-------------------------------- + +Authentication is the process of proving identity to the system. To use +the REST interface, you must obtain an authorization token using GET +method and supply it with v1.0 as the path. + +Each REST request against the Object Storage system requires the +addition of a specific authorization token HTTP x-header, defined as +X-Auth-Token. The storage URL and authentication token are returned in +the headers of the response. + +-   To authenticate, run the following command: + +        GET auth/v1.0 HTTP/1.1 +        Host: <auth URL> +        X-Auth-User: <account name>:<user name> +        X-Auth-Key: <user-Password> + +    For example, + +        GET auth/v1.0 HTTP/1.1 +        Host: auth.example.com +        X-Auth-User: test:tester +        X-Auth-Key: testing + +        HTTP/1.1 200 OK +        X-Storage-Url: https:/example.storage.com:443/v1/AUTH_test +        X-Storage-Token: AUTH_tkde3ad38b087b49bbbac0494f7600a554 +        X-Auth-Token: AUTH_tkde3ad38b087b49bbbac0494f7600a554 +        Content-Length: 0 +        Date: Wed, 10 jul 2011 06:11:51 GMT + +    To authenticate access using cURL (for the above example), run the +    following command: + +        curl -v -H 'X-Storage-User: test:tester' -H 'X-Storage-Pass:testing' -k +        https://auth.example.com:443/auth/v1.0 + +    The X-Auth-Url has to be parsed and used in the connection and +    request line of all subsequent requests to the server. In the +    example output, users connecting to server will send most +    container/object requests with a host header of example.storage.com +    and the request line's version and account as v1/AUTH\_test. + +> **Note** +> +> The authentication tokens are valid for a 24 hour period. + +Working with Accounts +--------------------- + +This section describes the list of operations you can perform at the +account level of the URL. + +### Displaying Container Information + +You can list the objects of a specific container, or all containers, as +needed using GET command. You can use the following optional parameters +with GET request to refine the results: + +  Parameter   Description +  ----------- -------------------------------------------------------------------------- +  limit       Limits the number of results to at most *n* value. +  marker      Returns object names greater in value than the specified marker. +  format      Specify either json or xml to return the respective serialized response. + +**To display container information** + +-   List all the containers of an account using the following command: + +        GET /<apiversion>/<account> HTTP/1.1 +        Host: <storage URL> +        X-Auth-Token: <authentication-token-key> + +    For example, + +        GET /v1/AUTH_test HTTP/1.1 +        Host: example.storage.com +        X-Auth-Token: AUTH_tkd3ad38b087b49bbbac0494f7600a554 + +        HTTP/1.1 200 Ok +        Date: Wed, 13 Jul 2011 16:32:21 GMT +        Server: Apache +        Content-Type: text/plain; charset=UTF-8 +        Content-Length: 39 + +        songs +        movies +        documents +        reports + +To display container information using cURL (for the above example), run +the following command: + +    curl -v -X GET -H 'X-Auth-Token: AUTH_tkde3ad38b087b49bbbac0494f7600a554' +    https://example.storage.com:443/v1/AUTH_test -k + +### Displaying Account Metadata Information + +You can issue HEAD command to the storage service to view the number of +containers and the total bytes stored in the account. + +-   To display containers and storage used, run the following command: + +        HEAD /<apiversion>/<account> HTTP/1.1 +        Host: <storage URL> +        X-Auth-Token: <authentication-token-key> + +    For example, + +        HEAD /v1/AUTH_test HTTP/1.1 +        Host: example.storage.com +        X-Auth-Token: AUTH_tkd3ad38b087b49bbbac0494f7600a554 + +        HTTP/1.1 204 No Content +        Date: Wed, 13 Jul 2011 16:52:21 GMT +        Server: Apache +        X-Account-Container-Count: 4 +        X-Account-Total-Bytes-Used: 394792 + +    To display account metadata information using cURL (for the above +    example), run the following command: + +        curl -v -X HEAD -H 'X-Auth-Token: +        AUTH_tkde3ad38b087b49bbbac0494f7600a554' +        https://example.storage.com:443/v1/AUTH_test -k + +Working with Containers +----------------------- + +This section describes the list of operations you can perform at the +container level of the URL. + +### Creating Containers + +You can use PUT command to create containers. Containers are the storage +folders for your data. The URL encoded name must be less than 256 bytes +and cannot contain a forward slash '/' character. + +-   To create a container, run the following command: + +        PUT /<apiversion>/<account>/<container>/ HTTP/1.1 +        Host: <storage URL> +        X-Auth-Token: <authentication-token-key> + +    For example, + +        PUT /v1/AUTH_test/pictures/ HTTP/1.1 +        Host: example.storage.com +        X-Auth-Token: AUTH_tkd3ad38b087b49bbbac0494f7600a554 +        HTTP/1.1 201 Created + +        Date: Wed, 13 Jul 2011 17:32:21 GMT +        Server: Apache +        Content-Type: text/plain; charset=UTF-8 + +    To create container using cURL (for the above example), run the +    following command: + +        curl -v -X PUT -H 'X-Auth-Token: +        AUTH_tkde3ad38b087b49bbbac0494f7600a554' +        https://example.storage.com:443/v1/AUTH_test/pictures -k + +    The status code of 201 (Created) indicates that you have +    successfully created the container. If a container with same is +    already existed, the status code of 202 is displayed. + +### Displaying Objects of a Container + +You can list the objects of a container using GET command. You can use +the following optional parameters with GET request to refine the +results: + +  Parameter   Description +  ----------- -------------------------------------------------------------------------------------------------------------- +  limit       Limits the number of results to at most *n* value. +  marker      Returns object names greater in value than the specified marker. +  prefix      Displays the results limited to object names beginning with the substring x. beginning with the substring x. +  path        Returns the object names nested in the pseudo path. +  format      Specify either json or xml to return the respective serialized response. +  delimiter   Returns all the object names nested in the container. + +To display objects of a container + +-   List objects of a specific container using the following command: + +<!-- --> + +    GET /<apiversion>/<account>/<container>[parm=value] HTTP/1.1 +    Host: <storage URL> +    X-Auth-Token: <authentication-token-key> + +For example, + +    GET /v1/AUTH_test/images HTTP/1.1 +    Host: example.storage.com +    X-Auth-Token: AUTH_tkd3ad38b087b49bbbac0494f7600a554 + +    HTTP/1.1 200 Ok +    Date: Wed, 13 Jul 2011 15:42:21 GMT +    Server: Apache +    Content-Type: text/plain; charset=UTF-8 +    Content-Length: 139 + +    sample file.jpg +    test-file.pdf +    You and Me.pdf +    Puddle of Mudd.mp3 +    Test Reports.doc + +To display objects of a container using cURL (for the above example), +run the following command: + +    curl -v -X GET-H 'X-Auth-Token: AUTH_tkde3ad38b087b49bbbac0494f7600a554' +    https://example.storage.com:443/v1/AUTH_test/images -k + +### Displaying Container Metadata Information + +You can issue HEAD command to the storage service to view the number of +objects in a container and the total bytes of all the objects stored in +the container. + +-   To display list of objects and storage used, run the following +    command: + +        HEAD /<apiversion>/<account>/<container> HTTP/1.1 +        Host: <storage URL> +        X-Auth-Token: <authentication-token-key> + +    For example, + +        HEAD /v1/AUTH_test/images HTTP/1.1 +        Host: example.storage.com +        X-Auth-Token: AUTH_tkd3ad38b087b49bbbac0494f7600a554 + +        HTTP/1.1 204 No Content +        Date: Wed, 13 Jul 2011 19:52:21 GMT +        Server: Apache +        X-Account-Object-Count: 8 +        X-Container-Bytes-Used: 472 + +    To display list of objects and storage used in a container using +    cURL (for the above example), run the following command: + +        curl -v -X HEAD -H 'X-Auth-Token: +        AUTH_tkde3ad38b087b49bbbac0494f7600a554' +        https://example.storage.com:443/v1/AUTH_test/images -k + +### Deleting Container + +You can use DELETE command to permanently delete containers. The +container must be empty before it can be deleted. + +You can issue HEAD command to determine if it contains any objects. + +-   To delete a container, run the following command: + +        DELETE /<apiversion>/<account>/<container>/ HTTP/1.1 +        Host: <storage URL> +        X-Auth-Token: <authentication-token-key> + +    For example, + +        DELETE /v1/AUTH_test/pictures HTTP/1.1 +        Host: example.storage.com +        X-Auth-Token: AUTH_tkd3ad38b087b49bbbac0494f7600a554 + +        HTTP/1.1 204 No Content +        Date: Wed, 13 Jul 2011 17:52:21 GMT +        Server: Apache +        Content-Length: 0 +        Content-Type: text/plain; charset=UTF-8 + +    To delete a container using cURL (for the above example), run the +    following command: + +        curl -v -X DELETE -H 'X-Auth-Token: +        AUTH_tkde3ad38b087b49bbbac0494f7600a554' +        https://example.storage.com:443/v1/AUTH_test/pictures -k + +    The status code of 204 (No Content) indicates that you have +    successfully deleted the container. If that container does not +    exist, the status code 404 (Not Found) is displayed, and if the +    container is not empty, the status code 409 (Conflict) is displayed. + +### Updating Container Metadata + +You can update the metadata of container using POST operation, metadata +keys should be prefixed with 'x-container-meta'. + +-   To update the metadata of the object, run the following command: + +        POST /<apiversion>/<account>/<container> HTTP/1.1 +        Host: <storage URL> +        X-Auth-Token: <Authentication-token-key> +        X-Container-Meta-<key>: <new value> +        X-Container-Meta-<key>: <new value> + +    For example, + +        POST /v1/AUTH_test/images HTTP/1.1 +        Host: example.storage.com +        X-Auth-Token: AUTH_tkd3ad38b087b49bbbac0494f7600a554 +        X-Container-Meta-Zoo: Lion +        X-Container-Meta-Home: Dog + +        HTTP/1.1 204 No Content +        Date: Wed, 13 Jul 2011 20:52:21 GMT +        Server: Apache +        Content-Type: text/plain; charset=UTF-8 + +    To update the metadata of the object using cURL (for the above +    example), run the following command: + +        curl -v -X POST -H 'X-Auth-Token: +        AUTH_tkde3ad38b087b49bbbac0494f7600a554' +        https://example.storage.com:443/v1/AUTH_test/images -H ' X-Container-Meta-Zoo: Lion' -H 'X-Container-Meta-Home: Dog' -k + +    The status code of 204 (No Content) indicates the container's +    metadata is updated successfully. If that object does not exist, the +    status code 404 (Not Found) is displayed. + +### Setting ACLs on Container + +You can set the container access control list by using POST command on +container with `x- container-read` and` x-container-write` keys. + +The ACL format is `[item[,item...]]`. Each item can be a group name to +give access to or a referrer designation to grant or deny based on the +HTTP Referer header. + +The referrer designation format is:` .r:[-]value`. + +The .r can also be `.ref, .referer, `or .`referrer`; though it will be +shortened to.r for decreased character count usage. The value can be `*` +to specify any referrer host is allowed access. The leading minus sign +(-) indicates referrer hosts that should be denied access. + +Examples of valid ACLs: + +    .r:* +    .r:*,bobs_account,sues_account:sue +    bobs_account,sues_account:sue + +Examples of invalid ACLs: + +    .r: +    .r:- + +By default, allowing read access via `r `will not allow listing objects +in the container but allows retrieving objects from the container. To +turn on listings, use the .`rlistings` directive. Also, `.r` +designations are not allowed in headers whose names include the word +write. + +For example, to set all the objects access rights to "public‟ inside the +container using cURL (for the above example), run the following command: + +    curl -v -X POST -H 'X-Auth-Token: +    AUTH_tkde3ad38b087b49bbbac0494f7600a554' +    https://example.storage.com:443/v1/AUTH_test/images +    -H 'X-Container-Read: .r:*' -k + +Working with Objects +-------------------- + +An object represents the data and any metadata for the files stored in +the system. Through the REST interface, metadata for an object can be +included by adding custom HTTP headers to the request and the data +payload as the request body. Objects name should not exceed 1024 bytes +after URL encoding. + +This section describes the list of operations you can perform at the +object level of the URL. + +### Creating or Updating Object + +You can use PUT command to write or update an object's content and +metadata. + +You can verify the data integrity by including an MD5checksum for the +object's data in the ETag header. ETag header is optional and can be +used to ensure that the object's contents are stored successfully in the +storage system. + +You can assign custom metadata to objects by including additional HTTP +headers on the PUT request. The objects created with custom metadata via +HTTP headers are identified with the`X-Object- Meta`- prefix. + +-   To create or update an object, run the following command: + +        PUT /<apiversion>/<account>/<container>/<object> HTTP/1.1 +        Host: <storage URL> +        X-Auth-Token: <authentication-token-key> +        ETag: da1e100dc9e7becc810986e37875ae38 +        Content-Length: 342909 +        X-Object-Meta-PIN: 2343 + +    For example, + +        PUT /v1/AUTH_test/pictures/dog HTTP/1.1 +        Host: example.storage.com +        X-Auth-Token: AUTH_tkd3ad38b087b49bbbac0494f7600a554 +        ETag: da1e100dc9e7becc810986e37875ae38 + +        HTTP/1.1 201 Created +        Date: Wed, 13 Jul 2011 18:32:21 GMT +        Server: Apache +        ETag: da1e100dc9e7becc810986e37875ae38 +        Content-Length: 0 +        Content-Type: text/plain; charset=UTF-8 + +    To create or update an object using cURL (for the above example), +    run the following command: + +        curl -v -X PUT -H 'X-Auth-Token: +        AUTH_tkde3ad38b087b49bbbac0494f7600a554' +        https://example.storage.com:443/v1/AUTH_test/pictures/dog -H 'Content- +        Length: 0' -k + +    The status code of 201 (Created) indicates that you have +    successfully created or updated the object. If there is a missing +    content-Length or Content-Type header in the request, the status +    code of 412 (Length Required) is displayed. (Optionally) If the MD5 +    checksum of the data written to the storage system does not match +    the ETag value, the status code of 422 (Unprocessable Entity) is +    displayed. + +#### Chunked Transfer Encoding + +You can upload data without knowing the size of the data to be uploaded. +You can do this by specifying an HTTP header of Transfer-Encoding: +chunked and without using a Content-Length header. + +You can use this feature while doing a DB dump, piping the output +through gzip, and then piping the data directly into Object Storage +without having to buffer the data to disk to compute the file size. + +-   To create or update an object, run the following command: + +        PUT /<apiversion>/<account>/<container>/<object> HTTP/1.1 +        Host: <storage URL> +        X-Auth-Token: <authentication-token-key> +        Transfer-Encoding: chunked +        X-Object-Meta-PIN: 2343 + +    For example, + +        PUT /v1/AUTH_test/pictures/cat HTTP/1.1 +        Host: example.storage.com +        X-Auth-Token: AUTH_tkd3ad38b087b49bbbac0494f7600a554 +        Transfer-Encoding: chunked +        X-Object-Meta-PIN: 2343 +        19 +        A bunch of data broken up +        D +        into chunks. +        0 + +### Copying Object + +You can copy object from one container to another or add a new object +and then add reference to designate the source of the data from another +container. + +**To copy object from one container to another** + +-   To add a new object and designate the source of the data from +    another container, run the following command: + +        COPY /<apiversion>/<account>/<container>/<sourceobject> HTTP/1.1 +        Host: <storage URL> +        X-Auth-Token: < authentication-token-key> +        Destination: /<container>/<destinationobject> + +    For example, + +        COPY /v1/AUTH_test/images/dogs HTTP/1.1 +        Host: example.storage.com +        X-Auth-Token: AUTH_tkd3ad38b087b49bbbac0494f7600a554 +        Destination: /photos/cats + +        HTTP/1.1 201 Created +        Date: Wed, 13 Jul 2011 18:32:21 GMT +        Server: Apache +        Content-Length: 0 +        Content-Type: text/plain; charset=UTF-8 + +    To copy an object using cURL (for the above example), run the +    following command: + +        curl -v -X COPY -H 'X-Auth-Token: +        AUTH_tkde3ad38b087b49bbbac0494f7600a554' -H 'Destination: /photos/cats' -k https://example.storage.com:443/v1/AUTH_test/images/dogs + +    The status code of 201 (Created) indicates that you have +    successfully copied the object. If there is a missing content-Length +    or Content-Type header in the request, the status code of 412 +    (Length Required) is displayed. + +    You can also use PUT command to copy object by using additional +    header `X-Copy-From: container/obj`. + +-   To use PUT command to copy an object, run the following command: + +        PUT /v1/AUTH_test/photos/cats HTTP/1.1 +        Host: example.storage.com +        X-Auth-Token: AUTH_tkd3ad38b087b49bbbac0494f7600a554 +        X-Copy-From: /images/dogs + +        HTTP/1.1 201 Created +        Date: Wed, 13 Jul 2011 18:32:21 GMT +        Server: Apache +        Content-Type: text/plain; charset=UTF-8 + +    To copy an object using cURL (for the above example), run the +    following command: + +        curl -v -X PUT -H 'X-Auth-Token: AUTH_tkde3ad38b087b49bbbac0494f7600a554' +        -H 'X-Copy-From: /images/dogs' –k +        https://example.storage.com:443/v1/AUTH_test/images/cats + +    The status code of 201 (Created) indicates that you have +    successfully copied the object. + +### Displaying Object Information + +You can issue GET command on an object to view the object data of the +object. + +-   To display the content of an object run the following command: + +        GET /<apiversion>/<account>/<container>/<object> HTTP/1.1 +        Host: <storage URL> +        X-Auth-Token: <Authentication-token-key> + +    For example, + +        GET /v1/AUTH_test/images/cat HTTP/1.1 +        Host: example.storage.com +        X-Auth-Token: AUTH_tkd3ad38b087b49bbbac0494f7600a554 + +        HTTP/1.1 200 Ok +        Date: Wed, 13 Jul 2011 23:52:21 GMT +        Server: Apache +        Last-Modified: Thu, 14 Jul 2011 13:40:18 GMT +        ETag: 8a964ee2a5e88be344f36c22562a6486 +        Content-Length: 534210 +        [.........] + +    To display the content of an object using cURL (for the above +    example), run the following command: + +        curl -v -X GET -H 'X-Auth-Token: +        AUTH_tkde3ad38b087b49bbbac0494f7600a554' +        https://example.storage.com:443/v1/AUTH_test/images/cat -k + +    The status code of 200 (Ok) indicates the object‟s data is displayed +    successfully. If that object does not exist, the status code 404 +    (Not Found) is displayed. + +### Displaying Object Metadata + +You can issue HEAD command on an object to view the object metadata and +other standard HTTP headers. You must send only authorization token as +header. + +-   To display the metadata of the object, run the following command: + +<!-- --> + +    HEAD /<apiversion>/<account>/<container>/<object> HTTP/1.1 +    Host: <storage URL> +    X-Auth-Token: <Authentication-token-key> + +For example, + +    HEAD /v1/AUTH_test/images/cat HTTP/1.1 +    Host: example.storage.com +    X-Auth-Token: AUTH_tkd3ad38b087b49bbbac0494f7600a554 + +    HTTP/1.1 204 No Content +    Date: Wed, 13 Jul 2011 21:52:21 GMT +    Server: Apache +    Last-Modified: Thu, 14 Jul 2011 13:40:18 GMT +    ETag: 8a964ee2a5e88be344f36c22562a6486 +    Content-Length: 512000 +    Content-Type: text/plain; charset=UTF-8 +    X-Object-Meta-House: Cat +    X-Object-Meta-Zoo: Cat +    X-Object-Meta-Home: Cat +    X-Object-Meta-Park: Cat + +To display the metadata of the object using cURL (for the above +example), run the following command: + +    curl -v -X HEAD -H 'X-Auth-Token: +    AUTH_tkde3ad38b087b49bbbac0494f7600a554' +    https://example.storage.com:443/v1/AUTH_test/images/cat -k + +The status code of 204 (No Content) indicates the object‟s metadata is +displayed successfully. If that object does not exist, the status code +404 (Not Found) is displayed. + +### Updating Object Metadata + +You can issue POST command on an object name only to set or overwrite +arbitrary key metadata. You cannot change the object‟s other headers +such as Content-Type, ETag and others using POST operation. The POST +command will delete all the existing metadata and replace it with the +new arbitrary key metadata. + +You must prefix **X-Object-Meta-** to the key names. + +-   To update the metadata of an object, run the following command: + +        POST /<apiversion>/<account>/<container>/<object> HTTP/1.1 +        Host: <storage URL> +        X-Auth-Token: <Authentication-token-key> +        X-Object-Meta-<key>: <new value> +        X-Object-Meta-<key>: <new value> + +    For example, + +        POST /v1/AUTH_test/images/cat HTTP/1.1 +        Host: example.storage.com +        X-Auth-Token: AUTH_tkd3ad38b087b49bbbac0494f7600a554 +        X-Object-Meta-Zoo: Lion +        X-Object-Meta-Home: Dog + +        HTTP/1.1 202 Accepted +        Date: Wed, 13 Jul 2011 22:52:21 GMT +        Server: Apache +        Content-Length: 0 +        Content-Type: text/plain; charset=UTF-8 + +    To update the metadata of an object using cURL (for the above +    example), run the following command: + +        curl -v -X POST -H 'X-Auth-Token: +        AUTH_tkde3ad38b087b49bbbac0494f7600a554' +        https://example.storage.com:443/v1/AUTH_test/images/cat -H ' X-Object- +        Meta-Zoo: Lion' -H 'X-Object-Meta-Home: Dog' -k + +    The status code of 202 (Accepted) indicates that you have +    successfully updated the object‟s metadata. If that object does not +    exist, the status code 404 (Not Found) is displayed. + +### Deleting Object + +You can use DELETE command to permanently delete the object. + +The DELETE command on an object will be processed immediately and any +subsequent operations like GET, HEAD, POST, or DELETE on the object will +display 404 (Not Found) error. + +-   To delete an object, run the following command: + +        DELETE /<apiversion>/<account>/<container>/<object> HTTP/1.1 +        Host: <storage URL> +        X-Auth-Token: <Authentication-token-key> + +    For example, + +        DELETE /v1/AUTH_test/pictures/cat HTTP/1.1 +        Host: example.storage.com +        X-Auth-Token: AUTH_tkd3ad38b087b49bbbac0494f7600a554 + +        HTTP/1.1 204 No Content +        Date: Wed, 13 Jul 2011 20:52:21 GMT +        Server: Apache +        Content-Type: text/plain; charset=UTF-8 + +    To delete an object using cURL (for the above example), run the +    following command: + +        curl -v -X DELETE -H 'X-Auth-Token: +        AUTH_tkde3ad38b087b49bbbac0494f7600a554' +        https://example.storage.com:443/v1/AUTH_test/pictures/cat -k + +    The status code of 204 (No Content) indicates that you have +    successfully deleted the object. If that object does not exist, the +    status code 404 (Not Found) is displayed. + +  []: http://download.gluster.com/pub/gluster/glusterfs/3.2/UFO/  | 
