def _disk_resize(request, database):
    try:
        check_is_database_enabled(database.id, 'disk resize')
    except DisabledDatabase as err:
        messages.add_message(request, messages.ERROR, err.message)
        return

    disk_offering = DiskOffering.objects.get(
        id=request.POST.get('disk_offering')
    )

    current_used = round(database.used_size_in_gb, 2)
    offering_size = round(disk_offering.size_gb(), 2)
    if current_used >= offering_size:
        messages.add_message(
            request, messages.ERROR,
            'Your database has {} GB, please choose a bigger disk'.format(
                current_used
            )
        )
        return

    Database.disk_resize(
        database=database,
        new_disk_offering=disk_offering.id,
        user=request.user
    )
def _add_read_only_instances(request, database):
    try:
        check_is_database_dead(database.id, 'Add read-only instances')
        check_is_database_enabled(database.id, 'Add read-only instances')
    except DisabledDatabase as err:
        messages.add_message(request, messages.ERROR, err.message)
        return

    if not database.plan.replication_topology.has_horizontal_scalability:
        messages.add_message(
            request, messages.ERROR,
            'Database topology do not have horizontal scalability')
        return

    if 'add_read_qtd' not in request.POST:
        messages.add_message(request, messages.ERROR, 'Quantity is required')
        return

    max_read_hosts = Configuration.get_by_name_as_int('max_read_hosts', 5)
    qtd_new_hosts = int(request.POST['add_read_qtd'])
    current_read_nodes = len(database.infra.instances.filter(read_only=True))
    total_read_hosts = qtd_new_hosts + current_read_nodes
    if total_read_hosts > max_read_hosts:
        messages.add_message(
            request, messages.ERROR,
            'Current limit of read only hosts is {} and you are trying to setup {}'
            .format(max_read_hosts, total_read_hosts))
        return

    TaskRegister.database_add_instances(database=database,
                                        user=request.user,
                                        number_of_instances=qtd_new_hosts)
def _disk_resize(request, database):
    try:
        check_is_database_enabled(database.id, 'disk resize')
    except DisabledDatabase as err:
        messages.add_message(request, messages.ERROR, err.message)
        return

    disk_offering = DiskOffering.objects.get(
        id=request.POST.get('disk_offering')
    )

    current_used = round(database.used_size_in_gb, 2)
    offering_size = round(disk_offering.size_gb(), 2)
    if current_used >= offering_size:
        messages.add_message(
            request, messages.ERROR,
            'Your database has {} GB, please choose a bigger disk'.format(
                current_used
            )
        )
        return

    Database.disk_resize(
        database=database,
        new_disk_offering=disk_offering.id,
        user=request.user
    )
 def check_database_status(self):
     try:
         if not self.retry:
             check_is_database_dead(self.database.id, 'Upgrade Database')
         check_is_database_enabled(self.database.id, 'Upgrade Database',
                                   ['notification.tasks.upgrade_database'])
         return (True, '')
     except DisabledDatabase as err:
         return (False, err.message)
 def check_database_status(self):
     try:
         check_is_database_dead(self.database.id,
                                'Remove read-only instances')
         check_is_database_enabled(
             self.database.id, 'Remove read-only instances',
             ['notification.tasks.remove_readonly_instance'])
         return (True, '')
     except DisabledDatabase as err:
         return (False, err.message)
 def check_database_status(self):
     try:
         check_is_database_dead(self.database.id, 'Add read-only instances')
         check_is_database_enabled(
             self.database.id,
             'Add read-only instances',
             ['notification.tasks.add_instances_to_database',
              'notification.tasks.add_instances_to_database_rollback']
         )
         return (True, '')
     except DisabledDatabase as err:
         return (False, err.message)
def _vm_resize(request, database):
    try:
        check_is_database_dead(database.id, 'VM resize')
        check_is_database_enabled(database.id, 'VM resize')
    except DisabledDatabase as err:
        messages.add_message(request, messages.ERROR, err.message)
    else:
        offering = Offering.objects.get(id=request.POST.get('vm_offering'))
        Database.resize(
            database=database,
            offering=offering,
            user=request.user,
        )
def _vm_resize(request, database):
    try:
        check_is_database_dead(database.id, 'VM resize')
        check_is_database_enabled(database.id, 'VM resize')
    except DisabledDatabase as err:
        messages.add_message(request, messages.ERROR, err.message)
    else:
        cloudstack_pack = CloudStackPack.objects.get(
            id=request.POST.get('vm_offering'))
        Database.resize(
            database=database,
            cloudstackpack=cloudstack_pack,
            user=request.user,
        )
def _vm_resize(request, database):
    try:
        check_is_database_dead(database.id, 'VM resize')
        check_is_database_enabled(database.id, 'VM resize')
    except DisabledDatabase as err:
        messages.add_message(request, messages.ERROR, err.message)
    else:
        offering = Offering.objects.get(
            id=request.POST.get('vm_offering')
        )
        Database.resize(
            database=database,
            offering=offering,
            user=request.user,
        )
    def database_disk_resize_view(self, request, database_id):
        try:
            database = check_is_database_enabled(database_id, 'disk resize')
            offerings = DiskOffering.objects.all().exclude(
                id=database.databaseinfra.disk_offering.id)
            check_resize_options(database_id, offerings)
        except (DisabledDatabase, NoResizeOption) as err:
            self.message_user(request, err.message, messages.ERROR)
            return HttpResponseRedirect(err.url)

        form = None
        if request.method == 'POST':
            form = DiskResizeDatabaseForm(database=database, data=request.POST)
            if form.is_valid():
                Database.disk_resize(
                    database=database,
                    new_disk_offering=request.POST.get('target_offer'),
                    user=request.user)

                url = reverse('admin:notification_taskhistory_changelist')
                return HttpResponseRedirect("{}?user={}".format(
                    url, request.user.username))
        else:
            form = DiskResizeDatabaseForm(database=database)

        return render_to_response("logical/database/disk_resize.html",
                                  locals(),
                                  context_instance=RequestContext(request))
def database_make_backup(request, context, database):
    error = None
    try:
        check_is_database_dead(database.id, 'Backup')
        check_is_database_enabled(database.id, 'Backup')
    except DisabledDatabase as err:
        error = err.message

    if not context['is_dba']:
        error = "Only DBA's can do database backup"

    if error:
        messages.add_message(request, messages.ERROR, error)
    else:
        TaskRegister.database_backup(database=database,
                                     user=request.user.username)

    return HttpResponseRedirect(
        reverse('admin:logical_database_backup', kwargs={'id': database.id}))
def database_make_backup(request, context, database):
    error = None
    try:
        check_is_database_dead(database.id, 'Backup')
        check_is_database_enabled(database.id, 'Backup')
    except DisabledDatabase as err:
        error = err.message

    if not context['is_dba']:
        error = "Only DBA's can do database backup"

    if error:
        messages.add_message(request, messages.ERROR, error)
    else:
        TaskRegister.database_backup(
            database=database, user=request.user.username
        )

    return HttpResponseRedirect(
        reverse('admin:logical_database_backup', kwargs={'id': database.id})
    )
    def database_resize_view(self, request, database_id):
        try:
            check_is_database_dead(database_id, 'VM resize')
            database = check_is_database_enabled(database_id, 'VM resize')

            from dbaas_cloudstack.models import CloudStackPack
            offerings = CloudStackPack.objects.filter(
                offering__region__environment=database.environment,
                engine_type__name=database.engine_type).exclude(
                    offering__serviceofferingid=database.offering_id)
            check_resize_options(database_id, offerings)

        except (DisabledDatabase, NoResizeOption) as err:
            self.message_user(request, err.message, messages.ERROR)
            return HttpResponseRedirect(err.url)

        form = None
        if request.method == 'POST':  # If the form has been submitted...
            form = ResizeDatabaseForm(
                request.POST,
                initial={
                    "database_id": database_id,
                    "original_offering_id": database.offering_id
                },
            )  # A form bound to the POST data
            if form.is_valid():  # All validation rules pass

                cloudstackpack = CloudStackPack.objects.get(
                    id=request.POST.get('target_offer'))
                Database.resize(
                    database=database,
                    cloudstackpack=cloudstackpack,
                    user=request.user,
                )

                url = reverse('admin:notification_taskhistory_changelist')

                # Redirect after POST
                return HttpResponseRedirect(url +
                                            "?user=%s" % request.user.username)
        else:
            form = ResizeDatabaseForm(initial={
                "database_id":
                database_id,
                "original_offering_id":
                database.offering_id
            }, )  # An unbound form
        return render_to_response("logical/database/resize.html",
                                  locals(),
                                  context_instance=RequestContext(request))
def _add_read_only_instances(request, database):
    try:
        check_is_database_dead(database.id, 'Add read-only instances')
        check_is_database_enabled(database.id, 'Add read-only instances')
    except DisabledDatabase as err:
        messages.add_message(request, messages.ERROR, err.message)
        return

    if not database.plan.replication_topology.has_horizontal_scalability:
        messages.add_message(
            request, messages.ERROR,
            'Database topology do not have horizontal scalability'
        )
        return

    if 'add_read_qtd' not in request.POST:
        messages.add_message(request, messages.ERROR, 'Quantity is required')
        return

    max_read_hosts = Configuration.get_by_name_as_int('max_read_hosts', 5)
    qtd_new_hosts = int(request.POST['add_read_qtd'])
    current_read_nodes = len(database.infra.instances.filter(read_only=True))
    total_read_hosts = qtd_new_hosts + current_read_nodes
    if total_read_hosts > max_read_hosts:
        messages.add_message(
            request, messages.ERROR,
            'Current limit of read only hosts is {} and you are trying to setup {}'.format(
                max_read_hosts, total_read_hosts
            )
        )
        return

    TaskRegister.database_add_instances(
        database=database,
        user=request.user,
        number_of_instances=qtd_new_hosts
    )