|
|
# Example for Cloud Computing Course Master AI / GSD # # uses libCloud: https://libcloud.apache.org/ # libCloud API documentation: https://libcloud.readthedocs.io/en/latest/ # OpenStack API documentation: https://developer.openstack.org/ # this code was initially based on the former tutorial: https://developer.openstack.org/firstapp-libcloud/
import getpass
from libcloud.compute.providers import get_driver from libcloud.compute.types import Provider
# Please use 1-29 for X in the following variable to specify your group number. (will be used for the username, # project etc., as coordinated in the lab sessions)
group_number = 30
######################################################################################################################## # # no changes necessary below this line in this example # ########################################################################################################################
# web service endpoint of the private cloud infrastructure auth_url = 'https://private-cloud.informatik.hs-fulda.de:5000' # your username in OpenStack auth_username = 'CloudComp' + str(group_number) # your project in OpenStack project_name = 'CloudComp' + str(group_number) # A network in the project the started instance will be attached to project_network = 'CloudComp' + str(group_number) + '-net'
# The image to look for and use for the started instance ubuntu_image_name = "Ubuntu 18.04 - Bionic Beaver - 64-bit - Cloud Based Image" # TODO: Ubuntu >18.04 would require major updates to faafo example again/better option: complete rewrite of example?
# default region region_name = 'RegionOne' # domain to use, "default" for local accounts, "hsfulda" for RZ LDAP, e.g., using fdaiXXXX as auth_username # domain_name = "default"
def main(): # get the password from user # auth_password = getpass.getpass("Enter your OpenStack password:") auth_password = "demo"
# instantiate a connection to the OpenStack private cloud # make sure to include ex_force_auth_version='3.x_password', as needed in our environment provider = get_driver(Provider.OPENSTACK)
print(("Opening connection to %s as %s..." % (auth_url, auth_username)))
conn = provider(auth_username, auth_password, ex_force_auth_url=auth_url, ex_force_auth_version='3.x_password', ex_tenant_name=project_name, ex_force_service_region=region_name) # ex_domain_name=domain_name)
print("Getting images and selecting desired one...") print("=========================================================================")
# get a list of images offered in the cloud context (e.g. Ubuntu 20.04, cirros, ...) images = conn.list_images() image = '' for img in images: if img.name == ubuntu_image_name: image = img print(img)
print("Getting flavors...") print("=========================================================================")
# 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)
print("Selecting desired flavor...") print("=========================================================================")
# get the flavor with id 2 flavor_id = '2' flavor = conn.ex_get_size(flavor_id) print(flavor)
print("Selecting desired network...") print("=========================================================================")
# get a list of networks in the cloud context networks = conn.ex_list_networks() network = '' for net in networks: if net.name == project_network: network = net
print("Create instance 'testing'...") print("=========================================================================")
# 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)
print("Showing all running instances...") print("=========================================================================")
# show all instances (running nodes) in the cloud context instances = conn.list_nodes() for instance in instances: print(instance)
print("Destroying instance...") print("=========================================================================")
# 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()
|