From 030f26c903b63583895995f570bf9f61e792a5b4 Mon Sep 17 00:00:00 2001 From: vanzhiganov Date: Sat, 11 Jun 2016 14:20:56 +0300 Subject: [PATCH] 66 API --- SWSCloudAPI/API/__init__.py | 44 ++++++++++++++++++--- SWSCloudCore/controllers/__init__.py | 1 + SWSCloudCore/controllers/common/__init__.py | 21 +++------- SWSCloudCore/views/vms/__init__.py | 6 +-- SWSCloudWeb/__init__.py | 0 extra/uwsgi-api.ini | 19 +++++++++ extra/uwsgi.ini | 12 +++--- setup.py | 6 ++- 8 files changed, 77 insertions(+), 32 deletions(-) create mode 100644 SWSCloudWeb/__init__.py create mode 100644 extra/uwsgi-api.ini diff --git a/SWSCloudAPI/API/__init__.py b/SWSCloudAPI/API/__init__.py index c02e049..3ec0b26 100644 --- a/SWSCloudAPI/API/__init__.py +++ b/SWSCloudAPI/API/__init__.py @@ -463,13 +463,50 @@ def vms_create(): @api.route('/vms/', methods=['POST']) @auth.login_required def vm_actions(vm_id): - # TODO: - pass + """ + """ + # init ... + vm = ControllerVMS(g.user_id) + # get container details + vm_details = vm.get(vm_id=vm_id) + + if request.form.get('action') == "start": + if ControllerBilling().get(g.user_id) <= 0: + return jsonify(message='no money') + + vm.set_status(vm_id, 2) + # Создание задания + ControllerTasks(g.user_id).create( + datacenter_id=vm_details.datacenter.id, + server_id=vm_details.server.id, + task='vm_start', + status=0, + vm_id=vm_details.id + ) + + if request.form.get('action') == "restart": + return jsonify(message='not supported') + + if request.form.get('action') == "stop": + vm.status_set(vm_id, 3) + # Создание задания + ControllerTasks(g.user_id).create( + vm_details.datacenter.id, + vm_details.server.id, + 'vm_stop', + 0, + vm_id=vm_id + ) @api.route('/vms/', methods=['DELETE']) @auth.login_required def vm_delete(vm_id): + """ + Удаление виртуального сервера + :param vm_id: + :return: + """ # vms = ControllerVMS(g.user_id) tasks = ControllerTasks(g.user_id) @@ -477,10 +514,8 @@ def vm_delete(vm_id): # if user not have a container then redirect to the container list if not vms.exists(vm_id): return jsonify(message='not exists') - # get container details vm_details = vms.get(vm_id) - # Обновляем статус "5" для правила vms.set_status(vm_id, 5) # Создание задания @@ -492,5 +527,4 @@ def vm_delete(vm_id): vm_id=vm_id, # hostname=vm_details.hostname ) - return jsonify(status=0, message='ok') diff --git a/SWSCloudCore/controllers/__init__.py b/SWSCloudCore/controllers/__init__.py index e69de29..57d631c 100644 --- a/SWSCloudCore/controllers/__init__.py +++ b/SWSCloudCore/controllers/__init__.py @@ -0,0 +1 @@ +# coding: utf-8 diff --git a/SWSCloudCore/controllers/common/__init__.py b/SWSCloudCore/controllers/common/__init__.py index c9adb74..607aa07 100644 --- a/SWSCloudCore/controllers/common/__init__.py +++ b/SWSCloudCore/controllers/common/__init__.py @@ -20,7 +20,8 @@ class ControllerCommon: def __init__(self): pass - def generate_password(self, size=14, chars=string.ascii_uppercase + string.digits): + @staticmethod + def generate_password(size=14, chars=string.ascii_uppercase + string.digits): return ''.join(random.choice(chars) for _ in range(size)) @@ -38,19 +39,6 @@ class ControllerManagement: ) return True - class Containers: - def init_new_server(self, server_id): - rules = self.get_all() - - for rule in rules: - if models.RulesServers.select().where( - models.RulesServers.server == server_id, - models.RulesServers.rule == rule.id - ).count() == 0: - models.RulesServers.create() - - return True - def get_all(self): return models.Rules.select() @@ -291,6 +279,7 @@ class Admins: :param email: :param password: + :param status: :return: """ password_hash = md5(password).hexdigest() @@ -305,5 +294,5 @@ class Admins: return True def get_id_by_email(self, email): - admin = models.Admins.select(models.Admins.id).where(models.Admins.email == email).limit(1) - return admin[0].id + admin = models.Admins.select(models.Admins.id).where(models.Admins.email == email).get() + return admin.id diff --git a/SWSCloudCore/views/vms/__init__.py b/SWSCloudCore/views/vms/__init__.py index d7194d8..ee0ce0b 100644 --- a/SWSCloudCore/views/vms/__init__.py +++ b/SWSCloudCore/views/vms/__init__.py @@ -254,7 +254,7 @@ def settings(vm_id): if request.method == 'POST': if request.form['action'] == 'set_status': - if request.form['status'] == 'inactive': + if request.form['action'] == 'stop': vm.status_set(vm_id, 3) # Создание задания ControllerTasks(session['user_id']).create( @@ -266,7 +266,7 @@ def settings(vm_id): ) return redirect(url_for('vms.settings', vm_id=vm_id)) - if request.form['status'] == 'active': + if request.form.get('action') == 'start': balance = ControllerBilling().get(session['user_id']) if balance <= 0: @@ -275,7 +275,7 @@ def settings(vm_id): vm.set_status(vm_id, 2) # Создание задания - ControllerTasks(session['user_id']).create( + ControllerTasks(session.get('user_id')).create( vm_details.datacenter.id, vm_details.server.id, 'vm_start', diff --git a/SWSCloudWeb/__init__.py b/SWSCloudWeb/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/extra/uwsgi-api.ini b/extra/uwsgi-api.ini new file mode 100644 index 0000000..b2d1bb4 --- /dev/null +++ b/extra/uwsgi-api.ini @@ -0,0 +1,19 @@ +[uwsgi] +virtualenv = /home/gocloud/env + +;for http +;protocol = http +;socket = 127.0.0.1:8080 + +; for unix-socket +socket = /var/run/sws/gocloud_api.sock +chmod-socket = 777 + +module = SWSCloudAPI:app + +master = true +processes = 1 + +vacuum = true + +die-on-term = true diff --git a/extra/uwsgi.ini b/extra/uwsgi.ini index e00cee5..e91f2d4 100644 --- a/extra/uwsgi.ini +++ b/extra/uwsgi.ini @@ -1,20 +1,18 @@ [uwsgi] -;virtualenv -virtualenv = /var/env/gocloud.ru/ -;virtualenv=/home/vanzhiganov/env/gocloud_server/ +virtualenv = /home/gocloud/env ;for http ;protocol = http ;socket = 127.0.0.1:8080 ; for unix-socket -socket = /var/run/procdnru_control.sock -chmod-socket = 770 +socket = /var/run/sws/gocloud.sock +chmod-socket = 777 -module = app:app +module = SWSCloudCore:app master = true -processes = 5 +processes = 2 vacuum = true diff --git a/setup.py b/setup.py index 1437797..34ec412 100644 --- a/setup.py +++ b/setup.py @@ -4,12 +4,14 @@ from setuptools import setup setup( name='SWSCloudCore', - version='2.4.11', + version='2.5.0', author='Vyacheslav Anzhiganov', author_email='hello@anzhiganov.com', packages=[ + # API 'SWSCloudAPI', 'SWSCloudAPI.API', + # Core 'SWSCloudCore', 'SWSCloudCore.controllers', 'SWSCloudCore.controllers.administrators', @@ -41,6 +43,8 @@ setup( 'SWSCloudCore.views.support', 'SWSCloudCore.views.tasks', 'SWSCloudCore.views.vms', + # Web + # ... ], package_data={ 'SWSCloudCore': [