Beispiel #1
0
    def boot(cls, **kwargs):
        cloud_provider = CloudProvider(kwargs["cloud"]).provider

        if kwargs["cloud"] == 'kilo':
            # For kilo, we use a different network interface
            net_id = None

            # Get list of networks in kilo
            network_list = cloud_provider.provider.networks.list()

            # Validate each interface
            for network in network_list:
                # Check if interface name is fg478-net,
                # Get the interface id
                if network.label == "fg478-net":
                    net_id = network.id

            nics = [{"net-id": net_id}]
            # TODO: BUG: nics seems unexpected argument
            vm_id = cloud_provider.boot_vm(kwargs["name"],
                                           kwargs["image"],
                                           kwargs["flavor"],
                                           key=kwargs["key_name"],
                                           secgroup=kwargs["secgroup_list"],
                                           nics=nics)
        else:
            vm_id = cloud_provider.boot_vm(kwargs["name"], kwargs["image"], kwargs["flavor"], key=kwargs["key_name"],
                                           secgroup=kwargs["secgroup_list"])
        print("Machine {:} is being booted on {:} Cloud...".format(kwargs["name"], cloud_provider.cloud))

        # Explicit refresh called after VM boot, to update db.
        # cls.refresh(cloud=kwargs["cloud"])

        return vm_id
Beispiel #2
0
    def boot(cls, **kwargs):

        key_name = kwargs["key_name"]
        cloud_name = kwargs["cloud"]

        conf = ConfigDict("cloudmesh.yaml")
        username = conf["cloudmesh"]["profile"]["username"]

        keycloudmap = cls.cm.get_key_cloud_mapping(username, key_name, cloud_name)

        if keycloudmap is None or len(keycloudmap) == 0:
            Console.error("No key cloud mapping found for user {:}, key name {:} and cloud {:} in database."
                          .format(username, key_name, cloud_name))
            return

        # print("Keycloudmap = {:}".format(keycloudmap))
        key_name_on_cloud = keycloudmap["key_name_on_cloud"]

        # print("Booting with key_name_on_cloud as " + key_name_on_cloud)

        cloud_provider = CloudProvider(cloud_name).provider

        if "nics" in kwargs:
           vm = cloud_provider.boot_vm(kwargs["name"],
                                           kwargs["image"],
                                           kwargs["flavor"],
                                           key=key_name_on_cloud,
                                           secgroup=kwargs["secgroup_list"],
                                           nics=nics)
        else:
            vm = cloud_provider.boot_vm(kwargs["name"],
                                           kwargs["image"],
                                           kwargs["flavor"],
                                           key=key_name_on_cloud,
                                           secgroup=kwargs["secgroup_list"],
                                           nics=None)

        print("Machine {:} is being booted on {:} Cloud...".format(kwargs["name"], cloud_provider.cloud))
        return vm
Beispiel #3
0
    def boot(cls, **kwargs):

        key_name = kwargs["key_name"]
        cloud_name = kwargs["cloud"]

        conf = ConfigDict("cloudmesh.yaml")
        username = conf["cloudmesh"]["profile"]["username"]

        keycloudmap = cls.cm.get_key_cloud_mapping(username, key_name, cloud_name)

        if keycloudmap is None or len(keycloudmap) == 0:
            raise RuntimeError("No key cloud mapping found for user {:}, key name {:} and cloud {:} in database."
                               .format(username, key_name, cloud_name))

        # print("Keycloudmap = {:}".format(keycloudmap))
        key_name_on_cloud = keycloudmap["key_name_on_cloud"]

        # print("Booting with key_name_on_cloud as " + key_name_on_cloud)

        cloud_provider = CloudProvider(cloud_name).provider

        if "nics" in kwargs:
            vm = cloud_provider.boot_vm(kwargs["name"],
                                        kwargs["image"],
                                        kwargs["flavor"],
                                        key=key_name_on_cloud,
                                        secgroup=kwargs["secgroup_list"],
                                        nics=kwargs["nics"])
        else:
            vm = cloud_provider.boot_vm(kwargs["name"],
                                        kwargs["image"],
                                        kwargs["flavor"],
                                        key=key_name_on_cloud,
                                        secgroup=kwargs["secgroup_list"],
                                        nics=None)

        print("Machine {:} is being booted on {:} Cloud...".format(kwargs["name"], cloud_provider.cloud))
        return vm
Beispiel #4
0
    def boot(cls, **kwargs):

        arg = dotdict(kwargs)

        for a in ["key", "name", "image", "flavor"]:
            if a not in kwargs:
                raise ValueError(a + " not in arguments to vm boot")

        conf = ConfigDict("cloudmesh.yaml")
        arg.user = arg.user or conf["cloudmesh"]["profile"]["user"]
        arg.group = arg.group or Default.group
        cloud_provider = CloudProvider(arg.cloud).provider

        if "nics" in arg:
            nics = arg.nics
        else:
            nics = None

        basic_dict = {
            "cloud": arg.cloud,
            "name": arg.name,
            "image": arg.image,
            "flavor": arg.flavor,
            "key": arg.key,
            "secgroup": [arg.secgroup],
            "nics": nics,
            "meta": {
                'kind': 'cloudmesh',
                'group': arg.group,
                'cluster': arg.get('cluster', None),
                'image': arg.image,
                'flavor': arg.flavor,
                'key': arg.key,
                'category': arg.cloud
            }
        }

        # Special case for Azure where certificate details needs to be added
        if arg.cloud == "azure":
            kwargs = dict()
            kwargs['kind'] = "key_azure"
            db_result = cls.cm.find(**kwargs)
            # pprint("Key DB results")
            key_result = None
            try:
                for key in db_result:
                    if key['name'] == arg.key:
                        pprint("Found the key")
                        key_result = key
                        break
                if key_result is not None:
                    new_dict_items = dict()
                    new_dict_items['cert_thumbprint'] = key_result[
                        'fingerprint']
                    new_dict_items['pub_key_path'] = key_result['key_path']
                    new_dict_items['cert_path'] = key_result['certificate']
                    new_dict_items['pfx_path'] = key_result['pfx_path']
                    basic_dict.update(new_dict_items)
                else:
                    pprint("None found in DB")
            except:
                traceback.print_exc()
                pprint("Exception while processing azure boot arguments")
        d = dotdict(basic_dict)

        Console.ok(
            "Machine {name} is being booted on cloud {cloud} ...".format(
                **arg))

        print(Printer.attribute(d))

        vm = cloud_provider.boot_vm(**d)
        if vm is not None:
            cls.refresh(cloud=arg.cloud)

            try:
                # TODO: Repair db schema for vm_azure, vm_libcloud,
                # vm_openstack. The following set only works with
                # openstack, no libcloud, no azure

                cls.cm.set(d.name, "key", d.key, scope="first", kind="vm")
                cls.cm.set(d.name, "image", d.image, scope="first", kind="vm")
                cls.cm.set(d.name,
                           "flavor",
                           d.flavor,
                           scope="first",
                           kind="vm")
                cls.cm.set(d.name,
                           "group",
                           arg.group,
                           scope="first",
                           kind="vm")
                cls.cm.set(d.name, "user", arg.user, scope="first", kind="vm")
                cls.cm.set(d.name,
                           'username',
                           arg.username,
                           scope='first',
                           kind='vm')
                cls.cm.set(d.name,
                           'cluster',
                           arg.cluster,
                           scope='first',
                           kind='vm')

            except:
                # cm.set error is identified as a warning, not an error
                import sys
                Console.warning("cls.cm.set error: %s" % (sys.exc_info()[0]))

        # update group and key
        #
        # cls.cm.update("vm", name=data.name)

        return vm
Beispiel #5
0
    def boot(cls, **kwargs):

        arg = dotdict(kwargs)

        for a in ["key", "name", "image", "flavor"]:
            if a not in kwargs:
                raise ValueError(a + " not in arguments to vm boot")

        conf = ConfigDict("cloudmesh.yaml")
        arg.username = conf["cloudmesh"]["profile"]["user"]
        arg.group = arg.group or Default.group
        cloud_provider = CloudProvider(arg.cloud).provider

        if "nics" in arg:
            nics = arg.nics
        else:
            nics = None

        basic_dict = {
            "cloud": arg.cloud,
            "name": arg.name,
            "image": arg.image,
            "flavor": arg.flavor,
            "key": arg.key,
            "secgroup": [arg.secgroup],
            "nics": nics,
            "meta": {'kind': 'cloudmesh',
                     'group': arg.group,
                     'image': arg.image,
                     'flavor': arg.flavor,
                     'key': arg.key,
                     'category': arg.cloud
                    }
        }

        # Special case for Azure where certificate details needs to be added
        if arg.cloud == "azure":
            kwargs = dict()
            kwargs['kind'] = "key_azure"
            db_result = cls.cm.find(**kwargs)
            # pprint("Key DB results")
            key_result = None
            try:
                for key in db_result:
                    if key['name'] == arg.key:
                        pprint("Found the key")
                        key_result = key
                        break
                if key_result is not None:
                    new_dict_items = dict()
                    new_dict_items['cert_thumbprint'] = key_result['fingerprint']
                    new_dict_items['pub_key_path'] = key_result['key_path']
                    new_dict_items['cert_path'] = key_result['certificate']
                    new_dict_items['pfx_path'] = key_result['pfx_path']
                    basic_dict.update(new_dict_items)
                else:
                    pprint("None found in DB")
            except:
                traceback.print_exc()
                pprint("Exception while processing azure boot arguments")
        d = dotdict(basic_dict)

        Console.ok("Machine {name} is being booted on cloud {cloud} ...".format(**arg))

        print(Printer.attribute(d))

        vm = cloud_provider.boot_vm(**d)
        if vm is not None:
            cls.refresh(cloud=arg.cloud)

            cls.cm.set(d.name, "key", d.key, scope="first", kind="vm")
            cls.cm.set(d.name, "image", d.image, scope="first", kind="vm")
            cls.cm.set(d.name, "flavor", d.flavor, scope="first", kind="vm")
            cls.cm.set(d.name, "group", arg.group, scope="first", kind="vm")
            cls.cm.set(d.name, "user", arg.user, scope="first", kind="vm")

        # update group and key
        #
        # cls.cm.update("vm", name=data.name)

        return vm