Removes openstack-object-storage-admin directory, moving content.

Moves config info to Config Ref
Moves Admin CLI task to Admin User Guide
Moves CLI tasks to User Guide
Moves Monitoring section to Cloud Admin Guide
Removes anything that was a copy/paste from dev docs completely, refers
to developer docs instead

Change-Id: If201d68c1e72a24c57a61775bc22d1784beea324
Closes-bug: 1216037
This commit is contained in:
annegentle 2013-09-05 16:23:42 -05:00
parent 4f6cb137c1
commit 82fa21b9d0
21 changed files with 256 additions and 25947 deletions

View File

@ -44,6 +44,16 @@
</abstract>
<revhistory>
<!-- ... continue adding more revisions here as you change this document using the markup shown below... -->
<revision>
<date>2013-09-05</date>
<revdescription>
<itemizedlist spacing="compact">
<listitem>
<para>Moves object storage monitoring section to this guide.</para></listitem>
<listitem><para>Removes redundant object storage info.</para></listitem>
</itemizedlist>
</revdescription>
</revision>
<revision>
<date>2013-09-03</date>
<revdescription>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<section
xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="ch_running-openstack-object-storage">
<title>System Administration for OpenStack Object Storage</title>
<para>By understanding the concepts inherent to the Object Storage
system you can better monitor and administer your storage
solution. The majority of the administration information is maintained
in developer documentation at
<link xlink:href="http://docs.openstack.org/developer/swift/">docs.openstack.org/developer/swift/</link>.</para>
<para>Refer to the <citetitle>OpenStack Configuration Reference</citetitle>
for a listing of all configuration options for OpenStack Object
Storage.</para>
</section>

View File

@ -1,7 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="ch_introduction-to-openstack-object-storage-monitoring">
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="ch_introduction-to-openstack-object-storage-monitoring">
<title>OpenStack Object Storage Monitoring</title>
<?dbhtml stop-chunking?>
<para>Excerpted from a blog post by <link
@ -228,5 +230,4 @@ def process_container(self, dbfile):
benefit of not introducing another external library
dependency into Object Storage.</para>
</section>
</chapter>
</section>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<section xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="ch_introduction-to-openstack-object-storage">
<title>Introduction to OpenStack Object Storage</title>
<para>OpenStack Object Storage is a scalable object storage system - it is not a file system in the
traditional sense. You will not be able to mount this system like traditional SAN or NAS volumes.
Since OpenStack Object Storage is a different way of thinking when it comes to storage, take a few
moments to review the key concepts in the developer documentation at
<link xlink:href="http://docs.openstack.org/developer/swift/">docs.openstack.org/developer/swift/</link>.</para>
</section>

View File

@ -8,26 +8,8 @@
background daemons, and paste.deploy to manage server configurations. Default configuration
options are set in the <code>[DEFAULT]</code> section, and any options specified there can
be overridden in any of the other sections.</para>
<xi:include href="../common/section_about-object-storage.xml"/>
<xi:include href="object-storage/section_object-storage-general-service-conf.xml"/>
<!--these need to be placed under appropriate sections
<section xml:id="memcache-conf">
<title>Sample Memcache configuration file</title>
<programlisting language="ini"><xi:include parse="text" href="https://raw.github.com/openstack/swift/master/etc/memcache.conf-sample"/></programlisting></section>
<section xml:id="mime-types-conf">
<title>Sample Mime.Types configuration file</title>
<programlisting language="ini"><xi:include parse="text" href="https://raw.github.com/openstack/swift/master/etc/mime.types-sample"/></programlisting></section>
<section xml:id="object-expirer-conf">
<title>Sample Object Expirer configuration file</title>
<programlisting><xi:include parse="text" href="https://raw.github.com/openstack/swift/master/etc/object-expirer.conf-sample"/></programlisting></section>
<section xml:id="rsyncd-conf">
<title>Sample Rsyncd configuration file</title>
<programlisting language="ini"><xi:include parse="text" href="https://raw.github.com/openstack/swift/master/etc/rsyncd.conf-sample"/></programlisting></section>
<section xml:id="swift-bench-conf">
<title>Sample Swift bench configuration file</title>
<programlisting language="ini"><xi:include parse="text" href="https://raw.github.com/openstack/swift/master/etc/swift-bench.conf-sample"/></programlisting></section>
<section xml:id="swift-conf">
<title>Sample Swift configuration file</title>
<programlisting><xi:include parse="text" href="https://raw.github.com/openstack/swift/master/etc/swift.conf-sample"/></programlisting></section>-->
<section xml:id="object-server-configuration">
<title>Object Server Configuration</title>
<para>An example Object Server configuration can be found at

View File

@ -1,134 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="ch_introduction-to-openstack-object-storage">
<title>Introduction to OpenStack Object Storage</title>
<para>OpenStack Object Storage is a scalable object storage system - it is not a file system in
the traditional sense. You will not be able to mount this system like traditional SAN or NAS
volumes. Since OpenStack Object Storage is a different way of thinking when it comes to
storage, take a few moments to review the key concepts listed below.</para>
<section xml:id="accounts-and-account-servers">
<title>Accounts and Account Servers</title>
<para>The OpenStack Object Storage system is designed to be used by many different storage
consumers or customers. Each user must identify themselves using an authentication
system.</para>
<para>Nodes that run the Account service are a separate concept from individual accounts.
Account servers are part of the storage system and must be configured along with
Container servers and Object servers.</para>
</section>
<section xml:id="authentication-and-access-permissions">
<title>Authentication and Access Permissions</title>
<para>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/object operations. One authentication service that you can
use as a middleware example is called swauth and you can download it from
<link xlink:href="https://github.com/gholt/swauth">https://github.com/gholt/swauth</link>. You can also integrate with the OpenStack Identity Service, code-named Keystone, which you can download from <link xlink:href="https://github.com/openstack/keystone">https://github.com/openstack/keystone</link>.</para>
<note>
<para>Typically the language-specific APIs handle authentication, token passing, and HTTPS
request/response communication.</para>
</note>
<para>You can implement access control for objects either for users or accounts using
X-Container-Read: accountname and X-Container-Write: accountname:username, which allows
any user from the accountname account to read but only allows the username user from the
accountname account to write. You can also grant public access to objects stored in
OpenStack Object Storage but also limit public access using the Referer header to
prevent site-based content theft such as hot-linking (for example, linking to an image
file from off-site and therefore using other's bandwidth). The public container settings
are used as the default authorization over access control lists. For example, using
X-Container-Read: referer:any allows anyone to read from the container regardless of
other authorization settings.</para>
<para>Generally speaking, 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 create/delete containers and objects within that account.
The only way a user can access the content from another account is if they share an API
access key or a session token provided by your authentication system.</para>
</section>
<section xml:id="containers-and-objects">
<title>Containers and Objects</title>
<para>A container is a storage compartment for your data and provides a way for you to
organize your data. You can think of a container as a folder in Windows® or a directory in
UNIX®. The primary difference between a container and these other file system concepts is
that containers cannot be nested. You can, however, create an unlimited number of containers
within your account. Data must be stored in a container so you must have at least one
container defined in your account prior to uploading data.</para>
<para>The only restrictions on container names is that they cannot contain a forward slash
(<code>/</code>) or an ascii null (<code>%00</code>) and must be less than 257 bytes in length.
Please note that the length
restriction applies to the name after it has been URL encoded. For example, a container name
of <code>Course Docs</code> would be URL encoded as <code>Course%20Docs</code> and therefore
be 13 bytes in length rather than the expected 11.</para>
<para>An object is the basic storage entity and any optional metadata that represents the
files you store in the OpenStack Object Storage system. When you upload data to OpenStack Object Storage, the data is
stored as-is (no compression or encryption) and consists of a location (container), the
object's name, and any metadata consisting of key/value pairs. For instance, you may chose
to store a backup of your digital photos and organize them into albums. In this case, each
object could be tagged with metadata such as <code>Album : Caribbean Cruise</code> or
<code>Album : Aspen Ski Trip</code>.</para>
<para>The only restriction on object names is that they must be less than 1024 bytes in length
after URL encoding. For example, an object name of <code>C++final(v2).txt</code> should be
URL encoded as <code>C%2B%2Bfinal%28v2%29.txt</code> and therefore be 24 bytes in length
rather than the expected 16.</para>
<para>The maximum allowable size for a storage object upon upload is 5 gigabytes (GB) and
the minimum is zero bytes. You can use the built-in large object support and the swift
utility to retrieve objects larger than 5 GB.</para>
<para>For metadata, you should not exceed 90 individual key/value pairs for any one object
and the total byte length of all key/value pairs should not exceed 4KB (4096 bytes).</para>
<note><title>Warning</title><para>The Object Storage API uses HTTP which specifies that header
fields, such as those used to send metadata are case insensitive. Please do not expect
the case of metadata items being preserved.</para></note>
</section>
<section xml:id="operations">
<title>Operations</title>
<para>Operations are the actions you perform within an OpenStack Object Storage system such
as creating or deleting containers, uploading or downloading objects, and so on. The
full list of operations is documented in the Developer Guide. Operations may be
performed via the REST web service API or a language-specific API; currently, we support
Python, PHP, Java, Ruby, and C#/.NET.</para>
<important>
<para>All operations must include a valid authorization token from your authorization system.</para>
</important>
</section>
<section xml:id="language-specific-api-bindings">
<title>Language-Specific API Bindings</title>
<para>A set of supported API bindings in several popular languages are available from the
Rackspace Cloud Files product, which uses OpenStack Object Storage code for its
implementation. These bindings provide a layer of abstraction on top of the base REST
API, allowing programmers to work with a container and object model instead of working
directly with HTTP requests and responses. These bindings are free (as in beer and as in
speech) to download, use, and modify. They are all licensed under the MIT License as
described in the COPYING file packaged with each binding. If you do make any
improvements to an API, you are encouraged (but not required) to submit those changes
back to us.</para>
<para>The API bindings for Rackspace Cloud Files are hosted at <link
xlink:href="http://github.com/rackspace">http://github.com/rackspace</link>. Feel
free to coordinate your changes through github or, if you prefer, send your changes to
cloudfiles@rackspacecloud.com. Just make sure to indicate which language and version you
modified and send a unified diff.</para>
<para>Each binding includes its own documentation (either HTML, PDF, or CHM). They also
include code snippets and examples to help you get started. The currently supported API
binding for OpenStack Object Storage are:</para>
<itemizedlist>
<listitem>
<para>PHP (requires 5.x and the modules: cURL, FileInfo, mbstring)</para>
</listitem>
<listitem>
<para>Python (requires 2.4 or newer)</para>
</listitem>
<listitem>
<para>Java (requires JRE v1.5 or newer)</para>
</listitem>
<listitem>
<para>C#/.NET (requires .NET Framework v3.5)</para>
</listitem>
<listitem>
<para>Ruby (requires 1.8 or newer and mime-tools module)</para>
</listitem>
</itemizedlist>
<para>There are no other supported language-specific bindings at this time. You are welcome
to create your own language API bindings and we can help answer any questions during
development, host your code if you like, and give you full credit for your work.</para>
</section>
</chapter>

View File

@ -1,171 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<book xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:html="http://www.w3.org/1999/xhtml" version="5.0"
xml:id="openstack-object-storage-admin-manual-grizzly">
<title>OpenStack Object Storage Administration Guide</title>
<?rax title.font.size="28px" subtitle.font.size="28px"?>
<titleabbrev>OpenStack Object Storage Administration
Guide</titleabbrev>
<info>
<author>
<personname>
<firstname/>
<surname/>
</personname>
<affiliation>
<orgname>OpenStack Foundation</orgname>
</affiliation>
</author>
<copyright>
<year>2010</year>
<year>2011</year>
<year>2012</year>
<year>2013</year>
<holder>OpenStack Foundation</holder>
</copyright>
<releaseinfo>Grizzly, 2013.1 with Object Storage
1.8.0</releaseinfo>
<productname>OpenStack Object Storage</productname>
<pubdate/>
<legalnotice role="apache2">
<annotation>
<remark>Copyright details are filled in by the
template.</remark>
</annotation>
</legalnotice>
<abstract>
<para>OpenStack™ Object Storage offers open source
software for cloud-based object storage for any
organization. This manual provides guidance for
installing, managing, and understanding the software
that runs OpenStack Object Storage.</para>
</abstract>
<revhistory>
<!-- ... continue adding more revisions here as you change this document using the markup shown below... -->
<revision>
<date>2013-05-09</date>
<revdescription>
<para>Updated the book title for
consistency.</para>
</revdescription>
</revision>
<revision>
<date>2013-04-30</date>
<revdescription>
<para>Grizzly release.</para>
</revdescription>
</revision>
<revision>
<date>2012-12-06</date>
<revdescription>
<itemizedlist spacing="compact">
<listitem>
<para>Bug fixes and cleanup. Fix <link
xlink:href="https://code.launchpad.net/bugs/1034144"
>bug 1034144</link></para>
<para>Add section about cluster
health.</para>
<para>Add a note about the apt-get install
for swift3 from Ubuntu Cloud
Archive.</para>
</listitem>
</itemizedlist>
</revdescription>
</revision>
<revision>
<date>2012-11-09</date>
<revdescription>
<itemizedlist spacing="compact">
<listitem>
<para>Folsom release of this
document.</para>
</listitem>
</itemizedlist>
</revdescription>
</revision>
<revision>
<date>2012-08-21</date>
<revdescription>
<itemizedlist spacing="compact">
<listitem>
<para>Add note to the [filter:cache]
section of the proxy-server.conf file
reference indicating that the
memcache_servers value is ignored if
it is specified in
/etc/swift/memcache.conf.</para>
</listitem>
<listitem>
<para>Update Cyberduck tutorial.</para>
</listitem>
</itemizedlist>
</revdescription>
</revision>
<revision>
<date>2012-06-05</date>
<revdescription>
<itemizedlist spacing="compact">
<listitem>
<para>Fix <link
xlink:href="https://bugs.launchpad.net/openstack-manuals/+bug/1009170"
>bug 1009170</link>.</para>
</listitem>
</itemizedlist>
</revdescription>
</revision>
<revision>
<date>2012-05-03</date>
<revdescription>
<itemizedlist spacing="compact">
<listitem>
<para>Begin trunk designation.</para>
</listitem>
</itemizedlist>
</revdescription>
</revision>
<revision>
<date>2012-05-02</date>
<revdescription>
<itemizedlist spacing="compact">
<listitem>
<para>Essex release.</para>
</listitem>
</itemizedlist>
</revdescription>
</revision>
<revision>
<date>2012-04-27</date>
<revdescription>
<itemizedlist spacing="compact">
<listitem>
<para>Adds ring copy example.</para>
</listitem>
</itemizedlist>
</revdescription>
</revision>
<revision>
<date>2012-01-01</date>
<revdescription>
<itemizedlist spacing="compact">
<listitem>
<para>Formatting updates.</para>
</listitem>
</itemizedlist>
</revdescription>
</revision>
</revhistory>
</info>
<!-- Chapters are referred from the book file through these include statements. You can add additional chapters using these types of statements. -->
<xi:include href="../common/ch_getstart.xml"/>
<xi:include href="aboutobjectstorage.xml"/>
<xi:include
href="../openstack-install/ch_installobjectstorage.xml"/>
<xi:include href="objectstorageadmin.xml"/>
<xi:include href="objectstoragetutorials.xml"/>
<xi:include href="objectstoragemonitoring.xml"/>
<xi:include href="../common/ch_support.xml"/>
<xi:include href="../common/section_support-object-storage.xml"/>
</book>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 621 KiB

View File

@ -1,182 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
xml:id="ch_openstack-object-storage-tutorials">
<title>OpenStack Object Storage Tutorials</title>
<para>We want people to use OpenStack for practical problem solving, and the increasing size and
density of web content makes for a great use-case for object storage. These tutorials show
you how to use your OpenStack Object Storage installation for practical purposes, and it
assumes Object Storage is already installed.</para>
<section xml:id="storing-large-photos-or-videos-on-the-cloud">
<title>Storing Large Photos or Videos on the Cloud</title>
<para>In this OpenStack tutorial, well walk through using an Object Storage installation to
back up all your photos or videos. As the sensors on consumer-grade and pro-sumer grade
cameras generate more and more megapixels, we all need a place to back our files to and
know they are safe.</para>
<para>We'll go through this tutorial in parts:</para>
<itemizedlist>
<listitem>
<para>Setting up secure access to Object Storage.</para></listitem>
<listitem><para>Configuring Cyberduck for connecting to OpenStack Object Storage.</para></listitem>
<listitem><para>Copying files to the cloud.</para></listitem>
</itemizedlist>
<section xml:id="part-i-setting-up-secure-access">
<title>Part I: Setting Up Secure Access</title>
<para>In this part, we'll get the proxy server running with SSL on the Object Storage
installation. It's a requirement for using Cyberduck as a client interface to Object
Storage.</para>
<para>You will need a key and certificate to do this, which we can create as a
self-signed for the tutorial since we can do the extra steps to have Cyberduck
accept it. Creating a self-signed cert can usually be done with these commands on
the proxy server:</para>
<screen><prompt>$</prompt> <userinput>cd /etc/swift</userinput>
<prompt>$</prompt> <userinput>openssl req -new -x509 -nodes -out cert.crt -keyout cert.key</userinput> </screen>
<para>Ensure these generated files are in /etc/swift/cert.crt and /etc/swift/cert.key.</para>
<para>You also should configure your iptables to enable https traffic. Here's an example
setup that works.</para>
<programlisting>Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
76774 1543M ACCEPT all -- lo any localhost anywhere
416K 537M ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
106 6682 ACCEPT tcp -- any any anywhere anywhere tcp dpt:https
13 760 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh
3 124 ACCEPT icmp -- any any anywhere anywhere icmp echo-request
782 38880 DROP all -- any any anywhere anywhere
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- any any anywhere anywhere
Chain OUTPUT (policy ACCEPT 397K packets, 1561M bytes)
pkts bytes target prot opt in out source destination</programlisting>
<para>If you don't have access to the Object Storage installation to configure these
settings, ask your service provider to set up secure access for you.</para><para>Then, edit your <filename>proxy-server.conf</filename> file to
include the following in the [DEFAULT] sections.</para>
<programlisting>
[DEFAULT]
bind_port = 443
cert_file = /etc/swift/cert.crt
key_file = /etc/swift/cert.key
</programlisting>
<para>Also, make sure you use https: for all references to the URL for the server in the
.conf files as needed.</para>
<para>Verify that you can connect using the Public URL to Object Storage by using the
"swift" tool:</para>
<para>
<screen><prompt>$</prompt> <userinput>swift -A https://yourswiftinstall.com:11000/v1.0 -U test:tester -K testing stat</userinput></screen>
</para>
<para>Okay, you've created the access that Cyberduck expects for your Object Storage
installation. Let's start configuring the Cyberduck side of things.</para>
</section>
<section xml:id="part-ii-configuring-cyberduck">
<title>Part II: Configuring Cyberduck</title>
<note>
<para>
See the <link xlink:href="http://trac.cyberduck.ch/wiki/help/en/howto/openstack">Cyberduck website</link>
for further details.
</para>
</note>
<para>
After installing Cyberduck you'll need to change the path/context
used for the authentication URL. The default value shipped with
Cyberduck is incorrect.
</para>
<para>
On OS X open a Terminal window and execute,
<screen><prompt>$</prompt> <userinput>defaults write ch.sudo.cyberduck cf.authentication.context /auth/v1.0</userinput></screen>
</para>
<para>On Windows open the preferences file in a text
editor. The exact location of this file is described
<link
xlink:href="http://trac.cyberduck.ch/wiki/help/en/faq#Windows1"
>here</link>. If this path doesn't exist you may
need to start and stop Cyberduck to have it generate
the config file. Once you've opened the file add the
setting,
<programlisting>&lt;setting name="cf.authentication.context" value="/auth/v1.0" /&gt;</programlisting>
</para>
<para>
To connect to Swift start Cyberduck and click the
<emphasis>Open Connection</emphasis> toolbar button or choose
<emphasis>File > Open Connection</emphasis>. Select
<emphasis>Swift (OpenStack Object Storage)</emphasis> in the
dropdown and enter your cluster details.
<variablelist>
<varlistentry>
<term>Server</term>
<listitem>
<para>your proxy server's hostname or IP address</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Port</term>
<listitem><para>443</para></listitem>
</varlistentry>
<varlistentry>
<term>Username</term>
<listitem>
<para>
account name followed by a colon and then the user name,
for example test:tester
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Password</term>
<listitem>
<para>
password for the account and user name entered above
</para>
</listitem>
</varlistentry>
</variablelist>
<figure>
<title>Example Cyberduck Swift Connection</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/cyberduck_swift_connection.png"/>
</imageobject>
</mediaobject>
</figure>
</para>
<simplesect>
<title>Connecting to a Unsecured Swift Cluster</title>
<para>An Unsecured Swift Cluster does not use https
connections. Download the <link
xlink:href="http://trac.cyberduck.ch/raw-attachment/wiki/help/en/howto/openstack/Swift%20Unsecure.cyberduckprofile"
>Unsecured Swift profile file</link> and
double click it to import it into Cyberduck.</para>
<para>
When creating a new connection select <emphasis>Swift (HTTP)</emphasis>.
Enter your connection details as described above. You'll need
to change the port since presumably you won't want to use 443.
</para>
</simplesect>
</section>
<section xml:id="part-iii-copying-files">
<title>Part III: Creating Containers (Folders) and Uploading Files</title>
<para>Now you want to create containers to hold your files. Without containers, Object
Storage doesn't know where to put the files. In the Action menu, choose New Folder
and name the folder.</para>
<para>Next you can drag and drop files into the created folder or select File > Upload
to select files to upload to the OpenStack Object Storage service. <figure>
<title>Example Cyberduck Swift Showing Uploads</title>
<mediaobject>
<imageobject>
<imagedata fileref="figures/cyberduck_swift_uploads.png"/>
</imageobject>
</mediaobject>
</figure></para><para>Et voila! You can back up terabytes of data if you just have the space and the data. That's a lot of pictures or video, so get snapping and rolling!</para>
</section>
</section>
</chapter>

View File

@ -1,118 +0,0 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.openstack.docs</groupId>
<artifactId>openstack-guide</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>OpenStack Administration Guides</name>
<properties>
<!-- This is set by Jenkins according to the branch. -->
<release.path.name>local</release.path.name>
<comments.enabled>1</comments.enabled>
</properties>
<!-- ################################################ -->
<!-- USE "mvn clean generate-sources" to run this POM -->
<!-- ################################################ -->
<build>
<plugins>
<plugin>
<groupId>com.rackspace.cloud.api</groupId>
<artifactId>clouddocs-maven-plugin</artifactId>
<version>1.9.2</version>
<executions>
<execution>
<id>generate-webhelp</id>
<goals>
<goal>generate-webhelp</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<!-- These parameters only apply to webhelp -->
<enableDisqus>${comments.enabled}</enableDisqus>
<disqusShortname>os-object-admin</disqusShortname>
<enableGoogleAnalytics>1</enableGoogleAnalytics>
<googleAnalyticsId>UA-17511903-1</googleAnalyticsId>
<generateToc> appendix toc,title
article/appendix nop
article toc,title
book title,figure,table,example,equation
chapter toc,title
section toc part
toc,title
preface toc,title
qandadiv toc
qandaset toc
reference toc,title
set toc,title </generateToc>
<!-- The following elements sets the autonumbering of sections in output for chapter numbers but no numbered sections-->
<sectionAutolabel>0</sectionAutolabel>
<tocDepthSection>1</tocDepthSection>
<sectionLabelIncludesComponentLabel>0</sectionLabelIncludesComponentLabel>
<webhelpDirname>admin</webhelpDirname>
<targetDirectory>${basedir}/target/docbkx/webhelp/${release.path.name}/openstack-object-storage</targetDirectory>
<includeDateInPdfFilename>0</includeDateInPdfFilename>
<pdfFilenameBase>os-objectstorage-adminguide-${release.path.name}</pdfFilenameBase>
</configuration>
</execution>
<execution>
<id>cleanup</id>
<goals>
<goal>generate-webhelp</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<includes>dummy.xml</includes>
<postProcess>
<delete includeemptydirs="true"
verbose="true">
<fileset
dir="${basedir}/target/docbkx/webhelp/${release.path.name}">
<include name="**/*"/>
<exclude name="openstack-object-storage/**"/>
</fileset>
</delete>
</postProcess>
</configuration>
</execution>
</executions>
<configuration>
<!-- These parameters apply to pdf and webhelp -->
<xincludeSupported>true</xincludeSupported>
<sourceDirectory>.</sourceDirectory>
<includes> bk-objectstorage-adminguide.xml </includes>
<canonicalUrlBase>http://docs.openstack.org/${release.path.name}/openstack-object-storage/admin/content/</canonicalUrlBase>
<profileSecurity>reviewer</profileSecurity>
<branding>openstack</branding>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>Rackspace Research Repositories</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>rackspace-research</id>
<name>Rackspace Research Repository</name>
<url>http://maven.research.rackspacecloud.com/content/groups/public/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>rackspace-research</id>
<name>Rackspace Research Repository</name>
<url>http://maven.research.rackspacecloud.com/content/groups/public/</url>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
</project>

View File

@ -31,4 +31,6 @@
<xi:include href="section_nova_cli_manage_flavors.xml"/>
<?hard-pagebreak?>
<xi:include href="section_keystone_cli_set_quotas.xml"/>
<?hard-pagebreak?>
<xi:include href="section_swift_cli_analyze_log_files.xml"/>
</chapter>

View File

@ -0,0 +1,151 @@
<?xml version="1.0" encoding="UTF-8"?>
<section
xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
xml:id="analyzing-log-files-with-swift-cli">
<title>Analyzing Log Files with Swift CLI</title>
<para>When you want quick, command-line answers to
questions about logs, you can use swift with the -o or
-output option. The -o —output option can only be used
with a single object download to redirect the data
stream to either a different file name or to STDOUT
(-). The ability to redirect the output to STDOUT
allows you to pipe “|” data without saving it to disk
first. One common use case is being able to do some
quick log file analysis. First lets use swift to
setup some data for the examples. The “logtest”
directory contains four log files with the following
line format.</para>
<para>
<literallayout>Files:
2010-11-16-21_access.log
2010-11-16-22_access.log
2010-11-15-21_access.log
2010-11-15-22_access.log
Log lines:
Nov 15 21:53:52 lucid64 proxy-server - 127.0.0.1 15/Nov/2010/22/53/52 DELETE /v1/AUTH_cd4f57824deb4248a533f2c28bf156d3/2eefc05599d44df38a7f18b0b42ffedd HTTP/1.0 204 - \
- test%3Atester%2CAUTH_tkcdab3c6296e249d7b7e2454ee57266ff - - - txaba5984c-aac7-460e-b04b-afc43f0c6571 - 0.0432
</literallayout>
</para>
<para>The swift tool can easily upload the four log files
into a container named “logtest”:</para>
<para><screen>
<prompt>$</prompt> <userinput>cd logs</userinput>
<prompt>$</prompt> <userinput>swift -A http://swift-auth.com:11000/v1.0 -U test:tester -K testing upload logtest *.log</userinput>
</screen>
<programlisting>
2010-11-16-21_access.log
2010-11-16-22_access.log
2010-11-15-21_access.log
2010-11-15-22_access.log
</programlisting>
Get statistics on the account: <screen><prompt>$</prompt> <userinput>swift -A http://swift-auth.com:11000/v1.0 -U test:tester -K testing -q stat</userinput></screen>
<programlisting>
Account: AUTH_cd4f57824deb4248a533f2c28bf156d3
Containers: 1
Objects: 4
Bytes: 5888268
</programlisting>
Get statistics on the container:
<screen><prompt>$</prompt> <userinput>swift -A http://swift-auth.com:11000/v1.0 -U test:tester -K testing stat logtest</userinput> </screen><programlisting>Account: AUTH_cd4f57824deb4248a533f2c28bf156d3
Container: logtest
Objects: 4
Bytes: 5864468
Read ACL:
Write ACL:
</programlisting>
List all the objects in the container:
<screen><prompt>$</prompt> <userinput>swift -A http:///swift-auth.com:11000/v1.0 -U test:tester -K testing list logtest</userinput></screen><programlisting>2010-11-15-21_access.log
2010-11-15-22_access.log
2010-11-16-21_access.log
2010-11-16-22_access.log</programlisting>
</para>
<para>The following examples use the -o —output option
with (-) to help answer questions about the uploaded
log files. The swift command will download an object,
stream it to awk to determine the breakdown of
requests by return code for everything during 2200 on
November 16th, 2010. Based on the log line format
column 9 is the type of request and column 12 is the
return code. After awk processes the data stream it is
piped to sort and then uniq -c to sum up the number of
occurrences for each combination of request type and
return code.</para>
<para><screen>
<prompt>$</prompt> <userinput>swift -A http://swift-auth.com:11000/v1.0 -U test:tester -K testing download -o - logtest 2010-11-16-22_access.log | awk { print $9”-“$12} | sort | uniq -c</userinput>
</screen>
<programlisting>805 DELETE-204
12 DELETE-404
2 DELETE-409
723 GET-200
142 GET-204
74 GET-206
80 GET-304
34 GET-401
5 GET-403
18 GET-404
166 GET-412
2 GET-416
50 HEAD-200
17 HEAD-204
20 HEAD-401
8 HEAD-404
30 POST-202
25 POST-204
22 POST-400
6 POST-404
842 PUT-201
2 PUT-202
32 PUT-400
4 PUT-403
4 PUT-404
2 PUT-411
6 PUT-412
6 PUT-413
2 PUT-422
8 PUT-499</programlisting>
</para>
<para>This example uses a bash for loop with awk, swift
with its -o —output option with a hyphen (-) to find
out how many PUT requests are in each log file. First
create a list of objects by running swift with the
list command on the “logtest” container; then for each
item in the list run swift with download -o - then
pipe the output into grep to filter the put requests
and finally into wc -l to count the lines.</para>
<para>
<screen><prompt>$</prompt> <userinput>for f in `swift -A http://swift-auth.com:11000/v1.0 -U test:tester -K testing list logtest` ; \
do echo -ne “PUTS - ” ; swift -A http://swift-auth.com:11000/v1.0 -U test:tester -K testing download -o - logtest $f | grep PUT | wc -l ; \
done</userinput></screen>
<programlisting>
2010-11-15-21_access.log - PUTS - 402
2010-11-15-22_access.log - PUTS - 1091
2010-11-16-21_access.log - PUTS - 892
2010-11-16-22_access.log - PUTS - 910
</programlisting>
</para>
<para>By adding the -p —prefix option a prefix query is
performed on the list to return only the object names
that begin with a specific string. Lets determine out
how many PUT requests are in each object with a name
beginning with “2010-11-15”. First create a list of
objects by running swift with the list command on the
“logtest” container with the prefix option -p
2010-11-15. Then on each of item(s) returned run swift
with the download -o - then pipe the output to grep
and wc as in the previous example. The echo command is
added to display the object name.</para>
<para>
<screen><prompt>$</prompt> <userinput>for f in `swift -A http://swift-auth.com:11000/v1.0 -U test:tester -K testing list -p 2010-11-15 logtest` ; \
do echo -ne “$f - PUTS - ” ; swift -A http://127.0.0.1:11000/v1.0 -U test:tester -K testing download -o - logtest $f | grep PUT | wc -l ; \
done</userinput></screen>
<programlisting>2010-11-15-21_access.log - PUTS - 402
2010-11-15-22_access.log - PUTS - 910</programlisting>
</para>
<para>The swift utility is simple, scalable, flexible and
provides useful solutions all of which are core
principles of cloud computing; with the -o output
option being just one of its many features.</para>
</section>

View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<section
xmlns="http://docbook.org/ns/docbook"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="5.0"
xml:id="managing-openstack-object-storage-with-swift-cli">
<title>Managing OpenStack Object Storage with CLI
Swift</title>
<para>In the Object Store (swift) project there is a tool that
can perform a variety of tasks on your storage cluster
named swift. This client utility can be used for adhoc
processing, to gather statistics, list items, update
metadata, upload, download and delete files. It is based
on the native swift client library client.py.
Incorporating client.py into swift provides many benefits
such as seamlessly re-authorizing if the current token
expires in the middle of processing, retrying operations
up to five times and a processing concurrency of 10. All
of these things help make the swift tool robust and great
for operational use.</para>
<section xml:id="swift-acls">
<title>Swift ACLs</title>
<para>Swift ACLs work with users and accounts. Users have
roles on accounts - such as '.admin', which allows
full access to all containers and objects under the
account. ACLs are set at the container level and
support lists for read and write access, which are set
with the X-Container-Read and X-Container-Write header
respectively.</para>
<para>The swift client can be used to set the acls, using
the post subcommand with the option '-r' for the read
ACL, and '-w' for the write ACL. This example allows
the user 'testuser' to read objects in the container:
<programlisting>
$ swift post -r 'testuser'
</programlisting>
This could instead be a list of users.</para>
<para>If you are using the StaticWeb middleware to allow
OpenStack Object Storage to serve public web content,
you should also be aware of the ACL syntax for
managing allowed referrers. The syntax is '.r:'
followed by a list of allowed referrers. For example,
this command allows all referring domains access to
the object:
<programlisting>
$ swift post -r '.r:*'
</programlisting>
</para>
</section>
</section>