123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- 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 simplejson import JSONDecodeError
- from core.models.request import Request
- from api.utils.odoo_api import (
- normalize_name,
- check_name,
- randomize_port,
- create_folders,
- create_configuration,
- create_database,
- copy_database_backup_file,
- restore_database,
- remove_database_backup_file,
- create_odoo_container,
- apply_permissions
- )
- import simplejson as json
- class OdooResource(Resource):
- class Meta:
- pass
- '''
- '''
- def prepend_urls(self):
- return [
- url(r'^(?P<resource_name>%s)/create%s$' % (self._meta.resource_name, trailing_slash), self.wrap_view('odoo_create'), name='api_odoo_create'),
- ]
-
- '''
- '''
- def odoo_create(self, request, **kwargs):
- self.method_check(request, allowed='post')
- self.is_authenticated(request)
- name = None
- try:
- data = json.loads(request.body)
- name = data['name']
- except JSONDecodeError:
- name = None
- except KeyError:
- name = None
- r = Request.objects.create(name='Crear contenedor Odoo')
- if not name:
- r.issue = 'name is required'
- r.status = 5
- r.save()
- return self.create_response(request, {
- 'error_message': 'name is required'
- })
-
- name = normalize_name(name)
- name_exists = check_name(name)
- if name_exists:
- r.issue = 'name is already exists'
- r.status = 5
- r.save()
- return self.create_response(request, {
- 'error_message': 'name is already exists'
- })
-
-
- port = randomize_port()
-
- folders_created = create_folders(name)
- if not folders_created:
- r.issue = 'folders structure cannot be created'
- r.status = 5
- r.save()
- return self.create_response(request, {
- 'error_message': 'folders structure cannot be created'
- })
-
- conf_created = create_configuration(name)
- if not conf_created:
- r.issue = 'configuration cannot be created'
- r.status = 5
- r.save()
- return self.create_response(request, {
- 'error_message': 'configuration cannot be created'
- })
-
- db_created = create_database(name)
- if not db_created:
- r.issue = 'database cannot be created'
- r.status = 5
- r.save()
- return self.create_response(request, {
- 'error_message': 'database cannot be created'
- })
-
- backup_copied = copy_database_backup_file()
- if not backup_copied:
- r.issue = 'database backup cannot be copied'
- r.status = 5
- r.save()
- return self.create_response(request, {
- 'error_message': 'database backup cannot be copied'
- })
-
-
- db_restored = restore_database(name)
-
- if not db_restored:
- r.issue = 'database cannot be restored'
- r.status = 5
- r.save()
- return self.create_response(request, {
- 'error_message': 'database cannot be restored'
- })
-
- backup_removed = remove_database_backup_file()
- if not backup_removed:
- r.issue = 'backup cannot be removed'
- r.status = 5
- r.save()
- return self.create_response(request, {
- 'error_message': 'backup cannot be removed'
- })
-
- odoo_created = create_odoo_container(name, [port])
- if not odoo_created:
- r.issue = 'odoo container cannot be created'
- r.status = 5
- r.save()
- return self.create_response(request, {
- 'error_message': 'odoo container cannot be created'
- })
-
- permissions_applied = apply_permissions(name)
- if not permissions_applied:
- r.issue = 'odoo container cannot be started'
- r.status = 5
- r.save()
- return self.create_response(request, {
- 'error_message': 'odoo container cannot be started'
- })
- r.status = 4
- r.save()
-
- return self.create_response(request, {
- 'action': {
- 'type': 'redirect',
- 'ip': settings.SERVER_IP,
- 'port': port
- }
- })
|