diff --git a/demo1-getting-started.py b/demo1-getting-started.py index 260e2d9..45a2bb2 100644 --- a/demo1-getting-started.py +++ b/demo1-getting-started.py @@ -1,23 +1,43 @@ +# Example for Cloud Computing Course Master AI / GSD +# +# based on the tutorial: https://developer.openstack.org/firstapp-libcloud/ +# uses libCloud: https://libcloud.apache.org/ +# libCloud API documentation: https://libcloud.readthedocs.io/en/latest/ +# OpenStack API documentation: https://developer.openstack.org/ + import getpass -import libcloud.security from libcloud.compute.providers import get_driver from libcloud.compute.types import Provider -auth_username = 'fdai109' +# Please use 1-25 for X, as coordinated in the lab sessions + +# web service endpoint of the private cloud infrastructure auth_url = 'https://private-cloud2.informatik.hs-fulda.de:5000' -project_name = 'ai-netlab-pro' +# your username in OpenStack +auth_username = 'CloudCompX' +# your project in OpenStack +project_name = 'CloudCompGrpX' + +# default region region_name = 'RegionOne' -domain_name = "hsfulda" +# domain to use, "default" for local accounts, "hsfulda" for LDAP of DVZ, e.g., using fdaiXXXX as auth_username +domain_name = "default" +# The image to look for and use for the started instance ubuntu_image_name = "Ubuntu 14.04 - Trusty Tahr - 64-bit - Cloud Based Image" +# A network in the project the started instance will be attached to +project_network = "CloudCompGrpX-net" def main(): - print(auth_username) + # get the password from user auth_password = getpass.getpass("Enter your OpenStack password:") - # libcloud.security.VERIFY_SSL_CERT = False + # auth_password = "demo" + # instantiate a connection to the OpenStack private cloud + # make sure to include ex_domain_name and ex_force_auth_version='3.x_password', as they are needed in our + # environment provider = get_driver(Provider.OPENSTACK) conn = provider(auth_username, auth_password, @@ -27,6 +47,7 @@ def main(): ex_force_service_region=region_name, ex_domain_name=domain_name) + # get a list of images offered in the cloud context (e.g. Ubuntu 14.04, Ubuntu 16.04, cirros, ...) images = conn.list_images() image = '' for img in images: @@ -34,30 +55,38 @@ def main(): image = img print(img) + # get a list of flavors offered in the cloud context (e.g. m1.small, m1.medium, ...) flavors = conn.list_sizes() for flavor in flavors: print(flavor) + # get the flavor with id 2 flavor_id = '2' flavor = conn.ex_get_size(flavor_id) print(flavor) + # get a list of networks in the cloud context networks = conn.ex_list_networks() network = '' for net in networks: - if net.name == "ai-netlab-pro-net": + if net.name == project_network: network = net + # create a new instance with the name "testing" + # make sure to provide networks (networks={network}) the instance should be attached to instance_name = 'testing' testing_instance = conn.create_node(name=instance_name, image=image, size=flavor, networks={network}) print(testing_instance) + # show all instances (running nodes) in the cloud context instances = conn.list_nodes() for instance in instances: print(instance) + # destroy the instance we have just created conn.destroy_node(testing_instance) +# method that is called when the script is started from the command line if __name__ == '__main__': main()