Source code for cloudmesh_client.shell.plugins.NovaCommand

from __future__ import print_function
import os

from cloudmesh_client.common.Shell import Shell
from cloudmesh_client.logger import LOGGER
from cloudmesh_client.common.Printer import Printer
from cloudmesh_client.cloud.nova import Nova
from cloudmesh_client.cloud.group import Group
from cloudmesh_client.shell.command import command
from cloudmesh_client.shell.console import Console
from cloudmesh_client.default import Default
from cloudmesh_client.cloud.iaas.provider.openstack.CloudProviderOpenstackAPI import \
    set_os_environ
from cloudmesh_client.shell.command import PluginCommand, CloudPluginCommand

log = LOGGER(__file__)


# noinspection PyBroadException
[docs]class NovaCommand(PluginCommand, CloudPluginCommand): topics = {"nova": "cloud"} def __init__(self, context): self.context = context if self.context.debug: print("init command nova") # noinspection PyUnusedLocal @command def do_nova(self, args, arguments): """ :: Usage: nova set CLOUD nova info [CLOUD] [--password] nova help nova [--group=GROUP] ARGUMENTS... A simple wrapper for the openstack nova command Arguments: GROUP The group to add vms to ARGUMENTS The arguments passed to nova help Prints the nova manual set reads the information from the current cloud and updates the environment variables if the cloud is an openstack cloud info the environment values for OS Options: --group=GROUP Add VM to GROUP group --password Prints the password -v verbose mode """ # pprint(arguments) cloud = arguments['CLOUD'] or Default.cloud if not cloud: Console.error("Default cloud not set!") return "" group = arguments["--group"] or Default.group if not group: Console.error("Default group not set!") return "" if arguments["help"]: os.system("nova help") return "" elif arguments["info"]: set_os_environ(cloud) d = {} # # TODO: this naturally does not work as clouds will have # different parameters. ALos it does not unset previous # parameters from other clouds. See register # for attribute in ['OS_USERNAME', 'OS_TENANT_NAME', 'OS_AUTH_URL', 'OS_CACERT', 'OS_PASSWORD', 'OS_REGION']: try: d[attribute] = os.environ[attribute] except: Console.warning("OS environment variable {:} not found" .format(attribute)) d[attribute] = None if not arguments["--password"]: d['OS_PASSWORD'] = "********" print(Printer.row_table(d, order=None, labels=["Variable", "Value"])) msg = "info. OK." Console.ok(msg) return "" elif arguments["set"]: if cloud: set_os_environ(cloud) msg = "{0} is set".format(cloud) Console.ok(msg) else: Console.error("CLOUD is required") else: # nova ARGUMENTS... print("Cloud = {0}".format(cloud)) try: set_os_environ(cloud) args = arguments["ARGUMENTS"] # arguments may contain multiple optional arguments if len(args) == 1: args = args[0].split() result = Shell.execute("nova", args) print (result) # print(Nova.remove_subjectAltName_warning(result)) """ If request for nova boot, add the vm to group specified, or else add to default group """ if "boot" in args: # Logic to find ID of VM in the result fields = [] for field in result.split("|"): fields.append(field.strip()) index = fields.index('id') + 1 vm_id = fields[index] # Add to group Group.add(name=group, species="vm", member=vm_id, category=cloud) except Exception as ex: Console.error("Error executing Nova command: {}".format(ex)) return ""