فهرست منبع

实现 vlan 强制删除功能

James Iter 7 سال پیش
والد
کامیت
8e5d80d862
3فایلهای تغییر یافته به همراه68 افزوده شده و 13 حذف شده
  1. 56 1
      jimvc/api/vlan.py
  2. 1 0
      jimvc/api_route_table.py
  3. 11 12
      jimvc/themes/default/templates/config_show.html

+ 56 - 1
jimvc/api/vlan.py

@@ -296,6 +296,61 @@ def r_delete(ids):
     except ji.PreviewingError, e:
         return json.loads(e.message)
 
-    # return vlan_base.delete(ids=ids, ids_rule=Rules.IDS.value, by_field='id')
+
+@Utils.dumps2response
+def r_force_delete(ids):
+    args_rules = [
+        Rules.IDS.value
+    ]
+
+    try:
+
+        ji.Check.previewing(args_rules, {'ids': ids})
+
+        vlan = VLAN()
+
+        # 检测所指定的 vlan 都存在
+        for _id in ids.split(','):
+            vlan.id = _id
+            vlan.get()
+
+            guests, _ = Guest.get_by_filter(filter_str=':'.join(['vlan_id', 'eq', vlan.vlan_id.__str__()]))
+
+            # 检测 vlan 中是否存在 虚拟机,若存在,则拒绝删除操作。
+            if guests.__len__() > 0:
+
+                guests_info = ''
+                for guest in guests:
+                    guests_info += guest['label'] + ',' + guest['uuid'] + '.'
+
+                ret = dict()
+                ret['state'] = ji.Common.exchange_state(41262)
+                ret['state']['sub']['zh-cn'] = ''.join([
+                    ret['state']['sub']['zh-cn'], u': Vlan ID: ', vlan.vlan_id, u': Guests: ', guests_info])
+
+                return ret
+
+        for _id in ids.split(','):
+            vlan.id = _id
+            vlan.get()
+
+            # 取全部活着的 hosts
+            available_hosts = Host.get_available_hosts(nonrandom=None)
+            for host in available_hosts:
+                message = {
+                    '_object': 'vlan',
+                    'action': 'delete',
+                    'uuid': None,
+                    'node_id': host['node_id'],
+                    'vlan_id': vlan.vlan_id,
+                    'passback_parameters': {'id': vlan.id, 'vlan_id': vlan.vlan_id}
+                }
+
+                Utils.emit_instruction(message=json.dumps(message, ensure_ascii=False))
+
+    except ji.PreviewingError, e:
+        return json.loads(e.message)
+
+    return vlan_base.delete(ids=ids, ids_rule=Rules.IDS.value, by_field='id')
 
 

+ 1 - 0
jimvc/api_route_table.py

@@ -238,6 +238,7 @@ add_rule_api(service.blueprints, '/_search', api_func='service.r_content_search'
 add_rule_api(vlan.blueprint, '', api_func='vlan.r_create', methods=['POST'])
 add_rule_api(vlan.blueprints, '/<ids>', api_func='vlan.r_update', methods=['PATCH'])
 add_rule_api(vlan.blueprints, '/<ids>', api_func='vlan.r_delete', methods=['DELETE'])
+add_rule_api(vlan.blueprints, '/_force/<ids>', api_func='vlan.r_force_delete', methods=['DELETE'])
 add_rule_api(vlan.blueprints, '/<ids>', api_func='vlan.r_get', methods=['GET'])
 add_rule_api(vlan.blueprints, '', api_func='vlan.r_get_by_filter', methods=['GET'])
 add_rule_api(vlan.blueprints, '/_search', api_func='vlan.r_content_search', methods=['GET'])

+ 11 - 12
jimvc/themes/default/templates/config_show.html

@@ -806,16 +806,13 @@
                         '       </div>\n' +
                         '    <td class="text-center"><span style="color: #009cc5;">' + '创建中...' + '</span></td>\n' +
                         '    <td class="text-center">' + new Date(data['data']['create_time'] / 1000).format('yy-mm-dd HH:MM:ss') + '</td>\n' +
-                        '    <td class="text-center">\n' +
-                        '       <a href="javascript:;" style="color: indianred;" data-toggle="modal" data-target="#delete_modal"\n'+
-                        '          onclick="$(\'#os_template_image_id\').val($(this).parent().parent().parent().parent().parent().children()[0].textContent);\n'+
-                        '      $(\'#delete_instance_desc\').text($(this).parent().parent().parent().parent().parent().children()[2].textContent)">\n'+
-                        '           删除\n'+
-                        '       </a>\n'+
-                        '    </td>\n' +
+                        '    <td class="text-center">-</td>\n' +
                         '</tr>';
                     $('#vlans_list_table tbody').append(html);
                     alter_success('添加 VLAN 成功!');
+                    setTimeout(function() {
+                        refresh();
+                    }, 3000);
                 }
             });
         }
@@ -860,14 +857,14 @@
                             '                <li>\n' +
                             '                    <a href="javascript:;" style="color: indianred;" data-toggle="modal" data-target="#vlan_delete_modal"\n'+
                             '                       onclick="$(\'#vlan_index_id\').val($(this).parent().parent().parent().parent().parent().data(\'id\'));' +
-                            '                       $(\'#delete_vlan_instance_desc\').text(\'VLAN ID: \' + $(this).parent().parent().parent().parent().parent().data(\'id\') + \' / \' + $(this).parent().parent().parent().parent().parent().children()[0].textContent)">\n'+
+                            '                       $(\'#delete_vlan_instance_desc\').text(\'VLAN ID: \' + $(this).parent().parent().parent().parent().parent().children()[1].textContent + \' / \' + $(this).parent().parent().parent().parent().parent().children()[0].textContent)">\n'+
                             '                        删除\n'+
                             '                    </a>\n'+
                             '                </li>\n' +
                             '                <li>\n' +
-                            '                    <a href="javascript:;" style="color: indianred;" data-toggle="modal" data-target="#delete_modal"\n'+
-                            '                       onclick="$(\'#os_template_image_id\').val($(this).parent().parent().parent().parent().parent().children()[0].textContent);\n'+
-                            '                       $(\'#delete_instance_desc\').text($(this).parent().parent().parent().parent().parent().children()[2].textContent)">\n'+
+                            '                    <a href="javascript:;" style="color: indianred;" data-toggle="modal" data-target="#vlan_force_delete_modal"\n'+
+                            '                       onclick="$(\'#vlan_index_id\').val($(this).parent().parent().parent().parent().parent().data(\'id\'));' +
+                            '                       $(\'#force_delete_vlan_instance_desc\').text(\'VLAN ID: \' + $(this).parent().parent().parent().parent().parent().children()[1].textContent + \' / \' + $(this).parent().parent().parent().parent().parent().children()[0].textContent)">\n'+
                             '                        强制删除\n'+
                             '                    </a>\n'+
                             '                </li>\n' +
@@ -951,6 +948,8 @@
         }
 
         function vlan_force_delete_at() {
+            $('#vlan_force_delete_modal').modal('hide');
+
             var vlan_index_id = $('#vlan_index_id').val();
 
             $.ajax({
@@ -1402,7 +1401,7 @@
             </div>
             <div class="modal-body">
                 <p>您确定要强制删除该 VLAN 吗?</p>
-                <h3 style="color: orangered;" id="delete_force_instance_desc"></h3>
+                <h3 style="color: orangered;" id="force_delete_vlan_instance_desc"></h3>
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-sm btn-primary" onclick="vlan_force_delete_at();">确定</button>