docker_resource.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from django.conf.urls import url
  4. from django.conf import settings
  5. from tastypie.resources import Resource
  6. from tastypie.utils import trailing_slash
  7. from api.utils.docker_api import get_all_images, get_all_containers, start_container, stop_container
  8. '''
  9. '''
  10. class DockerResource(Resource):
  11. class Meta:
  12. allowed_methods = ['get']
  13. '''
  14. '''
  15. def prepend_urls(self):
  16. return [
  17. url(r'^(?P<resource_name>%s)/image/all%s$' % (self._meta.resource_name, trailing_slash), self.wrap_view('get_all_images'), name='api_get_all_images'),
  18. url(r'^(?P<resource_name>%s)/container/all%s$' % (self._meta.resource_name, trailing_slash), self.wrap_view('get_all_containers'), name='api_get_all_containers'),
  19. url(r'^(?P<resource_name>%s)/container/(?P<container_id>)/start%s$' % (self._meta.resource_name, trailing_slash), self.wrap_view('start_container'), name='api_start_container'),
  20. url(r'^(?P<resource_name>%s)/container/(?P<container_id>)/stop%s$' % (self._meta.resource_name, trailing_slash), self.wrap_view('stop_container'), name='api_stop_container'),
  21. ]
  22. '''
  23. '''
  24. def get_all_images(self, request, **kwargs):
  25. self.method_check(request, allowed=self._meta.allowed_methods)
  26. self.is_authenticated(request)
  27. bundle = self.build_bundle(obj={
  28. 'images': get_all_images()
  29. }, request=request)
  30. return self.create_response(request, bundle.obj)
  31. '''
  32. '''
  33. def get_all_containers(self, request, **kwargs):
  34. self.method_check(request, allowed=self._meta.allowed_methods)
  35. self.is_authenticated(request)
  36. bundle = self.build_bundle(obj={
  37. 'containers': get_all_containers()
  38. }, request=request)
  39. return self.create_response(request, bundle.obj)
  40. '''
  41. '''
  42. def start_container(self, request, **kwargs):
  43. self.method_check(request, allowed=self._meta.allowed_methods)
  44. self.is_authenticated(request)
  45. container_id = kwargs.get('container_id', None)
  46. if not container_id:
  47. return self.create_response({
  48. 'error_message': 'container id is required'
  49. }, request=request)
  50. bundle = self.build_bundle(obj={}, request=request)
  51. return self.create_response(request, bundle.obj)
  52. '''
  53. '''
  54. def stop_container(self, request, **kwargs):
  55. self.method_check(request, allowed=self._meta.allowed_methods)
  56. self.is_authenticated(request)
  57. container_id = kwargs.get('container_id', None)
  58. if not container_id:
  59. return self.create_response({
  60. 'error_message': 'container id is required'
  61. })
  62. bundle = self.build_bundle(obj={}, request=request)
  63. return self.create_response(request, bundle.obj)