def form_valid(self, *args, **kwargs): try: form=kwargs['form'] user=self.request.user ec2_pool = EC2Pool.objects.get(id=kwargs['pool_id']) assert ec2_pool.vpc.access_key.user == self.request.user ec2_tools.refresh_pool(ec2_pool) nodes_to_terminate = form.cleaned_data['nodes_to_terminate'] instance_type = form.cleaned_data['instance_type'] if instance_type == '-': instance_type = None pricing = form.cleaned_data['pricing'] spot_price_order = form.cleaned_data['spot_price_order'] spot_price_custom = form.cleaned_data['spot_price_custom'] errors = ec2_tools.scale_down(ec2_pool, nodes_to_terminate, instance_type, pricing, spot_price_order, spot_price_custom) ec2_pool.save() if errors: self.request.session['errors'] = aws_tools.process_errors(errors) self.success_url = reverse_lazy('pool_details', kwargs={'pool_id':ec2_pool.id}) except Exception as e: self.request.session['errors'] = aws_tools.process_errors([e]) log.exception(e) return HttpResponseRedirect(reverse_lazy('pool_details', kwargs={'pool_id':ec2_pool.id})) return super(EC2PoolScaleDownView, self).form_valid(*args, **kwargs)
def form_valid(self, *args, **kwargs): try: form=kwargs['form'] user=self.request.user ec2_pool = EC2Pool.objects.get(id=kwargs['pool_id']) assert ec2_pool.vpc.access_key.user == self.request.user ec2_tools.refresh_pool(ec2_pool) nodes_to_terminate = form.cleaned_data['nodes_to_terminate'] instance_type = form.cleaned_data['instance_type'] if instance_type == '-': instance_type = None pricing = form.cleaned_data['pricing'] spot_price_order = form.cleaned_data['spot_price_order'] spot_price_custom = form.cleaned_data['spot_price_custom'] errors = ec2_tools.scale_down(ec2_pool, nodes_to_terminate, instance_type, pricing, spot_price_order, spot_price_custom) ec2_pool.save() if errors: self.request.session['errors'] = aws_tools.process_errors(errors) self.success_url = reverse_lazy('pool_details', kwargs={'pool_id':ec2_pool.id}) except Exception, e: self.request.session['errors'] = aws_tools.process_errors([e]) log.exception(e) return HttpResponseRedirect(reverse_lazy('pool_details', kwargs={'pool_id':ec2_pool.id}))
def form_valid(self, *args, **kwargs): try: form=kwargs['form'] user=self.request.user ec2_pool = EC2Pool.objects.get(id=kwargs['pool_id']) assert ec2_pool.vpc.access_key.user == self.request.user ec2_tools.refresh_pool(ec2_pool) extra_nodes=form.cleaned_data['instances_to_add'] spot_price = form.cleaned_data['pricing'] == 'spot' spot_bid_price = form.cleaned_data['spot_bid_price'] instance_type = form.cleaned_data['initial_instance_type'] errors = ec2_tools.scale_up(ec2_pool=ec2_pool, extra_nodes=extra_nodes, instance_type=instance_type, spot=spot_price, spot_bid_price=spot_bid_price) ec2_pool.save() self.request.session['errors'] = aws_tools.process_errors(errors) except Exception as e: self.request.session['errors'] = aws_tools.process_errors([e]) log.exception(e) return HttpResponseRedirect(reverse_lazy('pool_details', kwargs={'pool_id':ec2_pool.id})) self.success_url = reverse_lazy('pool_details', kwargs={'pool_id':ec2_pool.id}) return super(EC2PoolScaleUpView, self).form_valid(*args, **kwargs)
def form_valid(self, *args, **kwargs): form=kwargs['form'] spot = (form.cleaned_data['pricing'] == 'spot') try: pool = EC2Pool(name = form.cleaned_data['name'], vpc = form.cleaned_data['vpc'], initial_instance_type = form.cleaned_data['initial_instance_type'], size=form.cleaned_data['size'], auto_terminate=form.cleaned_data['auto_terminate'], smart_terminate=form.cleaned_data['smart_terminate'], user = form.cleaned_data['vpc'].access_key.user, spot_request=spot, spot_price = form.cleaned_data['spot_bid_price'] ) pool.save() key_pair=ec2_tools.create_key_pair(pool) pool.key_pair = key_pair except Exception as e: log.exception(e) self.request.session['errors'] = aws_tools.process_errors([e]) return HttpResponseRedirect(reverse_lazy('ec2_pool_add')) pool.save() #Launch the pool try: errors = ec2_tools.launch_pool(pool) pool.save() #Connect to Bosco condor_tools.add_ec2_pool(pool) except Exception as e: log.exception(e) self.request.session['errors'] = aws_tools.process_errors([e]) return HttpResponseRedirect(reverse_lazy('pool_details', kwargs={'pool_id':pool.id})) if errors != []: self.request.session['errors'] = aws_tools.process_errors(errors) return HttpResponseRedirect(reverse_lazy('pool_details', kwargs={'pool_id': pool.id})) self.success_url = reverse_lazy('pool_test', kwargs={'pool_id':pool.id}) return super(EC2PoolAddView, self).form_valid(*args, **kwargs)
def form_valid(self, *args, **kwargs): try: form=kwargs['form'] user=self.request.user ec2_pool = EC2Pool.objects.get(id=kwargs['pool_id']) assert ec2_pool.vpc.access_key.user == self.request.user ec2_tools.refresh_pool(ec2_pool) extra_nodes=form.cleaned_data['instances_to_add'] spot_price = form.cleaned_data['pricing'] == 'spot' spot_bid_price = form.cleaned_data['spot_bid_price'] instance_type = form.cleaned_data['initial_instance_type'] errors = ec2_tools.scale_up(ec2_pool=ec2_pool, extra_nodes=extra_nodes, instance_type=instance_type, spot=spot_price, spot_bid_price=spot_bid_price) ec2_pool.save() self.request.session['errors'] = aws_tools.process_errors(errors) except Exception, e: self.request.session['errors'] = aws_tools.process_errors([e]) log.exception(e) return HttpResponseRedirect(reverse_lazy('pool_details', kwargs={'pool_id':ec2_pool.id}))
def form_valid(self, *args, **kwargs): form = kwargs['form'] auto_terminate = form.cleaned_data['auto_terminate'] smart_terminate = form.cleaned_data['smart_terminate'] pool = EC2Pool.objects.get(id=kwargs['pool_id']) assert pool.user == self.request.user if pool.smart_terminate ==True and smart_terminate == False: #In this case we have to remove instance alarms errors = ec2_tools.remove_instances_alarms(pool) if errors != []: self.request.session['errors'] = aws_tools.process_errors([errors]) pool.auto_terminate = auto_terminate pool.smart_terminate = smart_terminate pool.save() self.success_url = reverse_lazy('pool_details', kwargs={'pool_id': kwargs['pool_id']}) return super(EC2PoolTerminationSettingsView, self).form_valid(*args, **kwargs)
def form_valid(self, *args, **kwargs): form=kwargs['form'] spot = (form.cleaned_data['pricing'] == 'spot') try: pool = EC2Pool(name = form.cleaned_data['name'], vpc = form.cleaned_data['vpc'], initial_instance_type = form.cleaned_data['initial_instance_type'], size=form.cleaned_data['size'], auto_terminate=form.cleaned_data['auto_terminate'], smart_terminate=form.cleaned_data['smart_terminate'], user = form.cleaned_data['vpc'].access_key.user, spot_request=spot, spot_price = form.cleaned_data['spot_bid_price'] ) pool.save() key_pair=ec2_tools.create_key_pair(pool) pool.key_pair = key_pair except Exception, e: log.exception(e) self.request.session['errors'] = aws_tools.process_errors([e]) return HttpResponseRedirect(reverse_lazy('ec2_pool_add'))
def dispatch(self, request, *args, **kwargs): key_id = self.kwargs['key_id'] key = AWSAccessKey.objects.get(id=key_id) kwargs['key'] = key assert key.user == request.user kwargs['show_loading_screen'] = True kwargs['loading_title'] = 'Removing key and associated VPC' kwargs['loading_description'] = 'Please be patient and do not navigate away from this page.' #Is this an original key or is it a copy if key.copy_of == None: original = True else: original = False if original: #Build a list of any pools and running jobs that will be terminated when this pool is terminated try: pools = EC2Pool.objects.filter(vpc__vpc_id = key.vpc.vpc_id) except: pools = [] shared_keys = AWSAccessKey.objects.filter(copy_of=key) shared_user_ids = [shared_key.user.id for shared_key in shared_keys] kwargs['shared_users'] = User.objects.filter(id__in=shared_user_ids) else: #A copy of a key. If so, we'll not be deleting the real vpc, adn so try: pools = EC2Pool.objects.filter(vpc__id=key.vpc.id) except: pools = [] kwargs['pools'] = pools errors=[] if kwargs['confirmed']: #Go through and terminate each of the running pools for pool in pools: #First, remove any running tasks running_tasks = pool.get_running_tasks() for task in running_tasks: for subtask in task.subtask_set.all(): condor_tools.remove_task(subtask) task.delete() other_tasks = Task.objects.filter(condor_pool=pool).exclude(pk__in=running_tasks) #Then 'prune' the remaining tasks to remove the pool as a foreignkey for task in other_tasks: task.condor_pool = None task.set_custom_field('condor_pool_name', pool.name) task.save() ec2_tools.terminate_pool(pool) if original: #We also need to delete the vpc (and any associated) try: related = AWSAccessKey.objects.filter(copy_of=key) for related_key in related: related_key.delete() if key.vpc != None: vpc_connection, ec2_connection = aws_tools.create_connections(key) errors += (vpc_tools.delete_vpc(key.vpc, vpc_connection, ec2_connection)) if errors != []: log.exception(errors) request.session['errors'] = aws_tools.process_errors(errors) except Exception, e: log.exception(e) #And delete the key key.delete() else: #Just delete the key object and the vpc key.delete() return HttpResponseRedirect(reverse_lazy('my_account_keys'))
def dispatch(self, request, *args, **kwargs): key_id = self.kwargs['key_id'] key = AWSAccessKey.objects.get(id=key_id) kwargs['key'] = key assert key.user == request.user kwargs['show_loading_screen'] = True kwargs['loading_title'] = 'Removing key and associated VPC' kwargs['loading_description'] = 'Please be patient and do not navigate away from this page.' #Is this an original key or is it a copy if key.copy_of == None: original = True else: original = False if original: #Build a list of any pools and running jobs that will be terminated when this pool is terminated try: pools = EC2Pool.objects.filter(vpc__vpc_id = key.vpc.vpc_id) except: pools = [] shared_keys = AWSAccessKey.objects.filter(copy_of=key) shared_user_ids = [shared_key.user.id for shared_key in shared_keys] kwargs['shared_users'] = User.objects.filter(id__in=shared_user_ids) else: #A copy of a key. If so, we'll not be deleting the real vpc, adn so try: pools = EC2Pool.objects.filter(vpc__id=key.vpc.id) except: pools = [] kwargs['pools'] = pools errors=[] if kwargs['confirmed']: #Go through and terminate each of the running pools for pool in pools: #First, remove any running tasks running_tasks = pool.get_running_tasks() for task in running_tasks: for subtask in task.subtask_set.all(): condor_tools.remove_task(subtask) task.delete() other_tasks = Task.objects.filter(condor_pool=pool).exclude(pk__in=running_tasks) #Then 'prune' the remaining tasks to remove the pool as a foreignkey for task in other_tasks: task.condor_pool = None task.set_custom_field('condor_pool_name', pool.name) task.save() ec2_tools.terminate_pool(pool) if original: #We also need to delete the vpc (and any associated) try: related = AWSAccessKey.objects.filter(copy_of=key) for related_key in related: related_key.delete() if key.vpc != None: vpc_connection, ec2_connection = aws_tools.create_connections(key) errors += (vpc_tools.delete_vpc(key.vpc, vpc_connection, ec2_connection)) if errors != []: log.exception(errors) request.session['errors'] = aws_tools.process_errors(errors) except Exception as e: log.exception(e) #And delete the key key.delete() else: #Just delete the key object and the vpc key.delete() return HttpResponseRedirect(reverse_lazy('my_account_keys')) return super(KeysDeleteView, self).dispatch(request, *args, **kwargs)
pool.save() #Launch the pool try: errors = ec2_tools.launch_pool(pool) pool.save() #Connect to Bosco condor_tools.add_ec2_pool(pool) except Exception, e: log.exception(e) self.request.session['errors'] = aws_tools.process_errors([e]) return HttpResponseRedirect(reverse_lazy('pool_details', kwargs={'pool_id':pool.id})) if errors != []: self.request.session['errors'] = aws_tools.process_errors(errors) return HttpResponseRedirect(reverse_lazy('pool_details', kwargs={'pool_id': pool.id})) self.success_url = reverse_lazy('pool_test', kwargs={'pool_id':pool.id}) return super(EC2PoolAddView, self).form_valid(*args, **kwargs) def dispatch(self, request, *args, **kwargs): kwargs['show_loading_screen'] = True kwargs['loading_title'] = 'Launching pool' kwargs['loading_description'] = 'Please be patient and do not navigate away from this page. Launching a pool can take several minutes' #Get an aws key for this user. For the time being, just use the first one in the list user = request.user keys = AWSAccessKey.objects.filter(user=user) if keys.count() > 0: kwargs['key_id'] = keys[0].id