Compute To use the information in this section, you must be familiar with OpenStack Compute.
Set environment variables To set up environmental variables and authenticate against Compute API endpoints, see .
Get OpenStack credentials (API v2) These example use the get_nova_credentials_v2 method: def get_nova_credentials_v2(): d = {} d['version'] = '2' d['username'] = os.environ['OS_USERNAME'] d['api_key'] = os.environ['OS_PASSWORD'] d['auth_url'] = os.environ['OS_AUTH_URL'] d['project_id'] = os.environ['OS_TENANT_NAME'] return d This code resides in the credentials.py file, which all samples import. Use the get_nova_credentials_v2() method to populate and get a dictionary: credentials = get_nova_credentials_v2()
List servers (API v2) The following program lists servers by using the Compute API v2. To list servers Import the following modules: from credentials import get_nova_credentials_v2 from novaclient.client import Client Get Nova credentials. See . Instantiate the nova_client client object by using the credentials dictionary object: nova_client = Client(**credentials) List servers by calling servers.list on nova_client object: print(nova_client.servers.list()) List servers code listing #!/usr/bin/env python from credentials import get_nova_credentials_v2 from novaclient.client import Client credentials = get_nova_credentials_v2() nova_client = Client(**credentials) print(nova_client.servers.list())
Create server (API v2) The following program creates a server (VM) by using the Compute API v2. To create a server Import the following modules: import time from credentials import get_nova_credentials_v2 from novaclient.client import Client Get OpenStack credentials. See . Instantiate the nova_client client object by using the credentials dictionary object: nova_client = Client(**credentials) Get the flavor and image to use to create a server. This code uses the cirros image, the m1.tiny flavor, and the private network: image = nova_client.images.find(name="cirros") flavor = nova_client.flavors.find(name="m1.tiny") net = nova_client.networks.find(label="private") To create the server, use the network, image, and flavor: nics = [{'net-id': net.id}] instance = nova_client.servers.create(name="vm2", image=image, flavor=flavor, key_name="keypair-1", nics=nics) Sleep for five seconds and determine whether the server/vm was created by calling nova_client.servers.list(): print("Sleeping for 5s after create command") time.sleep(5) print("List of VMs") print(nova_client.servers.list()) Create server code listing #!/usr/bin/env python import time from credentials import get_nova_credentials_v2 from novaclient.client import Client try: credentials = get_nova_credentials_v2() nova_client = Client(**credentials) image = nova_client.images.find(name="cirros") flavor = nova_client.flavors.find(name="m1.tiny") net = nova_client.networks.find(label="private") nics = [{'net-id': net.id}] instance = nova_client.servers.create(name="vm2", image=image, flavor=flavor, key_name="keypair-1", nics=nics) print("Sleeping for 5s after create command") time.sleep(5) print("List of VMs") print(nova_client.servers.list()) finally: print("Execution Completed")
Delete server (API v2) The following program deletes a server (VM) by using the Compute API v2. To delete a server Import the following modules: import time from credentials import get_nova_credentials_v2 from novaclient.client import Client Get Nova credentials. See . Instantiate the nova_client client object by using the credentials dictionary object: nova_client = Client(**credentials) Determine whether the vm1 server exists: List servers: servers_list. Iterate over servers_list and compare name with vm1. If true, set the variable name server_exists to True and break from the for loop: servers_list = nova_client.servers.list() server_del = "vm1" server_exists = False for s in servers_list: if s.name == server_del: print("This server %s exists" % server_del) server_exists = True break If the server exists, run the delete method of the nova_client.servers object: nova_client.servers.delete(s) Delete server code listing #!/usr/bin/env python from credentials import get_nova_credentials_v2 from novaclient.client import Client credentials = get_nova_credentials_v2() nova_client = Client(**credentials) servers_list = nova_client.servers.list() server_del = "vm1" server_exists = False for s in servers_list: if s.name == server_del: print("This server %s exists" % server_del) server_exists = True break if not server_exists: print("server %s does not exist" % server_del) else: print("deleting server..........") nova_client.servers.delete(s) print("server %s deleted" % server_del)
Update server (API v2) The following program updates the name of a server (VM) by using the Compute API v2. To update a server Import the following modules: from credentials import get_nova_credentials_v2 from novaclient.client import Client from utils import print_server print_server is a method defined in utils.py and prints the server details as shown in the code listing below: def print_server(server): print("-"*35) print("server id: %s" % server.id) print("server name: %s" % server.name) print("server image: %s" % server.image) print("server flavor: %s" % server.flavor) print("server key name: %s" % server.key_name) print("user_id: %s" % server.user_id) print("-"*35) Get OpenStack Credentials. See . Instantiate the nova_client client object by using the credentials dictionary object: nova_client = Client(**credentials) Get the server instance using server_id and print the details by calling print_server method: server_id = '99889c8d-113f-4a7e-970c-77f1916bfe14' server = nova_client.servers.get(server_id) n = server.name print_server(server) Call server.update on the server object with the new value for name variable: server.update(name = n + '1') Get the updated instance of the server: server_updated = nova_client.servers.get(server_id) Call print_server again to check the update server details: print_server(server_updated) Update server code listing #!/usr/bin/env python from credentials import get_nova_credentials_v2 from novaclient.client import Client from utils import print_server credentials = get_nova_credentials_v2() nova_client = Client(**credentials) # Change the server_id specific to your environment server_id = '99889c8d-113f-4a7e-970c-77f1916bfe14' server = nova_client.servers.get(server_id) n = server.name print_server(server) server.update(name=n +'1') server_updated = nova_client.servers.get(server_id) print_server(server_updated)
List flavors (API v2) The following program lists flavors and their details by using the Compute API v2. To list flavors Import the following modules: from credentials import get_nova_credentials_v2 from novaclient.client import Client from utils import print_flavors The print_flavors method is defined in utils.py and prints the flavor details: def print_flavors(flavor_list): for flavor in flavor_list: print("-"*35) print("flavor id : %s" % flavor.id) print("flavor name : %s" % flavor.name) print("-"*35) Get OpenStack credentials. See . Instantiate the nova_client client object by using the credentials dictionary object: nova_client = Client(**credentials) List flavors by calling list() on nova_client.flavors object: flavors_list = nova_client.flavors.list() Print the flavor details, id and name by calling print_flavors: print_flavors(flavors_list) List flavors code listing #!/usr/bin/env python from credentials import get_nova_credentials_v2 from novaclient.client import Client from utils import print_flavors credentials = get_nova_credentials_v2() nova_client = Client(**credentials) flavors_list = nova_client.flavors.list() print_flavors(flavors_list)
List floating IPs (API v2) The following program lists the floating IPs and their details by using the Compute API v2. To list floating IPs Import the following modules: from credentials import get_nova_credentials_v2 from novaclient.client import Client from utils import print_values_ip The print_values_ip method is defined in utils.py and prints the floating_ip object details: def print_values_ip(ip_list): ip_dict_lisl = [] for ip in ip_list: print("-"*35) print("fixed_ip : %s" % ip.fixed_ip) print("id : %s" % ip.id) print("instance_id : %s" % ip.instance_id) print("ip : %s" % ip.ip) print("pool : %s" % ip.pool) Get OpenStack credentials. See . Instantiate the nova_client client object by using the credentials dictionary object: nova_client = Client(**credentials) List floating IPs by calling list() on nova_client.floating_ips object: ip_list = nova_client.floating_ips.list() Print the floating IP object details by calling print_values_ip: print_values_ip(ip_list) List floating IPs code listing #!/usr/bin/env python from credentials import get_nova_credentials_v2 from novaclient.client import Client from utils import print_values_ip credentials = get_nova_credentials_v2() nova_client = Client(**credentials) ip_list = nova_client.floating_ips.list() print_values_ip(ip_list)
List hosts (API v2) The following program lists the hosts by using the Compute API v2. To list hosts Import the following modules: from credentials import get_nova_credentials_v2 from novaclient.client import Client from utils import print_hosts The print_hosts method is defined in utils.py and prints the host object details: def print_hosts(host_list): for host in host_list: print("-"*35) print("host_name : %s" % host.host_name) print("service : %s" % host.service) print("zone : %s" % host.zone) print("-"*35) Get OpenStack credentials. See . Instantiate the nova_client client object by using the credentials dictionary object: nova_client = Client(**credentials) List hosts by calling list() on nova_client.hosts object: host_list = nova_client.hosts.list() Print the host object details by calling print_hosts(host_list): print_hosts(host_list) List hosts code listing #!/usr/bin/env python from credentials import get_nova_credentials_v2 from novaclient.client import Client from utils import print_hosts credentials = get_nova_credentials_v2() nova_client = Client(**credentials) host_list = nova_client.hosts.list() print_hosts(host_list)