|
|
@@ -0,0 +1,205 @@
|
|
|
+#!/usr/bin/env python
|
|
|
+# -*- coding: utf-8 -*-
|
|
|
+
|
|
|
+
|
|
|
+from flask import Blueprint, request
|
|
|
+import json
|
|
|
+import jimit as ji
|
|
|
+
|
|
|
+from jimvc.models import Utils, Guest
|
|
|
+from jimvc.models import Rules
|
|
|
+from jimvc.models import VLAN
|
|
|
+from jimvc.models import Host
|
|
|
+
|
|
|
+from base import Base
|
|
|
+
|
|
|
+
|
|
|
+__author__ = 'James Iter'
|
|
|
+__date__ = '2019-03-12'
|
|
|
+__contact__ = 'james.iter.cn@gmail.com'
|
|
|
+__copyright__ = '(c) 2019 by James Iter.'
|
|
|
+
|
|
|
+
|
|
|
+blueprint = Blueprint(
|
|
|
+ 'api_vlan',
|
|
|
+ __name__,
|
|
|
+ url_prefix='/api/vlan'
|
|
|
+)
|
|
|
+
|
|
|
+blueprints = Blueprint(
|
|
|
+ 'api_vlans',
|
|
|
+ __name__,
|
|
|
+ url_prefix='/api/vlans'
|
|
|
+)
|
|
|
+
|
|
|
+
|
|
|
+vlan_base = Base(the_class=VLAN, the_blueprint=blueprint, the_blueprints=blueprints)
|
|
|
+
|
|
|
+
|
|
|
+@Utils.dumps2response
|
|
|
+def r_create():
|
|
|
+
|
|
|
+ args_rules = [
|
|
|
+ Rules.VLAN_ID.value,
|
|
|
+ Rules.LABEL.value,
|
|
|
+ Rules.DESCRIPTION.value
|
|
|
+ ]
|
|
|
+
|
|
|
+ vlan = VLAN()
|
|
|
+ vlan.vlan_id = request.json.get('vlan_id')
|
|
|
+ vlan.label = request.json.get('label')
|
|
|
+ vlan.description = request.json.get('description', '')
|
|
|
+
|
|
|
+ try:
|
|
|
+ ji.Check.previewing(args_rules, vlan.__dict__)
|
|
|
+
|
|
|
+ ret = dict()
|
|
|
+ ret['state'] = ji.Common.exchange_state(20000)
|
|
|
+
|
|
|
+ vlan.create()
|
|
|
+ vlan.get()
|
|
|
+
|
|
|
+ # 取全部活着的 hosts
|
|
|
+ available_hosts = Host.get_available_hosts(nonrandom=None)
|
|
|
+ for host in available_hosts:
|
|
|
+ message = {
|
|
|
+ '_object': 'vlan',
|
|
|
+ 'action': 'create',
|
|
|
+ 'uuid': None,
|
|
|
+ 'node_id': host['node_id'],
|
|
|
+ 'vlan_id': vlan.vlan_id,
|
|
|
+ 'passback_parameters': {'vlan_id': vlan.vlan_id}
|
|
|
+ }
|
|
|
+
|
|
|
+ Utils.emit_instruction(message=json.dumps(message, ensure_ascii=False))
|
|
|
+
|
|
|
+ ret['data'] = vlan.__dict__
|
|
|
+ return ret
|
|
|
+ except ji.PreviewingError, e:
|
|
|
+ return json.loads(e.message)
|
|
|
+
|
|
|
+
|
|
|
+@Utils.dumps2response
|
|
|
+def r_update(ids):
|
|
|
+
|
|
|
+ ret = dict()
|
|
|
+ ret['state'] = ji.Common.exchange_state(20000)
|
|
|
+ ret['data'] = list()
|
|
|
+
|
|
|
+ args_rules = [
|
|
|
+ Rules.IDS.value
|
|
|
+ ]
|
|
|
+
|
|
|
+ if 'label' in request.json:
|
|
|
+ args_rules.append(
|
|
|
+ Rules.LABEL.value,
|
|
|
+ )
|
|
|
+
|
|
|
+ if 'description' in request.json:
|
|
|
+ args_rules.append(
|
|
|
+ Rules.DESCRIPTION.value,
|
|
|
+ )
|
|
|
+
|
|
|
+ if args_rules.__len__() < 2:
|
|
|
+ return ret
|
|
|
+
|
|
|
+ request.json['ids'] = ids
|
|
|
+
|
|
|
+ try:
|
|
|
+ ji.Check.previewing(args_rules, request.json)
|
|
|
+
|
|
|
+ vlan = VLAN()
|
|
|
+
|
|
|
+ # 检测所指定的 vlan 都存在
|
|
|
+ for _id in ids.split(','):
|
|
|
+ vlan.id = _id
|
|
|
+ vlan.get()
|
|
|
+
|
|
|
+ for _id in ids.split(','):
|
|
|
+ vlan.id = _id
|
|
|
+ vlan.get()
|
|
|
+ vlan.label = request.json.get('label', vlan.label)
|
|
|
+ vlan.description = request.json.get('description', vlan.description)
|
|
|
+
|
|
|
+ vlan.update()
|
|
|
+ vlan.get()
|
|
|
+
|
|
|
+ ret['data'].append(vlan.__dict__)
|
|
|
+
|
|
|
+ return ret
|
|
|
+ except ji.PreviewingError, e:
|
|
|
+ return json.loads(e.message)
|
|
|
+
|
|
|
+
|
|
|
+@Utils.dumps2response
|
|
|
+def r_get(ids):
|
|
|
+ return vlan_base.get(ids=ids, ids_rule=Rules.IDS.value, by_field='id')
|
|
|
+
|
|
|
+
|
|
|
+@Utils.dumps2response
|
|
|
+def r_get_by_filter():
|
|
|
+ return vlan_base.get_by_filter()
|
|
|
+
|
|
|
+
|
|
|
+@Utils.dumps2response
|
|
|
+def r_content_search():
|
|
|
+ return vlan_base.content_search()
|
|
|
+
|
|
|
+
|
|
|
+@Utils.dumps2response
|
|
|
+def r_delete(ids):
|
|
|
+ args_rules = [
|
|
|
+ Rules.IDS.value
|
|
|
+ ]
|
|
|
+
|
|
|
+ request.json['ids'] = ids
|
|
|
+
|
|
|
+ try:
|
|
|
+ ji.Check.previewing(args_rules, request.json)
|
|
|
+
|
|
|
+ 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]))
|
|
|
+
|
|
|
+ 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': {'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')
|
|
|
+
|
|
|
+
|