Linux Inside
85
EC2_SECRET_KEY)
9 #επιλέγουμε τον driver
10 >>> conn.name
11 'Amazon EC2 (us-east-1)'
12 >>> dir(conn)
13 'connection', 'connectionCls', 'country', 'create_node',
'deploy_node', 'destroy_node',
'ex_associate_addresses','ex_import_keypair',
'ex_list_availability_zones', 'ex_modify_instance_attribute',
'list_images', 'list_locations', 'list_nodes', 'list_sizes'
14 #βλέπουμε τις μεθόδους και τις ιδιότητες
Έχοντας εγκαταστήσει σύνδεση με τον Amazon EC2, ας
τρέξουμε κάποια χρήσιμα functions που έχουν αναφερθεί πιο
πάνω.
1 >>> conn.list_sizes()
2 [<NodeSize: id=m1.medium, name=Medium Instance,
ram=3700 disk=410 bandwidth=None price=0.16
driver=Amazon EC2 (us-east-1) ...>, <NodeSize:
id=cg1.4xlarge, name=Cluster GPU Quadruple Extra Large
Instance,
]
3 >>> len(conn.list_sizes() )
4 13
5 #η Amazon παρέχει 13 sizes
6 >>> conn.list_locations()
7 [<EC2NodeLocation: id=0, name=Amazon US N.
Virginia, country=US, availability_zone=us-east-1a
driver=Amazon EC2 (us-east-1)>,
...
]
8 >>> len(conn.list_locations() )
9 4
10 >>> images = conn.list_images()
11 >>> len(images)
12 11021
13 #Η amazon παρέχει 11021 διαφορετικά images!!!
14 >>> images[0]
15 <NodeImage: id=aki-00806369, name=karmic-kernel-
zul/ubuntu-kernel-2.6.31-300-ec2-i386-20091001-test-
04.manifest.xml, driver=Amazon EC2 (us-east-1) ...>
16 >>> nodes = conn.list_nodes()
17 #παίρνουμε τα nodes μας
18 >>> nodes
19 [<Node:
uuid=hdjd8333344444fbece2c7ce292167792fd674f6c,
name=ec2Web, state=0, public_ips=['127.12.124.10',
'137.12.14.11'], provider=Amazon EC2 (us-east-1) ...>,
<Node: uuid=2da116d197e4170e31ab45a981...]
20 >>> node1=nodes[0]
21 >>> dir(node1)
22 ['__class__', '__delattr__', '__dict__', '__doc__',
'__format__', '__getattribute__', '__hash__', '__init__',
'__module__', '__new__', '__reduce__', '__reduce_ex__',
'__repr__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', '__weakref__', '_get_private_ips',
'_get_public_ips', '_set_private_ips', '_set_public_ips', '_uuid',
'destroy', 'driver', 'extra', 'get_uuid', 'id', 'image', 'name',
'private_ip', 'private_ips', 'public_ip', 'public_ips', 'reboot',
'size', 'state', 'uuid']
23 #βλέπουμε τις μεθόδους που παρέχει ο Amazon
driver για τα nodes.
24 >>> node1.extra
25 #εδώ παίρνουμε τα metadata ή tags για το
συγκεκριμένο node
Μπορούμε να κάνουμε reboot στο node αυτό με τη μέθοδο
reboot()
>>> node1.reboot()
Ενώ μπορούμε να το διαγράψουμε με τη μέθοδο destroy()
>>> node1.destroy()
Για να ορίσουμε metadata στο node μας, χρησιμοποιούμε
την ex_create_tags. Π.χ.:
1 >>> metadata = {'Purpose': 'Testing Web Server'}
2 >>> conn.ex_create_tags(node1, metadata)
3 >>> conn.ex_describe_tags(node1)
{'Name': 'ec2Web', 'tags': "{'something1','something2'}",
'Purpose': 'Testing Web Server'}
Δημιουργία node
Μία από τις πιο χρήσιμες επιλογές. Αφού έχουμε συνδεθεί
με τον driver του παρόχου που μας ενδιαφέρει, προσδιορί-
ζουμε όνομα, size και image και το node μας θα δημιουργη-
θεί.
Παράδειγμα:
>>> node = conn.create_node(name='test linuxinside',
image=images[0], size=sizes[0])
Μπορούμε επίσης να προσδιορίσουμε το location, καθώς
και post installation βήματα μέσω των σχετικών μεθόδων. Με
αυτόν τον τρόπο μπορούμε να θέσουμε το ιδιωτικό κλειδί
μας, ώστε να μπούμε στον server με ssh μόλις δημιουργηθεί
ή να εκτελέσουμε ένα script με εντολές, κάτι χρήσιμο για
πολλαπλά deployments.
Υπάρχοντα projects
Έχουν αναπτυχθεί διάφορα εργαλεία, command line, Web
και scripts που βασίζονται στη libcloud και επιτρέπουν τη δια-
χείριση cloud. Ορισμένα από αυτά είναι και open source.
Μπορούμε να δούμε τη λίστα στο
http://libcloud.apache.org/whos-using.html.
Mist.io
Η Unweb.me αναπτύσσει μία mobile friendly υπηρεσία για
τη διαχείριση και το monitoring των virtual servers σε διαφορε-
τικά clouds. Ο πυρήνας της υπηρεσίας θα κυκλοφορήσει ως
ανοιχτό λογισμικό, το μεγαλύτερο μέρος της on-line υπηρε-
σίας θα είναι δωρεάν, ενώ θα υπάρχει χρέωση για πιο πολύ-
πλοκες λειτουργίες. Το project βρίσκεται σε alpha έκδοση στη
διεύθυνση https://mist.io. •
Linux Labs - LibCloud
Σύνδεσμοι
[1] Η σελίδα της libcloud: http://libcloud.apache.org
[2] Ένα tutorial: http://goo.gl/gXNKi
[3] Τεκμηρίωση: http://libcloud.apache.org/docs/
[4] API Reference Documentation:
http://libcloud.apache.org/apidocs/.