ip_pool.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from flask import Blueprint, request
  4. import json
  5. import jimit as ji
  6. from jimvc.models import Utils
  7. from jimvc.models import Rules
  8. from jimvc.models import IPPool
  9. from base import Base
  10. __author__ = 'James Iter'
  11. __date__ = '2018-12-15'
  12. __contact__ = 'james.iter.cn@gmail.com'
  13. __copyright__ = '(c) 2018 by James Iter.'
  14. blueprint = Blueprint(
  15. 'api_ip_pool',
  16. __name__,
  17. url_prefix='/api/ip_pool'
  18. )
  19. blueprints = Blueprint(
  20. 'api_ip_pools',
  21. __name__,
  22. url_prefix='/api/ip_pools'
  23. )
  24. ip_pool_base = Base(the_class=IPPool, the_blueprint=blueprint, the_blueprints=blueprints)
  25. @Utils.dumps2response
  26. def r_create():
  27. args_rules = [
  28. Rules.START_IP.value,
  29. Rules.END_IP.value,
  30. Rules.NETMASK.value,
  31. Rules.GATEWAY.value,
  32. Rules.DNS1.value,
  33. Rules.DNS2.value,
  34. Rules.ACTIVITY.value,
  35. Rules.NAME.value,
  36. Rules.DESCRIPTION.value
  37. ]
  38. ip_pool = IPPool()
  39. ip_pool.start_ip = request.json.get('start_ip')
  40. ip_pool.end_ip = request.json.get('end_ip')
  41. ip_pool.netmask = request.json.get('netmask')
  42. ip_pool.gateway = request.json.get('gateway')
  43. ip_pool.dns1 = request.json.get('dns1')
  44. ip_pool.dns2 = request.json.get('dns2')
  45. ip_pool.activity = request.json.get('activity')
  46. ip_pool.name = request.json.get('name', '')
  47. ip_pool.description = request.json.get('description', '')
  48. try:
  49. ji.Check.previewing(args_rules, ip_pool.__dict__)
  50. ret = dict()
  51. ret['state'] = ji.Common.exchange_state(20000)
  52. ip_pool.check_ip()
  53. if ip_pool.activity:
  54. # 如果新创建或被更新的 IP 池为活跃状态,则更新其它 IP 池为非活跃状态
  55. IPPool.update_by_filter({'activity': 0}, filter_str='id:gt:0')
  56. ip_pool.create()
  57. ip_pool.get()
  58. ret['data'] = ip_pool.__dict__
  59. return ret
  60. except ji.PreviewingError, e:
  61. return json.loads(e.message)
  62. @Utils.dumps2response
  63. def r_update(ids):
  64. ret = dict()
  65. ret['state'] = ji.Common.exchange_state(20000)
  66. ret['data'] = list()
  67. args_rules = [
  68. Rules.IDS.value
  69. ]
  70. if 'start_ip' in request.json:
  71. args_rules.append(
  72. Rules.START_IP.value,
  73. )
  74. if 'end_ip' in request.json:
  75. args_rules.append(
  76. Rules.END_IP.value,
  77. )
  78. if 'netmask' in request.json:
  79. args_rules.append(
  80. Rules.NETMASK.value,
  81. )
  82. if 'gateway' in request.json:
  83. args_rules.append(
  84. Rules.GATEWAY.value,
  85. )
  86. if 'dns1' in request.json:
  87. args_rules.append(
  88. Rules.DNS1.value,
  89. )
  90. if 'dns2' in request.json:
  91. args_rules.append(
  92. Rules.DNS2.value,
  93. )
  94. if 'activity' in request.json:
  95. args_rules.append(
  96. Rules.ACTIVITY.value,
  97. )
  98. if 'name' in request.json:
  99. args_rules.append(
  100. Rules.NAME.value,
  101. )
  102. if 'description' in request.json:
  103. args_rules.append(
  104. Rules.DESCRIPTION.value,
  105. )
  106. if args_rules.__len__() < 2:
  107. return ret
  108. request.json['ids'] = ids
  109. try:
  110. ji.Check.previewing(args_rules, request.json)
  111. ip_pool = IPPool()
  112. # 检测所指定的 UUDIs 磁盘都存在
  113. for _id in ids.split(','):
  114. ip_pool.id = _id
  115. ip_pool.get()
  116. for _id in ids.split(','):
  117. ip_pool.id = _id
  118. ip_pool.get()
  119. ip_pool.start_ip = request.json.get('start_ip', ip_pool.start_ip)
  120. ip_pool.end_ip = request.json.get('end_ip', ip_pool.end_ip)
  121. ip_pool.netmask = request.json.get('netmask', ip_pool.netmask)
  122. ip_pool.gateway = request.json.get('gateway', ip_pool.gateway)
  123. ip_pool.dns1 = request.json.get('dns1', ip_pool.dns1)
  124. ip_pool.dns2 = request.json.get('dns2', ip_pool.dns2)
  125. ip_pool.activity = request.json.get('activity', ip_pool.activity)
  126. ip_pool.name = request.json.get('name', ip_pool.name)
  127. ip_pool.description = request.json.get('description', ip_pool.description)
  128. ip_pool.check_ip()
  129. if ip_pool.activity:
  130. # 如果新创建或被更新的 IP 池为活跃状态,则更新其它 IP 池为非活跃状态
  131. IPPool.update_by_filter({'activity': 0}, filter_str='id:gt:0')
  132. ip_pool.update()
  133. ip_pool.get()
  134. ret['data'].append(ip_pool.__dict__)
  135. return ret
  136. except ji.PreviewingError, e:
  137. return json.loads(e.message)
  138. @Utils.dumps2response
  139. def r_activity(_id):
  140. ret = dict()
  141. ret['state'] = ji.Common.exchange_state(20000)
  142. ret['data'] = list()
  143. args_rules = [
  144. Rules.ID.value
  145. ]
  146. if args_rules.__len__() < 1:
  147. return ret
  148. try:
  149. ji.Check.previewing(args_rules, {'id': _id})
  150. ip_pool = IPPool()
  151. ip_pool.id = _id
  152. ip_pool.get()
  153. ip_pool.activity = 1
  154. # 如果新创建或被更新的 IP 池为活跃状态,则更新其它 IP 池为非活跃状态
  155. IPPool.update_by_filter({'activity': 0}, filter_str='id:gt:0')
  156. ip_pool.update()
  157. ip_pool.get()
  158. ret['data'].append(ip_pool.__dict__)
  159. return ret
  160. except ji.PreviewingError, e:
  161. return json.loads(e.message)
  162. @Utils.dumps2response
  163. def r_get(ids):
  164. return ip_pool_base.get(ids=ids, ids_rule=Rules.IDS.value, by_field='id')
  165. @Utils.dumps2response
  166. def r_get_by_filter():
  167. return ip_pool_base.get_by_filter()
  168. @Utils.dumps2response
  169. def r_content_search():
  170. return ip_pool_base.content_search()
  171. @Utils.dumps2response
  172. def r_delete(ids):
  173. return ip_pool_base.delete(ids=ids, ids_rule=Rules.IDS.value, by_field='id')