config.py 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from flask import Blueprint
  4. from flask import request
  5. import jimit as ji
  6. import json
  7. from jimvc.models import Config, Disk
  8. from jimvc.models import Rules
  9. from jimvc.models import Utils
  10. __author__ = 'James Iter'
  11. __date__ = '2017/3/21'
  12. __contact__ = 'james.iter.cn@gmail.com'
  13. __copyright__ = '(c) 2017 by James Iter.'
  14. blueprint = Blueprint(
  15. 'api_config',
  16. __name__,
  17. url_prefix='/api/config'
  18. )
  19. @Utils.dumps2response
  20. def r_create():
  21. args_rules = [
  22. Rules.JIMV_EDITION.value,
  23. Rules.STORAGE_MODE.value,
  24. Rules.DFS_VOLUME.value,
  25. Rules.STORAGE_PATH.value,
  26. Rules.VM_NETWORK.value,
  27. Rules.VM_MANAGE_NETWORK.value,
  28. Rules.IOPS_BASE.value,
  29. Rules.IOPS_PRE_UNIT.value,
  30. Rules.IOPS_CAP.value,
  31. Rules.IOPS_MAX.value,
  32. Rules.IOPS_MAX_LENGTH.value,
  33. Rules.BPS_BASE.value,
  34. Rules.BPS_PRE_UNIT.value,
  35. Rules.BPS_CAP.value,
  36. Rules.BPS_MAX.value,
  37. Rules.BPS_MAX_LENGTH.value
  38. ]
  39. config = Config()
  40. config.id = 1
  41. config.jimv_edition = int(request.json.get('jimv_edition', 0))
  42. config.storage_mode = int(request.json.get('storage_mode', 0))
  43. config.dfs_volume = request.json.get('dfs_volume', '')
  44. config.storage_path = request.json.get('storage_path')
  45. config.vm_network = request.json.get('vm_network')
  46. config.vm_manage_network = request.json.get('vm_manage_network')
  47. config.iops_base = int(request.json.get('iops_base', 1000))
  48. config.iops_pre_unit = int(request.json.get('iops_pre_unit', 1))
  49. config.iops_cap = int(request.json.get('iops_cap', 2000))
  50. config.iops_max = int(request.json.get('iops_max', 3000))
  51. config.iops_max_length = int(request.json.get('iops_max_length', 20))
  52. # 200 MiB
  53. config.bps_base = int(request.json.get('bps_base', 1024 * 1024 * 200))
  54. # 0.3 MiB
  55. config.bps_pre_unit = int(request.json.get('bps_pre_unit', 1024 * 1024 * 0.3))
  56. # 500 MiB
  57. config.bps_cap = int(request.json.get('bps_cap', 1024 * 1024 * 500))
  58. # 1 GiB
  59. config.bps_max = int(request.json.get('bps_max', 1024 * 1024 * 1024))
  60. config.bps_max_length = int(request.json.get('bps_max_length', 10))
  61. try:
  62. ji.Check.previewing(args_rules, config.__dict__)
  63. ret = dict()
  64. ret['state'] = ji.Common.exchange_state(20000)
  65. if config.exist():
  66. ret['state'] = ji.Common.exchange_state(40901)
  67. return ret
  68. config.create()
  69. config.id = 1
  70. config.get()
  71. ret['data'] = config.__dict__
  72. return ret
  73. except ji.PreviewingError, e:
  74. return json.loads(e.message)
  75. @Utils.dumps2response
  76. def r_update():
  77. config = Config()
  78. args_rules = [
  79. ]
  80. if 'jimv_edition' in request.json:
  81. args_rules.append(
  82. Rules.JIMV_EDITION.value,
  83. )
  84. if 'storage_mode' in request.json:
  85. args_rules.append(
  86. Rules.STORAGE_MODE.value,
  87. )
  88. if 'dfs_volume' in request.json:
  89. args_rules.append(
  90. Rules.DFS_VOLUME.value,
  91. )
  92. if 'storage_path' in request.json:
  93. args_rules.append(
  94. Rules.STORAGE_PATH.value,
  95. )
  96. if 'vm_network' in request.json:
  97. args_rules.append(
  98. Rules.VM_NETWORK.value,
  99. )
  100. if 'vm_manage_network' in request.json:
  101. args_rules.append(
  102. Rules.VM_MANAGE_NETWORK.value,
  103. )
  104. if args_rules.__len__() < 1:
  105. ret = dict()
  106. ret['state'] = ji.Common.exchange_state(20000)
  107. return ret
  108. try:
  109. config.id = 1
  110. ji.Check.previewing(args_rules, request.json)
  111. config.get()
  112. config.jimv_edition = int(request.json.get('jimv_edition', config.jimv_edition))
  113. config.storage_mode = int(request.json.get('storage_mode', config.storage_mode))
  114. config.dfs_volume = request.json.get('dfs_volume', config.dfs_volume)
  115. config.storage_path = request.json.get('storage_path', config.storage_path)
  116. config.vm_network = request.json.get('vm_network', config.vm_network)
  117. config.vm_manage_network = request.json.get('vm_manage_network', config.vm_manage_network)
  118. config.update()
  119. config.get()
  120. ret = dict()
  121. ret['state'] = ji.Common.exchange_state(20000)
  122. ret['data'] = config.__dict__
  123. return ret
  124. except ji.PreviewingError, e:
  125. return json.loads(e.message)
  126. @Utils.dumps2response
  127. def r_update_quota():
  128. config = Config()
  129. args_rules = [
  130. ]
  131. if 'iops_base' in request.json:
  132. args_rules.append(
  133. Rules.IOPS_BASE.value,
  134. )
  135. if 'iops_pre_unit' in request.json:
  136. args_rules.append(
  137. Rules.IOPS_PRE_UNIT.value,
  138. )
  139. if 'iops_cap' in request.json:
  140. args_rules.append(
  141. Rules.IOPS_CAP.value,
  142. )
  143. if 'iops_max' in request.json:
  144. args_rules.append(
  145. Rules.IOPS_MAX.value,
  146. )
  147. if 'iops_max_length' in request.json:
  148. args_rules.append(
  149. Rules.IOPS_MAX_LENGTH.value,
  150. )
  151. if 'bps_base' in request.json:
  152. args_rules.append(
  153. Rules.BPS_BASE.value,
  154. )
  155. if 'bps_pre_unit' in request.json:
  156. args_rules.append(
  157. Rules.BPS_PRE_UNIT.value,
  158. )
  159. if 'bps_cap' in request.json:
  160. args_rules.append(
  161. Rules.BPS_CAP.value,
  162. )
  163. if 'bps_max' in request.json:
  164. args_rules.append(
  165. Rules.BPS_MAX.value,
  166. )
  167. if 'bps_max_length' in request.json:
  168. args_rules.append(
  169. Rules.BPS_MAX_LENGTH.value,
  170. )
  171. if 'influence_current_guest' in request.json:
  172. args_rules.append(
  173. Rules.INFLUENCE_CURRENT_GUEST.value,
  174. )
  175. if args_rules.__len__() < 1:
  176. ret = dict()
  177. ret['state'] = ji.Common.exchange_state(20000)
  178. return ret
  179. try:
  180. config.id = 1
  181. ji.Check.previewing(args_rules, request.json)
  182. config.get()
  183. config.iops_base = int(request.json.get('iops_base', config.iops_base))
  184. config.iops_pre_unit = int(request.json.get('iops_pre_unit', config.iops_pre_unit))
  185. config.iops_cap = int(request.json.get('iops_cap', config.iops_cap))
  186. config.iops_max = int(request.json.get('iops_max', config.iops_max))
  187. config.iops_max_length = int(request.json.get('iops_max_length', config.iops_max_length))
  188. config.bps_base = int(request.json.get('bps_base', config.bps_base))
  189. config.bps_pre_unit = int(request.json.get('bps_pre_unit', config.bps_pre_unit))
  190. config.bps_cap = int(request.json.get('bps_cap', config.bps_cap))
  191. config.bps_max = int(request.json.get('bps_max', config.bps_max))
  192. config.bps_max_length = int(request.json.get('bps_max_length', config.bps_max_length))
  193. if request.json.get('influence_current_guest', False):
  194. disks, _ = Disk.get_all()
  195. disk = Disk()
  196. for disk_info in disks:
  197. disk.id = disk_info['id']
  198. disk.get()
  199. disk.quota(config=config)
  200. disk.update()
  201. if disk.sequence >= 0:
  202. message = {
  203. '_object': 'disk',
  204. 'action': 'quota',
  205. 'uuid': disk.uuid,
  206. 'guest_uuid': disk.guest_uuid,
  207. 'node_id': disk.node_id,
  208. 'disks': [disk.__dict__]
  209. }
  210. Utils.emit_instruction(message=json.dumps(message))
  211. config.update()
  212. config.get()
  213. ret = dict()
  214. ret['state'] = ji.Common.exchange_state(20000)
  215. ret['data'] = config.__dict__
  216. return ret
  217. except ji.PreviewingError, e:
  218. return json.loads(e.message)
  219. @Utils.dumps2response
  220. def r_get():
  221. config = Config()
  222. try:
  223. config.id = 1
  224. config.get()
  225. ret = dict()
  226. ret['state'] = ji.Common.exchange_state(20000)
  227. ret['data'] = config.__dict__
  228. return ret
  229. except ji.PreviewingError, e:
  230. return json.loads(e.message)