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
Esempio n. 3
0
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)
Esempio n. 5
0
    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
Esempio n. 6
0
    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
Esempio n. 7
0
    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()
Esempio n. 10
0
    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"
Esempio n. 12
0
 def setup(self):
     self.p = Provider(name="az")
     self.vm_name = VM
     self.group = self.p.credentials["resourcegroup"]
     self.location = self.p.credentials["location"]
Esempio n. 13
0
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)
Esempio n. 14
0
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)
Esempio n. 15
0
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)
Esempio n. 16
0
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)
Esempio n. 17
0
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']))
        """
Esempio n. 18
0
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"
                              ]))
Esempio n. 19
0
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