initial code repo
[stor4nfv.git] / src / ceph / doc / radosgw / s3 / perl.rst
diff --git a/src/ceph/doc/radosgw/s3/perl.rst b/src/ceph/doc/radosgw/s3/perl.rst
new file mode 100644 (file)
index 0000000..f12e5c6
--- /dev/null
@@ -0,0 +1,192 @@
+.. _perl:
+
+Perl S3 Examples
+================
+
+Creating a Connection
+---------------------
+
+This creates a connection so that you can interact with the server.
+
+.. code-block:: perl
+
+       use Amazon::S3;
+       my $access_key = 'put your access key here!';
+       my $secret_key = 'put your secret key here!';
+
+       my $conn = Amazon::S3->new({
+               aws_access_key_id     => $access_key,
+               aws_secret_access_key => $secret_key,
+               host                  => 'objects.dreamhost.com',
+               secure                => 1,
+               retry                 => 1,
+       });
+
+
+Listing Owned Buckets
+---------------------
+
+This gets a list of `Amazon::S3::Bucket`_ objects that you own.
+We'll also print out the bucket name and creation date of each bucket.
+
+.. code-block:: perl
+
+       my @buckets = @{$conn->buckets->{buckets} || []};
+       foreach my $bucket (@buckets) {
+               print $bucket->bucket . "\t" . $bucket->creation_date . "\n";
+       }
+
+The output will look something like this::
+
+   mahbuckat1  2011-04-21T18:05:39.000Z
+   mahbuckat2  2011-04-21T18:05:48.000Z
+   mahbuckat3  2011-04-21T18:07:18.000Z
+
+
+Creating a Bucket
+-----------------
+
+This creates a new bucket called ``my-new-bucket``
+
+.. code-block:: perl
+
+       my $bucket = $conn->add_bucket({ bucket => 'my-new-bucket' });
+
+
+Listing a Bucket's Content
+--------------------------
+
+This gets a list of hashes with info about each object in the bucket.
+We'll also print out each object's name, the file size, and last
+modified date.
+
+.. code-block:: perl
+
+       my @keys = @{$bucket->list_all->{keys} || []};
+       foreach my $key (@keys) {
+               print "$key->{key}\t$key->{size}\t$key->{last_modified}\n";
+       }
+
+The output will look something like this::
+
+   myphoto1.jpg        251262  2011-08-08T21:35:48.000Z
+   myphoto2.jpg        262518  2011-08-08T21:38:01.000Z
+
+
+Deleting a Bucket
+-----------------
+
+.. note::
+   The Bucket must be empty! Otherwise it won't work!
+
+.. code-block:: perl
+
+       $conn->delete_bucket($bucket);
+
+
+Forced Delete for Non-empty Buckets
+-----------------------------------
+
+.. attention::
+
+   not available in the `Amazon::S3`_ perl module
+
+
+Creating an Object
+------------------
+
+This creates a file ``hello.txt`` with the string ``"Hello World!"``
+
+.. code-block:: perl
+
+       $bucket->add_key(
+               'hello.txt', 'Hello World!',
+               { content_type => 'text/plain' },
+       );
+
+
+Change an Object's ACL
+----------------------
+
+This makes the object ``hello.txt`` to be publicly readable and
+``secret_plans.txt`` to be private.
+
+.. code-block:: perl
+
+       $bucket->set_acl({
+               key       => 'hello.txt',
+               acl_short => 'public-read',
+       });
+       $bucket->set_acl({
+               key       => 'secret_plans.txt',
+               acl_short => 'private',
+       });
+
+
+Download an Object (to a file)
+------------------------------
+
+This downloads the object ``perl_poetry.pdf`` and saves it in
+``/home/larry/documents/``
+
+.. code-block:: perl
+
+       $bucket->get_key_filename('perl_poetry.pdf', undef,
+               '/home/larry/documents/perl_poetry.pdf');
+
+
+Delete an Object
+----------------
+
+This deletes the object ``goodbye.txt``
+
+.. code-block:: perl
+
+       $bucket->delete_key('goodbye.txt');
+
+Generate Object Download URLs (signed and unsigned)
+---------------------------------------------------
+This generates an unsigned download URL for ``hello.txt``. This works
+because we made ``hello.txt`` public by setting the ACL above.
+Then this generates a signed download URL for ``secret_plans.txt`` that
+will work for 1 hour. Signed download URLs will work for the time
+period even if the object is private (when the time period is up, the
+URL will stop working).
+
+.. note::
+   The `Amazon::S3`_ module does not have a way to generate download
+   URLs, so we are going to be using another module instead. Unfortunately,
+   most modules for generating these URLs assume that you are using Amazon,
+   so we have had to go with using a more obscure module, `Muck::FS::S3`_. This
+   should be the same as Amazon's sample S3 perl module, but this sample
+   module is not in CPAN. So, you can either use CPAN to install
+   `Muck::FS::S3`_, or install Amazon's sample S3 module manually. If you go
+   the manual route, you can remove ``Muck::FS::`` from the example below.
+
+.. code-block:: perl
+
+       use Muck::FS::S3::QueryStringAuthGenerator;
+       my $generator = Muck::FS::S3::QueryStringAuthGenerator->new(
+               $access_key,
+               $secret_key,
+               0, # 0 means use 'http'. set this to 1 for 'https'
+               'objects.dreamhost.com',
+       );
+
+       my $hello_url = $generator->make_bare_url($bucket->bucket, 'hello.txt');
+       print $hello_url . "\n";
+
+       $generator->expires_in(3600); # 1 hour = 3600 seconds
+       my $plans_url = $generator->get($bucket->bucket, 'secret_plans.txt');
+       print $plans_url . "\n";
+
+The output will look something like this::
+
+   http://objects.dreamhost.com:80/my-bucket-name/hello.txt
+   http://objects.dreamhost.com:80/my-bucket-name/secret_plans.txt?Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXX&Expires=1316027075&AWSAccessKeyId=XXXXXXXXXXXXXXXXXXX
+
+
+.. _`Amazon::S3`: http://search.cpan.org/~tima/Amazon-S3-0.441/lib/Amazon/S3.pm
+.. _`Amazon::S3::Bucket`: http://search.cpan.org/~tima/Amazon-S3-0.441/lib/Amazon/S3/Bucket.pm
+.. _`Muck::FS::S3`: http://search.cpan.org/~mike/Muck-0.02/
+