Add ssh key to new vm
Create_vm now stes to public key correctly
This commit is contained in:
		
					parent
					
						
							
								ef0589f691
							
						
					
				
			
			
				commit
				
					
						715d092b96
					
				
			
		
					 3 changed files with 24 additions and 52 deletions
				
			
		| 
						 | 
					@ -355,17 +355,6 @@ class GenerateVMSSHKeysView(LoginRequiredMixin, FormView):
 | 
				
			||||||
        return render(self.request, self.template_name, context)
 | 
					        return render(self.request, self.template_name, context)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def post(self, request, *args, **kwargs):
 | 
					    def post(self, request, *args, **kwargs):
 | 
				
			||||||
 | 
					 | 
				
			||||||
       # try:
 | 
					 | 
				
			||||||
       #     UserHostingKey.objects.get(
 | 
					 | 
				
			||||||
       #         user=self.request.user
 | 
					 | 
				
			||||||
       #     )
 | 
					 | 
				
			||||||
       #     return HttpResponseRedirect(reverse('hosting:key_pair'))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
       # except UserHostingKey.DoesNotExist:
 | 
					 | 
				
			||||||
       #     pass
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        form = self.get_form()
 | 
					        form = self.get_form()
 | 
				
			||||||
        if form.is_valid():
 | 
					        if form.is_valid():
 | 
				
			||||||
            return self.form_valid(form)
 | 
					            return self.form_valid(form)
 | 
				
			||||||
| 
						 | 
					@ -418,11 +407,7 @@ class PaymentVMView(LoginRequiredMixin, FormView):
 | 
				
			||||||
        return context
 | 
					        return context
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get(self, request, *args, **kwargs):
 | 
					    def get(self, request, *args, **kwargs):
 | 
				
			||||||
        try:
 | 
					        if not UserHostingKey.objects.filter( user=self.request.user).exists():
 | 
				
			||||||
            UserHostingKey.objects.get(
 | 
					 | 
				
			||||||
                user=self.request.user
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
        except UserHostingKey.DoesNotExist:
 | 
					 | 
				
			||||||
            messages.success(
 | 
					            messages.success(
 | 
				
			||||||
                request,
 | 
					                request,
 | 
				
			||||||
                'In order to create a VM, you create/upload your SSH KEY first.'
 | 
					                'In order to create a VM, you create/upload your SSH KEY first.'
 | 
				
			||||||
| 
						 | 
					@ -484,13 +469,15 @@ class PaymentVMView(LoginRequiredMixin, FormView):
 | 
				
			||||||
            manager = OpenNebulaManager(email=owner.email,
 | 
					            manager = OpenNebulaManager(email=owner.email,
 | 
				
			||||||
                                        password=owner.password)
 | 
					                                        password=owner.password)
 | 
				
			||||||
            # Get user ssh key
 | 
					            # Get user ssh key
 | 
				
			||||||
            try:
 | 
					            if not UserHostingKey.objects.filter( user=self.request.user).exists():
 | 
				
			||||||
                user_key = UserHostingKey.objects.get(
 | 
					                context.update({
 | 
				
			||||||
                    user=self.request.user
 | 
					                    'sshError': 'error',
 | 
				
			||||||
                )
 | 
					                    'form': form
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
            except UserHostingKey.DoesNotExist:
 | 
					                return render(request, self.template_name, context)
 | 
				
			||||||
                pass
 | 
					            # For now just get first one
 | 
				
			||||||
 | 
					            user_key = UserHostingKey.objects.filter(
 | 
				
			||||||
 | 
					                    user=self.request.user).first()
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            # Create a vm using logged user
 | 
					            # Create a vm using logged user
 | 
				
			||||||
            vm_id = manager.create_vm(
 | 
					            vm_id = manager.create_vm(
 | 
				
			||||||
| 
						 | 
					@ -636,11 +623,7 @@ class CreateVirtualMachinesView(LoginRequiredMixin, View):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get(self, request, *args, **kwargs):
 | 
					    def get(self, request, *args, **kwargs):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try:
 | 
					        if not UserHostingKey.objects.filter( user=self.request.user).exists():
 | 
				
			||||||
            UserHostingKey.objects.get(
 | 
					 | 
				
			||||||
                user=self.request.user
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
        except UserHostingKey.DoesNotExist:
 | 
					 | 
				
			||||||
            messages.success(
 | 
					            messages.success(
 | 
				
			||||||
                request,
 | 
					                request,
 | 
				
			||||||
                'In order to create a VM, you need to create/upload your SSH KEY first.'
 | 
					                'In order to create a VM, you need to create/upload your SSH KEY first.'
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -260,7 +260,6 @@ class OpenNebulaManager():
 | 
				
			||||||
                                  <DEV_PREFIX>vd</DEV_PREFIX>
 | 
					                                  <DEV_PREFIX>vd</DEV_PREFIX>
 | 
				
			||||||
                                  <IMAGE_ID>{image_id}</IMAGE_ID>
 | 
					                                  <IMAGE_ID>{image_id}</IMAGE_ID>
 | 
				
			||||||
                           </DISK>
 | 
					                           </DISK>
 | 
				
			||||||
                          </TEMPLATE>
 | 
					 | 
				
			||||||
                        """.format(size=1024 * int(specs['disk_size']),
 | 
					                        """.format(size=1024 * int(specs['disk_size']),
 | 
				
			||||||
                                   image_id=image_id)
 | 
					                                   image_id=image_id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -282,10 +281,18 @@ class OpenNebulaManager():
 | 
				
			||||||
                                  <IMAGE>{image}</IMAGE>
 | 
					                                  <IMAGE>{image}</IMAGE>
 | 
				
			||||||
                                  <IMAGE_UNAME>{image_uname}</IMAGE_UNAME>
 | 
					                                  <IMAGE_UNAME>{image_uname}</IMAGE_UNAME>
 | 
				
			||||||
                           </DISK>
 | 
					                           </DISK>
 | 
				
			||||||
                          </TEMPLATE>
 | 
					 | 
				
			||||||
                        """.format(size=1024 * int(specs['disk_size']),
 | 
					                        """.format(size=1024 * int(specs['disk_size']),
 | 
				
			||||||
                                   image=image,
 | 
					                                   image=image,
 | 
				
			||||||
                                   image_uname=image_uname)
 | 
					                                   image_uname=image_uname)
 | 
				
			||||||
 | 
					                        
 | 
				
			||||||
 | 
					                                
 | 
				
			||||||
 | 
					        if ssh_key:
 | 
				
			||||||
 | 
					            vm_specs += """<CONTEXT>
 | 
				
			||||||
 | 
					                    <SSH_PUBLIC_KEY>{ssh}</SSH_PUBLIC_KEY>
 | 
				
			||||||
 | 
					                    <NETWORK>YES</NETWORK>
 | 
				
			||||||
 | 
					                   </CONTEXT>
 | 
				
			||||||
 | 
					                              </TEMPLATE>
 | 
				
			||||||
 | 
					                """.format(ssh=public_key)
 | 
				
			||||||
        vm_id = self.client.call(oca.VmTemplate.METHODS['instantiate'],
 | 
					        vm_id = self.client.call(oca.VmTemplate.METHODS['instantiate'],
 | 
				
			||||||
                                 template.id,
 | 
					                                 template.id,
 | 
				
			||||||
                                 '',
 | 
					                                 '',
 | 
				
			||||||
| 
						 | 
					@ -293,25 +300,6 @@ class OpenNebulaManager():
 | 
				
			||||||
                                 vm_specs,
 | 
					                                 vm_specs,
 | 
				
			||||||
                                 False)
 | 
					                                 False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.oneadmin_client.call(
 | 
					 | 
				
			||||||
            'vm.update',
 | 
					 | 
				
			||||||
            vm_id,
 | 
					 | 
				
			||||||
            """<CONTEXT>
 | 
					 | 
				
			||||||
                <SSH_PUBLIC_KEY>{ssh}</SSH_PUBLIC_KEY>
 | 
					 | 
				
			||||||
               </CONTEXT>
 | 
					 | 
				
			||||||
            """.format(ssh=ssh_key)
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
        try:
 | 
					 | 
				
			||||||
            self.oneadmin_client.call(
 | 
					 | 
				
			||||||
                oca.VirtualMachine.METHODS['chown'],
 | 
					 | 
				
			||||||
                vm_id,
 | 
					 | 
				
			||||||
                self.opennebula_user.id,
 | 
					 | 
				
			||||||
                self.opennebula_user.group_ids[0]
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
        except AttributeError:
 | 
					 | 
				
			||||||
            logger.info(
 | 
					 | 
				
			||||||
                'Could not change owner for vm with id: {}.'.format(vm_id))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        self.oneadmin_client.call(
 | 
					        self.oneadmin_client.call(
 | 
				
			||||||
            oca.VirtualMachine.METHODS['action'],
 | 
					            oca.VirtualMachine.METHODS['action'],
 | 
				
			||||||
            'release',
 | 
					            'release',
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -15,7 +15,6 @@ class VirtualMachineTemplateSerializer(serializers.Serializer):
 | 
				
			||||||
    cores       = serializers.SerializerMethodField() 
 | 
					    cores       = serializers.SerializerMethodField() 
 | 
				
			||||||
    disk_size   = serializers.SerializerMethodField()
 | 
					    disk_size   = serializers.SerializerMethodField()
 | 
				
			||||||
    memory      = serializers.SerializerMethodField()
 | 
					    memory      = serializers.SerializerMethodField()
 | 
				
			||||||
    price       = serializers.SerializerMethodField()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_cores(self, obj):
 | 
					    def get_cores(self, obj):
 | 
				
			||||||
        if hasattr(obj.template, 'vcpu'):
 | 
					        if hasattr(obj.template, 'vcpu'):
 | 
				
			||||||
| 
						 | 
					@ -39,6 +38,8 @@ class VirtualMachineTemplateSerializer(serializers.Serializer):
 | 
				
			||||||
    def get_name(self, obj):
 | 
					    def get_name(self, obj):
 | 
				
			||||||
        return obj.name.strip('public-')
 | 
					        return obj.name.strip('public-')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class VirtualMachineSerializer(serializers.Serializer):
 | 
					class VirtualMachineSerializer(serializers.Serializer):
 | 
				
			||||||
    """Serializer to map the virtual machine instance into JSON format."""
 | 
					    """Serializer to map the virtual machine instance into JSON format."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue