extend.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. # Copyright: (c) OpenSpug Organization. https://github.com/openspug/spug
  2. # Copyright: (c) <spug.dev@gmail.com>
  3. # Released under the AGPL-3.0 License.
  4. from django.views.generic import View
  5. from libs import json_response, JsonParser, Argument, human_datetime
  6. from apps.host.models import Host, HostExtend
  7. from apps.host.utils import check_os_type, fetch_host_extend
  8. import json
  9. class ExtendView(View):
  10. def get(self, request):
  11. form, error = JsonParser(
  12. Argument('host_id', type=int, help='参数错误')
  13. ).parse(request.GET)
  14. if error is None:
  15. host = Host.objects.filter(pk=form.host_id).first()
  16. if not host:
  17. return json_response(error='未找到指定主机')
  18. if not host.is_verified:
  19. return json_response(error='该主机还未验证')
  20. ssh = host.get_ssh()
  21. response = fetch_host_extend(ssh)
  22. return json_response(response)
  23. return json_response(error=error)
  24. def post(self, request):
  25. form, error = JsonParser(
  26. Argument('host_id', type=int, help='参数错误'),
  27. Argument('instance_id', required=False),
  28. Argument('os_name', help='请输入操作系统'),
  29. Argument('cpu', type=int, help='请输入CPU核心数'),
  30. Argument('memory', type=float, help='请输入内存大小'),
  31. Argument('disk', type=list, filter=lambda x: len(x), help='请添加磁盘'),
  32. Argument('private_ip_address', type=list, filter=lambda x: len(x), help='请添加内网IP'),
  33. Argument('public_ip_address', type=list, required=False),
  34. Argument('instance_charge_type', default='Other'),
  35. Argument('internet_charge_type', default='Other'),
  36. Argument('created_time', required=False),
  37. Argument('expired_time', required=False)
  38. ).parse(request.body)
  39. if error is None:
  40. host = Host.objects.filter(pk=form.host_id).first()
  41. form.disk = json.dumps(form.disk)
  42. form.public_ip_address = json.dumps(form.public_ip_address) if form.public_ip_address else '[]'
  43. form.private_ip_address = json.dumps(form.private_ip_address)
  44. form.updated_at = human_datetime()
  45. form.os_type = check_os_type(form.os_name)
  46. if hasattr(host, 'hostextend'):
  47. extend = host.hostextend
  48. extend.update_by_dict(form)
  49. else:
  50. extend = HostExtend.objects.create(host=host, **form)
  51. return json_response(extend.to_view())
  52. return json_response(error=error)