Source code for cloudmesh_client.shell.plugins.InventoryCommand

from __future__ import print_function

from cloudmesh_client.shell.command import command
from cloudmesh_client.shell.console import Console
from cloudmesh_client.cloud.inventory import Inventory
from cloudmesh_client.common.hostlist import Parameter
from cloudmesh_client.locations import config_file

from cloudmesh_client.shell.command import PluginCommand, CloudPluginCommand


# noinspection PyBroadException
[docs]class InventoryCommand(PluginCommand, CloudPluginCommand): topics = {"inventory": "todo"} def __init__(self, context): self.context = context if self.context.debug: print("init command inventory") # TODO: delete row # TODO: add columns # TODO: ATTRIBUTE=VALUE # noinspection PyUnusedLocal @command def do_inventory(self, args, arguments): """ :: Usage: inventory add NAMES [--label=LABEL] [--service=SERVICES] [--project=PROJECT] [--owners=OWNERS] [--comment=COMMENT] [--cluster=CLUSTER] [--ip=IP] inventory set NAMES for ATTRIBUTE to VALUES inventory delete NAMES inventory clone NAMES from SOURCE inventory list [NAMES] [--format=FORMAT] [--columns=COLUMNS] inventory info Arguments: NAMES Name of the resources (example i[10-20]) FORMAT The format of the output is either txt, yaml, dict, table [default: table]. OWNERS a comma separated list of owners for this resource LABEL a unique label for this resource SERVICE a string that identifies the service PROJECT a string that identifies the project SOURCE a single host name to clone from COMMENT a comment Options: -v verbose mode Description: add -- adds a resource to the resource inventory list -- lists the resources in the given format delete -- deletes objects from the table clone -- copies the content of an existing object and creates new once with it set -- sets for the specified objects the attribute to the given value or values. If multiple values are used the values are assigned to the and objects in order. See examples map -- allows to set attibutes on a set of objects with a set of values Examples: cm inventory add x[0-3] --service=openstack adds hosts x0, x1, x2, x3 and puts the string openstack into the service column cm lists lists the repository cm x[3-4] set temperature to 32 sets for the resources x3, x4 the value of the temperature to 32 cm x[7-8] set ip 128.0.0.[0-1] sets the value of x7 to 128.0.0.0 sets the value of x8 to 128.0.0.1 cm clone x[5-6] from x3 clones the values for x5, x6 from x3 """ print(arguments) filename = config_file("/cloudmesh_inventory.yaml") sorted_keys = True if arguments["info"]: i = Inventory() i.read() i.info() elif arguments["list"]: i = Inventory() i.read() if arguments["--columns"]: order = arguments["--columns"].split(",") else: order = i.order print(i.list(format="table", order=order)) elif arguments["NAMES"] is None: Console.error("Please specify a host name") # elif arguments["set"]: # hosts = Parameter.expand_hostlist(arguments["NAMES"]) # i = inventory() # i.read() # element = {} # for attribute in i.order: # try: # attribute = arguments["ATTRIBUTE"] # value = arguments["VALUE"] # if value is not None: # element[attribute] = value # except: # pass # element['host'] = arguments["NAMES"] # i.add(**element) # print (i.list(format="table")) elif arguments["set"]: hosts = Parameter.expand(arguments["NAMES"]) values = Parameter.expand(arguments["VALUES"]) if len(values) == 1: values *= len(hosts) print(hosts) print(values) attribute = arguments["ATTRIBUTE"] if len(hosts) != len(values): Console.error( "Number of names {:} != number of values{:}".format( len(hosts), len(values))) i = Inventory() i.read() for index in range(0, len(hosts)): host = hosts[index] value = values[index] host_object = {'host': host, attribute: value} i.add(**host_object) print(i.list(format="table")) elif arguments["add"]: hosts = Parameter.expand(arguments["NAMES"]) i = Inventory() i.read() element = {} for attribute in i.order: try: value = arguments["--" + attribute] if value is not None: element[attribute] = value except: pass element['host'] = arguments["NAMES"] i.add(**element) print(i.list(format="table")) elif arguments["delete"]: hosts = Parameter.expand(arguments["NAMES"]) i = Inventory() i.read() for host in hosts: del i.data[host] i.save() elif arguments["clone"]: hosts = Parameter.expand(arguments["NAMES"]) source = arguments["SOURCE"] i = Inventory() i.read() if source in i.data: for host in hosts: i.data[host] = dict(i.data[source]) i.save() else: Console.error("The source {:} does not exist".format(source)) return ""