Added function get_all_hosts
This commit is contained in:
		
					parent
					
						
							
								5a46cea307
							
						
					
				
			
			
				commit
				
					
						9a56b66282
					
				
			
		
					 1 changed files with 53 additions and 6 deletions
				
			
		| 
						 | 
					@ -218,6 +218,33 @@ class OpenNebulaManager():
 | 
				
			||||||
        except:
 | 
					        except:
 | 
				
			||||||
            raise ConnectionRefusedError
 | 
					            raise ConnectionRefusedError
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_primary_ipv4(self, vm_id):
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        Returns the primary IPv4 of the given vm.
 | 
				
			||||||
 | 
					        To be changed later.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        :return: An IP address string, if it exists else returns None
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        all_ipv4s = self.get_vm_ipv4_addresses(vm_id)
 | 
				
			||||||
 | 
					        if len(all_ipv4s) > 0:
 | 
				
			||||||
 | 
					            return all_ipv4s[0]
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            return None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_vm_ipv4_addresses(self, vm_id):
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        Returns a list of IPv4 addresses of the given vm
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        :param vm_id: The ID of the vm
 | 
				
			||||||
 | 
					        :return:
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        ipv4s = []
 | 
				
			||||||
 | 
					        vm = self.get_vm(vm_id)
 | 
				
			||||||
 | 
					        for nic in vm.template.nics:
 | 
				
			||||||
 | 
					            if hasattr(nic, 'ip'):
 | 
				
			||||||
 | 
					                ipv4s.append(nic.ip)
 | 
				
			||||||
 | 
					        return ipv4s
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def create_vm(self, template_id, specs, ssh_key=None, vm_name=None):
 | 
					    def create_vm(self, template_id, specs, ssh_key=None, vm_name=None):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        template = self.get_template(template_id)
 | 
					        template = self.get_template(template_id)
 | 
				
			||||||
| 
						 | 
					@ -505,25 +532,46 @@ class OpenNebulaManager():
 | 
				
			||||||
        except ConnectionError:
 | 
					        except ConnectionError:
 | 
				
			||||||
            raise
 | 
					            raise
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def manage_public_key(self, keys):
 | 
					    def manage_public_key(self, keys, hosts=None, countdown=0):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        A function that manages the supplied keys in the authorized_keys file
 | 
					        A function that manages the supplied keys in the
 | 
				
			||||||
 | 
					        authorized_keys file of the given list of hosts. If hosts
 | 
				
			||||||
 | 
					        parameter is not supplied, all hosts of this customer
 | 
				
			||||||
 | 
					        will be configured with the supplied keys
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        :param keys: List of ssh keys that are to be added/removed
 | 
					        :param keys: A list of ssh keys that are to be added/removed
 | 
				
			||||||
                     A key should be a dict of the form
 | 
					                     A key should be a dict of the form
 | 
				
			||||||
                     {
 | 
					                     {
 | 
				
			||||||
                       'value': 'sha-.....', # public key as string
 | 
					                       'value': 'sha-.....', # public key as string
 | 
				
			||||||
                       'state': True         # whether key is to be added or
 | 
					                       'state': True         # whether key is to be added or
 | 
				
			||||||
                     }                       # removed
 | 
					                     }                       # removed
 | 
				
			||||||
 | 
					        :param hosts: A list of hosts IP addresses
 | 
				
			||||||
 | 
					        :param countdown: Parameter to be passed to celery apply_async
 | 
				
			||||||
 | 
					               Allows to delay a task by `countdown` number of seconds
 | 
				
			||||||
        :return:
 | 
					        :return:
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
 | 
					        if hosts is None:
 | 
				
			||||||
 | 
					            hosts = self.get_all_hosts()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if len(hosts) > 0 and len(keys) > 0:
 | 
				
			||||||
 | 
					            save_ssh_key.apply_async(
 | 
				
			||||||
 | 
					                (hosts, keys, CdistUtilts.get_cdist_index()),
 | 
				
			||||||
 | 
					                countdown=countdown)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            logger.debug("Keys and hosts are empty, so not managing any keys")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_all_hosts(self):
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        A utility function to obtain all hosts of this owner
 | 
				
			||||||
 | 
					        :return: A list of hosts IP addresses, empty if none exist
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
        owner = CustomUser.objects.filter(
 | 
					        owner = CustomUser.objects.filter(
 | 
				
			||||||
            email=self.email).first()
 | 
					            email=self.email).first()
 | 
				
			||||||
        all_orders = HostingOrder.objects.filter(customer__user=owner)
 | 
					        all_orders = HostingOrder.objects.filter(customer__user=owner)
 | 
				
			||||||
 | 
					        hosts = []
 | 
				
			||||||
        if len(all_orders) > 0:
 | 
					        if len(all_orders) > 0:
 | 
				
			||||||
            logger.debug("The user {} has 1 or more VMs. We need to configure "
 | 
					            logger.debug("The user {} has 1 or more VMs. We need to configure "
 | 
				
			||||||
                         "the ssh keys.".format(self.email))
 | 
					                         "the ssh keys.".format(self.email))
 | 
				
			||||||
            hosts = []
 | 
					 | 
				
			||||||
            for order in all_orders:
 | 
					            for order in all_orders:
 | 
				
			||||||
                try:
 | 
					                try:
 | 
				
			||||||
                    vm = self.get_vm(order.vm_id)
 | 
					                    vm = self.get_vm(order.vm_id)
 | 
				
			||||||
| 
						 | 
					@ -533,8 +581,7 @@ class OpenNebulaManager():
 | 
				
			||||||
                except WrongIdError:
 | 
					                except WrongIdError:
 | 
				
			||||||
                    logger.debug(
 | 
					                    logger.debug(
 | 
				
			||||||
                        "VM with ID {} does not exist".format(order.vm_id))
 | 
					                        "VM with ID {} does not exist".format(order.vm_id))
 | 
				
			||||||
            if len(keys) > 0:
 | 
					 | 
				
			||||||
                save_ssh_key.delay(hosts, keys, CdistUtilts.get_cdist_index())
 | 
					 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            logger.debug("The user {} has no VMs. We don't need to configure "
 | 
					            logger.debug("The user {} has no VMs. We don't need to configure "
 | 
				
			||||||
                         "the ssh keys.".format(self.email))
 | 
					                         "the ssh keys.".format(self.email))
 | 
				
			||||||
 | 
					        return hosts
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue