Add exceptions, merge for ssh key
The replace variable of the add_public_key function is now a merge variable in order to append new keys to a user
This commit is contained in:
parent
ca63355914
commit
0db15d99a5
3 changed files with 30 additions and 2 deletions
9
opennebula_api/exceptions.py
Normal file
9
opennebula_api/exceptions.py
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
class KeyExistsError(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class UserExistsError(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class UserCredentialError(Exception):
|
||||||
|
pass
|
|
@ -9,6 +9,7 @@ from django.conf import settings
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
|
|
||||||
from utils.models import CustomUser
|
from utils.models import CustomUser
|
||||||
|
from .exceptions import KeyExistsError, UserExistsError, UserCredentialError
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -439,7 +440,7 @@ class OpenNebulaManager():
|
||||||
new_password
|
new_password
|
||||||
)
|
)
|
||||||
|
|
||||||
def add_public_key(self, user, public_key='', replace=True):
|
def add_public_key(self, user, public_key='', merge=False):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -464,8 +465,9 @@ class OpenNebulaManager():
|
||||||
open_user = self._get_user(user)
|
open_user = self._get_user(user)
|
||||||
try:
|
try:
|
||||||
old_key = open_user.template.ssh_public_key
|
old_key = open_user.template.ssh_public_key
|
||||||
if not replace:
|
if not merge:
|
||||||
raise KeyExistsError()
|
raise KeyExistsError()
|
||||||
|
public_key += '\n{key}'.format(key=old_key)
|
||||||
|
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -81,6 +81,23 @@ class OpenNebulaManagerTestCases(TestCase):
|
||||||
|
|
||||||
self.assertEqual(user_public_key, public_key)
|
self.assertEqual(user_public_key, public_key)
|
||||||
|
|
||||||
|
def test_append_public_key_to_user(self):
|
||||||
|
""" Test the manager can append a new public key to an user """
|
||||||
|
self.manager.create_user(self.user)
|
||||||
|
user = self.manager._get_user(self.user)
|
||||||
|
public_key = 'test'
|
||||||
|
self.manager.add_public_key(self.user, public_key)
|
||||||
|
# Fetch new user information from opennebula
|
||||||
|
user.info()
|
||||||
|
old_public_key = user.template.ssh_public_key
|
||||||
|
self.manager.add_public_key(self.user, public_key, merge=True)
|
||||||
|
user.info()
|
||||||
|
new_public_key = user.template.ssh_public_key
|
||||||
|
# Cleanup
|
||||||
|
user.delete()
|
||||||
|
|
||||||
|
self.assertEqual(new_public_key, '{}\n{}'.format(old_public_key,
|
||||||
|
public_key))
|
||||||
|
|
||||||
def test_requires_ssh_key_for_new_vm(self):
|
def test_requires_ssh_key_for_new_vm(self):
|
||||||
"""Test the opennebula manager requires the user to have a ssh key when
|
"""Test the opennebula manager requires the user to have a ssh key when
|
||||||
|
|
Loading…
Reference in a new issue