Example #1
0
    def is_vm_running(self, obj_attr_list, fail=True):
        '''
        TBD
        '''
        try:
            _instance = self.get_instances(obj_attr_list, "vm", \
                                           obj_attr_list["cloud_vm_name"])
            if _instance:
                if not ("activeTransaction" in _instance):
                    return _instance
                else:
                    if _instance["status"]["name"].lower().count("error"):
                        _msg = "Instance \"" + obj_attr_list[
                            "cloud_vm_name"] + "\""
                        _msg += " reported an error (from SoftLayer)"
                        _status = 1870
                        cberr(_msg)
                        if fail:
                            raise CldOpsException(_msg, _status)
                    else:
                        return False
            else:
                return False

        except Exception, e:
            _status = 23
            _fmsg = str(e)
            raise CldOpsException(_fmsg, _status)
Example #2
0
    def is_vm_running(self, obj_attr_list):
        '''
        TBD
        '''
        try :
            _instance = self.get_vm_instance(obj_attr_list)

            if _instance :
                if _instance[u'state'] == u'Running' :
                    return _instance
                elif _instance[u'state'] == u'Error' :
                    _msg = "Instance \"" + obj_attr_list["cloud_vm_name"] + "\"" 
                    _msg += " reported an error (from CloudPlatform)"
                    _status = 1870
                    cberr(_msg)
                    raise CldOpsException(_msg, _status)                    
                else :
                    return False
            else :
                return False
        except Exception, msg :
            _fmsg = str(msg)
            _status = 23
            cberr(_fmsg)
            raise CldOpsException(_fmsg, _status)
Example #3
0
    def wrapped(*args, **kwargs) :
        '''
        TBD
        '''
        try :
            _status = 100
            resp = func(*args, **kwargs)
            status = int(resp["status"])
            if status < 0 :
                raise CldOpsException(func.__name__ + " failed: " + resp["msg"], status)

            return status, resp["msg"], resp["result"]
        except TACException, obj :
            raise CldOpsException(func.__name__ + " failed: " + obj.msg, obj.status)
Example #4
0
    def test_vmc_common(self, vmc_name, access, credentials, key_name, \
                            security_group_name, vm_templates, vm_defaults) :
        '''
        TBD
        '''
        _status = 100
        _fmsg = "An error has occurred, but no error message was captured"

        _access_url, _iaas_endpoint = access.split('-')
        _target, _port_number = _access_url.split(':')
        _deploy_python_proxy_script = self.path + "/scripts/common/scp_python_proxy.sh"
        _python_proxy_script = "scp2_python_proxy.rb"
        _iaas_access_id, _iaas_private_key, _iaas_service_public_key = credentials.split(
            '-')

        _cmd = _deploy_python_proxy_script + ' ' + _target + ' ' + _port_number
        _cmd += ' ' + _python_proxy_script + ' ' + _iaas_access_id
        _cmd += ' http://' + _iaas_endpoint + ' ' + _iaas_private_key
        _cmd += ' ' + _iaas_service_public_key

        _proc_h = Popen(_cmd, shell=True, stdout=PIPE, stderr=PIPE)

        if _proc_h.pid:
            _msg = "Python proxy daemon deployment on service VM "
            _msg += "\"" + _target + "\" started successfully with the "
            _msg += "command \"" + _cmd + "\"."
            cbdebug(_msg)
        else:
            _msg = "Error while deploying python proxy daemon on the "
            _msg += "service VM \"" + _target + "\" with the command "
            _msg += "\"" + _cmd + "\""
            cberr(_msg)
            raise CldOpsException(_msg, 98)

        _proc_h.communicate()

        if not _proc_h.returncode:
            _msg = "Python proxy deployed successfully on service VM "
            _msg += "\"" + _target + "\"."
            cbdebug(_msg, True)
            # This is very important! Give the script a couple of seconds
            # to start.
            sleep(2)
        else:
            _msg = "Python proxy failed to deploy on service VM "
            _msg += "\"" + _target + "\"."
            cberr(_msg, True)
            raise CldOpsException(_msg, 98)
Example #5
0
    def is_vm_running(self, obj_attr_list):
        '''
        TBD
        '''
        try:
            if "host_cloud_ip" in obj_attr_list:
                _host_ip = obj_attr_list["host_cloud_ip"]
            else:
                _host_ip = "all"

            _instance = self.get_instances(obj_attr_list, "vm", _host_ip,
                                           obj_attr_list["cloud_vm_name"])

            if _instance:
                _instance_state = _instance.status

            else:
                _instance_state = "non-existent"

            if _instance_state == "Running":
                self.instance_info = _instance.state()

                return True
            else:
                return False

        except Exception, e:
            _status = 23
            _fmsg = str(e)
            raise CldOpsException(_fmsg, _status)
Example #6
0
 def get_vm_instance(self, obj_attr_list) :
     '''
     TBD
     '''
     try :
     
         if not self.cskconn :
             self.connect(obj_attr_list["access"], obj_attr_list["api_key"], obj_attr_list["secret_key"])
     
         if "cloud_uuid" in obj_attr_list and obj_attr_list["cloud_uuid"] != "NA" :
             _instances = self.cskconn.listVirtualMachines({u'id': obj_attr_list["cloud_uuid"]})
             if _instances :
                 obj_attr_list["instance_obj"] = _instances[0]
                 return _instances[0]
             else :
                 return False
         else :
             _instances = self.cskconn.listVirtualMachines()
             for _instance in _instances :
                 if _instance[u'name'] == obj_attr_list["cloud_vm_name"] :
                     obj_attr_list["instance_obj"] = _instance
                     return _instance
             return False
     except Exception, msg :
         _fmsg = str(msg)
         cberr(_fmsg)
         _status = 23
         raise CldOpsException(_fmsg, _status)
Example #7
0
    def get_vm_instance(self, obj_attr_list):
        '''
        TBD
        '''
        try:
            if "cloud_vm_uuid" in obj_attr_list and obj_attr_list[
                    "cloud_vm_uuid"] != "NA":
                _reservations = self.ec2conn.get_all_instances(
                    obj_attr_list["cloud_vm_uuid"])
                if _reservations:
                    _instance = _reservations[0].instances[0]
                    obj_attr_list["instance_obj"] = _instance
                    return _instance
                else:
                    return False
            else:
                _reservations = self.ec2conn.get_all_instances()
                _instances = [i for r in _reservations for i in r.instances]
                for _instance in _instances:
                    if "Name" in _instance.tags:
                        if _instance.tags["Name"] == obj_attr_list[
                                "cloud_vm_name"]:
                            obj_attr_list["instance_obj"] = _instance
                            return _instance
                return False

        except AWSException, obj:
            _status = int(obj.error_code)
            _fmsg = str(obj.error_message)
            raise CldOpsException(_fmsg, _status)
Example #8
0
    def test_vmc_connection(self, vmc_name, access, credentials, key_name, \
                            security_group_name, vm_templates, vm_defaults) :
        '''
        TBD
        '''
        try :
            _status = 100
            _fmsg = "An error has occurred, but no error message was captured"
            self.connect(access, credentials, vmc_name)

            _key_pair_found = self.check_ssh_key(vmc_name, key_name, vm_defaults)

            _security_group_found = self.check_security_group(vmc_name, security_group_name)

            _detected_imageids = self.check_images(vmc_name, vm_templates)

            if not (_key_pair_found and _security_group_found and len(_detected_imageids)) :
                _fmsg += ": Check the previous errors, fix it (using EC2's web"
                _fmsg += " GUI (AWS Console) or ec2-* CLI utilities"
                _status = 1178
                raise CldOpsException(_fmsg, _status) 

            _status = 0

        except CldOpsException, obj :
            _fmsg = str(obj.msg)
            _status = 2
Example #9
0
    def vmcregister(self, obj_attr_list) :
        '''
        TBD
        '''
        _time_mark_prs = int(time())

        obj_attr_list["mgt_002_provisioning_request_sent"] = _time_mark_prs - int(obj_attr_list["mgt_001_provisioning_request_originated"])            

        if "cleanup_on_attach" in obj_attr_list and obj_attr_list["cleanup_on_attach"] == "True" :
            self.vmccleanup(obj_attr_list)

        obj_attr_list["cloud_hostname"] = obj_attr_list["name"]
        
        _fmsg = "VMC " + obj_attr_list["uuid"] + " could not be registered "
        _fmsg += " on TAcloud \"" + obj_attr_list["cloud_name"] + "\"."

        self.connect(obj_attr_list["access"])
        _status, _fmsg, info = self.tacconn.node_register(obj_attr_list["name"])
        obj_attr_list.update(info)
        obj_attr_list["arrival"] = int(time())
        
        # A way to specify an alternative IP address for a hypervisor
        # This alternative 'destination' represents a faster NIC
        # (such as infiniband) to be used for other types of traffic
        _replication_vmcs = obj_attr_list["replication_vmcs"]
        if _replication_vmcs.strip() != "" :
            _rvmcs = str2dic(_replication_vmcs)
            if obj_attr_list["name"] in _rvmcs :
                try :
                    obj_attr_list["svm_destination"] = gethostbyname(_rvmcs[obj_attr_list["name"]])
                except Exception, msg :
                    _fmsg = "Could not lookup 'svm_destinations' " + _rvmcs[obj_attr_list["name"]] + " (probably bad /etc/hosts): " + str(msg)
                    raise CldOpsException(_fmsg, 1295)
Example #10
0
    def get_instances(self, obj_attr_list, obj_type="vm", identifier="all"):
        '''
        TBD
        '''
        try:
            _search_opts = {}

            object_mask = 'id, globalIdentifier, hostname, domain, fullyQualifiedDomainName, primaryBackendIpAddress, primaryIpAddress, lastKnownPowerState.name, powerState, maxCpu, maxMemory, datacenter, activeTransaction.transactionStatus[friendlyName,name], status, provisionDate'

            if identifier != "all":
                _instances = self.nodeman.list_instances(
                    mask=object_mask,
                    datacenter=obj_attr_list["vmc_name"],
                    hostname=identifier)
            else:
                _instances = self.nodeman.list_instances(
                    mask=object_mask, datacenter=obj_attr_list["vmc_name"])

            if not self.nodeman:
                self.connect(obj_attr_list["access"], obj_attr_list["credentials"], \
                             obj_attr_list["vmc_name"])

            if len(_instances) > 0:

                if identifier == "all":
                    return _instances
                else:
                    return _instances[0]
            else:
                return False

        except Exception, e:
            _status = 23
            _fmsg = str(e)
            raise CldOpsException(_fmsg, _status)
Example #11
0
    def is_vm_running(self, obj_attr_list, fail=True):
        '''
        TBD
        '''
        try:

            _instance = self.get_instances(obj_attr_list, "vm",
                                           obj_attr_list["cloud_vm_name"])

            if _instance:

                if "provisionDate" not in _instance:
                    return False

                if _instance["provisionDate"] == "":
                    return False

                return True

            return False

        except Exception, e:
            _status = 23
            _fmsg = str(e)
            if fail:
                raise CldOpsException(_fmsg, _status)
            else:
                return False
Example #12
0
    def is_vm_running(self, obj_attr_list):
        '''
        TBD
        '''
        try:

            if "instance_obj" not in obj_attr_list:
                _instance = self.get_vm_instance(obj_attr_list)
            else:
                _instance = obj_attr_list["instance_obj"]

            if _instance:
                _instance_state = _instance.update()
            else:
                _instance_state = "non-existent"

            if _instance_state == "running":
                return True
            else:
                return False

        except AWSException, obj:
            _status = int(obj.error_code)
            _fmsg = str(obj.error_message)
            raise CldOpsException(_fmsg, _status)
Example #13
0
    def get_instances(self, obj_attr_list, obj_type="vm", identifier="all"):
        '''
        TBD
        '''
        try:
            _search_opts = {}

            if identifier != "all":
                _instances = self.nodeman.list_instances(
                    datacenter=obj_attr_list["vmc_name"], hostname=identifier)
            else:
                _instances = self.nodeman.list_instances(
                    datacenter=obj_attr_list["vmc_name"])

            if not self.nodeman:
                self.connect(obj_attr_list["access"], obj_attr_list["credentials"], \
                             obj_attr_list["vmc_name"])

            if len(_instances) > 0:

                if identifier == "all":
                    return _instances
                else:
                    return _instances[0]
            else:
                return False

        except Exception, e:
            _status = 23
            _fmsg = str(e)
            raise CldOpsException(_fmsg, _status)
Example #14
0
    def test_vmc_connection(self, cloud_name, vmc_name, access, credentials, key_name, \
                            security_group_name, vm_templates, vm_defaults, vmc_defaults) :
        '''
        TBD
        '''
        try :
            _status = 100
            _fmsg = "An error has occurred, but no error message was captured"

            self.connect(access, credentials, vmc_name, vm_defaults)

            self.generate_rc(cloud_name, vmc_defaults, self.additional_rc_contents)

            _prov_netname_found, _run_netname_found = self.check_networks(vmc_name, vm_defaults)
            
            _key_pair_found = self.check_ssh_key(vmc_name, self.determine_key_name(vm_defaults), vm_defaults)
            
            _detected_imageids = self.check_images(vmc_name, vm_templates, vmc_defaults)

            if not (_run_netname_found and _prov_netname_found and _key_pair_found) :
                _msg = "Check the previous errors, fix it"
                _status = 1178
                raise CldOpsException(_msg, _status) 

            if len(_detected_imageids) :
                _status = 0               
            else :
                _status = 1

        except CldOpsException, obj :
            _fmsg = str(obj.msg)
            _status = 2
Example #15
0
    def is_vm_running(self, obj_attr_list):
        '''
        TBD
        '''
        try:
            if "instance_obj" not in obj_attr_list:
                _instance = self.get_vm_instance(obj_attr_list)
            else:
                _instance = obj_attr_list["instance_obj"]

            if _instance:
                _msg = "is_vm_running reports instance with instance state of " + str(
                    _instance.state)
                cbdebug(_msg)
                _instance_state = _instance.state
            else:
                _msg = "is_vm_running reports non-existant instance."
                cbdebug(_msg)
                _instance_state = "non-existent"

            if _instance_state == NodeState.RUNNING:
                return True
            else:
                return False

        except Exception, e:
            _status = 23
            _fmsg = str(e)
            raise CldOpsException(_fmsg, _status)
Example #16
0
    def is_vm_running(self, obj_attr_list):
        '''
        TBD
        '''
        try:

            _instance = self.get_instances(obj_attr_list, "vm",
                                           obj_attr_list["cloud_vm_name"])

            if _instance:
                _instance_state = _instance["status"]
            else:
                _instance_state = "non-existent"

            if _instance_state == "RUNNING":
                self.instance_info = _instance

                if "disks" in _instance:
                    for _disk in _instance["disks"]:
                        if _disk["index"] == 0:
                            obj_attr_list["boot_link_imageid1"] = _disk[
                                "source"]
                            break
                return True
            else:
                return False

        except GCEException, obj:
            _status = int(obj.error_code)
            _fmsg = str(obj.error_message)
            raise CldOpsException(_fmsg, _status)
Example #17
0
    def get_ip_address(self, obj_attr_list):
        '''
        TBD
        '''
        try:
            obj_attr_list[
                "cloud_hostname"] = "vm" + obj_attr_list["name"].split("_")[1]

            obj_attr_list["prov_cloud_ip"] = obj_attr_list[
                "instance_obj"].private_ips[0]
            obj_attr_list["run_cloud_ip"] = obj_attr_list[
                "instance_obj"].private_ips[0]
            # NOTE: "cloud_ip" is always equal to "run_cloud_ip"
            obj_attr_list["cloud_ip"] = obj_attr_list["run_cloud_ip"]

            _msg = "Public IP = " + obj_attr_list["cloud_hostname"]
            _msg += " Private IP = " + obj_attr_list["cloud_ip"]
            cbdebug(_msg)
            _status = 0
            return True

        except:
            _msg = "Could not retrieve IP addresses for object " + obj_attr_list[
                "uuid"]
            _msg += "from vCloud Director \"" + obj_attr_list["cloud_name"]
            cberr(_msg)
            raise CldOpsException(_msg, _status)
Example #18
0
    def is_vm_running(self, obj_attr_list):
        try:
            node = self.get_vm_instance(obj_attr_list)
            return node and node.state == NodeState.RUNNING

        except Exception, e:
            _status = 23
            _fmsg = str(e)
            raise CldOpsException(_fmsg, _status)
Example #19
0
    def get_instances(self, obj_attr_list, obj_type="vm", identifier="all"):
        '''
        TBD
        '''

        try:
            if obj_type == "vm":
                if identifier == "vmuuid":
                    if "cloud_vm_uuid" in obj_attr_list and obj_attr_list[
                            "cloud_vm_uuid"] != "NA":
                        _reservations = self.ec2conn.get_all_instances(
                            obj_attr_list["cloud_vm_uuid"])
                        if _reservations:
                            _instance = _reservations[0].instances[0]
                            obj_attr_list["instance_obj"] = _instance
                            return _instance

                if identifier == "name":
                    _reservations = self.ec2conn.get_all_instances()
                    _instances = [
                        i for r in _reservations for i in r.instances
                    ]
                    for _instance in _instances:
                        if "Name" in _instance.tags:
                            if _instance.tags["Name"] == obj_attr_list[
                                    "cloud_vm_name"]:
                                obj_attr_list["instance_obj"] = _instance
                                return _instance
                return False

            else:
                _instance = []

                if identifier == "vvuid":
                    if "cloud_vv_uuid" in obj_attr_list and obj_attr_list[
                            "cloud_vv_uuid"].lower() != "none":
                        _instance = self.ec2conn.get_all_volumes(
                            volume_ids=[obj_attr_list["cloud_vv_uuid"]])

                if identifier == "vmuuid":
                    if "cloud_vm_uuid" in obj_attr_list and obj_attr_list[
                            "cloud_vm_uuid"].lower() != "none":
                        _instance = self.ec2conn.get_all_volumes(
                            filters={
                                'attachment.instance-id':
                                obj_attr_list["cloud_vm_uuid"]
                            })

                if len(_instance):
                    _volume = _instance[0]
                else:
                    return False

        except AWSException, obj:
            _status = int(obj.error_code)
            _fmsg = str(obj.error_message)
            raise CldOpsException(_fmsg, _status)
Example #20
0
    def is_vm_running(self, obj_attr_list):
        '''
        TBD
        '''
        try :

            _instance = self.get_instances(obj_attr_list, "pod", obj_attr_list["cloud_vm_name"])

            _instance_status = False
            if _instance :
                if "status" in _instance.obj :
                    if "containerStatuses" in _instance.obj["status"] :
                        if "state" in _instance.obj["status"]["containerStatuses"][0] : 
                            _instance_status = _instance.obj["status"]["containerStatuses"][0]["state"].keys()[0]
            
            if str(_instance_status) == "running" :
                self.instance_info = _instance.obj
                obj_attr_list["cloud_vm_exact_match_name"] = _instance.name
                obj_attr_list["cloud_vm_name"] = _instance.name
                obj_attr_list["cloud_hostname"] = _instance.name
                
                if "hostIP" in self.instance_info["status"] :
                    _host_ip = self.instance_info["status"]["hostIP"]
                    obj_attr_list["host_name"], obj_attr_list["host_cloud_ip"] = hostname2ip(_host_ip, True)     

                if obj_attr_list["abstraction"] == "replicaset" or obj_attr_list["abstraction"] == "deployment" :
                    if "cloud_rs_exact_match_name" not in obj_attr_list :
                        _x_instance = self.get_instances(obj_attr_list, "replicaset", obj_attr_list["cloud_rs_name"])
                        if _x_instance :
                            obj_attr_list["cloud_rs_exact_match_name"] = _x_instance.name
                            obj_attr_list["cloud_rs_name"] = _x_instance.name

                            if "metadata" in _x_instance.obj :
                                if "uid" in _x_instance.obj["metadata"] :                        
                                    obj_attr_list["cloud_rs_uuid"] = _x_instance.obj["metadata"]["uid"]
                                                 
                if obj_attr_list["abstraction"] == "deployment" :
                    if "cloud_d_exact_match_name" not in obj_attr_list :
                        _x_instance = self.get_instances(obj_attr_list, "deployment", obj_attr_list["cloud_d_name"])
                        if _x_instance :                        
                            obj_attr_list["cloud_d_exact_match_name"] = _x_instance.name
                            obj_attr_list["cloud_d_name"] = _x_instance.name

                            if "metadata" in _x_instance.obj :
                                if "uid" in _x_instance.obj["metadata"] :           
                                    obj_attr_list["cloud_d_uuid"] = _x_instance.obj["metadata"]["uid"]
                            
                return True
            else :
                return False
        
        except Exception, e :
            _status = 23
            _fmsg = str(e)
            raise CldOpsException(_fmsg, _status)
Example #21
0
    def test_vmc_connection(self, vmc_name, access, credentials, key_name, \
                            security_group_name, vm_templates, vm_defaults) :
        try:
            # Attempt to a connection using those login credentials
            self.connect(credentials)

        except CldOpsException, obj:
            _msg = str(obj.msg)
            cberr(_msg)
            _status = 2
            raise CldOpsException(_msg, _status)
Example #22
0
    def get_kubeconfig(self, kuuid) :
        cbdebug("Getting kubeconfig for cluster " + kuuid)
        s = self.get_session()
        r = s.get(self.access + "/kubernetes/clusters/" + kuuid + "/kubeconfig")

        if r.status_code != 200 :
            cbdebug("Failed to get kubeconfig: " + str(r.status_code))
            raise CldOpsException("Failed to get kubeconfig: " + str(r.status_code), 460)

        cbdebug("Got kubeconfig")
        return r.text
Example #23
0
    def vmcreate(self, obj_attr_list) :
        '''
        TBD
        '''
        try :
            _status = 100
            _fmsg = "An error has occurred, but no error message was captured"

            if obj_attr_list["role"] != "predictablevm" :
                obj_attr_list["cloud_vm_uuid"] = self.generate_random_uuid()
            else :
                obj_attr_list["cloud_vm_uuid"] = "11111111-1111-1111-1111-111111111111"

            obj_attr_list["cloud_vm_name"] = "cb-" + obj_attr_list["username"] + '-' + "vm_" + obj_attr_list["name"].split("_")[1] + '-' + obj_attr_list["role"]
            
            obj_attr_list["cloud_mac"] = self.generate_random_mac_address()
            self.get_virtual_hardware_config(obj_attr_list)

            _time_mark_prs = int(time())
            obj_attr_list["mgt_002_provisioning_request_sent"] = _time_mark_prs - int(obj_attr_list["mgt_001_provisioning_request_originated"])

            if obj_attr_list["role"] != "willfail" :
                True
            else :
                _status = 7778
                _msg = "Failed to create VM image"
                raise CldOpsException(_msg, _status)

            self.take_action_if_requested("VM", obj_attr_list, "provision_started")

            self.vm_placement(obj_attr_list)

            if "meta_tags" in obj_attr_list :
                if obj_attr_list["meta_tags"] != "empty" and \
                obj_attr_list["meta_tags"].count(':') and \
                obj_attr_list["meta_tags"].count(',') :
                    obj_attr_list["meta_tags"] = str2dic(obj_attr_list["meta_tags"])
                else :
                    obj_attr_list["meta_tags"] = "empty"
            else :
                obj_attr_list["meta_tags"] = "empty"
  
            _time_mark_prc = self.wait_for_instance_ready(obj_attr_list, _time_mark_prs)

            self.wait_for_instance_boot(obj_attr_list, _time_mark_prc)

            obj_attr_list["arrival"] = int(time())

            _status = 0

        except CldOpsException, obj :
            _status = obj.status
            _fmsg = str(obj.msg)
Example #24
0
    def test_vmc_connection(self, vmc_name, access, credentials, extra_info,
                            dummy1, dummy2, dummy3):
        '''
        TBD
        '''
        try:
            self.connect(credentials, access, extra_info, '1.5')

        except CldOpsException, obj:
            _msg = str(obj.msg)
            cberr(_msg)
            _status = 2
            raise CldOpsException(_msg, _status)
Example #25
0
    def wait_until_operation(self, obj_attr_list, opid):
        '''
        TBD
        '''

        _msg = "Waiting for " + obj_attr_list[
            "name"] + " operation to finish..."
        cbdebug(_msg, True)

        _curr_tries = 0
        _max_tries = int(obj_attr_list["update_attempts"])
        _wait = int(obj_attr_list["update_frequency"])
        sleep(_wait)

        while _curr_tries < _max_tries:
            _start_pooling = int(time())

            _op = self.gceconn.zoneOperations().get(project = self.instances_project, \
                                                           zone = self.zone, \
                                                           operation = opid["name"]).execute(http = self.http_conn[obj_attr_list["name"]])

            if _op['status'] == 'DONE':
                if 'error' in _op:
                    raise CldOpsException(_op["error"], 2001)

                if str(obj_attr_list["cloud_vm_uuid"]).lower() == "none":
                    obj_attr_list["cloud_vm_uuid"] = _op["id"]

                return True
            else:
                sleep(_wait)
                _curr_tries += 1

        _fmsg = obj_attr_list["name"] + " operation did not finish after "
        _fmsg += str(_max_tries * _wait) + " seconds... "
        _fmsg += "Giving up."

        raise CldOpsException(_op["error"], 2001)
Example #26
0
    def connect(self, name, host, password, version):
        '''
        TBD
        '''
        try:

            _status = 100

            libcloud.security.VERIFY_SSL_CERT = False

            _msg = "Connecting to vcloud director host " + host + " using username " + name
            _msg += " password = "******" api version = " + version
            cbdebug(_msg)

            vcloud = get_driver(Provider.VCLOUD)
            _status = 110

            # Assign login credentials and host information to libcloud handler
            self.vcdconn = vcloud(name,
                                  password,
                                  host=host,
                                  api_version=version)
            # should the above be self.vcdconn ???
            _status = 120

            # Attempt to a connection using those login credentials
            # nodes = self.vcdconn.list_nodes()

            _status = 0

        except:
            _msg = "Error connecting to vCloud Director.  Status = " + str(
                _status)
            cbdebug(_msg, True)
            cberr(_msg)

            _status = 23

        finally:
            if _status:
                _msg = "vCloud Director connection failure.  Failed to connect to host " + host + " using credentials " + name + password + " with API version " + version
                cbdebug(_msg, True)
                cberr(_msg)
                raise CldOpsException(_msg, _status)
            else:
                _msg = "vCloud Director connection successful."
                cbdebug(_msg)
                return _status, _msg
Example #27
0
    def get_instances(self, obj_attr_list, obj_type="vm", identifier="all"):
        '''
        get vm or vm volume inventory.
        :param obj_attr_list: vm obj attr list.
        :param obj_type: vm for vm , vv for vm volume
        :param identifier:  vmuuid for vm , vvuuid for volume
        :return: json , inventory
        '''
        try:
            _search_opts = {}
            _call = "NA"
            _search_opts['all_tenants'] = 1

            if obj_type == "vm":
                if identifier == "vmname":
                    cond = self.zsk_gen_query_conditions('name', '=', obj_attr_list["cloud_vm_name"])
                    _vm_inv = \
                        self.zsk_query_resource(obj_attr_list["access"], "vm-instances", cond)
                    if _vm_inv["inventories"]:
                        _instance = _vm_inv["inventories"][0]
                        return _instance
                elif identifier == "vmuuid":
                    cond = self.zsk_gen_query_conditions('uuid', '=', obj_attr_list["cloud_vm_uuid"])
                    _vm_inv = \
                        self.zsk_query_resource(obj_attr_list["access"], "vm-instances", cond)
                    if _vm_inv["inventories"]:
                        _instance = _vm_inv["inventories"][0]
                        return _instance
                return False
            elif obj_type == "vv":
                if identifier == "vvuuid":
                    cond = self.zsk_gen_query_conditions('uuid', '=', obj_attr_list["cloud_vv_uuid"])
                    _volume_inv = \
                        self.zsk_query_resource(obj_attr_list["access"], "volumes", cond)
                    if _volume_inv["inventories"]:
                        _volume = _volume_inv["inventories"][0]
                        return _volume
                else:
                    return False
            else:
                return False

        except Exception, msg :
            _fmsg = str(msg)
            cberr(traceback.print_exc(file=sys.stdout))
            _status = 23
            raise CldOpsException(_fmsg, _status)
Example #28
0
    def get_ip_address(self, obj_attr_list):
        try:
            _status = 100
            node = self.get_vm_instance(obj_attr_list)

            if len(node.private_ips) > 0:
                obj_attr_list["run_cloud_ip"] = node.private_ips[0]
            else:
                obj_attr_list["run_cloud_ip"] = node.public_ips[0]
            # NOTE: "cloud_ip" is always equal to "run_cloud_ip"
            obj_attr_list["cloud_ip"] = obj_attr_list["run_cloud_ip"]

            if obj_attr_list["hostname_key"] == "cloud_vm_name":
                obj_attr_list["cloud_hostname"] = obj_attr_list[
                    "cloud_vm_name"]
            elif obj_attr_list["hostname_key"] == "cloud_ip":
                obj_attr_list["cloud_hostname"] = obj_attr_list[
                    "cloud_ip"].replace('.', '-')

            _msg = "Public IP = " + node.public_ips[0]
            _msg += " Private IP = " + obj_attr_list["cloud_ip"]
            cbdebug(_msg)

            if str(obj_attr_list["use_vpn_ip"]).lower() == "true" and str(
                    obj_attr_list["vpn_only"]).lower() == "true":
                assert (self.get_attr_from_pending(obj_attr_list))

                if "cloud_init_vpn" not in obj_attr_list:
                    cbdebug("Droplet VPN address not yet available.")
                    return False
                cbdebug("Found VPN IP: " + obj_attr_list["cloud_init_vpn"])
                obj_attr_list["prov_cloud_ip"] = obj_attr_list[
                    "cloud_init_vpn"]
                obj_attr_list["public_cloud_ip"] = node.public_ips[0]
            else:
                obj_attr_list["prov_cloud_ip"] = node.public_ips[0]

            _status = 0
            return True

        except Exception, e:
            _msg = "Could not retrieve IP addresses for object " + obj_attr_list[
                "uuid"]
            _msg += " from DigitalOcean \"" + obj_attr_list[
                "cloud_name"] + ": " + str(e)
            cberr(_msg)
            raise CldOpsException(_msg, _status)
Example #29
0
    def get_images(self, obj_attr_list):
        '''
        TBD
        '''
        try:
            _status = 100
            _candidate_images = None

            _fmsg = "An error has occurred, but no error message was captured"

            if "role" in obj_attr_list and obj_attr_list["role"] == "check":
                if obj_attr_list["imageid1"].count("ubuntu"):
                    obj_attr_list["images_project"] = "ubuntu-os-cloud"
                elif obj_attr_list["imageid1"].count("rhel"):
                    obj_attr_list["images_project"] = "rhel-cloud"
                elif obj_attr_list["imageid1"].count("centos"):
                    obj_attr_list["images_project"] = "centos-cloud"
                else:
                    obj_attr_list["images_project"] = self.images_project
            else:
                obj_attr_list["images_project"] = self.images_project

            if self.is_cloud_image_uuid(obj_attr_list["imageid1"]):
                _filter = "id eq " + obj_attr_list["imageid1"]

            else:
                _filter = "name eq " + obj_attr_list["imageid1"]

            _candidate_images = self.gceconn.images().list(project = obj_attr_list["images_project"], \
                                                           filter = _filter).execute(http = self.http_conn[obj_attr_list["name"]])

            _fmsg = "Please check if the defined image name is present on this "
            _fmsg += self.get_description()

            if "items" in _candidate_images:
                obj_attr_list["imageid1"] = _candidate_images["items"][0][
                    "name"]
                obj_attr_list["boot_volume_imageid1"] = _candidate_images[
                    "items"][0]["id"]
                _status = 0

        except GCEException, obj:
            _status = int(obj.error_code)
            _fmsg = str(obj.error_message)
            raise CldOpsException(_fmsg, _status)
Example #30
0
    def get_ip_address(self, obj_attr_list) :
        '''
        TBD
        '''
        if "cloud_ip" in obj_attr_list and obj_attr_list["cloud_ip"] != "undefined" :
            obj_attr_list["prov_cloud_ip"] = obj_attr_list["cloud_ip"]
            obj_attr_list["run_cloud_ip"] = obj_attr_list["cloud_ip"]
        else :
            _status = 1181
            _msg = "For " + self.get_description() + ", the IP address of each VM has to be" 
            _msg += " supplied on the \"vmattach\" (e.g., \"vmattach <role>"
            _msg += " [optional parametes] cloud_ip=X.Y.Z.W)."
            cberr(_msg)
            raise CldOpsException(_msg, _status)

        obj_attr_list["cloud_hostname"] = "vm_" + obj_attr_list["cloud_ip"].replace('.','_')
        
        return True