Support retrieving admin_username from OpenStack metadata

Allows giving an instance an individual cloud username, e.g. for license servers, while still retrieving SSH public keys for that user from OpenStack.

Change-Id: I078380ef8f74b30105fd44378045df8b1260acbc
This commit is contained in:
yoerg 2021-01-20 12:05:11 +01:00
parent 97295ba569
commit 39e2f6faf4
3 changed files with 26 additions and 0 deletions

View File

@ -249,6 +249,9 @@ class BaseOpenStackService(base.BaseMetadataService):
services=services
)
def get_admin_username(self):
return self._get_meta_data().get('meta', {}).get('admin_username')
def get_admin_password(self):
meta_data = self._get_meta_data()
meta = meta_data.get('meta')

View File

@ -124,6 +124,27 @@ class TestBaseOpenStackService(unittest.TestCase):
self.assertEqual(sorted(list(set(public_keys))),
sorted(response))
@mock.patch(MODPATH +
".BaseOpenStackService._get_meta_data")
def _test_get_admin_username(self, mock_get_meta_data, meta_data):
mock_get_meta_data.return_value = meta_data
response = self._service.get_admin_username()
mock_get_meta_data.assert_called_once_with()
if meta_data and 'admin_username' in meta_data.get('meta'):
self.assertEqual(meta_data.get('meta')['admin_username'], response)
else:
self.assertIsNone(response)
def test_get_admin_username_in_meta(self):
self._test_get_admin_username(
meta_data={'meta': {'admin_username': 'fake user'}})
def test_get_admin_username_no_username_in_meta(self):
self._test_get_admin_username(meta_data={'meta': {}})
def test_get_admin_username_no_meta_data(self):
self._test_get_admin_username(meta_data={})
@mock.patch(MODPATH +
".BaseOpenStackService._get_meta_data")
def _test_get_admin_password(self, mock_get_meta_data, meta_data):

View File

@ -49,6 +49,7 @@ Capabilities:
* public keys
* `WinRM <https://docs.microsoft.com/en-us/windows/win32/winrm/authentication-for-remote-connections#client-certificate-based-authentication>`_ authentication certificates
* static network configuration
* admin user name
* admin user password
* post admin user password (only once)
* user data
@ -101,6 +102,7 @@ Capabilities:
* public keys
* authentication certificates
* static network configuration
* admin user name
* admin user password
* user data