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

创建虚拟机使用新机制

James Iter 9 лет назад
Родитель
Сommit
e01529d13b
2 измененных файлов с 15 добавлено и 3 удалено
  1. 14 2
      api/guest.py
  2. 1 1
      models/event_processor.py

+ 14 - 2
api/guest.py

@@ -149,9 +149,20 @@ def r_create():
                     replace('{DNS1}', config.dns1). \
                     replace('{DNS1}', config.dns1). \
                     replace('{DNS2}', config.dns2)
                     replace('{DNS2}', config.dns2)
 
 
+            lightest_host = None
+            for k, v in db.r.hgetall(app.config['hosts_info']).items():
+                v = json.loads(v)
+
+                if lightest_host is None:
+                    lightest_host = v
+
+                if float(lightest_host['system_load'][0]) / lightest_host['cpu'] > float(v['system_load'][0]) / v['cpu']:
+                    lightest_host = v
+
             create_vm_msg = {
             create_vm_msg = {
-                'action': 'create_guest',
+                'action': 'create',
                 'uuid': guest.uuid,
                 'uuid': guest.uuid,
+                'hostname': lightest_host['hostname'],
                 'name': guest.label,
                 'name': guest.label,
                 'glusterfs_volume': config.glusterfs_volume,
                 'glusterfs_volume': config.glusterfs_volume,
                 'template_path': os_template.path,
                 'template_path': os_template.path,
@@ -160,7 +171,8 @@ def r_create():
                 'boot_jobs': _boot_jobs,
                 'boot_jobs': _boot_jobs,
                 'passback_parameters': {'boot_jobs_id': boot_jobs_id}
                 'passback_parameters': {'boot_jobs_id': boot_jobs_id}
             }
             }
-            db.r.rpush(app.config['downstream_queue'], json.dumps(create_vm_msg, ensure_ascii=False))
+
+            Guest.emit_instruction(message=json.dumps(create_vm_msg, ensure_ascii=False))
 
 
         return ret
         return ret
 
 

+ 1 - 1
models/event_processor.py

@@ -124,7 +124,7 @@ class EventProcessor(object):
         state = cls.message['type']
         state = cls.message['type']
         data = cls.message['message']['data']
         data = cls.message['message']['data']
 
 
-        if action == 'create_guest':
+        if action == 'create':
             if state == ResponseState.success.value:
             if state == ResponseState.success.value:
                 # 系统盘的 UUID 与其 Guest 的 UUID 相同
                 # 系统盘的 UUID 与其 Guest 的 UUID 相同
                 cls.disk.uuid = uuid
                 cls.disk.uuid = uuid