Add UserHosting public key to opennebula user
This commit is contained in:
		
					parent
					
						
							
								fb8dac7d00
							
						
					
				
			
			
				commit
				
					
						9753dfd2fc
					
				
			
		
					 2 changed files with 110 additions and 88 deletions
				
			
		|  | @ -40,6 +40,7 @@ from oca.pool import WrongNameError | |||
| CONNECTION_ERROR = "Your VMs cannot be displayed at the moment due to a backend \ | ||||
|                     connection error. please try again in a few minutes." | ||||
| 
 | ||||
| 
 | ||||
| class DjangoHostingView(ProcessVMSelectionMixin, View): | ||||
|     template_name = "hosting/django.html" | ||||
| 
 | ||||
|  | @ -189,7 +190,8 @@ class SignupView(CreateView): | |||
|     model = CustomUser | ||||
| 
 | ||||
|     def get_success_url(self): | ||||
|         next_url = self.request.session.get('next', reverse_lazy('hosting:virtual_machines')) | ||||
|         next_url = self.request.session.get( | ||||
|             'next', reverse_lazy('hosting:virtual_machines')) | ||||
|         return next_url | ||||
| 
 | ||||
|     def form_valid(self, form): | ||||
|  | @ -243,12 +245,14 @@ class PasswordResetConfirmView(PasswordResetConfirmViewMixin): | |||
| 
 | ||||
|                 return self.form_valid(form) | ||||
|             else: | ||||
|                 messages.error(request, 'Password reset has not been successful.') | ||||
|                 messages.error( | ||||
|                     request, 'Password reset has not been successful.') | ||||
|                 form.add_error(None, 'Password reset has not been successful.') | ||||
|                 return self.form_invalid(form) | ||||
| 
 | ||||
|         else: | ||||
|             messages.error(request, 'The reset password link is no longer valid.') | ||||
|             messages.error( | ||||
|                 request, 'The reset password link is no longer valid.') | ||||
|             form.add_error(None, 'The reset password link is no longer valid.') | ||||
|             return self.form_invalid(form) | ||||
| 
 | ||||
|  | @ -337,6 +341,20 @@ class GenerateVMSSHKeysView(LoginRequiredMixin, FormView): | |||
|                 'form': UserHostingKeyForm(request=self.request), | ||||
|             }) | ||||
| 
 | ||||
|             owner = self.request.user | ||||
|             # Create OpenNebulaManager | ||||
|             manager = OpenNebulaManager(email=owner.email, | ||||
|                                         password=owner.password) | ||||
|             # Get OpenNebula user id | ||||
|             user_pool = manager._get_user_pool() | ||||
|             opennebula_user = user_pool.get_by_name(owner.email) | ||||
| 
 | ||||
|             # Get user ssh key | ||||
|             user_key = UserHostingKey.objects.get(user=owner) | ||||
|             # Add ssh key to user | ||||
|             manager.oneadmin_client.call('user.update', opennebula_user.id, | ||||
|                                          '<CONTEXT><SSH_PUBLIC_KEY>{ssh_key}</SSH_PUBLIC_KEY></CONTEXT>'.format(ssh_key=user_key.public_key)) | ||||
| 
 | ||||
|         # return HttpResponseRedirect(reverse('hosting:key_pair')) | ||||
|         return render(self.request, self.template_name, context) | ||||
| 
 | ||||
|  | @ -385,9 +403,11 @@ class PaymentVMView(LoginRequiredMixin, FormView): | |||
|         user = self.request.user | ||||
| 
 | ||||
|         # Get user last order | ||||
|         last_hosting_order = HostingOrder.objects.filter(customer__user=user).last() | ||||
|         last_hosting_order = HostingOrder.objects.filter( | ||||
|             customer__user=user).last() | ||||
| 
 | ||||
|         # If user has already an hosting order, get the credit card data from it | ||||
|         # If user has already an hosting order, get the credit card data from | ||||
|         # it | ||||
|         if last_hosting_order: | ||||
|             credit_card_data = last_hosting_order.get_cc_data() | ||||
|             context.update({ | ||||
|  | @ -476,7 +496,6 @@ class PaymentVMView(LoginRequiredMixin, FormView): | |||
|             except UserHostingKey.DoesNotExist: | ||||
|                 pass | ||||
| 
 | ||||
| 
 | ||||
|             # Create a vm using logged user | ||||
|             vm_id = manager.create_vm( | ||||
|                 template_id=vm_template_id, | ||||
|  | @ -494,14 +513,16 @@ class PaymentVMView(LoginRequiredMixin, FormView): | |||
|             ) | ||||
| 
 | ||||
|             # Create a Hosting Bill | ||||
|             bill = HostingBill.create(customer=customer, billing_address=billing_address) | ||||
|             bill = HostingBill.create( | ||||
|                 customer=customer, billing_address=billing_address) | ||||
| 
 | ||||
|             # Create Billing Address for User if he does not have one | ||||
|             if not customer.user.billing_addresses.count(): | ||||
|                 billing_address_data.update({ | ||||
|                     'user': customer.user.id | ||||
|                 }) | ||||
|                 billing_address_user_form = UserBillingAddressForm(billing_address_data) | ||||
|                 billing_address_user_form = UserBillingAddressForm( | ||||
|                     billing_address_data) | ||||
|                 billing_address_user_form.is_valid() | ||||
|                 billing_address_user_form.save() | ||||
| 
 | ||||
|  | @ -603,7 +624,6 @@ class VirtualMachinesPlanListView(LoginRequiredMixin, ListView): | |||
|             self.kwargs['error'] = 'connection' | ||||
|             return [] | ||||
| 
 | ||||
|      | ||||
|     def get_context_data(self, **kwargs): | ||||
|         error = self.kwargs.get('error') | ||||
|         if error is not None: | ||||
|  | @ -658,7 +678,8 @@ class CreateVirtualMachinesView(LoginRequiredMixin, View): | |||
|         template = manager.get_template(template_id) | ||||
|         configuration_id = int(request.POST.get('configuration')) | ||||
|         configuration = HostingPlan.objects.get(id=configuration_id) | ||||
|         request.session['template'] = VirtualMachineTemplateSerializer(template).data | ||||
|         request.session['template'] = VirtualMachineTemplateSerializer( | ||||
|             template).data | ||||
| 
 | ||||
|         request.session['specs'] = configuration.serialize() | ||||
|         return redirect(reverse('hosting:payment')) | ||||
|  |  | |||
|  | @ -10,6 +10,7 @@ from oca.pool import WrongNameError | |||
| from oca.exceptions import OpenNebulaException | ||||
| logger = logging.getLogger(__name__) | ||||
| 
 | ||||
| 
 | ||||
| class OpenNebulaManager(): | ||||
|     """This class represents an opennebula manager.""" | ||||
| 
 | ||||
|  | @ -66,6 +67,7 @@ class OpenNebulaManager(): | |||
|                 protocol=settings.OPENNEBULA_PROTOCOL) | ||||
|             ) | ||||
|             raise ConnectionRefusedError | ||||
| 
 | ||||
|     def _get_user_pool(self): | ||||
|         try: | ||||
|             user_pool = oca.UserPool(self.oneadmin_client) | ||||
|  | @ -108,7 +110,6 @@ class OpenNebulaManager(): | |||
|         except ConnectionRefusedError: | ||||
|             raise ConnectionRefusedError | ||||
| 
 | ||||
|     | ||||
|     def get_vm(self, vm_id): | ||||
|         vm_id = int(vm_id) | ||||
|         try: | ||||
|  | @ -219,7 +220,8 @@ class OpenNebulaManager(): | |||
|                 self.opennebula_user.group_ids[0] | ||||
|             ) | ||||
|         except AttributeError: | ||||
|             logger.info('Could not change owner for vm with id: {}.'.format(vm_id)) | ||||
|             logger.info( | ||||
|                 'Could not change owner for vm with id: {}.'.format(vm_id)) | ||||
| 
 | ||||
|         self.oneadmin_client.call( | ||||
|             oca.VirtualMachine.METHODS['action'], | ||||
|  | @ -241,7 +243,8 @@ class OpenNebulaManager(): | |||
|         except socket.timeout as socket_err: | ||||
|             logger.info("Socket timeout error: {0}".format(socket_err)) | ||||
|         except OpenNebulaException as opennebula_err: | ||||
|             logger.info("OpenNebulaException error: {0}".format(opennebula_err)) | ||||
|             logger.info( | ||||
|                 "OpenNebulaException error: {0}".format(opennebula_err)) | ||||
|         except OSError as os_err: | ||||
|             logger.info("OSError : {0}".format(os_err)) | ||||
|         except ValueError as value_err: | ||||
|  | @ -263,7 +266,6 @@ class OpenNebulaManager(): | |||
|         except: | ||||
|             raise ConnectionRefusedError | ||||
| 
 | ||||
| 
 | ||||
|     def get_templates(self): | ||||
|         try: | ||||
|             public_templates = [ | ||||
|  | @ -291,8 +293,6 @@ class OpenNebulaManager(): | |||
|         except: | ||||
|             raise ConnectionRefusedError | ||||
| 
 | ||||
|      | ||||
|      | ||||
|     def create_template(self, name, cores, memory, disk_size, core_price, memory_price, | ||||
|                         disk_size_price, ssh=''): | ||||
|         """Create and add a new template to opennebula. | ||||
|  | @ -341,7 +341,8 @@ class OpenNebulaManager(): | |||
|         return template_id | ||||
| 
 | ||||
|     def delete_template(self, template_id): | ||||
|         self.oneadmin_client.call(oca.VmTemplate.METHODS['delete'], template_id, False) | ||||
|         self.oneadmin_client.call(oca.VmTemplate.METHODS[ | ||||
|                                   'delete'], template_id, False) | ||||
| 
 | ||||
|     def change_user_password(self, new_password): | ||||
|         self.oneadmin_client.call( | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue