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)
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)
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)
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)
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)
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)
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)
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
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)
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)
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
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)
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)
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
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)
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)
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)
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)
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)
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)
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)
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
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)
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)
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)
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
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)
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)
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)
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