Source code for cloudmesh_client.shell.plugins.LauncherCommand

# -*- coding: utf-8 -*- 
from __future__ import print_function

from pprint import pprint

from cloudmesh_client.cloud.launcher import Launcher
from cloudmesh_client.common.dotdict import dotdict
from cloudmesh_client.default import Default
from cloudmesh_client.shell.command import command, PluginCommand, \
    CloudPluginCommand, CometPluginCommand
from cloudmesh_client.shell.console import Console
from cloudmesh_client.common.hostlist import Parameter
from cloudmesh_client.common.ConfigDict import ConfigDict
from cloudmesh_client.common.Printer import Printer

# Assume we have some kind of file called

# launcher.yml

#which includes so far a single variable

#name: mylauncher


#This is places in a repo called

#cloudmesh/launcher/mylauncher/launcher.yml

#We need a command that adds this to cloudmesh_launcher.yaml

#with the following functionality:

#loudmesh_launcher.yaml


#cm launcher repo add [--name launchera] https://github..../cloudmesh_launcher/test_launcher_a
#cm launcher repo delete --name launchera
#cm launcher repo list
#Reason we need the name is as we also want to be able to integrate bitbucket and others, so name of the file could be duplicated and thus we need to specify
#the actual name in the yaml file and not derive it from the repo name.
#Other ideas to come:
#cm launcher add repo nist_example_fingerprint
#cm launcher execute nist_example_fingerprint —parameters ....
#cm launcher benchmark -n 10 … (same as execute, but repeated 10 times and derive automatically some statistics on the run

"""
cm_launcher.yaml:

meta:
  version: 4.1
  kind: launcher
  filename: /Users/big/.cloudmesh/cm_launcher.yaml
  location: /Users/big/.cloudmesh/cm_launcher.yaml
  prefix: null
cloudmesh:
    repo:
      mylauncher:
          location: "https://github.com/cloudmesh/launcher/mylauncher"
      launcherb:
          location: "https://github.com/cloudmesh_launcher/test_launcher_b"
"""


[docs]class LauncherCommand(PluginCommand, CloudPluginCommand, CometPluginCommand): topics = {"launcher": "todo"} def __init__(self, context): self.context = context if self.context.debug: print("init command launcher") # noinspection PyUnusedLocal @command def do_launcher(self, args, arguments): """ :: Usage: launcher repo add NAME URL launcher repo delete NAME launcher repo list launcher repo launcher list [NAMES] [--cloud=CLOUD] [--format=FORMAT] [--source=db|dir] launcher add NAME SOURCE launcher delete [NAMES] [--cloud=CLOUD] launcher clear launcher run [NAME] launcher resume [NAME] launcher suspend [NAME] launcher refresh launcher log [NAME] launcher status [NAME] Arguments: KEY the name of the launcher Options: --cloud=CLOUD the name of the cloud --format=FORMAT the output format [launcher: table] --all lists all the launcher values Description: Launcher is a command line tool to test the portal launch functionalities through command line. The current launcher values can by listed with --all option:( if you have a launcher cloud specified. You can also add a cloud parameter to apply the command to a specific cloud) launcher list A launcher can be deleted with launcher delete KEY Examples: launcher list --all launcher list --cloud=general launcher delete <KEY> """ print ("AAA") arg = dotdict(arguments) if arg.NAMES is not None: arg.names = Parameter.expand(arg.NAMES) else: arg.names = None if arg.name == ["all"]: arg.names = None arg.cloud = arguments["--cloud"] or Default.cloud arg.output = arguments['--format'] or 'table' arg.source = arguments['--source'] or 'db' print ("BBB") pprint(arg) # arg.cloud = arguments["--cloud"] or Default.cloud # c = arg.list # print ("Hallo {cloud} is list={list}".format(**arg)) # launcher = Launcher(kind=None) if arg.cloud is None: Console.error("Default arg.cloud not set") return result = "" if arguments["repo"] and arguments["list"]: print("repo list") launchers = ConfigDict(filename="cm_launcher.yaml")["cloudmesh"]["repo"] print("repo add") d = {} for name in launchers: location = launchers[name]["location"] d[name] = {"name": name, "location": location} print (Printer.dict_table(d)) return "" elif arguments["repo"] and arguments["add"]: launchers = ConfigDict(filename="cm_launcher.yaml") print("repo add") print(launchers) return "" elif arguments["repo"] and arguments["delete"]: print("repo delete") return "" elif arguments["repo"] and not arguments["list"]: print(arg.names) result = Launcher.list(name=arg.names, output=arg.output) elif arguments["add"]: result = Launcher.add(name=arg.NAME, source=arg.SOURCE) elif arguments["delete"]: # if arg.name is not None: # result = Launcher.delete(name=arg.name, category=arg.cloud) # else: # result = Launcher.delete(name=None) for name in arg.names: result = Launcher.delete(name=name, category=arg.cloud) elif arguments["run"]: result = Launcher.run() elif arguments["resume"]: result = Launcher.resume(name=arg.name) elif arguments["suspend"]: result = Launcher.suspend(name=arg.name) elif arguments["details"]: result = Launcher.details(name=arg.name) elif arguments["clear"]: result = Launcher.clear() elif arguments["refresh"]: result = Launcher.refresh(name=arg.name) print(result)