Merge "Make sure that the configured user profile registry key exists"
This commit is contained in:
commit
433d4093c7
@ -48,6 +48,14 @@ class BaseCreateUserPlugin(base.BasePlugin):
|
|||||||
a new user must be created.
|
a new user must be created.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@abc.abstractmethod
|
||||||
|
def post_create_user(self, user_name, password, osutils):
|
||||||
|
"""Executes post user creation logic.
|
||||||
|
|
||||||
|
This will be called after by :meth:`~execute`, after
|
||||||
|
the user is created or the user password is updated.
|
||||||
|
"""
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_password(osutils):
|
def _get_password(osutils):
|
||||||
# Generate a temporary random password to be replaced
|
# Generate a temporary random password to be replaced
|
||||||
@ -72,6 +80,8 @@ class BaseCreateUserPlugin(base.BasePlugin):
|
|||||||
# TODO(alexpilotti): encrypt with DPAPI
|
# TODO(alexpilotti): encrypt with DPAPI
|
||||||
shared_data[constants.SHARED_DATA_PASSWORD] = password
|
shared_data[constants.SHARED_DATA_PASSWORD] = password
|
||||||
|
|
||||||
|
self.post_create_user(user_name, password, osutils)
|
||||||
|
|
||||||
for group_name in CONF.groups:
|
for group_name in CONF.groups:
|
||||||
try:
|
try:
|
||||||
osutils.add_user_to_local_group(user_name, group_name)
|
osutils.add_user_to_local_group(user_name, group_name)
|
||||||
|
@ -20,12 +20,8 @@ LOG = logging.getLogger(__name__)
|
|||||||
|
|
||||||
class CreateUserPlugin(createuser.BaseCreateUserPlugin):
|
class CreateUserPlugin(createuser.BaseCreateUserPlugin):
|
||||||
|
|
||||||
def create_user(self, username, password, osutils):
|
|
||||||
osutils.create_user(username, password)
|
|
||||||
self._create_user_logon(osutils, username, password)
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _create_user_logon(osutils, user_name, password):
|
def _create_user_logon(user_name, password, osutils):
|
||||||
try:
|
try:
|
||||||
# Create a user profile in order for other plugins
|
# Create a user profile in order for other plugins
|
||||||
# to access the user home, etc
|
# to access the user home, etc
|
||||||
@ -36,3 +32,9 @@ class CreateUserPlugin(createuser.BaseCreateUserPlugin):
|
|||||||
except Exception:
|
except Exception:
|
||||||
LOG.exception('Cannot create a user logon session for user: "%s"',
|
LOG.exception('Cannot create a user logon session for user: "%s"',
|
||||||
user_name)
|
user_name)
|
||||||
|
|
||||||
|
def create_user(self, username, password, osutils):
|
||||||
|
osutils.create_user(username, password)
|
||||||
|
|
||||||
|
def post_create_user(self, user_name, password, osutils):
|
||||||
|
self._create_user_logon(user_name, password, osutils)
|
||||||
|
@ -32,6 +32,9 @@ class CreateUserPlugin(createuser.BaseCreateUserPlugin):
|
|||||||
def create_user(self, username, password, osutils):
|
def create_user(self, username, password, osutils):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def post_create_user(self, username, password, osutils):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class CreateUserPluginTests(unittest.TestCase):
|
class CreateUserPluginTests(unittest.TestCase):
|
||||||
|
|
||||||
@ -52,18 +55,17 @@ class CreateUserPluginTests(unittest.TestCase):
|
|||||||
@mock.patch('cloudbaseinit.plugins.common.createuser.'
|
@mock.patch('cloudbaseinit.plugins.common.createuser.'
|
||||||
'BaseCreateUserPlugin._get_password')
|
'BaseCreateUserPlugin._get_password')
|
||||||
@mock.patch.object(CreateUserPlugin, 'create_user')
|
@mock.patch.object(CreateUserPlugin, 'create_user')
|
||||||
def _test_execute(self, mock_create_user, mock_get_password,
|
@mock.patch.object(CreateUserPlugin, 'post_create_user')
|
||||||
mock_get_os_utils,
|
def _test_execute(self, mock_post_create_user, mock_create_user,
|
||||||
|
mock_get_password, mock_get_os_utils,
|
||||||
user_exists=True,
|
user_exists=True,
|
||||||
group_adding_works=True):
|
group_adding_works=True):
|
||||||
shared_data = {}
|
shared_data = {}
|
||||||
mock_token = mock.MagicMock()
|
|
||||||
mock_osutils = mock.MagicMock()
|
mock_osutils = mock.MagicMock()
|
||||||
mock_service = mock.MagicMock()
|
mock_service = mock.MagicMock()
|
||||||
mock_get_password.return_value = 'password'
|
mock_get_password.return_value = 'password'
|
||||||
mock_get_os_utils.return_value = mock_osutils
|
mock_get_os_utils.return_value = mock_osutils
|
||||||
mock_osutils.user_exists.return_value = user_exists
|
mock_osutils.user_exists.return_value = user_exists
|
||||||
mock_osutils.create_user_logon_session.return_value = mock_token
|
|
||||||
if not group_adding_works:
|
if not group_adding_works:
|
||||||
mock_osutils.add_user_to_local_group.side_effect = Exception
|
mock_osutils.add_user_to_local_group.side_effect = Exception
|
||||||
|
|
||||||
@ -86,6 +88,10 @@ class CreateUserPluginTests(unittest.TestCase):
|
|||||||
expected_logging = ["Creating user \"%s\" and setting password"
|
expected_logging = ["Creating user \"%s\" and setting password"
|
||||||
% CONF.username]
|
% CONF.username]
|
||||||
|
|
||||||
|
mock_post_create_user.assert_called_once_with(
|
||||||
|
CONF.username, 'password',
|
||||||
|
mock_osutils)
|
||||||
|
|
||||||
self.assertEqual(expected_logging, snatcher.output[:1])
|
self.assertEqual(expected_logging, snatcher.output[:1])
|
||||||
if not group_adding_works:
|
if not group_adding_works:
|
||||||
failed = snatcher.output[1].startswith(
|
failed = snatcher.output[1].startswith(
|
||||||
|
@ -28,9 +28,7 @@ class CreateUserPluginTests(unittest.TestCase):
|
|||||||
def setUp(self):
|
def setUp(self):
|
||||||
self._create_user = createuser.CreateUserPlugin()
|
self._create_user = createuser.CreateUserPlugin()
|
||||||
|
|
||||||
@mock.patch('cloudbaseinit.plugins.windows.createuser.CreateUserPlugin.'
|
def test_create_user(self):
|
||||||
'_create_user_logon')
|
|
||||||
def test_create_user(self, mock_create_user_logon):
|
|
||||||
mock_osutils = mock.Mock()
|
mock_osutils = mock.Mock()
|
||||||
self._create_user.create_user(
|
self._create_user.create_user(
|
||||||
mock.sentinel.username,
|
mock.sentinel.username,
|
||||||
@ -40,10 +38,20 @@ class CreateUserPluginTests(unittest.TestCase):
|
|||||||
mock_osutils.create_user.assert_called_once_with(
|
mock_osutils.create_user.assert_called_once_with(
|
||||||
mock.sentinel.username,
|
mock.sentinel.username,
|
||||||
mock.sentinel.password)
|
mock.sentinel.password)
|
||||||
mock_create_user_logon.assert_called_once_with(
|
|
||||||
mock_osutils,
|
@mock.patch('cloudbaseinit.plugins.windows.createuser.CreateUserPlugin.'
|
||||||
|
'_create_user_logon')
|
||||||
|
def test_post_create_user(self, mock_create_user_logon):
|
||||||
|
mock_osutils = mock.Mock()
|
||||||
|
self._create_user.post_create_user(
|
||||||
mock.sentinel.username,
|
mock.sentinel.username,
|
||||||
mock.sentinel.password)
|
mock.sentinel.password,
|
||||||
|
mock_osutils)
|
||||||
|
|
||||||
|
mock_create_user_logon.assert_called_once_with(
|
||||||
|
mock.sentinel.username,
|
||||||
|
mock.sentinel.password,
|
||||||
|
mock_osutils)
|
||||||
|
|
||||||
def test__create_user_logon(self):
|
def test__create_user_logon(self):
|
||||||
mock_osutils = mock.Mock()
|
mock_osutils = mock.Mock()
|
||||||
@ -51,9 +59,9 @@ class CreateUserPluginTests(unittest.TestCase):
|
|||||||
mock_osutils.create_user_logon_session.return_value = mock_token
|
mock_osutils.create_user_logon_session.return_value = mock_token
|
||||||
|
|
||||||
self._create_user._create_user_logon(
|
self._create_user._create_user_logon(
|
||||||
mock_osutils,
|
|
||||||
mock.sentinel.user_name,
|
mock.sentinel.user_name,
|
||||||
mock.sentinel.password)
|
mock.sentinel.password,
|
||||||
|
mock_osutils)
|
||||||
|
|
||||||
mock_osutils.create_user_logon_session.assert_called_once_with(
|
mock_osutils.create_user_logon_session.assert_called_once_with(
|
||||||
mock.sentinel.user_name,
|
mock.sentinel.user_name,
|
||||||
@ -69,9 +77,9 @@ class CreateUserPluginTests(unittest.TestCase):
|
|||||||
with testutils.LogSnatcher('cloudbaseinit.plugins.windows.'
|
with testutils.LogSnatcher('cloudbaseinit.plugins.windows.'
|
||||||
'createuser') as snatcher:
|
'createuser') as snatcher:
|
||||||
self._create_user._create_user_logon(
|
self._create_user._create_user_logon(
|
||||||
mock_osutils,
|
|
||||||
mock.sentinel.user_name,
|
mock.sentinel.user_name,
|
||||||
mock.sentinel.password)
|
mock.sentinel.password,
|
||||||
|
mock_osutils)
|
||||||
|
|
||||||
mock_osutils.create_user_logon_session.assert_called_once_with(
|
mock_osutils.create_user_logon_session.assert_called_once_with(
|
||||||
mock.sentinel.user_name,
|
mock.sentinel.user_name,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user