Beispiel #1
0
 def change(self, volume_id, description, name="", username=""):
     '''
     修改磁盘信息
     :return:
     '''
     token = self.token_dict[username]
     project_id = self.project_id_dict[username]
     assert token != "", "not login"
     cache(del_cache=get_origin_addr(self.list))
     cache(del_cache=get_origin_addr(self.list_detail))
     path = url_volume_change.format(project_id=project_id,
                                     volume_id=volume_id)
     method = "PUT"
     head = {"Content-Type": "application/json", "X-Auth-Token": token}
     params = {"volume": {"description": description}}
     if name:
         params["volume"].update({"name": name})
     ret = send_request(method, IP_cinder, PORT_cinder, path, params, head)
     assert ret != 1, "send_request error"
     t = run_in_thread(self.wait_complete,
                       volume_id, ["available"],
                       username,
                       timeout=TIMEOUT)
     assert t == 0
     return ret
Beispiel #2
0
 def create(self,
            size,
            availability_zone="",
            name="",
            des="",
            metadata="",
            volume_type="ceph",
            snapshot_id="",
            flag=0,
            username=""):
     '''
     创建虚拟卷
     :return:
     :flag:阻塞标志,0表示非阻塞,1表示阻塞
     '''
     ret = 0
     token = self.token_dict[username]
     project_id = self.project_id_dict[username]
     assert token != "", "not login"
     cache(del_cache=get_origin_addr(self.list))
     cache(del_cache=get_origin_addr(self.list_detail))
     path = url_volume_create.format(project_id=project_id)
     method = "POST"
     head = {"Content-Type": "application/json", "X-Auth-Token": token}
     params = {"volume": {"size": size}}
     if availability_zone:
         params["volume"].update({"availability_zone": availability_zone})
     if name:
         params["volume"].update({"display_name": name})
     if des:
         params["volume"].update({"display_description": des})
     if metadata:
         params["volume"].update({"metadata": metadata})
     if volume_type:
         params["volume"].update({"volume_type": volume_type})
     if snapshot_id:
         params["volume"].update({"snapshot_id": snapshot_id})
     ret = send_request(method, IP_nova, PORT_nova, path, params, head)
     assert ret != 1, "send_request error"
     if flag:
         volume_id = ret["volume"].get("id", "")
         t = run_in_thread(self.wait_complete,
                           volume_id, ["available"],
                           username,
                           timeout=TIMEOUT)
         if t != 0:
             self.result.update({name: 2})
         else:
             self.result.update({name: 1})
     return ret
Beispiel #3
0
 def delete(self, snapshot_id,username):
     '''
     删除快照
     :param snapshot_id:
     :return:
     '''
     ret = 0
     token = self.token_dict[username]
     project_id = self.project_id_dict[username]
     cache(del_cache=get_origin_addr(self.list))
     cache(del_cache=get_origin_addr(self.list_detail))
     assert token != "", "not login"
     path = url_volume_snap_action.format(project_id=project_id,snapshot_id=snapshot_id)
     method = "DELETE"
     head = {"Content-Type": "application/json", "X-Auth-Token": token}
     params = ""
     ret = send_request(method, IP_nova, PORT_nova, path, params, head)
     return ret
Beispiel #4
0
 def delete(self, snapshot_id, username):
     '''
     删除快照
     :param snapshot_id:
     :return:
     '''
     ret = 0
     token = self.token_dict[username]
     project_id = self.project_id_dict[username]
     cache(del_cache=get_origin_addr(self.list))
     cache(del_cache=get_origin_addr(self.list_detail))
     assert token != "", "not login"
     path = url_volume_snap_action.format(project_id=project_id,
                                          snapshot_id=snapshot_id)
     method = "DELETE"
     head = {"Content-Type": "application/json", "X-Auth-Token": token}
     params = ""
     ret = send_request(method, IP_nova, PORT_nova, path, params, head)
     return ret
Beispiel #5
0
 def change(self,snapshot_id,des,name="",username=""):
     '''
     修改快照名称和描述信息
     :param name:
     :param des:
     :return:
     '''
     ret = 0
     token = self.token_dict[username]
     project_id = self.project_id_dict[username]
     assert token != "","not login"
     cache(del_cache=get_origin_addr(self.list))
     cache(del_cache=get_origin_addr(self.list_detail))
     path = url_volume_snap_change.format(project_id=project_id,snapshot_id=snapshot_id)
     method = "PUT"
     head = {"Content-Type": "application/json", "X-Auth-Token": token}
     params = {"snapshot":{"description":des}}
     if name:
         params["snapshot"].update({"name":name})
     ret = send_request(method, IP_cinder, PORT_cinder, path, params, head)
     return ret
Beispiel #6
0
 def change(self, volume_id,description,name="",username=""):
     '''
     修改磁盘信息
     :return:
     '''
     token = self.token_dict[username]
     project_id = self.project_id_dict[username]
     assert token != "", "not login"
     cache(del_cache=get_origin_addr(self.list))
     cache(del_cache=get_origin_addr(self.list_detail))
     path = url_volume_change.format(project_id=project_id,volume_id=volume_id)
     method = "PUT"
     head = {"Content-Type": "application/json", "X-Auth-Token": token}
     params = {"volume": {"description":description}}
     if name:
         params["volume"].update({"name": name})
     ret = send_request(method, IP_cinder, PORT_cinder, path, params, head)
     assert ret != 1, "send_request error"
     t = run_in_thread(self.wait_complete, volume_id, ["available"],username,timeout=TIMEOUT)
     assert t == 0
     return ret
Beispiel #7
0
 def create(self, size, availability_zone="", name="", des="", metadata="", volume_type="ceph", snapshot_id="",
            flag=0,username=""):
     '''
     创建虚拟卷
     :return:
     :flag:阻塞标志,0表示非阻塞,1表示阻塞
     '''
     ret = 0
     token = self.token_dict[username]
     project_id = self.project_id_dict[username]
     assert token != "", "not login"
     cache(del_cache=get_origin_addr(self.list))
     cache(del_cache=get_origin_addr(self.list_detail))
     path = url_volume_create.format(project_id=project_id)
     method = "POST"
     head = {"Content-Type": "application/json", "X-Auth-Token": token}
     params = {"volume": {"size": size}}
     if availability_zone:
         params["volume"].update({"availability_zone": availability_zone})
     if name:
         params["volume"].update({"display_name": name})
     if des:
         params["volume"].update({"display_description": des})
     if metadata:
         params["volume"].update({"metadata": metadata})
     if volume_type:
         params["volume"].update({"volume_type": volume_type})
     if snapshot_id:
         params["volume"].update({"snapshot_id": snapshot_id})
     ret = send_request(method, IP_nova, PORT_nova, path, params, head)
     assert ret != 1, "send_request error"
     if flag:
         volume_id = ret["volume"].get("id", "")
         t = run_in_thread(self.wait_complete, volume_id, ["available"],username,timeout=TIMEOUT)
         if t != 0:
             self.result.update({name: 2})
         else:
             self.result.update({name: 1})
     return ret
Beispiel #8
0
 def change(self, snapshot_id, des, name="", username=""):
     '''
     修改快照名称和描述信息
     :param name:
     :param des:
     :return:
     '''
     ret = 0
     token = self.token_dict[username]
     project_id = self.project_id_dict[username]
     assert token != "", "not login"
     cache(del_cache=get_origin_addr(self.list))
     cache(del_cache=get_origin_addr(self.list_detail))
     path = url_volume_snap_change.format(project_id=project_id,
                                          snapshot_id=snapshot_id)
     method = "PUT"
     head = {"Content-Type": "application/json", "X-Auth-Token": token}
     params = {"snapshot": {"description": des}}
     if name:
         params["snapshot"].update({"name": name})
     ret = send_request(method, IP_cinder, PORT_cinder, path, params, head)
     return ret
Beispiel #9
0
 def update(self, vm_id, attach_id, volume_id,username):
     ret = 0
     cache(func_str="list")
     cache(func_str="list_detail")
     token = self.token_dict[username]
     project_id = self.project_id_dict[username]
     assert token != "", "not login"
     cache(del_cache=get_origin_addr(self.list))
     path = url_volume_attach_action.format(project_id=project_id,vm_id=vm_id,attach_id=attach_id)
     method = "PUT"
     head = {"Content-Type": "application/json", "X-Auth-Token": token}
     params = {"volumeAttachment": {"volumeId": volume_id}}
     ret = send_request(method, IP_nova, PORT_nova, path, params, head)
     return ret
Beispiel #10
0
 def create(self, volume_id, snap_name="", des="",username=""):
     '''
     创建快照
     :param volume_id:
     :param snap_name:
     :param des:
     :return:
     '''
     ret = 0
     token = self.token_dict[username]
     project_id = self.project_id_dict[username]
     assert token != "", "not login"
     cache(del_cache=get_origin_addr(self.list))
     cache(del_cache=get_origin_addr(self.list_detail))
     path = url_volume_snap_create.format(project_id=project_id)
     method = "POST"
     head = {"Content-Type": "application/json", "X-Auth-Token":token}
     params = {"snapshot": {"volume_id": volume_id}}
     if snap_name:
         params["snapshot"].update({"display_name": snap_name})
     if des:
         params["snapshot"].update({"display_description": des})
     ret = send_request(method, IP_nova, PORT_nova, path, params, head)
     return ret
Beispiel #11
0
 def create(self, volume_id, snap_name="", des="", username=""):
     '''
     创建快照
     :param volume_id:
     :param snap_name:
     :param des:
     :return:
     '''
     ret = 0
     token = self.token_dict[username]
     project_id = self.project_id_dict[username]
     assert token != "", "not login"
     cache(del_cache=get_origin_addr(self.list))
     cache(del_cache=get_origin_addr(self.list_detail))
     path = url_volume_snap_create.format(project_id=project_id)
     method = "POST"
     head = {"Content-Type": "application/json", "X-Auth-Token": token}
     params = {"snapshot": {"volume_id": volume_id}}
     if snap_name:
         params["snapshot"].update({"display_name": snap_name})
     if des:
         params["snapshot"].update({"display_description": des})
     ret = send_request(method, IP_nova, PORT_nova, path, params, head)
     return ret
Beispiel #12
0
 def update(self, vm_id, attach_id, volume_id, username):
     ret = 0
     cache(func_str="list")
     cache(func_str="list_detail")
     token = self.token_dict[username]
     project_id = self.project_id_dict[username]
     assert token != "", "not login"
     cache(del_cache=get_origin_addr(self.list))
     path = url_volume_attach_action.format(project_id=project_id,
                                            vm_id=vm_id,
                                            attach_id=attach_id)
     method = "PUT"
     head = {"Content-Type": "application/json", "X-Auth-Token": token}
     params = {"volumeAttachment": {"volumeId": volume_id}}
     ret = send_request(method, IP_nova, PORT_nova, path, params, head)
     return ret
Beispiel #13
0
 def attach(self, vm_id, volum_id, device_name="",username=""):
     '''
     虚拟磁盘连接虚拟机
     :param vm_id:
     :param volum_id:
     :param device_name:虚拟机上的盘符名,如/dev/sdb
     :return:
     '''
     ret = 0
     cache(func_str="list")
     cache(func_str="list_detail")
     token = self.token_dict[username]
     project_id = self.project_id_dict[username]
     assert token != "", "not login"
     cache(del_cache=get_origin_addr(self.list))
     path = url_volume_attach_create.format(project_id=project_id,vm_id=vm_id)
     method = "POST"
     head = {"Content-Type": "application/json", "X-Auth-Token": token}
     params = {"volumeAttachment": {"volumeId": volum_id}}
     if device_name:
         params["volumeAttachment"].update({"device": device_name})
     ret = send_request(method, IP_nova, PORT_nova, path, params, head)
     return ret
Beispiel #14
0
 def attach(self, vm_id, volum_id, device_name="", username=""):
     '''
     虚拟磁盘连接虚拟机
     :param vm_id:
     :param volum_id:
     :param device_name:虚拟机上的盘符名,如/dev/sdb
     :return:
     '''
     ret = 0
     cache(func_str="list")
     cache(func_str="list_detail")
     token = self.token_dict[username]
     project_id = self.project_id_dict[username]
     assert token != "", "not login"
     cache(del_cache=get_origin_addr(self.list))
     path = url_volume_attach_create.format(project_id=project_id,
                                            vm_id=vm_id)
     method = "POST"
     head = {"Content-Type": "application/json", "X-Auth-Token": token}
     params = {"volumeAttachment": {"volumeId": volum_id}}
     if device_name:
         params["volumeAttachment"].update({"device": device_name})
     ret = send_request(method, IP_nova, PORT_nova, path, params, head)
     return ret
Beispiel #15
0
 def create(self,
            name,
            flavor,
            image,
            password,
            userdata,
            key_name="",
            disk=None,
            username=""):
     '''
     创建虚拟机,创建的接口在后台应该是异步执行的,当创建的请求发送过去后很快会有结果返回,但是虚拟机实际可能还没有创建成功
     所以需要先判断虚拟机的创建状态,如果是完成的再绑定磁盘
     :param name:
     :param flavor:
     :param image:
     :param password:
     :param userdata:
     :param disk:如果创建时需要选择磁盘则传,格式为:
     [
         {
             "name":"",可选
             "size":"",
             "availability_zone":"",#可选
             "des":"",#可选
             "metadata":{},#可选
             "volume_type":""#可选,
             "snapshot_id":""#可选,
             "dev_name":"连接虚拟机后的盘符名"#可选
         }
     ]
     :return:
     '''
     ret = 0
     token = self.token_dict[username]
     project_id = self.project_id_dict[username]
     cache(del_cache=get_origin_addr(self.list))
     if disk is None:
         disk = []
     self.result.update({
         name: {
             "name": name,
             "id": "",
             "status_vm": 0,
             "status_disk": {}
         }
     })  # 虚拟机创建状态,0表示创建中,1表示成功,2表示失败
     assert token != "", "not login"
     path = url_vm_create.format(project_id=project_id)
     method = "POST"
     head = {"Content-Type": "application/json", "X-Auth-Token": token}
     avzone = self.get_avzone()
     params = {
         "server": {
             "name": name,
             "flavorRef": flavor,
             "imageRef": image,
             "adminPass": password,
             "availability_zone": avzone
         }
     }
     if userdata:
         params["server"].update({"user_data": userdata})
     if key_name:
         params["server"].update({"key_name": key_name})
     ret = send_request(method, IP_nova, PORT_nova, path, params, head)
     vm_id = ret["server"]["id"]
     vm_snap = Vm_snap()
     vm_snap.set_vm(vm_id)
     vm_snap.create_root_snap(image)
     self.result[name]["id"] = vm_id
     if disk:
         volume = Volume()
         volume_attach = Volume_attach()
         vm_compele_flag = 0  # 判断虚拟机是否创建完成的标志,如果置1则下面不再判断创建的状态
         for tmp_dict in disk:
             time_int = int(time.time())
             name_disk = tmp_dict.get("name", "%s_%s" % (name, time_int))
             self.result[name]["status_disk"].update({name_disk: 0})
             size = tmp_dict["size"]
             availability_zone = tmp_dict.get("availability_zone", "")
             des = tmp_dict.get("des", "")
             metadata = tmp_dict.get("metadata", "")
             volume_type = tmp_dict.get("volume_type", "")
             snapshot_id = tmp_dict.get("snapshot_id", "")
             tmpret = volume.create(size,
                                    availability_zone,
                                    name_disk,
                                    des,
                                    metadata,
                                    volume_type,
                                    snapshot_id,
                                    username=username)
             dev_name = tmp_dict.get("dev_name", "")
             volume_id = tmpret["volume"]["id"]
             if not vm_compele_flag:
                 t1 = run_in_thread(self.wait_complete,
                                    vm_id,
                                    username,
                                    timeout=TIMEOUT)
                 if t1 == 0:
                     vm_compele_flag = 1
             t2 = run_in_thread(
                 volume.wait_complete,
                 volume_id, ["available"],
                 username,
                 timeout=TIMEOUT
             )  # assert vm_compele_flag == 1, "vm status is not activate"
             if not vm_compele_flag:
                 self.result[name]["status_vm"] = 2
                 ret = 1
                 break
             # assert t2 == 0, "volume status is not available"
             if t2 != 0:
                 self.result[name]["status_disk"][name_disk] = 2
                 continue
             self.result[name]["status_disk"][name_disk] = 1
             volume_attach.attach(vm_id, volume_id, dev_name, username)
         self.result[name]["status_vm"] = 1
     else:
         t = run_in_thread(self.wait_complete,
                           vm_id,
                           username,
                           timeout=TIMEOUT)
         self.result[name]["status_vm"] = 1 if t == 0 else 2
     return ret
Beispiel #16
0
 def create(self, name, flavor, image, password, userdata, key_name="",disk=None,username=""):
     '''
     创建虚拟机,创建的接口在后台应该是异步执行的,当创建的请求发送过去后很快会有结果返回,但是虚拟机实际可能还没有创建成功
     所以需要先判断虚拟机的创建状态,如果是完成的再绑定磁盘
     :param name:
     :param flavor:
     :param image:
     :param password:
     :param userdata:
     :param disk:如果创建时需要选择磁盘则传,格式为:
     [
         {
             "name":"",可选
             "size":"",
             "availability_zone":"",#可选
             "des":"",#可选
             "metadata":{},#可选
             "volume_type":""#可选,
             "snapshot_id":""#可选,
             "dev_name":"连接虚拟机后的盘符名"#可选
         }
     ]
     :return:
     '''
     ret = 0
     token = self.token_dict[username]
     project_id = self.project_id_dict[username]
     cache(del_cache=get_origin_addr(self.list))
     if disk is None:
         disk = []
     self.result.update({name: {"name": name, "id": "", "status_vm": 0,
                                "status_disk": {}}})  # 虚拟机创建状态,0表示创建中,1表示成功,2表示失败
     assert token != "", "not login"
     path = url_vm_create.format(project_id=project_id)
     method = "POST"
     head = {"Content-Type": "application/json", "X-Auth-Token": token}
     avzone = self.get_avzone()
     params = {"server": {"name": name, "flavorRef": flavor, "imageRef": image, "adminPass": password,
                          "availability_zone":avzone}}
     if userdata:
         params["server"].update({"user_data":userdata})
     if key_name:
         params["server"].update({"key_name": key_name})
     ret = send_request(method, IP_nova, PORT_nova, path, params, head)
     vm_id = ret["server"]["id"]
     vm_snap = Vm_snap()
     vm_snap.set_vm(vm_id)
     vm_snap.create_root_snap(image)
     self.result[name]["id"] = vm_id
     if disk:
         volume = Volume()
         volume_attach = Volume_attach()
         vm_compele_flag = 0  # 判断虚拟机是否创建完成的标志,如果置1则下面不再判断创建的状态
         for tmp_dict in disk:
             time_int = int(time.time())
             name_disk = tmp_dict.get("name", "%s_%s" % (name, time_int))
             self.result[name]["status_disk"].update({name_disk: 0})
             size = tmp_dict["size"]
             availability_zone = tmp_dict.get("availability_zone", "")
             des = tmp_dict.get("des", "")
             metadata = tmp_dict.get("metadata", "")
             volume_type = tmp_dict.get("volume_type", "")
             snapshot_id = tmp_dict.get("snapshot_id", "")
             tmpret = volume.create(size, availability_zone, name_disk, des, metadata, volume_type, snapshot_id,username=username)
             dev_name = tmp_dict.get("dev_name", "")
             volume_id = tmpret["volume"]["id"]
             if not vm_compele_flag:
                 t1 = run_in_thread(self.wait_complete, vm_id,username,timeout=TIMEOUT)
                 if t1 == 0:
                     vm_compele_flag = 1
             t2 = run_in_thread(volume.wait_complete, volume_id, ["available"],username,
                                timeout=TIMEOUT)  # assert vm_compele_flag == 1, "vm status is not activate"
             if not vm_compele_flag:
                 self.result[name]["status_vm"] = 2
                 ret = 1
                 break
             # assert t2 == 0, "volume status is not available"
             if t2 != 0:
                 self.result[name]["status_disk"][name_disk] = 2
                 continue
             self.result[name]["status_disk"][name_disk] = 1
             volume_attach.attach(vm_id, volume_id, dev_name,username)
         self.result[name]["status_vm"] = 1
     else:
         t = run_in_thread(self.wait_complete, vm_id,username,timeout=TIMEOUT)
         self.result[name]["status_vm"] = 1 if t == 0 else 2
     return ret