Source code for cloudmesh_client.shell.plugins.ListCommand

from __future__ import print_function

from cloudmesh_client.cloud.list import List
from cloudmesh_client.shell.command import command
from cloudmesh_client.shell.console import Console

from cloudmesh_client.default import Default
from cloudmesh_client.cloud.image import Image
from cloudmesh_client.cloud.flavor import Flavor
from cloudmesh_client.cloud.vm import Vm
from cloudmesh_client.common.ConfigDict import ConfigDict

from cloudmesh_client.shell.command import PluginCommand, CloudPluginCommand


[docs]class ListCommand(PluginCommand, CloudPluginCommand): topics = {"list": "cloud"} def __init__(self, context): self.context = context if self.context.debug: print("init command list") # noinspection PyUnusedLocal @command def do_list(self, args, arguments): """ :: Usage: list [--cloud=CLOUD] [--format=FORMAT] [--user=USER] [--tenant=TENANT] default list [--cloud=CLOUD] [--format=FORMAT] [--user=USER] [--tenant=TENANT] vm list [--cloud=CLOUD] [--format=FORMAT] [--user=USER] [--tenant=TENANT] flavor list [--cloud=CLOUD] [--format=FORMAT] [--user=USER] [--tenant=TENANT] image List the items stored in the database Options: --cloud=CLOUD the name of the cloud --format=FORMAT the output format --tenant=TENANT Name of the tenant, e.g. fg82. Description: List command prints the values stored in the database for [default/vm/flavor/image]. Result can be filtered based on the cloud, user & tenant arguments. If these arguments are not specified, it reads the default Examples: $ list --cloud india default $ list --cloud india --format table flavor $ list --cloud india --user albert --tenant fg82 flavor """ # pprint(arguments) # Method to get the kind from args # # TODO: the kind are defined in the provider, # TODO: keep the kind lower case # why is there a reason to make the gind upper case def get_kind(): for k in ["vm", "image", "flavor", "default"]: if arguments[k]: # kinds are all uppercase in model.py return k.upper() return "help" # Read commandline arguments output_format = arguments['--format'] cloud = arguments['--cloud'] or Default.cloud user = arguments['--user'] tenant = arguments['--tenant'] # If format is not specified, read default if output_format is None: output_format = Default.get(name="format") or "table" # If cloud is not specified, get default if cloud is None: cloud = Default.get(name="cloud") or ConfigDict(filename="cloudmesh.yaml")["cloudmesh"]["active"][0] # If user is not specified, get default if user is None: user = Default.get(name="user") # If tenant is not specified, get default if tenant is None: tenant = Default.get(name="tenant") # Get the kind kind = get_kind() header = None order = None # print help message if kind == 'help': Console.ok("Print help!") return "" # Prepare the order & header based on kind # TODO: use lower case so we have a convention thats easy to follow # TODO: add quota # TODO: add limits # TODO: add usage # # TODO: BUG: use the get attribute from the provider. # TODO:: call the cm xyz list functions and do not # reimplement this here # possibly introduce List.py result = None if kind == 'FLAVOR': result = Flavor.list(cloud, format=output_format) elif kind == 'DEFAULT': result = Default.list(order=order, output=output_format) elif kind == 'IMAGE': result = Image.list(cloud, format=output_format) elif kind == 'VM': result = Vm.list(cloud=cloud, output_format=output_format) if result: print(result) else: Console.error("No {}s found in the database." .format(kind.lower())) return ""