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

实现创建虚拟机高级选项功能

James Iter 7 лет назад
Родитель
Сommit
8430818c89
3 измененных файлов с 63 добавлено и 14 удалено
  1. 15 6
      jimvc/api/guest.py
  2. 1 0
      jimvc/models/rules.py
  3. 47 8
      jimvc/themes/default/templates/guest_create.html

+ 15 - 6
jimvc/api/guest.py

@@ -88,6 +88,11 @@ def r_create():
             Rules.SSH_KEYS_ID.value
         )
 
+    if 'ip_pool_id' in request.json:
+        args_rules.append(
+            Rules.IP_POOL_ID.value
+        )
+
     if 'service_id' in request.json:
         args_rules.append(
             Rules.SERVICE_ID.value
@@ -213,13 +218,17 @@ def r_create():
         for row in rows:
             occupied_ips.append(row['ip'])
 
-        rows, count = IPPool.get_by_filter(filter_str=':'.join(['activity', 'eq', '1']))
-        if count < 1:
-            ret['state'] = ji.Common.exchange_state(50350)
-            return ret
-
         ip_pool = IPPool()
-        ip_pool.id = rows[0]['id']
+        ip_pool.id = request.json.get('ip_pool_id', None)
+
+        if ip_pool.id is None:
+            rows, count = IPPool.get_by_filter(filter_str=':'.join(['activity', 'eq', '1']))
+            if count < 1:
+                ret['state'] = ji.Common.exchange_state(50350)
+                return ret
+
+            ip_pool.id = rows[0]['id']
+
         ip_pool.get()
 
         guest_ip_generator = ip_pool.ip_generator(occupied_ips=occupied_ips)

+ 1 - 0
jimvc/models/rules.py

@@ -63,6 +63,7 @@ class Rules(Enum):
     DNS1 = (REG_IP, 'dns1')
     DNS2 = (REG_IP, 'dns2')
     ACTIVITY = (int, 'activity')
+    IP_POOL_ID = (int, 'ip_pool_id')
 
     SSH_KEY_ID_EXT = (REG_NUMBER, 'ssh_key_id')
     SSH_KEYS_ID = (list, 'ssh_keys_id')

+ 47 - 8
jimvc/themes/default/templates/guest_create.html

@@ -34,6 +34,8 @@
 {% endblock head %}
 {% block body %}
 <script>
+    var advanced_show = false;
+
     $(document).ready(function() {
         $('body').addClass('add-transition');
         $('.add-page-transition').on('click', function(){
@@ -97,6 +99,30 @@
                             max: 64
                         }
                     }
+                },
+                ip_pool_id: {
+                    validators: {
+                        notEmpty: {
+                        }
+                    }
+                },
+                vlan_id: {
+                    validators: {
+                        notEmpty: {
+                        }
+                    }
+                },
+                project_id: {
+                    validators: {
+                        notEmpty: {
+                        }
+                    }
+                },
+                service_id: {
+                    validators: {
+                        notEmpty: {
+                        }
+                    }
                 }
             }
         })
@@ -126,6 +152,19 @@
         });
     });
 
+    function advanced_onclick(me) {
+        if (advanced_show) {
+            $('.advanced').css('display', 'none');
+            advanced_show = false;
+            $(me).find('span').removeClass('icon-caret-up').addClass('icon-caret-down');
+
+        } else {
+            $('.advanced').css('display', 'block');
+            advanced_show = true;
+            $(me).find('span').removeClass('icon-caret-down').addClass('icon-caret-up');
+        }
+    }
+
     function get_os_templates_profile_mapping_by_id() {
         var os_templates_profile_mapping_by_id = {};
 
@@ -509,9 +548,9 @@
                         </div>
                     </div>
                     <div class="form-group" style="text-align: center;">
-                        <a href="javascript:;">高级&nbsp;&nbsp;&nbsp;&nbsp;<span class="glyph-icon icon-caret-down"></span></a>
+                        <a href="javascript:;" id="advanced" onclick="advanced_onclick(this);">高级&nbsp;&nbsp;&nbsp;&nbsp;<span class="glyph-icon icon-caret-down"></span></a>
                     </div>
-                    <div class="form-group">
+                    <div class="form-group advanced" style="display: none;">
                         <label class="col-sm-2 control-label"><span class="glyph-icon icon-elusive-shuffle"></span>&nbsp;&nbsp;创建模式</label>
                         <div class="col-sm-6">
                             <div class="row form-group">
@@ -529,22 +568,22 @@
                             </div>
                         </div>
                     </div>
-                    <div class="form-group">
-                        <label class="col-sm-2 control-label"><span class="glyph-icon icon-elusive-inbox-alt"></span>&nbsp;&nbsp;IP 池</label>
+                    <div class="form-group advanced" style="display: none;">
+                        <label class="col-sm-2 control-label"><span class="glyph-icon icon-elusive-address-book"></span>&nbsp;&nbsp;IP 池</label>
                         <div class="col-sm-6">
                             <select id="ip_pool_id" name="ip_pool_id" title="请选 IP 池..." class="selectpicker" data-width="100%">
                             </select>
                         </div>
                     </div>
-                    <div class="form-group">
-                        <label class="col-sm-2 control-label"><span class="glyph-icon icon-elusive-inbox-alt"></span>&nbsp;&nbsp;VLAN</label>
+                    <div class="form-group advanced" style="display: none;">
+                        <label class="col-sm-2 control-label"><span class="glyph-icon icon-elusive-network"></span>&nbsp;&nbsp;VLAN</label>
                         <div class="col-sm-6">
                             <select id="vlan_id" name="vlan_id" title="请选所属网络..." class="selectpicker" data-width="100%">
                             </select>
                         </div>
                     </div>
-                    <div class="form-group">
-                        <label class="col-sm-2 control-label"><span class="glyph-icon icon-elusive-inbox-alt"></span>&nbsp;&nbsp;项目编制</label>
+                    <div class="form-group advanced" style="display: none;">
+                        <label class="col-sm-2 control-label"><span class="glyph-icon icon-cubes"></span>&nbsp;&nbsp;项目编制</label>
                         <div class="col-sm-3">
                             <select id="project_id" name="project_id" title="请选所属项目..." class="selectpicker" data-width="100%">
                             </select>