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…
Reference in a new issue