James Iter 9 жил өмнө
parent
commit
f374c22984

+ 6 - 7
api/config.py

@@ -28,11 +28,9 @@ blueprint = Blueprint(
 @Utils.dumps2response
 def r_create():
 
-    config = Config()
-
     args_rules = [
         Rules.JIMV_EDITION.value,
-        Rules.DFS.value,
+        Rules.STORAGE_MODE.value,
         Rules.DFS_VOLUME.value,
         Rules.STORAGE_PATH.value,
         Rules.VM_NETWORK.value,
@@ -46,9 +44,10 @@ def r_create():
         Rules.DNS2.value
     ]
 
+    config = Config()
     config.id = 1
-    config.jimv_edition = request.json.get('jimv_edition')
-    config.dfs = request.json.get('dfs', 0)
+    config.jimv_edition = request.json.get('jimv_edition', 0)
+    config.storage_mode = request.json.get('storage_mode', 0)
     config.dfs_volume = request.json.get('dfs_volume', '')
     config.storage_path = request.json.get('storage_path')
     config.vm_network = request.json.get('vm_network')
@@ -94,7 +93,7 @@ def r_update():
 
     if 'dfs' in request.json:
         args_rules.append(
-            Rules.DFS.value,
+            Rules.STORAGE_MODE.value,
         )
 
     if 'dfs_volume' in request.json:
@@ -163,7 +162,7 @@ def r_update():
         config.get()
 
         config.jimv_edition = request.json.get('jimv_edition', config.jimv_edition)
-        config.dfs = request.json.get('dfs', config.dfs)
+        config.storage_mode = request.json.get('dfs', config.storage_mode)
         config.dfs_volume = request.json.get('dfs_volume', config.dfs_volume)
         config.storage_path = request.json.get('storage_path', config.storage_path)
         config.vm_network = request.json.get('vm_network', config.vm_network)

+ 6 - 6
api/disk.py

@@ -13,7 +13,7 @@ from models import Config
 from models import Disk
 from models import Rules
 from models import Utils
-from models.status import JimVEdition
+from models.status import StorageMode
 
 from base import Base
 
@@ -54,7 +54,8 @@ def r_create():
     config.id = 1
     config.get()
 
-    if config.jimv_edition == JimVEdition.hyper_convergence.value:
+    if config.storage_mode in [StorageMode.shared_mount.value, StorageMode.ceph.value,
+                               StorageMode.glusterfs.value]:
         request.json['on_host'] = 'shared_storage'
 
     try:
@@ -88,8 +89,7 @@ def r_create():
                 '_object': 'disk',
                 'action': 'create',
                 'uuid': disk.uuid,
-                'jimv_edition': config.jimv_edition,
-                'dfs': config.dfs,
+                'storage_mode': config.storage_mode,
                 'dfs_volume': config.dfs_volume,
                 'hostname': disk.on_host,
                 'image_path': disk.path,
@@ -140,7 +140,7 @@ def r_resize(uuid, size):
             'action': 'resize',
             'uuid': disk.uuid,
             'guest_uuid': disk.guest_uuid,
-            'jimv_edition': config.jimv_edition,
+            'storage_mode': config.storage_mode,
             'size': int(size),
             'dfs_volume': config.dfs_volume,
             'hostname': disk.on_host,
@@ -199,7 +199,7 @@ def r_delete(uuids):
                 '_object': 'disk',
                 'action': 'delete',
                 'uuid': disk.uuid,
-                'jimv_edition': config.jimv_edition,
+                'storage_mode': config.storage_mode,
                 'dfs_volume': config.dfs_volume,
                 'hostname': disk.on_host,
                 'image_path': disk.path

+ 4 - 6
api/guest.py

@@ -153,8 +153,7 @@ def r_create():
                 '_object': 'guest',
                 'action': 'create',
                 'uuid': guest.uuid,
-                'jimv_edition': config.jimv_edition,
-                'dfs': config.dfs,
+                'storage_mode': config.storage_mode,
                 'dfs_volume': config.dfs_volume,
                 'hostname': Guest.get_lightest_host()['hostname'],
                 'name': guest.label,
@@ -487,8 +486,7 @@ def r_delete(uuids):
                 '_object': 'guest',
                 'action': 'delete',
                 'uuid': uuid,
-                'jimv_edition': config.jimv_edition,
-                'dfs': config.dfs,
+                'storage_mode': config.storage_mode,
                 'dfs_volume': config.dfs_volume,
                 'hostname': guest.on_host
             }
@@ -540,7 +538,7 @@ def r_attach_disk(uuid, disk_uuid):
             return ret
 
         # 判断 Guest 与 磁盘是否在同一宿主机上
-        if config.jimv_edition == status.JimVEdition.standalone.value:
+        if config.storage_mode in [status.StorageMode.local.value, status.StorageMode.shared_mount.value]:
             if guest.on_host != disk.on_host:
                 ret['state'] = ji.Common.exchange_state(41260)
                 return ret
@@ -668,7 +666,7 @@ def r_migrate(uuids, destination_host):
                 'action': 'migrate',
                 'uuid': uuid,
                 'hostname': guest.on_host,
-                'jimv_edition': config.jimv_edition,
+                'storage_mode': config.storage_mode,
                 'duri': 'qemu+ssh://' + destination_host + '/system'
             }
 

+ 1 - 1
misc/init.sql

@@ -116,7 +116,7 @@ CREATE TABLE IF NOT EXISTS operate_rule(
 CREATE TABLE IF NOT EXISTS config(
     id BIGINT UNSIGNED NOT NULL DEFAULT 1,
     jimv_edition TINYINT UNSIGNED NOT NULL DEFAULT 0,
-    dfs TINYINT UNSIGNED NOT NULL DEFAULT 0,
+    storage_mode TINYINT UNSIGNED NOT NULL DEFAULT 0,
     dfs_volume VARCHAR(255) NOT NULL DEFAULT '',
     storage_path VARCHAR(255) NOT NULL,
     vm_network VARCHAR(255) NOT NULL,

+ 1 - 1
models/config.py

@@ -28,7 +28,7 @@ class Config(ORM):
         # 配置条目的 id 只会是 1
         self.id = 1
         self.jimv_edition = status.JimVEdition.standalone.value
-        self.dfs = status.DFS.ceph.value
+        self.storage_mode = status.StorageMode.local.value
         self.dfs_volume = ''
         self.storage_path = ''
         self.vm_network = ''

+ 1 - 1
models/guest_xml.py

@@ -93,7 +93,7 @@ class GuestXML(object):
 
         if self.config.jimv_edition == status.JimVEdition.hyper_convergence.value:
             dfs_protocol = 'ceph'
-            if self.config.dfs == status.DFS.glusterfs.value:
+            if self.config.storage_mode == status.StorageMode.glusterfs.value:
                 dfs_protocol = 'gluster'
 
             disk_xml = """

+ 1 - 1
models/rules.py

@@ -32,7 +32,7 @@ class Rules(Enum):
 
     CONFIG_ID = (int, 'id')
     JIMV_EDITION = (int, 'jimv_edition')
-    DFS = (int, 'dfs')
+    STORAGE_MODE = (int, 'storage_mode')
     DFS_VOLUME = (basestring, 'dfs_volume')
     STORAGE_PATH = (basestring, 'storage_path')
     VM_NETWORK = (basestring, 'vm_network')

+ 5 - 3
models/status.py

@@ -16,9 +16,11 @@ class JimVEdition(IntEnum):
     hyper_convergence = 1
 
 
-class DFS(IntEnum):
-    ceph = 0
-    glusterfs = 1
+class StorageMode(IntEnum):
+    local = 0
+    shared_mount = 1
+    ceph = 2
+    glusterfs = 3
 
 
 class EmitKind(IntEnum):

+ 19 - 20
templates/config_init.html

@@ -29,10 +29,6 @@
 {% block body %}
 <script>
     $(document).ready(function() {
-        $('#os_template').chosen({
-            "disable_search": true
-        });
-
         $('body').addClass('add-transition');
         $('.add-page-transition').on('click', function(){
             var transAttr = $(this).attr('data-transition');
@@ -40,22 +36,6 @@
             $('.add-transition').addClass(transAttr);
         });
     });
-
-    $(function() { "use strict";
-        $(".chosen-select").chosen();
-        $(".chosen-search").append('<i class="glyph-icon icon-search"></i>');
-        $(".chosen-single div").html('<i class="glyph-icon icon-caret-down"></i>');
-    });
-
-    $(function() { "use strict";
-        $("#quantity").TouchSpin({
-            max: 20,
-            min: 1,
-            verticalbuttons: true,
-            verticalupclass: 'glyph-icon icon-plus',
-            verticaldownclass: 'glyph-icon icon-minus'
-        });
-    });
 </script>
 <div class="container" style="padding-top: 100px;">
     <div class="panel">
@@ -110,11 +90,30 @@
                         <div class="col-sm-3">
                             <input title="起始 VNC 端口" class="form-control" name="start_vnc_port" type="text" value="15900">
                         </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">存储模式</label>
+                        <div class="col-sm-3">
+                            <input title="起始 VNC 端口" class="form-control" name="start_vnc_port" type="text" value="15900">
+                        </div>
                         <label class="col-sm-2 control-label">虚拟机磁盘存放路径</label>
                         <div class="col-sm-3">
                             <input title="虚拟机磁盘存放路径" class="form-control" name="storage_path" type="text" value="Images">
                         </div>
                     </div>
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">分布式文件系统</label>
+                        <div class="col-sm-3">
+                            <select title="分布式文件系统" class="selectpicker" name="dfs">
+                                <option value="0">Ceph</option>
+                                <option value="1">Glusterfs</option>
+                            </select>
+                        </div>
+                        <label class="col-sm-2 control-label">分布式文件系统存储卷</label>
+                        <div class="col-sm-3">
+                            <input title="分布式文件系统存储卷" class="form-control" name="dfs_volume" type="text">
+                        </div>
+                    </div>
                     <div class="form-group">
                         <label class="col-sm-2 control-label"></label>
                         <div class="col-sm-3 pull-right">

+ 14 - 31
views/config.py

@@ -6,7 +6,6 @@ import json
 from flask import Blueprint, render_template, url_for, request
 import requests
 from math import ceil
-import re
 
 
 __author__ = 'James Iter'
@@ -21,12 +20,6 @@ blueprint = Blueprint(
     url_prefix='/config'
 )
 
-blueprints = Blueprint(
-    'v_configs',
-    __name__,
-    url_prefix='/configs'
-)
-
 
 def show():
     args = list()
@@ -113,33 +106,23 @@ def create():
     host_url = request.host_url.rstrip('/')
 
     if request.method == 'POST':
-        ability = request.form.get('ability')
-        os_template_id = request.form.get('os_template_id')
-        quantity = request.form.get('quantity')
-        password = request.form.get('password')
-        remark = request.form.get('remark')
-
-        if not isinstance(ability, basestring):
-            pass
-
-        m = re.search('^(\d)c(\d)g$', ability.lower())
-        if m is None:
-            pass
-
-        cpu = m.groups()[0]
-        memory = m.groups()[1]
-
         payload = {
-            "cpu": int(cpu),
-            "memory": int(memory),
-            "os_template_id": int(os_template_id),
-            "quantity": int(quantity),
-            "remark": remark,
-            "password": password,
-            "lease_term": 100
+            'jimv_edition': request.form.get('jimv_edition'),
+            'storage_mode': request.form.get('storage_mode'),
+            'dfs_volume': request.form.get('dfs_volume'),
+            'storage_path': request.form.get('storage_path'),
+            'vm_network': request.form.get('vm_network'),
+            'vm_manage_network': request.form.get('vm_manage_network'),
+            'start_ip': request.form.get('start_ip'),
+            'end_ip': request.form.get('end_ip'),
+            'start_vnc_port': request.form.get('start_vnc_port'),
+            'netmask': request.form.get('netmask'),
+            'gateway': request.form.get('gateway'),
+            'dns1': request.form.get('dns1'),
+            'dns2': request.form.get('dns2')
         }
 
-        url = host_url + '/api/guest'
+        url = host_url + '/api/config'
         headers = {'content-type': 'application/json'}
         r = requests.post(url, data=json.dumps(payload), headers=headers)
         j_r = json.loads(r.content)