config.py 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  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.update_global_config()
  70. config.id = 1
  71. config.get()
  72. ret['data'] = config.__dict__
  73. return ret
  74. except ji.PreviewingError, e:
  75. return json.loads(e.message)
  76. @Utils.dumps2response
  77. def r_update():
  78. config = Config()
  79. args_rules = [
  80. ]
  81. if 'jimv_edition' in request.json:
  82. args_rules.append(
  83. Rules.JIMV_EDITION.value,
  84. )
  85. if 'storage_mode' in request.json:
  86. args_rules.append(
  87. Rules.STORAGE_MODE.value,
  88. )
  89. if 'dfs_volume' in request.json:
  90. args_rules.append(
  91. Rules.DFS_VOLUME.value,
  92. )
  93. if 'storage_path' in request.json:
  94. args_rules.append(
  95. Rules.STORAGE_PATH.value,
  96. )
  97. if 'vm_network' in request.json:
  98. args_rules.append(
  99. Rules.VM_NETWORK.value,
  100. )
  101. if 'vm_manage_network' in request.json:
  102. args_rules.append(
  103. Rules.VM_MANAGE_NETWORK.value,
  104. )
  105. if args_rules.__len__() < 1:
  106. ret = dict()
  107. ret['state'] = ji.Common.exchange_state(20000)
  108. return ret
  109. try:
  110. config.id = 1
  111. ji.Check.previewing(args_rules, request.json)
  112. config.get()
  113. config.jimv_edition = int(request.json.get('jimv_edition', config.jimv_edition))
  114. config.storage_mode = int(request.json.get('storage_mode', config.storage_mode))
  115. config.dfs_volume = request.json.get('dfs_volume', config.dfs_volume)
  116. config.storage_path = request.json.get('storage_path', config.storage_path)
  117. config.vm_network = request.json.get('vm_network', config.vm_network)
  118. config.vm_manage_network = request.json.get('vm_manage_network', config.vm_manage_network)
  119. config.update()
  120. config.update_global_config()
  121. config.get()
  122. ret = dict()
  123. ret['state'] = ji.Common.exchange_state(20000)
  124. ret['data'] = config.__dict__
  125. return ret
  126. except ji.PreviewingError, e:
  127. return json.loads(e.message)
  128. @Utils.dumps2response
  129. def r_update_quota():
  130. config = Config()
  131. args_rules = [
  132. ]
  133. if 'iops_base' in request.json:
  134. args_rules.append(
  135. Rules.IOPS_BASE.value,
  136. )
  137. if 'iops_pre_unit' in request.json:
  138. args_rules.append(
  139. Rules.IOPS_PRE_UNIT.value,
  140. )
  141. if 'iops_cap' in request.json:
  142. args_rules.append(
  143. Rules.IOPS_CAP.value,
  144. )
  145. if 'iops_max' in request.json:
  146. args_rules.append(
  147. Rules.IOPS_MAX.value,
  148. )
  149. if 'iops_max_length' in request.json:
  150. args_rules.append(
  151. Rules.IOPS_MAX_LENGTH.value,
  152. )
  153. if 'bps_base' in request.json:
  154. args_rules.append(
  155. Rules.BPS_BASE.value,
  156. )
  157. if 'bps_pre_unit' in request.json:
  158. args_rules.append(
  159. Rules.BPS_PRE_UNIT.value,
  160. )
  161. if 'bps_cap' in request.json:
  162. args_rules.append(
  163. Rules.BPS_CAP.value,
  164. )
  165. if 'bps_max' in request.json:
  166. args_rules.append(
  167. Rules.BPS_MAX.value,
  168. )
  169. if 'bps_max_length' in request.json:
  170. args_rules.append(
  171. Rules.BPS_MAX_LENGTH.value,
  172. )
  173. if 'influence_current_guest' in request.json:
  174. args_rules.append(
  175. Rules.INFLUENCE_CURRENT_GUEST.value,
  176. )
  177. if args_rules.__len__() < 1:
  178. ret = dict()
  179. ret['state'] = ji.Common.exchange_state(20000)
  180. return ret
  181. try:
  182. config.id = 1
  183. ji.Check.previewing(args_rules, request.json)
  184. config.get()
  185. config.iops_base = int(request.json.get('iops_base', config.iops_base))
  186. config.iops_pre_unit = int(request.json.get('iops_pre_unit', config.iops_pre_unit))
  187. config.iops_cap = int(request.json.get('iops_cap', config.iops_cap))
  188. config.iops_max = int(request.json.get('iops_max', config.iops_max))
  189. config.iops_max_length = int(request.json.get('iops_max_length', config.iops_max_length))
  190. config.bps_base = int(request.json.get('bps_base', config.bps_base))
  191. config.bps_pre_unit = int(request.json.get('bps_pre_unit', config.bps_pre_unit))
  192. config.bps_cap = int(request.json.get('bps_cap', config.bps_cap))
  193. config.bps_max = int(request.json.get('bps_max', config.bps_max))
  194. config.bps_max_length = int(request.json.get('bps_max_length', config.bps_max_length))
  195. if request.json.get('influence_current_guest', False):
  196. disks, _ = Disk.get_all()
  197. disk = Disk()
  198. for disk_info in disks:
  199. disk.id = disk_info['id']
  200. disk.get()
  201. disk.quota(config=config)
  202. disk.update()
  203. if disk.sequence >= 0:
  204. message = {
  205. '_object': 'disk',
  206. 'action': 'quota',
  207. 'uuid': disk.uuid,
  208. 'guest_uuid': disk.guest_uuid,
  209. 'node_id': disk.node_id,
  210. 'disks': [disk.__dict__]
  211. }
  212. Utils.emit_instruction(message=json.dumps(message))
  213. config.update()
  214. config.update_global_config()
  215. config.get()
  216. ret = dict()
  217. ret['state'] = ji.Common.exchange_state(20000)
  218. ret['data'] = config.__dict__
  219. return ret
  220. except ji.PreviewingError, e:
  221. return json.loads(e.message)
  222. @Utils.dumps2response
  223. def r_get():
  224. config = Config()
  225. try:
  226. config.id = 1
  227. config.get()
  228. ret = dict()
  229. ret['state'] = ji.Common.exchange_state(20000)
  230. ret['data'] = config.__dict__
  231. return ret
  232. except ji.PreviewingError, e:
  233. return json.loads(e.message)