# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.conf.urls import url from django.conf import settings from tastypie.resources import Resource from tastypie.utils import trailing_slash from api.utils.docker_api import ( get_all_images, get_all_containers, start_container, restart_container, stop_container ) ''' ''' class DockerResource(Resource): class Meta: allowed_methods = ['get'] ''' ''' def prepend_urls(self): return [ url(r'^(?P%s)/image/all%s$' % (self._meta.resource_name, trailing_slash), self.wrap_view('get_all_images'), name='api_get_all_images'), url(r'^(?P%s)/container/all%s$' % (self._meta.resource_name, trailing_slash), self.wrap_view('get_all_containers'), name='api_get_all_containers'), url(r'^(?P%s)/container/(?P)/start%s$' % (self._meta.resource_name, trailing_slash), self.wrap_view('start_container'), name='api_start_container'), url(r'^(?P%s)/container/(?P)/restart%s$' % (self._meta.resource_name, trailing_slash), self.wrap_view('restart_container'), name='api_restart_container'), url(r'^(?P%s)/container/(?P)/stop%s$' % (self._meta.resource_name, trailing_slash), self.wrap_view('stop_container'), name='api_stop_container'), ] ''' ''' def get_all_images(self, request, **kwargs): self.method_check(request, allowed=self._meta.allowed_methods) self.is_authenticated(request) bundle = self.build_bundle(obj={ 'images': get_all_images() }, request=request) return self.create_response(request, bundle.obj) ''' ''' def get_all_containers(self, request, **kwargs): self.method_check(request, allowed=self._meta.allowed_methods) self.is_authenticated(request) return self.create_response(request, { 'containers': get_all_containers() }) ''' ''' def start_container(self, request, **kwargs): self.method_check(request, allowed=self._meta.allowed_methods) self.is_authenticated(request) container_id = kwargs.get('container_id', None) if not container_id: return self.create_response(request, { 'error_message': 'container id is required' }, request=request) completed = start_container(container_id) if not completed: return self.create_response(request, { 'error_message': 'cannot start container %s' % container_id }) return self.create_response(request, { 'message': 'container %s started' % container_id }) ''' ''' def restart_container(self, request, **kwargs): self.method_check(request, allowed=self._meta.allowed_methods) self.is_authenticated(request) container_id = kwargs.get('container_id', None) if not container_id: return self.create_response({ 'error_message': 'container id is required' }, request=request) completed = restart_container(container_id) if not completed: return self.create_response({ 'error_message': 'cannot restart container %s' % container_id }) return self.create_response(request, { 'message': 'container %s is restarted' }) ''' ''' def stop_container(self, request, **kwargs): self.method_check(request, allowed=self._meta.allowed_methods) self.is_authenticated(request) container_id = kwargs.get('container_id', None) if not container_id: return self.create_response({ 'error_message': 'container id is required' }) completed = stop_container(container_id) if not completed: return self.create_response({ 'error_message': 'cannot stop container %s' % container_id }) return self.create_response(request, { 'message': 'container %s is stoped' % container_id })