You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2013/08/03 15:20:03 UTC

[1/4] git commit: Import DNS API examples.

Updated Branches:
  refs/heads/trunk 01e12d3e5 -> e1d8dd992


Import DNS API examples.


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/c5bf1c8c
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/c5bf1c8c
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/c5bf1c8c

Branch: refs/heads/trunk
Commit: c5bf1c8cd9763fa822c40b197f0fb507bc01f092
Parents: 01e12d3
Author: Tomaz Muraus <to...@apache.org>
Authored: Sat Aug 3 15:10:27 2013 +0200
Committer: Tomaz Muraus <to...@apache.org>
Committed: Sat Aug 3 15:10:27 2013 +0200

----------------------------------------------------------------------
 docs/dns/examples.rst                           | 12 ++++++
 .../create_a_record_for_all_rackspace_nodes.py  | 39 ++++++++++++++++++++
 2 files changed, 51 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/c5bf1c8c/docs/dns/examples.rst
----------------------------------------------------------------------
diff --git a/docs/dns/examples.rst b/docs/dns/examples.rst
new file mode 100644
index 0000000..a9d9fd5
--- /dev/null
+++ b/docs/dns/examples.rst
@@ -0,0 +1,12 @@
+DNS Examples
+============
+
+Create an 'A' record for all your compute nodes
+-----------------------------------------------
+
+This example creates a new ``mydomain2.com`` zone at Zerigo and an A record
+for all your Rackspace nodes. Value for the A record is the Node's first
+public IP address.
+
+.. literalinclude:: /examples/dns/create_a_record_for_all_rackspace_nodes.py
+   :language: python

http://git-wip-us.apache.org/repos/asf/libcloud/blob/c5bf1c8c/docs/examples/dns/create_a_record_for_all_rackspace_nodes.py
----------------------------------------------------------------------
diff --git a/docs/examples/dns/create_a_record_for_all_rackspace_nodes.py b/docs/examples/dns/create_a_record_for_all_rackspace_nodes.py
new file mode 100644
index 0000000..d7160ee
--- /dev/null
+++ b/docs/examples/dns/create_a_record_for_all_rackspace_nodes.py
@@ -0,0 +1,39 @@
+from pprint import pprint
+
+from libcloud.compute.providers import get_driver as get_compute_driver
+from libcloud.compute.types import Provider as ComputeProvider
+from libcloud.dns.providers import get_driver as get_dns_driver
+from libcloud.dns.types import Provider as DNSProvider, RecordType
+
+CREDENTIALS_RACKSPACE = ('username', 'api key')
+CREDENTIALS_ZERIGO = ('email', 'api key')
+
+Cls = get_compute_driver(ComputeProvider.RACKSPACE)
+compute_driver = Cls(*CREDENTIALS_RACKSPACE)
+
+Cls = get_dns_driver(DNSProvider.ZERIGO)
+dns_driver = Cls(*CREDENTIALS_ZERIGO)
+
+# Retrieve all the nodes
+nodes = compute_driver.list_nodes()
+
+# Create a new zone
+zone = dns_driver.create_zone(domain='mydomain2.com')
+
+created = []
+for node in nodes:
+    name = node.name
+
+    ips = node.public_ip
+
+    if not ips:
+        continue
+
+    ip = ips[0]
+
+    print 'Creating %s record (data=%s) for node %s' % ('A', ip, name)
+    record = zone.create_record(name=name, type=RecordType.A, data=ip)
+    created.append(record)
+
+print 'Done, created %d records' % (len(created))
+pprint(created)


[4/4] git commit: Import storage api examples.

Posted by to...@apache.org.
Import storage api examples.


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/e1d8dd99
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/e1d8dd99
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/e1d8dd99

Branch: refs/heads/trunk
Commit: e1d8dd992716d12656893c92f2dbb582099361c7
Parents: 13c2b8a
Author: Tomaz Muraus <to...@apache.org>
Authored: Sat Aug 3 15:19:52 2013 +0200
Committer: Tomaz Muraus <to...@apache.org>
Committed: Sat Aug 3 15:19:52 2013 +0200

----------------------------------------------------------------------
 .../concurrent_file_download_using_gevent.py    | 38 ++++++++++++++++++++
 .../create_directory_backup_stream_to_cf.py     | 32 +++++++++++++++++
 .../storage/publish_static_website_on_cf.py     | 28 +++++++++++++++
 docs/storage/examples.rst                       | 24 +++++++++++++
 4 files changed, 122 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/e1d8dd99/docs/examples/storage/concurrent_file_download_using_gevent.py
----------------------------------------------------------------------
diff --git a/docs/examples/storage/concurrent_file_download_using_gevent.py b/docs/examples/storage/concurrent_file_download_using_gevent.py
new file mode 100644
index 0000000..3bd9083
--- /dev/null
+++ b/docs/examples/storage/concurrent_file_download_using_gevent.py
@@ -0,0 +1,38 @@
+import os.path
+
+from gevent import monkey
+from gevent.pool import Pool
+monkey.patch_all()
+
+from libcloud.storage.providers import get_driver
+from libcloud.storage.types import Provider
+
+USERNAME = 'username'
+API_KEY = 'api key'
+
+cls = get_driver(Provider.CLOUDFILES_US)
+driver = cls(USERNAME, API_KEY)
+
+
+def download_obj(container, obj):
+    driver = cls(USERNAME, API_KEY)
+    obj = driver.get_object(container_name=container.name,
+                            object_name=obj.name)
+    filename = os.path.basename(obj.name)
+    path = os.path.join(os.path.expanduser('~/Downloads'), filename)
+    print 'Downloading: %s to %s' % (obj.name, path)
+    obj.download(destination_path=path)
+
+containers = driver.list_containers()
+
+jobs = []
+pool = Pool(20)
+
+for index, container in enumerate(containers):
+    objects = container.list_objects()
+
+    for obj in objects:
+        pool.spawn(download_obj, container, obj)
+
+pool.join()
+print 'Done'

http://git-wip-us.apache.org/repos/asf/libcloud/blob/e1d8dd99/docs/examples/storage/create_directory_backup_stream_to_cf.py
----------------------------------------------------------------------
diff --git a/docs/examples/storage/create_directory_backup_stream_to_cf.py b/docs/examples/storage/create_directory_backup_stream_to_cf.py
new file mode 100644
index 0000000..0c32617
--- /dev/null
+++ b/docs/examples/storage/create_directory_backup_stream_to_cf.py
@@ -0,0 +1,32 @@
+import subprocess
+from datetime import datetime
+
+from libcloud.storage.types import Provider, ContainerDoesNotExistError
+from libcloud.storage.providers import get_driver
+
+driver = get_driver(Provider.CLOUDFILES_US)('username', 'api key')
+
+directory = '/home/some/path'
+cmd = 'tar cvzpf - %s' % (directory)
+
+object_name = 'backup-%s.tar.gz' % (datetime.now().strftime('%Y-%m-%d'))
+container_name = 'backups'
+
+# Create a container if it doesn't already exist
+try:
+    container = driver.get_container(container_name=container_name)
+except ContainerDoesNotExistError:
+    container = driver.create_container(container_name=container_name)
+
+pipe = subprocess.Popen(cmd, bufsize=0, shell=True, stdout=subprocess.PIPE)
+return_code = pipe.poll()
+
+print 'Uploading object...'
+
+while return_code is None:
+    # Compress data in our directory and stream it directly to CF
+    obj = container.upload_object_via_stream(iterator=pipe.stdout,
+                                             object_name=object_name)
+    return_code = pipe.poll()
+
+print 'Upload complete, transferred: %s KB' % ((obj.size / 1024))

http://git-wip-us.apache.org/repos/asf/libcloud/blob/e1d8dd99/docs/examples/storage/publish_static_website_on_cf.py
----------------------------------------------------------------------
diff --git a/docs/examples/storage/publish_static_website_on_cf.py b/docs/examples/storage/publish_static_website_on_cf.py
new file mode 100644
index 0000000..a4fdd38
--- /dev/null
+++ b/docs/examples/storage/publish_static_website_on_cf.py
@@ -0,0 +1,28 @@
+from StringIO import StringIO
+
+from libcloud.storage.types import Provider
+from libcloud.storage.providers import get_driver
+
+CloudFiles = get_driver(Provider.CLOUDFILES_US)
+
+driver = CloudFiles('username', 'api key')
+
+container = driver.create_container(container_name='my_website')
+
+iterator1 = StringIO('<p>Hello World from Libcloud!</p>')
+iterator2 = StringIO('<p>Oh, noez, 404!!</p>')
+iterator3 = StringIO('<p>Oh, noez, 401!!</p>')
+
+driver.upload_object_via_stream(iterator=iterator1, container=container,
+                                object_name='index.html')
+driver.upload_object_via_stream(iterator=iterator2, container=container,
+                                object_name='404error.html')
+driver.upload_object_via_stream(iterator=iterator3, container=container,
+                                object_name='401error.html')
+
+driver.ex_enable_static_website(container=container)
+driver.ex_set_error_page(container=container, file_name='error.html')
+driver.enable_container_cdn(container=container)
+
+print('All done you can view the website at: ' +
+      driver.get_container_cdn_url(container=container))

http://git-wip-us.apache.org/repos/asf/libcloud/blob/e1d8dd99/docs/storage/examples.rst
----------------------------------------------------------------------
diff --git a/docs/storage/examples.rst b/docs/storage/examples.rst
new file mode 100644
index 0000000..c73c0a0
--- /dev/null
+++ b/docs/storage/examples.rst
@@ -0,0 +1,24 @@
+Storage Examples
+================
+
+Create a backup of a directory and directly stream it to CloudFiles
+-------------------------------------------------------------------
+
+.. literalinclude:: /examples/storage/create_directory_backup_stream_to_cf.py
+   :language: python
+
+
+Efficiently download multiple files using gevent
+------------------------------------------------
+
+.. literalinclude:: /examples/storage/concurrent_file_download_using_gevent.py
+   :language: python
+
+Publishing a static website using CloudFiles driver
+---------------------------------------------------
+
+.. note::
+    This example works with Libcloud version 0.11.0 and above.
+
+.. literalinclude:: /examples/storage/publish_static_website_on_cf.py
+   :language: python


[3/4] git commit: Add note about the example licensing.

Posted by to...@apache.org.
Add note about the example licensing.


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/13c2b8af
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/13c2b8af
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/13c2b8af

Branch: refs/heads/trunk
Commit: 13c2b8af0257e832a766cb69519628fbb83fe158
Parents: 00c35ab
Author: Tomaz Muraus <to...@apache.org>
Authored: Sat Aug 3 15:14:30 2013 +0200
Committer: Tomaz Muraus <to...@apache.org>
Committed: Sat Aug 3 15:15:48 2013 +0200

----------------------------------------------------------------------
 docs/index.rst | 7 +++++++
 1 file changed, 7 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/13c2b8af/docs/index.rst
----------------------------------------------------------------------
diff --git a/docs/index.rst b/docs/index.rst
index 9f8e30b..f1d8faa 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -7,6 +7,11 @@ Welcome to Apache Libcloud's documentation!
     Sphinx, so this may be incomplete. We apologize for the inconvenience and we
     hope the upcoming awesomeness will make up for it.
 
+.. note::
+
+    Unless noted otherwise, all of the examples in the documentation are
+    licensed under the `Apache 2.0 license`_.
+
 Apache Libcloud is a Python library which abstracts away the differences
 between multiple cloud providers. It current can manage four different cloud
 resources:
@@ -27,3 +32,5 @@ resources:
     storage/*
     loadbalancers/*
     dns/*
+
+.. _`Apache 2.0 license`: https://www.apache.org/licenses/LICENSE-2.0.html


[2/4] git commit: Import loadbalancer API examples.

Posted by to...@apache.org.
Import loadbalancer API examples.


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/00c35ab6
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/00c35ab6
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/00c35ab6

Branch: refs/heads/trunk
Commit: 00c35ab635cd49a4eea88bb5b19519a832a0050b
Parents: c5bf1c8
Author: Tomaz Muraus <to...@apache.org>
Authored: Sat Aug 3 15:12:48 2013 +0200
Committer: Tomaz Muraus <to...@apache.org>
Committed: Sat Aug 3 15:12:48 2013 +0200

----------------------------------------------------------------------
 .../loadbalancer/create_lb_wait_for_ready.py    | 36 ++++++++++++++++++++
 docs/loadbalancers/examples.rst                 |  8 +++++
 2 files changed, 44 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/00c35ab6/docs/examples/loadbalancer/create_lb_wait_for_ready.py
----------------------------------------------------------------------
diff --git a/docs/examples/loadbalancer/create_lb_wait_for_ready.py b/docs/examples/loadbalancer/create_lb_wait_for_ready.py
new file mode 100644
index 0000000..f67d98d
--- /dev/null
+++ b/docs/examples/loadbalancer/create_lb_wait_for_ready.py
@@ -0,0 +1,36 @@
+import time
+from pprint import pprint
+
+from libcloud.loadbalancer.base import Member, Algorithm
+from libcloud.loadbalancer.types import State, Provider
+from libcloud.loadbalancer.providers import get_driver
+
+
+driver = get_driver(Provider.RACKSPACE_US)('username', 'api key')
+
+name = 'test-lb'
+members = (Member(None, '192.168.86.1', 8080),
+           Member(None, '192.168.86.2', 8080))
+
+print 'Creating load balancer'
+new_balancer = driver.create_balancer(name=name,
+                                      algorithm=Algorithm.ROUND_ROBIN,
+                                      port=80, protocol='http',
+                                      members=members)
+
+print 'Waiting for load balancer to become ready...'
+while True:
+    balancer = driver.get_balancer(balancer_id=new_balancer.id)
+
+    if balancer.state == State.RUNNING:
+        break
+
+    print 'Load balancer not ready yet, sleeping 20 seconds...'
+    time.sleep(20)
+
+print 'Load balancer is ready'
+pprint(balancer)
+
+# fetch list of members
+members = balancer.list_members()
+pprint(members)

http://git-wip-us.apache.org/repos/asf/libcloud/blob/00c35ab6/docs/loadbalancers/examples.rst
----------------------------------------------------------------------
diff --git a/docs/loadbalancers/examples.rst b/docs/loadbalancers/examples.rst
new file mode 100644
index 0000000..bfc2dda
--- /dev/null
+++ b/docs/loadbalancers/examples.rst
@@ -0,0 +1,8 @@
+LoadBalancer Examples
+=====================
+
+Create a Load Balancer with two members and wait for it to become ready
+-----------------------------------------------------------------------
+
+.. literalinclude:: /examples/loadbalancer/create_lb_wait_for_ready.py
+   :language: python