You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by je...@apache.org on 2010/03/21 23:30:11 UTC

svn commit: r925925 - in /incubator/libcloud/trunk/demos: ./ .gitignore ec2_demo.py secrets.py.dist

Author: jerry
Date: Sun Mar 21 22:30:10 2010
New Revision: 925925

URL: http://svn.apache.org/viewvc?rev=925925&view=rev
Log:
First demo: EC2

Added:
    incubator/libcloud/trunk/demos/
    incubator/libcloud/trunk/demos/.gitignore
    incubator/libcloud/trunk/demos/ec2_demo.py
    incubator/libcloud/trunk/demos/secrets.py.dist

Added: incubator/libcloud/trunk/demos/.gitignore
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/demos/.gitignore?rev=925925&view=auto
==============================================================================
--- incubator/libcloud/trunk/demos/.gitignore (added)
+++ incubator/libcloud/trunk/demos/.gitignore Sun Mar 21 22:30:10 2010
@@ -0,0 +1 @@
+secrets.py

Added: incubator/libcloud/trunk/demos/ec2_demo.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/demos/ec2_demo.py?rev=925925&view=auto
==============================================================================
--- incubator/libcloud/trunk/demos/ec2_demo.py (added)
+++ incubator/libcloud/trunk/demos/ec2_demo.py Sun Mar 21 22:30:10 2010
@@ -0,0 +1,128 @@
+#!/usr/bin/env python
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# libcloud.org licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# This example provides both a running script (invoke from command line)
+# and an importable module one can play with in Interactive Mode.
+#
+# See docstrings for usage examples.
+#
+
+try:
+    import secrets
+except:
+    pass
+import sys; sys.path.append('..')
+
+from libcloud.types import Provider, InvalidCredsException
+from libcloud.providers import get_driver
+
+from pprint import pprint
+
+def main(argv):
+    """Main EC2 Demo
+
+    When invoked from the command line, it will connect using secrets.py
+    (see secrets.py.dist for setup instructions), and perform the following
+    tasks:
+
+    - List current nodes
+    - List available images (up to 10)
+    - List available sizes (up to 10)
+    """
+    # Load EC2 driver
+    EC2Driver = get_driver(Provider.EC2_US_EAST)
+
+    # Instantiate with Access ID and Secret Key
+    # (see secrets.py.dist)
+    try:
+        ec2 = EC2Driver(secrets.EC2_ACCESS_ID, secrets.EC2_SECRET_KEY)
+        print ">> Loading nodes..."
+        nodes = ec2.list_nodes()
+        pprint(nodes)
+    except NameError, e:
+        print ">> Fatal Error: %s" % e
+        print "   (Hint: modify secrets.py.dist)"
+        return 1
+    except Exception, e:
+        print ">> Fatal error: %s" % e
+        return 1
+    
+    print ">> Loading images... (showing up to 10)"
+    images = ec2.list_images()
+    pprint(images[:10])
+
+    print ">> Loading sizes... (showing up to 10)"
+    sizes = ec2.list_sizes()
+    pprint(sizes[:10])
+
+    return 0
+
+def get_ec2(**kwargs):
+    """An easy way to play with the EC2 Driver in Interactive Mode
+
+    # Load credentials from secrets.py
+    >>> from ec2demo import get_ec2
+    >>> ec2 = get_ec2()
+
+    # Or, provide credentials
+    >>> from ec2demo import get_ec2
+    >>> ec2 = get_ec2(access_id='xxx', secret_key='yyy')
+
+    # Do things
+    >>> ec2.load_nodes()
+    >>> images = ec2.load_images()
+    >>> sizes = ec2.load_sizes()
+    """
+    access_id = kwargs.get('access_id', secrets.EC2_ACCESS_ID)
+    secret_key = kwargs.get('secret_key', secrets.EC2_SECRET_KEY)
+    
+    EC2Driver = get_driver(Provider.EC2_US_EAST)
+    return EC2Driver(access_id, secret_key)
+
+def create_demo(ec2):
+    """Create EC2 Node Demo
+
+    >>> from ec2demo import get_ec2, create_demo
+    >>> ec2 = get_ec2()
+    >>> node = create_demo(ec2)
+    >>> node
+    <Node: uuid=9d1..., name=i-7b1fa910, state=3, public_ip=[''], ...>
+
+    And to destroy the node:
+
+    >>> node.destroy()
+
+    If you've accidentally quit and need to destroy the node:
+
+    >>> from ec2demo import get_ec2
+    >>> nodes = ec2.list_nodes()
+    >>> nodes[0].destroy() # assuming it's the first node
+    """
+    images = ec2.list_images()
+    image = [image for image in images if 'ami' in image.id][0]
+    sizes = ec2.list_sizes()
+    size = sizes[0]
+
+    # Note, name is ignored by EC2
+    node = ec2.create_node(name='create_image_demo',
+                           image=image,
+                           size=size)
+    return node
+
+if __name__ == '__main__':
+    sys.exit(main(sys.argv))

Added: incubator/libcloud/trunk/demos/secrets.py.dist
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/demos/secrets.py.dist?rev=925925&view=auto
==============================================================================
--- incubator/libcloud/trunk/demos/secrets.py.dist (added)
+++ incubator/libcloud/trunk/demos/secrets.py.dist Sun Mar 21 22:30:10 2010
@@ -0,0 +1,21 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# libcloud.org licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# Copy this file to secrets.py for use with provided examples
+#
+
+EC2_ACCESS_ID=''
+EC2_SECRET_KEY=''