Index: manila/share/drivers/helpers.py IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- a/manila/share/drivers/helpers.py (revision 0921ea5285bffb1af96ecb7167621463672f5df4) +++ b/manila/share/drivers/helpers.py (revision ) @@ -423,7 +423,7 @@ for param, value in self.parameters.items(): self._ssh_exec(server, ['sudo', 'net', 'conf', 'setparm', - share_name, param, value]) + share_name, '"%s"' % param, '"%s"' % value]) return self.get_exports_for_share(server, '\\\\%s\\' + share_name) @@ -487,6 +487,27 @@ ] self._ssh_exec(server, backup_exports) self._set_allow_hosts(server, [], share_name) + self._kick_off_users(server, share_name) + + def _kick_off_users(self, server, share_name): + """Kick off all users to share""" + (out, _) = self._ssh_exec(server, ['sudo', 'smbstatus', '-S']) + + shares = [] + header = True + for line in out.splitlines(): + line = line.strip() + if not header and line: + match = re.match("^(?P[^ ]+)\s+(?P[0-9]+)\s+(?P[^ ]+).*", line) + if match: + shares.append(match.groupdict()) + else: + raise exception.ManilaException("Unknow output format for smbstatus!") + elif line.startswith('----'): + header = False + to_kill = [s['pid'] for s in shares if share_name == s['share'] or share_name is None] + if to_kill: + self._ssh_exec(server, ['sudo', 'kill', '-15'] + to_kill) def restore_access_after_maintenance(self, server, share_name): maintenance_file = self._get_maintenance_file_path(share_name) @@ -547,4 +568,4 @@ value = ' '.join(users) param = self._get_conf_param(access_level) self._ssh_exec(server, ['sudo', 'net', 'conf', 'setparm', share_name, - param, value]) + '"%s"' % param, '"%s"' % value]) Index: manila/tests/share/drivers/test_helpers.py IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- a/manila/tests/share/drivers/test_helpers.py (revision 0921ea5285bffb1af96ecb7167621463672f5df4) +++ b/manila/tests/share/drivers/test_helpers.py (revision ) @@ -602,9 +602,12 @@ self.server_details, self.share_name) self._helper._set_allow_hosts.assert_called_once_with( self.server_details, [], self.share_name) + kickoff_user_cmd = ['sudo', 'smbstatus', '-S'] + self._helper._ssh_exec.assert_any_call( + self.server_details, kickoff_user_cmd) valid_cmd = ['echo', "'test test2'", '|', 'sudo', 'tee', maintenance_path] - self._helper._ssh_exec.assert_called_once_with( + self._helper._ssh_exec.assert_any_call( self.server_details, valid_cmd) def test_restore_access_after_maintenance(self): @@ -667,10 +670,10 @@ self._helper._ssh_exec.assert_has_calls([ mock.call(self.server_details, ['sudo', 'net', 'conf', 'setparm', self.share_name, - 'valid users', 'user1']), + '"valid users"', '"user1"']), mock.call(self.server_details, ['sudo', 'net', 'conf', 'setparm', self.share_name, - 'read list', 'user2']) + '"read list"', '"user2"']) ]) def test_update_access_exception_level(self):