Просмотр исходного кода

磁盘加入挂载中、卸载中,中间状态

James Iter 9 лет назад
Родитель
Сommit
12763f2b64
4 измененных файлов с 19 добавлено и 1 удалено
  1. 6 1
      api/guest.py
  2. 1 0
      misc/init.sql
  3. 2 0
      models/status.py
  4. 10 0
      models/utils.py

+ 6 - 1
api/guest.py

@@ -441,7 +441,7 @@ def r_attach_disk(uuid, disk_uuid):
         ret['state'] = ji.Common.exchange_state(20000)
 
         # 判断欲挂载的磁盘是否空闲
-        if disk.guest_uuid.__len__() > 0:
+        if disk.guest_uuid.__len__() > 0 or disk.state != DiskState.idle.value:
             ret['state'] = ji.Common.exchange_state(41258)
             return ret
 
@@ -454,6 +454,7 @@ def r_attach_disk(uuid, disk_uuid):
         disk.guest_uuid = guest.uuid
         disks, count = disk.get_by_filter(filter_str='guest_uuid:in:' + guest.uuid)
         disk.sequence = count
+        disk.state = DiskState.mounting.value
 
         config = Config()
         config.id = 1
@@ -473,6 +474,7 @@ def r_attach_disk(uuid, disk_uuid):
         message = {'action': 'attach_disk', 'uuid': uuid, 'xml': xml,
                    'passback_parameters': {'disk_uuid': disk.uuid, 'sequence': disk.sequence}}
         Guest.emit_instruction(message=json.dumps(message))
+        disk.update()
 
         return ret
 
@@ -531,6 +533,9 @@ def r_detach_disk(disk_uuid):
                    'passback_parameters': {'disk_uuid': disk.uuid}}
         Guest.emit_instruction(message=json.dumps(message))
 
+        disk.state = DiskState.unloading.value
+        disk.update()
+
         return ret
 
     except ji.PreviewingError, e:

+ 1 - 0
misc/init.sql

@@ -130,6 +130,7 @@ CREATE TABLE IF NOT EXISTS config(
     ENGINE=InnoDB
     DEFAULT CHARSET=utf8;
 
+
 CREATE TABLE IF NOT EXISTS log(
     id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
     type TINYINT UNSIGNED NOT NULL,

+ 2 - 0
models/status.py

@@ -56,6 +56,8 @@ class DiskState(IntEnum):
     pending = 0
     idle = 1
     mounted = 2
+    mounting = 3
+    unloading = 4
     dirty = 255
 
 

+ 10 - 0
models/utils.py

@@ -238,6 +238,16 @@ def utility_processor():
             icon = 'glyph-icon icon-link'
             desc = '使用中'
 
+        elif state == DiskState.mounting.value:
+            color = '00BBBB'
+            icon = 'glyph-icon icon-elusive-upload'
+            desc = '挂载中'
+
+        elif state == DiskState.unloading.value:
+            color = '93969B'
+            icon = 'glyph-icon icon-elusive-download'
+            desc = '卸载中'
+
         elif state == DiskState.dirty.value:
             color = 'FF0707'
             icon = 'glyph-icon icon-remove'