def setup(self): banner("setup", c="-") self.user = Config()["cloudmesh"]["profile"]["user"] self.clouduser = '******' self.name_generator = Name(experiment="exp", group="grp", user=self.user, kind="vm", counter=1) self.name = str(self.name_generator) self.name_generator.incr() self.new_name = str(self.name_generator) variables = Variables() # this gives the current default cloud cloud = variables['cloud'] # specify the cloud name to make sure this test # is done for the openstack cloud # self.p = Provider(name="chameleon") self.secgroupname = "CM4TestSecGroup" self.secgrouprule = { "ip_protocol": "tcp", "from_port": 8080, "to_port": 8088, "ip_range": "129.79.0.0/16" } self.testnode = None
def setup(self): banner("setup", c="-") self.user = Config()["cloudmesh"]["profile"]["user"] self.clouduser = '******' self.name_generator = Name(experiment="exp", group="grp", user=self.user, kind="vm", counter=1) self.name = str(self.name_generator) self.name_generator.incr() self.new_name = str(self.name_generator) self.p = Provider(name="azure") self.secgroupname = "CM4TestSecGroup" self.secgrouprule = { "ip_protocol": "tcp", "from_port": 8080, "to_port": 8088, "ip_range": "129.79.0.0/16" } self.testnode = None
class Testazure(object): def setup(self): self.p = Provider(name="az") self.vm_name = VM self.group = self.p.credentials["resourcegroup"] self.location = self.p.credentials["location"] def test_config(self): print(self.p.name) print(self.p.kind) print(self.p.credentials) print(self.location) print(self.group) assert self.p.name == "az" def test_login(self): HEADING() r = self.p.login() def test_create_vm(self): HEADING() r = self.p.create( name=self.vm_name, image="UbuntuLTS", username="******") assert r["location"] == 'eastus' def test_list_vm(self): HEADING() r = self.p.list() assert r[0]["name"] == VM def test_ssh_vm(self): HEADING() self.p.ssh(user="******", name=self.vm_name, command="uname -a") def test_connect_vm(self): HEADING() r = self.p.connect(name=self.vm_name, user='******') assert r['status'] == 0 def test_stop_vm(self): HEADING() r = self.p.stop(name=self.vm_name) # time.sleep(100) assert r['status'] == 0 def test_start_vm(self): HEADING() r = self.p.start(name=self.vm_name) # time.sleep(100) assert r['status'] == 0 def test_delete_vm(self): HEADING() r = self.p.delete(name=self.vm_name) assert r['status'] == 0
class Testazure(object): def setup(self): self.p = Provider(name=CLOUD) self.name = VM self.group = "test" self.location = "eastus" def test_login(self): HEADING() r = self.p.login() def test_create_vm(self): HEADING() r = self.p.create_vm(resource_group=self.group, name=self.name, image="UbuntuLTS", username="******") assert r["location"] == 'eastus' def test_list_vm(self): HEADING() r = self.p.list_vm(resource_group=self.group) assert r[0]["name"] == VM def test_04_ssh_vm(self): HEADING() self.p.ssh_vm(user="******", resource_group=self.group, name=self.name, command="uname -a") def test_connect_vm(self): HEADING() r = self.p.connect_vm(resource_group=self.group, name=self.name, user='******') assert r['status'] == 0 def test_stop_vm(self): HEADING() r = self.p.stop_vm(resource_group=self.group, name=self.name) # time.sleep(100) assert r['status'] == 0 def test_start_vm(self): HEADING() r = self.p.start_vm(resource_group=self.group, name=self.name) # time.sleep(100) assert r['status'] == 0 def test_delete_vm(self): HEADING() r = self.p.delete_vm(resource_group=self.group, name=self.name) assert r['status'] == 0 def test_benchmark(self): Benchmark.print(csv=True, sysinfo=False, tag=CLOUD)
def setup(self): banner("setup", c="-") self.user = Config()["cloudmesh.profile.user"] self.key_path = path_expand( Config()["cloudmesh"]["profile"]["publickey"]) f = open(self.key_path, 'r') self.key_val = f.read() self.clouduser = '******' self.name_generator = Name(schema=f"{self.user}-vm", counter=1) self.name = str(self.name_generator) self.name_generator.incr() self.new_name = str(self.name_generator) self.p = GCloudProvider(name="google") self.secgroupname = "CM4TestSecGroup" self.secgrouprule = { "ip_protocol": "tcp", "from_port": 8080, "to_port": 8088, "ip_range": "129.79.0.0/16" } self.testnode = None
def setup(self): banner("setup", c="-") self.user = Config()["cloudmesh.profile.user"] self.clouduser = '******' self.name_generator = Name( schema=f"{self.user}-vm", counter=1) self.name = str(self.name_generator) self.name_generator.incr() self.new_name = str(self.name_generator) self.p = Provider(name=CLOUD) self.secgroupname = "CM4TestSecGroup" self.secgrouprule = {"ip_protocol": "tcp", "from_port": 8080, "to_port": 8088, "ip_range": "129.79.0.0/16"} self.testnode = None
def __init__(self, name=None, configuration="~/.cloudmesh/.cloudmesh4.yaml"): self.kind = Config( configuration)["cloudmesh"]["cloud"][name]["cm"]["kind"] self.name = name Console.msg("FOUND Kind", self.kind) if self.kind in ["openstack"]: self.p = LibCloudProvider(name=name, configuration=configuration) print(self.p) # print (self.p.kind) print(self.kind)
class TestName: def setup(self): banner("setup", c="-") self.user = Config()["cloudmesh"]["profile"]["user"] self.clouduser = '******' self.name_generator = Name(experiment="exp", group="grp", user=self.user, kind="vm", counter=1) self.name = str(self.name_generator) self.name_generator.incr() self.new_name = str(self.name_generator) self.p = Provider(name="azure") self.secgroupname = "CM4TestSecGroup" self.secgrouprule = { "ip_protocol": "tcp", "from_port": 8080, "to_port": 8088, "ip_range": "129.79.0.0/16" } self.testnode = None def test_00_show_conf(self): HEADING() pprint(self.p.user) pprint(self.p.cloudtype) pprint(self.p.spec) def test_03_list_flavors(self): HEADING() flavors = self.p.flavors() #pprint(flavors) print( Printer.flatwrite( flavors, sort_keys=("name", "ram", "disk", "extra.numberOfCores", "price"), order=["name", "ram", "disk", "extra.numberOfCores", "price"], header=["Name", "ram (MB)", "disk (GB)", "Cores", "price"])) """ {'bandwidth': 0, 'cm': {'cloud': 'azure', 'created': '2019-04-02 18:22:54.929946', 'driver': 'openstack', 'kind': 'flavor', 'name': 'Standard_L4s'}, 'disk': 678.0, 'extra': {'maxDataDiskCount': 16, 'numberOfCores': 4, 'osDiskSizeInMB': 1047552}, 'id': 'Standard_L4s', 'name': 'Standard_L4s', 'price': 0, 'ram': 32768, 'updated': '2019-04-02 18:22:54.929946'}, """ def test_04_list_vm(self): HEADING() vms = self.p.list() #pprint(vms) #''' print( Printer.flatwrite( vms, sort_keys=("name"), order=[ "name", "state", "extra.properties.hardwareProfile.vmSize", "extra.properties.storageProfile.imageReference.sku", "extra.properties.storageProfile.osDisk.osType", "extra.properties.storageProfile.osDisk.diskSizeGB", "extra.properties.osProfile.adminUsername", "private_ips", "public_ips" ], header=[ "Name", "State", "vmSize", "Image", "OS Type", "Disk (GB)", "Admin User", "Private ips", "Public ips" ]))
class TestName: def setup(self): banner("setup", c="-") self.user = Config()["cloudmesh"]["profile"]["user"] self.clouduser = '******' self.name_generator = Name(experiment="exp", group="grp", user=self.user, kind="vm", counter=1) self.name = str(self.name_generator) self.name_generator.incr() self.new_name = str(self.name_generator) variables = Variables() cloud = variables['cloud'] self.p = Provider(name=cloud) self.secgroupname = "CM4TestSecGroup" self.secgrouprule = { "ip_protocol": "tcp", "from_port": 8080, "to_port": 8088, "ip_range": "129.79.0.0/16" } self.testnode = None def test_001_list_keys(self): HEADING() pprint(self.p.user) pprint(self.p.cloudtype) pprint(self.p.spec) def test_01_list_keys(self): HEADING() self.keys = self.p.keys() # pprint(self.keys) print( Printer.flatwrite(self.keys, sort_keys=["name"], order=["name", "fingerprint"], header=["Name", "Fingerprint"])) def test_02_key_upload(self): HEADING() key = SSHkey() print(key.__dict__) self.p.key_upload(key) self.test_01_list_keys() def test_03_list_images(self): HEADING() images = self.p.images() # pprint(images) print( Printer.flatwrite( images, sort_keys=["name", "extra.minDisk"], order=["name", "extra.minDisk", "updated", "driver"], header=["Name", "MinDisk", "Updated", "Driver"])) def test_04_list_flavors(self): HEADING() flavors = self.p.flavors() # pprint (flavors) print( Printer.flatwrite(flavors, sort_keys=["name", "vcpus", "disk"], order=["name", "vcpus", "ram", "disk"], header=["Name", "VCPUS", "RAM", "Disk"])) def test_04_list_vm(self): HEADING() vms = self.p.list() # pprint (vms) print( Printer.flatwrite(vms, sort_keys=("name"), order=[ "name", "state", "extra.task_state", "extra.vm_state", "extra.userId", "extra.key_name", "private_ips", "public_ips" ], header=[ "Name", "State", "Task state", "VM state", "User Id", "SSHKey", "Private ips", "Public ips" ])) def test_05_list_secgroups(self): HEADING() secgroups = self.p.list_secgroups() for secgroup in secgroups: print(secgroup["name"]) rules = self.p.list_secgroup_rules(secgroup["name"]) print( Printer.write( rules, sort_keys=("ip_protocol", "from_port", "to_port", "ip_range"), order=["ip_protocol", "from_port", "to_port", "ip_range"], header=["ip_protocol", "from_port", "to_port", "ip_range"])) def test_06_secgroups_add(self): HEADING() self.p.add_secgroup(self.secgroupname) self.test_05_list_secgroups() def test_07_secgroup_rules_add(self): HEADING() rules = [self.secgrouprule] self.p.add_rules_to_secgroup(self.secgroupname, rules) self.test_05_list_secgroups() def test_08_secgroup_rules_remove(self): HEADING() rules = [self.secgrouprule] self.p.remove_rules_from_secgroup(self.secgroupname, rules) self.test_05_list_secgroups() def test_09_secgroups_remove(self): HEADING() self.p.remove_secgroup(self.secgroupname) self.test_05_list_secgroups() def test_10_create(self): HEADING() image = "CC-Ubuntu16.04" size = "m1.medium" self.p.create( name=self.name, image=image, size=size, # username as the keypair name based on # the key implementation logic ex_keyname=self.user, ex_security_groups=['default']) time.sleep(5) nodes = self.p.list() node = self.p.find(nodes, name=self.name) pprint(node) nodes = self.p.list(raw=True) for node in nodes: if node.name == self.name: self.testnode = node break assert node is not None def test_11_publicIP_attach(self): HEADING() pubip = self.p.get_publicIP() pprint(pubip) nodes = self.p.list(raw=True) for node in nodes: if node.name == self.name: self.testnode = node break if self.testnode: print("attaching public IP...") self.p.attach_publicIP(self.testnode, pubip) time.sleep(5) self.test_04_list_vm() def test_12_publicIP_detach(self): HEADING() print("detaching and removing public IP...") time.sleep(5) nodes = self.p.list(raw=True) for node in nodes: if node.name == self.name: self.testnode = node break ipaddr = self.testnode.public_ips[0] pubip = self.p.cloudman.ex_get_floating_ip(ipaddr) self.p.detach_publicIP(self.testnode, pubip) time.sleep(5) self.test_04_list_vm() # def test_11_printer(self): # HEADING() # nodes = self.p.list() # print(Printer.write(nodes, order=["name", "image", "size"])) # def test_01_start(self): # HEADING() # self.p.start(name=self.name) # def test_12_list_vm(self): # self.test_04_list_vm() def test_13_info(self): HEADING() self.p.info(name=self.name) def test_14_destroy(self): HEADING() self.p.destroy(names=self.name) nodes = self.p.list() node = self.p.find(nodes, name=self.name) pprint(node) assert node["extra"]["task_state"] == "deleting" def test_15_list_vm(self): HEADING() self.test_04_list_vm() def test_16_vm_login(self): HEADING() self.test_04_list_vm() self.test_10_create() # use the self.testnode for this test time.sleep(30) self.test_11_publicIP_attach() time.sleep(5) nodes = self.p.list(raw=True) for node in nodes: if node.name == self.name: self.testnode = node break # pprint (self.testnode) # pprint (self.testnode.public_ips) pubip = self.testnode.public_ips[0] command = "cat /etc/*release*" ssh = subprocess.Popen( ["ssh", "%s@%s" % (self.clouduser, pubip), command], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) result = ssh.stdout.readlines() if result == []: error = ssh.stderr.readlines() print("ERROR: %s" % error) else: print("RESULT:") for line in result: line = line.decode("utf-8") print(line.strip("\n")) self.test_14_destroy() self.test_04_list_vm()
def do_key(self, args, arguments): """ :: Usage: key -h | --help key list --cloud=CLOUDS [--format=FORMAT] key list --source=ssh [--dir=DIR] [--format=FORMAT] key list --source=git [--format=FORMAT] [--username=USERNAME] key list [NAMES] [--format=FORMAT] key load --filename=FILENAME [--format=FORMAT] key add [NAME] [--source=FILENAME] key add [NAME] [--source=git] key add [NAME] [--source=ssh] key get NAME [--format=FORMAT] key default --select key delete (NAMES | --select | --all) [--dryrun] key delete NAMES --cloud=CLOUDS [--dryrun] key upload [NAMES] [--cloud=CLOUDS] [--dryrun] key upload [NAMES] [VMS] [--dryrun] key group upload [--group=GROUPNAMES] [--cloud=CLOUDS] [--dryrun] key group add [--group=GROUPNAMES] [--cloud=CLOUDS] [--dryrun] key group add --file=FILENAME key group delete [--group=GROUPNAMES] [NAMES] [--dryrun] key group list [--group=GROUPNAMES] [--format=FORMAT] key group export --group=GROUNAMES --filename=FILENAME Arguments: VMS Para,eterized list of virtual machines CLOUDS The clouds NAME The name of the key. SOURCE db, ssh, all KEYNAME The name of a key. For key upload it defaults to the default key name. FORMAT The format of the output (table, json, yaml) FILENAME The filename with full path in which the key is located Options: --dir=DIR the directory with keys [default: ~/.ssh] --format=FORMAT the format of the output [default: table] --source=SOURCE the source for the keys [default: cm] --username=USERNAME the source for the keys [default: none] --name=KEYNAME The name of a key Description: Please note that some values are read from the cloudmesh4.yaml file. One such value is cloudmesh.profile.user Manages public keys is an essential component of accessing virtual machine sin the cloud. There are a number of sources where you can find public keys. This includes teh ~/.ssh directory and for example github. To list these keys the following list functions are provided. key list --source=git [--username=USERNAME] lists all keys in git for the specified user. If the name is not specified it is read from cloudmesh4.yaml key list --source=ssh [--dir=DIR] [--format=FORMAT] lists all keys in the directory. If the directory is not specified the default will be ~/.ssh key list NAMES lists all keys in the named virtual machines. The keys will be uploaded into cloudmesh with the add command under the given name. If the name is not specified the name cloudmesh.profile.user is assumed. key add --ssh adds the default key in ~/.ssh/id_rsa.pub key add NAME --source=FILENAME adds the key specifid by the filename with the given name key add NAME --git --username=username adds a named github key from a user with the given github username. Once the keys are uploaded to github, they can be listed key list [NAME] [--format=FORMAT] list the keys loaded to cloudmesh in the giiven format: json, yaml, table. table is default. The NAME cabn be specified and if ommitted the name cloudmesh.profile.user is assumed. key get NAME Retrieves the key indicated by the NAME parameter from cloudmesh and prints its details. key default --select Select the default key interactively key delete NAMES deletes the keys. This may also have an impact on groups key rename NAME NEW renames the key from NAME to NEW. Group management of keys is an important concept in cloudmesh, allowing multiple users to be added to virtual machines. The keys must be uploaded to cloudmesh with a name so they can be used in a group. The --dryrun option executes the command without uploading the information to the clouds. If no groupname is specified the groupname default is assumed. If no cloudnames are specified, all active clouds are assumed. active clouds can be set in the cloudmesh4.yaml file. key group delete [GROUPNAMES] [NAMES] [--dryrun] deletes the named keys from the named groups. key group list [GROUPNAMES] [--format=FORMAT] list the key names and details in the group. key group upload [GROUPNAMES] [CLOUDS] [--dryrun] uploads the named groups to the specified clouds. In some cases you may want to store the public keys in files. For this reason we support the following commands. key group add --group=GROUPNAME --file=FILENAME the command adds the keys to the given group. The keys are written in the files in yaml format. key group export --group=GROUNAMES --filename=FILENAME the command exports the keys to the given group. The keys are written in the files in yaml format. The yaml format is as follows: cloudmesh: keys: NAMEOFKEY: name: NAMEOFKEY key: ssh-rsa AAAA..... comment group: - GROUPNAME ... If a key is included in multiple groups they will be added to the grouplist of the key """ arguments.cloud = arguments['--cloud'] arguments.format = arguments['--format'] arguments.source = arguments['--source'] arguments.dir = arguments['--dir'] pprint(arguments) invalid_names = ['tbd', 'none', "", 'id_rsa'] m = Manager() if arguments.list and arguments.source == "git": # this is much simpler config = Config() username = config["cloudmesh.profile.github"] print("Username:"******"name"], order=["id", "name", "fingerprint", "source"], header=["Id", "Name", "Fingerprint", "Source"])) return "" elif arguments.list and arguments.source == "ssh": # this is much simpler sshkey = SSHkey() print( Printer.flatwrite( [sshkey], sort_keys=["name"], order=["name", "type", "fingerprint", "comment"], header=["Name", "Type", "Fingerprint", "Comment"])) return "" elif arguments.list and arguments.cloud: clouds = Parameter.expand(arguments.cloud) print(clouds) if len(clouds) == 0: variables = Variables() cloudname = variables['cloud'] clouds = [cloudname] cloudkey = [] for cloud in clouds: print(cloud) provider = Provider(clouds) cloudkey.append(provider.keys()) print( Printer.flatwrite( [cloudkey], sort_keys=["name"], order=["name", "type", "fingerprint", "comment"], header=["Name", "Type", "Fingerprint", "Comment"])) return "" elif arguments.list and arguments.source == "db": if arguments.NAMES: names = Parameter.expand(arguments.NAMES) print("find the keys of the following vms", names) print("the keys will be read from mongo") return "" return ""
def setup(self): self.p = Provider(name=CLOUD) self.name = VM self.group = "test" self.location = "eastus"
def setup(self): self.p = Provider(name="az") self.vm_name = VM self.group = self.p.credentials["resourcegroup"] self.location = self.p.credentials["location"]
class TestName: def setup(self): banner("setup", c="-") self.user = Config()["cloudmesh.profile.user"] self.key_path = path_expand( Config()["cloudmesh"]["profile"]["publickey"]) f = open(self.key_path, 'r') self.key_val = f.read() self.clouduser = '******' self.name_generator = Name(schema=f"{self.user}-vm", counter=1) self.name = str(self.name_generator) self.name_generator.incr() self.new_name = str(self.name_generator) self.p = GCloudProvider(name="google") self.secgroupname = "CM4TestSecGroup" self.secgrouprule = { "ip_protocol": "tcp", "from_port": 8080, "to_port": 8088, "ip_range": "129.79.0.0/16" } self.testnode = None def test_list_keys(self): HEADING() print("List Key Method is not supported by google") def test_key_upload(self): HEADING() print("Upload Key method is not supported by google") def test_list_images(self): HEADING() images = self.p.images() print( Printer.flatwrite(images, sort_keys=("name"), order=["name", "id", "driver"], header=["Name", "Id", "Driver"])) def test_list_flavors(self): HEADING() flavors = self.p.flavors() print( Printer.flatwrite(flavors, sort_keys=("name", "disk"), order=["name", "id", "ram", "disk"], header=["Name", "Id", "RAM", "Disk"])) def test_list_vm(self): HEADING() vms = self.p.list() print( Printer.flatwrite(vms, sort_keys=("name"), order=[ "name", "state", "extra.task_state", "extra.vm_state", "extra.userId", "extra.key_name", "private_ips", "public_ips" ], header=[ "Name", "State", "Task state", "VM state", "User Id", "SSHKey", "Private ips", "Public ips" ])) def test_list_secgroups(self): HEADING() print("List security group method is not supported by google") def test_secgroups_add(self): print("List add security groups method is not supported by google") def test_secgroup_rules_add(self): print( "List Add security group rules method is not supported by google") def test_secgroup_rules_remove(self): print("Remove security group rules method is not supported by google") def test_secgroups_remove(self): print("Remove security groups method is not supported by google") def test_create(self): HEADING() image = "ubuntu-minimal-1810-cosmic-v20190402" size = "n1-standard-4" location = "us-central1-a" self.p.create(name=self.name, image=image, size=size, location=location) nodes = self.p.list() node = self.p.find(nodes, name=self.name) nodes = self.p.list(raw=True) for node in nodes: if node.name == self.name: self.testnode = node break assert node is not None def test_publicIP_attach(self): HEADING() print("Attach Public IP method is not supported by google") def test_publicIP_detach(self): print("Detach Public IP method is not supported by google") def test_info(self): HEADING() self.p.info(name=self.name) def test_stop(self): HEADING() try: self.p.stop(names=self.name) self.test_list_vm() except: self.test_list_vm() def test_list(self): HEADING() self.test_list_vm() def test_start(self): HEADING() self.p.start(names=self.name) self.test_list_vm() def test_destroy(self): HEADING() try: self.p.stop(names=self.name) self.test_list_vm() except: self.test_list_vm() self.p.destroy(names=self.name) nodes = self.p.list() node = self.p.find(nodes, name=self.name) assert node is None def test_vm_login(self): HEADING() self.test_list_vm() self.test_create() self.p.ssh(name=self.name, command="cat /etc/*release*") try: self.p.stop(names=self.name) self.test_list_vm() except: self.test_list_vm() self.p.destroy(names=self.name)
class TestName: def setup(self): banner("setup", c="-") self.user = Config()["cloudmesh.profile.user"] self.clouduser = '******' self.name_generator = Name( schema=f"{self.user}-vm", counter=1) self.name = str(self.name_generator) self.name_generator.incr() self.new_name = str(self.name_generator) self.p = Provider(name=CLOUD) self.secgroupname = "CM4TestSecGroup" self.secgrouprule = {"ip_protocol": "tcp", "from_port": 8080, "to_port": 8088, "ip_range": "129.79.0.0/16"} self.testnode = None def test_list_keys(self): HEADING() pprint(self.p.user) pprint(self.p.cloudtype) pprint(self.p.spec) def test_list_keys(self): HEADING() self.keys = self.p.keys() # pprint(self.keys) print(Printer.flatwrite(self.keys, sort_keys=["name"], order=["name", "fingerprint"], header=["Name", "Fingerprint"]) ) def test_key_upload(self): HEADING() key = SSHkey() print(key.__dict__) self.p.key_upload(key) self.test_01_list_keys() def test_list_flavors(self): HEADING() flavors = self.p.flavors() pprint(flavors) print(Printer.flatwrite(flavors, sort_keys=[ "name", "extra.vcpu", "extra.memory", "price"], order=["name", "extra.vcpu", "extra.memory", "extra.clockSpeed", "price"], header=["Name", "VCPUS", "RAM", "Speed", "Price"]) ) """ {'bandwidth': None, 'cloud': 'aws', 'created': '2019-02-22 19:27:54.965053', 'disk': 0, 'driver': 'aws', 'extra': {'clockSpeed': 'Up to 3.0 GHz', 'currentGeneration': 'Yes', 'ecu': 'Variable', 'instanceFamily': 'General purpose', 'instanceType': 't2.xlarge', 'memory': '16 GiB', 'networkPerformance': 'Moderate', 'normalizationSizeFactor': '8', 'physicalProcessor': 'Intel Xeon Family', 'processorArchitecture': '64-bit', 'processorFeatures': 'Intel AVX; Intel Turbo', 'servicecode': 'AmazonEC2', 'servicename': 'Amazon Elastic Compute Cloud', 'storage': 'EBS only', 'vcpu': '4'}, 'id': 't2.xlarge', 'kind': 'flavor', 'name': 't2.xlarge', 'price': 0.188, 'ram': 16384, 'updated': '2019-02-22 19:27:54.965053'}, """ def test_list_vm(self): HEADING() vms = self.p.list() pprint(vms) print(Printer.flatwrite(vms, sort_keys=["name"], order=["name", "state", "extra.task_state", "extra.vm_state", "extra.userId", "extra.key_name", "private_ips", "public_ips"], header=["Name", "State", "Task state", "VM state", "User Id", "SSHKey", "Private ips", "Public ips"]) ) def test_list_secgroups(self): HEADING() secgroups = self.p.list_secgroups() for secgroup in secgroups: print(secgroup["name"]) rules = self.p.list_secgroup_rules(secgroup["name"]) print(Printer.write(rules, sort_keys=["ip_protocol", "from_port", "to_port", "ip_range"], order=["ip_protocol", "from_port", "to_port", "ip_range"], header=["ip_protocol", "from_port", "to_port", "ip_range"]) ) def test_secgroups_add(self): self.p.add_secgroup(self.secgroupname) self.test_05_list_secgroups() def test_secgroup_rules_add(self): rules = [self.secgrouprule] self.p.add_rules_to_secgroup(self.secgroupname, rules) self.test_05_list_secgroups() def test_secgroup_rules_remove(self): rules = [self.secgrouprule] self.p.remove_rules_from_secgroup(self.secgroupname, rules) self.test_05_list_secgroups() def test_secgroups_remove(self): self.p.remove_secgroup(self.secgroupname) self.test_05_list_secgroups() def test_create(self): HEADING() image = "CC-Ubuntu16.04" size = "m1.medium" self.p.create(name=self.name, image=image, size=size, # username as the keypair name based on # the key implementation logic ex_keyname=self.user, ex_security_groups=['default']) time.sleep(5) nodes = self.p.list() node = self.p.find(nodes, name=self.name) pprint(node) nodes = self.p.list(raw=True) for node in nodes: if node.name == self.name: self.testnode = node break assert node is not None def test_publicip_attach(self): HEADING() pubip = self.p.get_public_ip() pprint(pubip) nodes = self.p.list(raw=True) for node in nodes: if node.name == self.name: self.testnode = node break if self.testnode: print("attaching public IP...") self.p.attach_publicIP(self.testnode, pubip) time.sleep(5) self.test_04_list_vm() def test_publicip_detach(self): print("detaching and removing public IP...") time.sleep(5) nodes = self.p.list(raw=True) for node in nodes: if node.name == self.name: self.testnode = node break ipaddr = self.testnode.public_ips[0] pubip = self.p.cloudman.ex_get_floating_ip(ipaddr) self.p.detach_publicIP(self.testnode, pubip) time.sleep(5) self.test_04_list_vm() # def test_11_printer(self): # HEADING() # nodes = self.p.list() # print(Printer.write(nodes, order=["name", "image", "size"])) # def test_01_start(self): # HEADING() # self.p.start(name=self.name) # def test_12_list_vm(self): # self.test_04_list_vm() def test_info(self): HEADING() self.p.info(name=self.name) def test_destroy(self): HEADING() self.p.destroy(names=self.name) nodes = self.p.list() node = self.p.find(nodes, name=self.name) pprint(node) assert node["extra"]["task_state"] == "deleting" def test_list_vm(self): self.test_04_list_vm() def test_vm_login(self): self.test_04_list_vm() self.test_10_create() # use the self.testnode for this test time.sleep(30) self.test_11_publicIP_attach() time.sleep(5) nodes = self.p.list(raw=True) for node in nodes: if node.name == self.name: self.testnode = node break # pprint (self.testnode) # pprint (self.testnode.public_ips) pubip = self.testnode.public_ips[0] COMMAND = "cat /etc/*release*" ssh = subprocess.Popen( ["ssh", "%s@%s" % (self.clouduser, pubip), COMMAND], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) result = ssh.stdout.readlines() if result == []: error = ssh.stderr.readlines() print("ERROR: %s" % error) else: print("RESULT:") for line in result: line = line.decode("utf-8") print(line.strip("\n")) self.test_14_destroy() self.test_04_list_vm() def test_benchmark(self): Benchmark.print(csv=True, sysinfo=False, tag=CLOUD)
class TestName: def setup(self): banner("setup", c="-") self.user = Config()["cloudmesh.profile.user"] self.clouduser = '******' self.name_generator = Name( schema=f"{self.user}-vm", counter=1) self.name = str(self.name_generator) self.name_generator.incr() self.new_name = str(self.name_generator) self.p = Provider(name=CLOUD) self.secgroupname = "CM4TestSecGroup" self.secgrouprule = {"ip_protocol": "tcp", "from_port": 8080, "to_port": 8088, "ip_range": "129.79.0.0/16"} self.testnode = None def test_show_conf(self): HEADING() pprint(self.p.user) pprint(self.p.cloudtype) pprint(self.p.spec) def test_list_flavors(self): HEADING() flavors = self.p.flavors() # pprint(flavors) print(Printer.flatwrite(flavors, sort_keys=[ "name", "ram", "disk", "extra.numberOfCores", "price"], order=["name", "ram", "disk", "extra.numberOfCores", "price"], header=["Name", "ram (MB)", "disk (GB)", "Cores", "price"]) ) """ {'bandwidth': 0, 'cm': {'cloud': 'azure', 'created': '2019-04-02 18:22:54.929946', 'driver': 'openstack', 'kind': 'flavor', 'name': 'Standard_L4s'}, 'disk': 678.0, 'extra': {'maxDataDiskCount': 16, 'numberOfCores': 4, 'osDiskSizeInMB': 1047552}, 'id': 'Standard_L4s', 'name': 'Standard_L4s', 'price': 0, 'ram': 32768, 'updated': '2019-04-02 18:22:54.929946'}, """ def test_list_vm(self): HEADING() vms = self.p.list() # pprint(vms) # TODO: bug th eprint function is not implemented # print (self.p.Print(vms, kind="vm")) # ''' print(Printer.flatwrite(vms, sort_keys=["name"], order=["name", "state", "extra.properties.hardwareProfile.vmSize", "extra.properties.storageProfile.imageReference.sku", "extra.properties.storageProfile.osDisk.osType", "extra.properties.storageProfile.osDisk.diskSizeGB", "extra.properties.osProfile.adminUsername", "private_ips", "public_ips"], header=["Name", "State", "vmSize", "Image", "OS Type", "Disk (GB)", "Admin User", "Private ips", "Public ips"]) ) # ''' def test_list_images(self): HEADING() publishername = 'Canonical' offername = 'UbuntuServer' skuname = '18.04-LTS' images = self.p.images(raw=False, publisher=publishername, offer=offername, sku=skuname) # pprint (images) print(Printer.flatwrite(images, sort_keys=["id", "name"], order=["name", "id", 'version'], header=["Name", "id", 'Version']) ) # TODO: bug th eprint function is not implemented # print (self.p.Print(images, kind="image")) """ {'cloud': 'azure', 'driver': 'azure_asm', 'extra': {'affinity_group': '', 'category': 'Public', 'description': '<p>Visual Studio Community 2015 Update 3 is our ' 'free, full featured and extensible IDE for ' 'non-enterprise application development. This image ' 'contains Windows Server 2012 R2 with Visual Studio ' 'Community 2015 Update 3. It allows you to easily ' 'and quickly set up a development environment in ' 'Azure to build and test applications using Visual ' 'Studio.</p><p>This image was created from the ' 'latest bits available on 8/20/2018.</p><p>The ' 'Visual Studio software is preinstalled in this VM, ' 'but you must acquire a Visual Studio subscription ' 'separately which allows you to sign in to and run ' 'Visual Studio on this VM.</p>', 'location': 'Southeast Asia;Australia East;Australia ' 'Southeast;Brazil South;Canada Central;North ' 'Europe;West Europe;Central India;South India;West ' 'India;Japan East;Japan West;UK South;UK West;Central ' 'US;South Central US;West US 2;West Central US', 'media_link': '', 'os': 'Windows', 'vm_image': False}, 'id': '03f55de797f546a1b29d1b8d66be687a__VS-2015-Comm-VSU3-AzureSDK-29-WS2012R2-2018-08-20', 'kind': 'image', 'name': 'Visual Studio Community 2015 Update 3 with Azure SDK 2.9 on Windows ' 'Server 2012 R2'}, """ # ''' def test_create(self): HEADING() image = "Canonical:UbuntuServer:18.04-LTS:18.04.201903200" size = "Standard_B1s" resgroup = 'xxx' storage_account = 'xxx' blob_container = 'xxx' network = 'xxx' subnet = 'xxx' sshpubkey = 'ssh-rsa YOUR_KEY_STRING' self.p.create(name=self.name, image=image, size=size, sshpubkey=sshpubkey, resource_group=resgroup, storage_account=storage_account, blob_container=blob_container, network=network, subnet=subnet) time.sleep(5) nodes = self.p.list() node = self.p.find(nodes, name=self.name) pprint(node) nodes = self.p.list(raw=True) for node in nodes: if node.name == self.name: self.testnode = node break assert node is not None # ''' def test_list_keys(self): HEADING() self.keys = self.p.keys() # pprint(self.keys) print(Printer.flatwrite(self.keys, sort_keys=["name"], order=["name", "fingerprint"], header=["Name", "Fingerprint"]) ) def test_key_upload(self): HEADING() key = SSHkey() print(key.__dict__) self.p.key_upload(key) self.test_list_keys() def test_list_secgroups(self): HEADING() secgroups = self.p.list_secgroups() for secgroup in secgroups: print(secgroup["name"]) rules = self.p.list_secgroup_rules(secgroup["name"]) print(Printer.write(rules, sort_keys=[ "ip_protocol", "from_port", "to_port", "ip_range"], order=["ip_protocol", "from_port", "to_port", "ip_range"], header=["ip_protocol", "from_port", "to_port", "ip_range"]) ) def test_secgroups_add(self): self.p.add_secgroup(self.secgroupname) self.test_list_secgroups() def test_secgroup_rules_add(self): rules = [self.secgrouprule] self.p.add_rules_to_secgroup(self.secgroupname, rules) self.test_list_secgroups() def test_secgroup_rules_remove(self): rules = [self.secgrouprule] self.p.remove_rules_from_secgroup(self.secgroupname, rules) self.test_list_secgroups() def test_secgroups_remove(self): self.p.remove_secgroup(self.secgroupname) self.test_list_secgroups() def test_publicIP_attach(self): HEADING() pubip = self.p.get_public_ip() pprint(pubip) nodes = self.p.list(raw=True) for node in nodes: if node.name == self.name: self.testnode = node break if self.testnode: print("attaching public IP...") self.p.attach_publicIP(self.testnode, pubip) time.sleep(5) self.test_list_vm() def test_publicIP_detach(self): print("detaching and removing public IP...") time.sleep(5) nodes = self.p.list(raw=True) for node in nodes: if node.name == self.name: self.testnode = node break ipaddr = self.testnode.public_ips[0] pubip = self.p.cloudman.ex_get_floating_ip(ipaddr) self.p.detach_publicIP(self.testnode, pubip) time.sleep(5) self.test_list_vm() # def test_11_printer(self): # HEADING() # nodes = self.p.list() # print(Printer.write(nodes, order=["name", "image", "size"])) # def test_start(self): # HEADING() # self.p.start(name=self.name) # def test_12_list_vm(self): # self.test_list_vm() def test_info(self): HEADING() self.p.info(name=self.name) def test_destroy(self): HEADING() self.p.destroy(names=self.name) nodes = self.p.list() node = self.p.find(nodes, name=self.name) pprint(node) assert node["extra"]["task_state"] == "deleting" def test_list_vm(self): self.test_list_vm() def test_vm_login(self): self.test_list_vm() self.test_10_create() # use the self.testnode for this test time.sleep(30) self.test_11_publicIP_attach() time.sleep(5) nodes = self.p.list(raw=True) for node in nodes: if node.name == self.name: self.testnode = node break # pprint (self.testnode) # pprint (self.testnode.public_ips) pubip = self.testnode.public_ips[0] COMMAND = "cat /etc/*release*" ssh = subprocess.Popen( ["ssh", "%s@%s" % (self.clouduser, pubip), COMMAND], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) result = ssh.stdout.readlines() if result == []: error = ssh.stderr.readlines() print("ERROR: %s" % error) else: print("RESULT:") for line in result: line = line.decode("utf-8") print(line.strip("\n")) self.test_destroy() self.test_list_vm() def test_benchmark(self): Benchmark.print(csv=True, sysinfo=False, tag=CLOUD)
class Provider(object): def __init__(self, name=None, configuration="~/.cloudmesh/.cloudmesh4.yaml"): self.kind = Config( configuration)["cloudmesh"]["cloud"][name]["cm"]["kind"] self.name = name Console.msg("FOUND Kind", self.kind) if self.kind in ["openstack"]: self.p = LibCloudProvider(name=name, configuration=configuration) print(self.p) # print (self.p.kind) print(self.kind) def cloudname(self): return self.name @DatabaseUpdate() def keys(self): return self.p.keys() @DatabaseUpdate() def list(self): return self.p.list() def add_colection(self, d, *args): if d is None: return None label = '-'.join(args) for entry in d: entry['collection'] = label return d @DatabaseUpdate() def images(self): return self.p.images() # name # cloud # kind @DatabaseUpdate() def flavors(self): return self.p.flavors() def start(self, name=None): return self.p.start(name=name) def stop(self, name=None): return self.p.stop(name=name) def info(self, name=None): return self.p.info(name=name) def resume(self, name=None): return self.p.resume(name=name) def reboot(self, name=None): return self.p.reboot(name=name) def create(self, name=None, image=None, size=None, timeout=360, **kwargs): self.p.create(name=name, image=image, size=size, timeout=360, **kwargs) def rename(self, name=None, destination=None): self.p.rename(name=name, destination=name)
class TestName: def setup(self): banner("setup", c="-") self.user = Config()["cloudmesh"]["profile"]["user"] self.clouduser = '******' self.name_generator = Name(experiment="exp", group="grp", user=self.user, kind="vm", counter=1) self.name = str(self.name_generator) self.name_generator.incr() self.new_name = str(self.name_generator) self.p = Provider(name="azure") self.secgroupname = "CM4TestSecGroup" self.secgrouprule = { "ip_protocol": "tcp", "from_port": 8080, "to_port": 8088, "ip_range": "129.79.0.0/16" } self.testnode = None def test_001_list_keys(self): HEADING() pprint(self.p.user) pprint(self.p.cloudtype) pprint(self.p.spec) def test_01_list_keys(self): HEADING() self.keys = self.p.keys() # pprint(self.keys) print( Printer.flatwrite(self.keys, sort_keys=("name"), order=["name", "fingerprint"], header=["Name", "Fingerprint"])) def test_02_key_upload(self): HEADING() key = SSHkey() print(key.__dict__) self.p.key_upload(key) self.test_01_list_keys() def test_03_list_flavors(self): HEADING() flavors = self.p.flavors() pprint(flavors) print( Printer.flatwrite( flavors, sort_keys=("name", "extra.cores", "extra.max_data_disks", "price"), order=["name", "extra.cores", "extra.max_data_disks", "price"], header=["Name", "VCPUS", "max_data_disks", "Price"])) """ {'bandwidth': None, 'cloud': 'azure', 'created': '2019-02-22 21:15:09.897719', 'disk': 127, 'driver': 'azure_asm', 'extra': {'cores': 16, 'max_data_disks': 32}, 'id': 'Standard_D14', 'kind': 'flavor', 'name': 'D14 Faster Compute Instance', 'price': '1.6261', 'ram': 114688, 'updated': '2019-02-22 21:15:09.897719'} """ def test_04_list_vm(self): HEADING() vms = self.p.list() pprint(vms) print( Printer.flatwrite(vms, sort_keys=("name"), order=[ "name", "state", "extra.task_state", "extra.vm_state", "extra.userId", "extra.key_name", "private_ips", "public_ips" ], header=[ "Name", "State", "Task state", "VM state", "User Id", "SSHKey", "Private ips", "Public ips" ])) def test_17_list_images(self): HEADING() images = self.p.images() pprint(images[:10]) print( Printer.flatwrite(images[:10], sort_keys=("id", "name"), order=["name", "id", 'extra.os'], header=["Name", "id", 'extra.os'])) """
class TestName: def setup(self): banner("setup", c="-") self.user = Config()["cloudmesh"]["profile"]["user"] self.clouduser = '******' self.name_generator = Name(experiment="exp", group="grp", user=self.user, kind="vm", counter=1) self.name = str(self.name_generator) self.name_generator.incr() self.new_name = str(self.name_generator) self.p = Provider(name="aws") self.secgroupname = "CM4TestSecGroup" self.secgrouprule = { "ip_protocol": "tcp", "from_port": 8080, "to_port": 8088, "ip_range": "129.79.0.0/16" } self.testnode = None def test_001_list_keys(self): HEADING() pprint(self.p.user) pprint(self.p.cloudtype) pprint(self.p.spec) def test_01_list_keys(self): HEADING() self.keys = self.p.keys() #pprint(self.keys) print( Printer.flatwrite(self.keys, sort_keys=("name"), order=["name", "fingerprint"], header=["Name", "Fingerprint"])) def test_02_key_upload(self): HEADING() key = SSHkey() print(key.__dict__) self.p.key_upload(key) self.test_01_list_keys() def test_03_list_flavors(self): HEADING() flavors = self.p.flavors() pprint(flavors) print( Printer.flatwrite( flavors, sort_keys=("name", "extra.vcpu", "extra.memory", "price"), order=[ "name", "extra.vcpu", "extra.memory", "extra.clockSpeed", "price" ], header=["Name", "VCPUS", "RAM", "Speed", "Price"])) """ {'bandwidth': None, 'cloud': 'aws', 'created': '2019-02-22 19:27:54.965053', 'disk': 0, 'driver': 'aws', 'extra': {'clockSpeed': 'Up to 3.0 GHz', 'currentGeneration': 'Yes', 'ecu': 'Variable', 'instanceFamily': 'General purpose', 'instanceType': 't2.xlarge', 'memory': '16 GiB', 'networkPerformance': 'Moderate', 'normalizationSizeFactor': '8', 'physicalProcessor': 'Intel Xeon Family', 'processorArchitecture': '64-bit', 'processorFeatures': 'Intel AVX; Intel Turbo', 'servicecode': 'AmazonEC2', 'servicename': 'Amazon Elastic Compute Cloud', 'storage': 'EBS only', 'vcpu': '4'}, 'id': 't2.xlarge', 'kind': 'flavor', 'name': 't2.xlarge', 'price': 0.188, 'ram': 16384, 'updated': '2019-02-22 19:27:54.965053'}, """ def test_04_list_vm(self): HEADING() vms = self.p.list() pprint(vms) print( Printer.flatwrite(vms, sort_keys=("name"), order=[ "name", "state", "extra.task_state", "extra.vm_state", "extra.userId", "extra.key_name", "private_ips", "public_ips" ], header=[ "Name", "State", "Task state", "VM state", "User Id", "SSHKey", "Private ips", "Public ips" ]))
class TestName: def setup(self): banner("setup", c="-") self.user = Config()["cloudmesh"]["profile"]["user"] self.clouduser = '******' self.name_generator = Name(experiment="exp", group="grp", user=self.user, kind="vm", counter=1) self.name = str(self.name_generator) self.name_generator.incr() self.new_name = str(self.name_generator) self.p = Provider(name="azure") self.secgroupname = "CM4TestSecGroup" self.secgrouprule = { "ip_protocol": "tcp", "from_port": 8080, "to_port": 8088, "ip_range": "129.79.0.0/16" } self.testnode = None def test_00_show_conf(self): HEADING() pprint(self.p.user) pprint(self.p.cloudtype) pprint(self.p.spec) def test_03_list_flavors(self): HEADING() flavors = self.p.flavors() # pprint(flavors) print( Printer.flatwrite( flavors, sort_keys=[ "name", "ram", "disk", "extra.numberOfCores", "price" ], order=["name", "ram", "disk", "extra.numberOfCores", "price"], header=["Name", "ram (MB)", "disk (GB)", "Cores", "price"])) """ {'bandwidth': 0, 'cm': {'cloud': 'azure', 'created': '2019-04-02 18:22:54.929946', 'driver': 'openstack', 'kind': 'flavor', 'name': 'Standard_L4s'}, 'disk': 678.0, 'extra': {'maxDataDiskCount': 16, 'numberOfCores': 4, 'osDiskSizeInMB': 1047552}, 'id': 'Standard_L4s', 'name': 'Standard_L4s', 'price': 0, 'ram': 32768, 'updated': '2019-04-02 18:22:54.929946'}, """ def test_04_list_vm(self): HEADING() vms = self.p.list() # pprint(vms) # ''' print( Printer.flatwrite( vms, sort_keys=["name"], order=[ "name", "state", "extra.properties.hardwareProfile.vmSize", "extra.properties.storageProfile.imageReference.sku", "extra.properties.storageProfile.osDisk.osType", "extra.properties.storageProfile.osDisk.diskSizeGB", "extra.properties.osProfile.adminUsername", "private_ips", "public_ips" ], header=[ "Name", "State", "vmSize", "Image", "OS Type", "Disk (GB)", "Admin User", "Private ips", "Public ips" ])) # ''' def test_17_list_images(self): HEADING() publishername = 'Canonical' offername = 'UbuntuServer' skuname = '18.04-LTS' images = self.p.images(raw=False, publisher=publishername, offer=offername, sku=skuname) # pprint (images) print( Printer.flatwrite(images, sort_keys=["id", "name"], order=["name", "id", 'version'], header=["Name", "id", 'Version'])) """ {'cloud': 'azure', 'driver': 'azure_asm', 'extra': {'affinity_group': '', 'category': 'Public', 'description': '<p>Visual Studio Community 2015 Update 3 is our ' 'free, full featured and extensible IDE for ' 'non-enterprise application development. This image ' 'contains Windows Server 2012 R2 with Visual Studio ' 'Community 2015 Update 3. It allows you to easily ' 'and quickly set up a development environment in ' 'Azure to build and test applications using Visual ' 'Studio.</p><p>This image was created from the ' 'latest bits available on 8/20/2018.</p><p>The ' 'Visual Studio software is preinstalled in this VM, ' 'but you must acquire a Visual Studio subscription ' 'separately which allows you to sign in to and run ' 'Visual Studio on this VM.</p>', 'location': 'Southeast Asia;Australia East;Australia ' 'Southeast;Brazil South;Canada Central;North ' 'Europe;West Europe;Central India;South India;West ' 'India;Japan East;Japan West;UK South;UK West;Central ' 'US;South Central US;West US 2;West Central US', 'media_link': '', 'os': 'Windows', 'vm_image': False}, 'id': '03f55de797f546a1b29d1b8d66be687a__VS-2015-Comm-VSU3-AzureSDK-29-WS2012R2-2018-08-20', 'kind': 'image', 'name': 'Visual Studio Community 2015 Update 3 with Azure SDK 2.9 on Windows ' 'Server 2012 R2'}, """ # ''' def test_10_create(self): HEADING() image = "Canonical:UbuntuServer:18.04-LTS:18.04.201903200" size = "Standard_B1s" resgroup = 'xxx' storage_account = 'xxx' blob_container = 'xxx' network = 'xxx' subnet = 'xxx' sshpubkey = 'ssh-rsa YOUR_KEY_STRING' self.p.create(name=self.name, image=image, size=size, sshpubkey=sshpubkey, resource_group=resgroup, storage_account=storage_account, blob_container=blob_container, network=network, subnet=subnet) time.sleep(5) nodes = self.p.list() node = self.p.find(nodes, name=self.name) pprint(node) nodes = self.p.list(raw=True) for node in nodes: if node.name == self.name: self.testnode = node break assert node is not None