Skip to content

Commit 380cfca

Browse files
Merge pull request #851 from globocom/dev
Dev > Master
2 parents f35be05 + 81a43f3 commit 380cfca

File tree

6 files changed

+136
-7
lines changed

6 files changed

+136
-7
lines changed

dbaas/drivers/replication_topologies/mysql.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1065,22 +1065,30 @@ def get_update_ssl_steps(self):
10651065
'Disable monitoring and alarms': (
10661066
'workflow.steps.util.zabbix.DisableAlarms',
10671067
'workflow.steps.util.db_monitor.DisableMonitoring',
1068-
'workflow.steps.util.ssl.UpdateExpireAtDateRollback',
1069-
'workflow.steps.util.ssl.BackupSSLFolder',
10701068
),
10711069
}] + [{
10721070
'Disable SSL': (
10731071
'workflow.steps.util.ssl.UnSetReplicationUserRequireSSL',
10741072
),
10751073
}] + [{
10761074
'Configure SSL': (
1077-
'workflow.steps.util.ssl.UpdateSSLForInfra',
1078-
'workflow.steps.util.ssl.UpdateSSLForInstance',
1075+
'workflow.steps.util.ssl.UpdateExpireAtDateRollback',
1076+
'workflow.steps.util.ssl.MoveSSLFolder',
1077+
'workflow.steps.util.ssl.UpdateOpenSSlLib',
1078+
'workflow.steps.util.ssl.CreateSSLFolder',
1079+
'workflow.steps.util.ssl.CreateSSLConfForInfraEndPoint',
1080+
'workflow.steps.util.ssl.CreateSSLConfForInstanceIP',
1081+
'workflow.steps.util.ssl.RequestSSLForInfra',
1082+
'workflow.steps.util.ssl.RequestSSLForInstance',
10791083
'workflow.steps.util.ssl.CreateJsonRequestFileInfra',
10801084
'workflow.steps.util.ssl.CreateJsonRequestFileInstance',
10811085
'workflow.steps.util.ssl.CreateCertificateInfra',
10821086
'workflow.steps.util.ssl.CreateCertificateInstance',
10831087
'workflow.steps.util.ssl.SetSSLFilesAccessMySQL',
1088+
'workflow.steps.util.ssl.SetInfraConfiguredSSL',
1089+
'workflow.steps.util.plan.Configure',
1090+
'workflow.steps.util.plan.ConfigureLog',
1091+
'workflow.steps.util.metric_collector.ConfigureTelegraf',
10841092
'workflow.steps.util.ssl.UpdateExpireAtDate',
10851093
),
10861094
}] + [{
@@ -1089,7 +1097,7 @@ def get_update_ssl_steps(self):
10891097
'workflow.steps.util.vm.ChangeMaster',
10901098
'workflow.steps.util.database.CheckIfSwitchMaster',
10911099
'workflow.steps.util.database.Stop',
1092-
'workflow.steps.util.ssl.RestoreSSLFolder4Rollback',
1100+
# 'workflow.steps.util.ssl.RestoreSSLFolder4Rollback',
10931101
'workflow.steps.util.database.Start',
10941102
'workflow.steps.util.metric_collector.RestartTelegraf',
10951103
'workflow.steps.util.database.CheckIfSwitchMasterRollback',
@@ -1103,6 +1111,7 @@ def get_update_ssl_steps(self):
11031111
),
11041112
}] + [{
11051113
'Enabling monitoring and alarms': (
1114+
'workflow.steps.util.db_monitor.UpdateInfraSSLMonitor',
11061115
'workflow.steps.util.db_monitor.EnableMonitoring',
11071116
'workflow.steps.util.zabbix.EnableAlarms',
11081117
),

dbaas/logical/models.py

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
from util import slugify, make_db_random_password
1919
from util.models import BaseModel
20-
from physical.models import DatabaseInfra, Environment
20+
from physical.models import DatabaseInfra, Environment, Offering
2121
from drivers import factory_for
2222
from system.models import Configuration
2323
from account.models import Team
@@ -1373,6 +1373,67 @@ def update_team_labels(self):
13731373
LOG.error(msg)
13741374
status = False
13751375
return status, msg
1376+
1377+
def get_future_offering(self, resize_target):
1378+
LOG.info('Buscando Future Offering de %s para database %s -> Offer atual: %s', resize_target, self.name, self.infra.offering.name)
1379+
current_offer = self.infra.offering
1380+
environment = self.environment
1381+
1382+
future_offer = None
1383+
1384+
# Busca ofertas disponíveis para o environment
1385+
possible_offerings_environment = self.get_possible_future_offerings_for_environment(environment)
1386+
1387+
if resize_target == 'cpu':
1388+
# Busca por offer > de CPU e >= de RAM
1389+
future_offer = self.get_next_offer_for_cpu(environment, current_offer, possible_offerings_environment)
1390+
1391+
elif resize_target == 'ram':
1392+
# Busca por offer >= de CPU e > de RAM
1393+
future_offer = self.get_next_offer_for_ram(environment, current_offer, possible_offerings_environment)
1394+
1395+
elif resize_target == 'cpu_ram':
1396+
# Busca por offer > de CPU e > de RAM
1397+
future_offer = self.get_next_offer_for_cpu_ram(environment, current_offer, possible_offerings_environment)
1398+
1399+
LOG.info('Future Offering selecionada: %s', future_offer.name)
1400+
1401+
return future_offer
1402+
1403+
def get_possible_future_offerings_for_environment(self, environment):
1404+
# Busca na Configuration os nomes resumidos (ex: c2m2) das offerings disponíveis no DBaaS para auto upgrade
1405+
possible_offerings_names = Configuration.get_by_name_as_list(
1406+
'allowed_future_offerings_names_auto_upgrade_vm'
1407+
)
1408+
LOG.info('Possiveis offerings no DBaaS: %s', possible_offerings_names)
1409+
1410+
possible_offerings_environment = []
1411+
1412+
# traz o nome real das Offerings, ja filtrando pelo environment
1413+
for possible_offer in possible_offerings_names:
1414+
offer_with_name = environment.offerings.filter(name__icontains=possible_offer).first()
1415+
if offer_with_name:
1416+
possible_offerings_environment.append(offer_with_name.name)
1417+
1418+
return possible_offerings_environment
1419+
1420+
def get_next_offer_for_cpu(self, environment, current_offer, possible_offerings_environment):
1421+
return environment.offerings.filter(
1422+
cpus__gt=current_offer.cpus,
1423+
memory_size_mb__gte=current_offer.memory_size_mb,
1424+
name__in=possible_offerings_environment).order_by('cpus', 'memory_size_mb').first()
1425+
1426+
def get_next_offer_for_ram(self, environment, current_offer, possible_offerings_environment):
1427+
return environment.offerings.filter(
1428+
cpus__gte=current_offer.cpus,
1429+
memory_size_mb__gt=current_offer.memory_size_mb,
1430+
name__in=possible_offerings_environment).order_by('cpus', 'memory_size_mb').first()
1431+
1432+
def get_next_offer_for_cpu_ram(self, environment, current_offer, possible_offerings_environment):
1433+
return environment.offerings.filter(
1434+
cpus__gt=current_offer.cpus,
1435+
memory_size_mb__gt=current_offer.memory_size_mb,
1436+
name__in=possible_offerings_environment).order_by('cpus', 'memory_size_mb').first()
13761437

13771438

13781439
class DatabaseLock(BaseModel):

dbaas/logical/templates/logical/database/details/resizes_tab.html

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,16 @@
4141
{% endif %}
4242
</div>
4343
</div>
44+
{% if show_resize_btns %}
45+
<div class="control-group">
46+
<div class="control-label"><label>AutoResize:</label></div>
47+
<div class="controls">
48+
<a href="{% url 'resize_vm_from_btn' database.id 'cpu_ram' %}" target="_blank" class="btn btn-success">Resize CPU & RAM</a>
49+
<a href="{% url 'resize_vm_from_btn' database.id 'cpu' %}" target="_blank" class="btn btn-primary">Resize CPU</a>
50+
<a href="{% url 'resize_vm_from_btn' database.id 'ram' %}" target="_blank" class="btn btn-info">Resize RAM</a>
51+
</div>
52+
</div>
53+
{% endif %}
4454
{% endif %}
4555
<!-- <div class="control-group">-->
4656
<!-- <div class="control-label"><label>Disk offering:</label></div>-->

dbaas/logical/urls.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from django.conf.urls import patterns, url
22
from .views import refresh_status, toggle_monitoring, start_database_vm, stop_database_vm, set_attention, funct_send_all_chg
33
from .views import (CredentialView, CredentialSSLView,
4-
credential_parameter_by_name, check_offering_sizes)
4+
credential_parameter_by_name, check_offering_sizes, resize_vm_from_btn)
55

66

77
urlpatterns = patterns(
@@ -36,4 +36,7 @@
3636
url(r"^check_offering_sizes/",
3737
check_offering_sizes,
3838
name="check_offering_sizes"),
39+
url(r"^resize_vm/(?P<database_id>\d*)/(?P<resize_target>[\w\-\_]+)",
40+
resize_vm_from_btn,
41+
name="resize_vm_from_btn")
3942
)

dbaas/logical/views.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from django.utils.decorators import method_decorator
1616
from django.http import HttpResponse, HttpResponseRedirect
1717
from django.template import RequestContext
18+
from django.core import serializers
1819
from workflow.steps.util.base import HostProviderClient
1920

2021
from dbaas_credentials.models import CredentialType
@@ -1117,6 +1118,17 @@ def database_resizes(request, context, database):
11171118
else:
11181119
context['vm_offerings'].append(context['current_vm_offering'])
11191120

1121+
user_teams = request.user.team_set.all()
1122+
teams_names = []
1123+
for team in user_teams:
1124+
teams_names.append(team.name)
1125+
1126+
show_resize_btns = False
1127+
if request.user.is_superuser or 'dbaas' in teams_names:
1128+
show_resize_btns = True
1129+
1130+
context['show_resize_btns'] = show_resize_btns
1131+
11201132
return render_to_response(
11211133
"logical/database/details/resizes_tab.html",
11221134
context, RequestContext(request)
@@ -2723,3 +2735,12 @@ def check_offering_sizes(request):
27232735
'cpus': cpus,
27242736
'memory': memory})
27252737
return HttpResponse(response_json, content_type="application/json")
2738+
2739+
2740+
@login_required()
2741+
@method_decorator(csrf_exempt)
2742+
def resize_vm_from_btn(request, database_id, resize_target):
2743+
database = get_object_or_404(Database, pk=database_id)
2744+
2745+
future_offering = database.get_future_offering(resize_target)
2746+
return HttpResponse(json.dumps({'future_offering': future_offering.name}), content_type="application/json")

dbaas/workflow/steps/util/ssl.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -820,6 +820,31 @@ def undo(self):
820820
return self.run_script(script)
821821

822822

823+
class MoveSSLFolder(SSL):
824+
source_ssl_dir = '/data/ssl'
825+
backup_ssl_dir = '/data/ssl-BKP'
826+
827+
def __unicode__(self):
828+
return "Moving backup of SSL folder..."
829+
830+
def remove_created_folder(self, folder):
831+
script = 'rm -rf {}'.format(folder)
832+
return self.run_script(script)
833+
834+
def move_folder(self, source, dest):
835+
script = 'rm -rf {};mv {} {}'.format(
836+
dest, source, dest
837+
)
838+
return self.run_script(script)
839+
840+
def do(self):
841+
return self.move_folder(source=self.source_ssl_dir, dest=self.backup_ssl_dir)
842+
843+
def undo(self):
844+
if self.remove_created_folder(self.source_ssl_dir):
845+
return self.move_folder(source=self.backup_ssl_dir, dest=self.source_ssl_dir)
846+
847+
823848
class RestoreSSLFolder4Rollback(BackupSSLFolder):
824849
def __unicode__(self):
825850
return "Restore SSL folder if doing rollback..."

0 commit comments

Comments
 (0)