modulizing the usergroup retriving

This commit is contained in:
Patrick Wu 2021-10-05 22:53:53 +08:00
parent 06a2626db8
commit 8559d7fe7d
4 changed files with 26 additions and 42 deletions

View File

@ -24,3 +24,23 @@ log = logging.getLogger('subiquity.common.resources')
def resource_path(relative_path):
return os.path.join(os.environ.get("SUBIQUITY_ROOT", "."), relative_path)
def get_users_and_groups(chroot_prefix=[]):
# prevent import when calling just resource_path
from subiquitycore.utils import run_command
users_and_groups_path = resource_path('users-and-groups')
groups = ['admin']
if os.path.exists(users_and_groups_path):
groups = open(users_and_groups_path).read().split()
groups.append('sudo')
command = chroot_prefix + ['getent', 'group']
cp = run_command(command, check=True)
target_groups = set()
for line in cp.stdout.splitlines():
target_groups.add(line.split(':')[0])
groups = target_groups.intersection(groups)
return groups

View File

@ -27,9 +27,8 @@ from curtin.commands.install import CONFIG_BUILTIN
from curtin.config import merge_config
from subiquitycore.file_util import write_file
from subiquitycore.utils import run_command
from subiquity.common.resources import resource_path
from subiquity.common.resources import resource_path, get_users_and_groups
from subiquity.server.types import InstallerChannels
from .filesystem import FilesystemModel
@ -218,14 +217,6 @@ class SubiquityModel:
def confirm(self):
self._confirmation.set()
def get_target_groups(self):
command = self.chroot_prefix + ['getent', 'group']
cp = run_command(command, check=True)
groups = set()
for line in cp.stdout.splitlines():
groups.add(line.split(':')[0])
return groups
def _cloud_init_config(self):
config = {
'growpart': {
@ -237,14 +228,7 @@ class SubiquityModel:
config['preserve_hostname'] = True
user = self.identity.user
if user:
users_and_groups_path = resource_path('users-and-groups')
if os.path.exists(users_and_groups_path):
groups = open(users_and_groups_path).read().split()
else:
groups = ['admin']
groups.append('sudo')
groups = [group for group in groups
if group in self.get_target_groups()]
groups = get_users_and_groups(self.chroot_prefix)
user_info = {
'name': user.username,
'gecos': user.realname,

View File

@ -61,28 +61,6 @@ def get_windows_locale():
return None
def get_userandgroups():
from subiquity.common.resources import resource_path
from subiquitycore.utils import run_command
users_and_groups_path = resource_path('users-and-groups')
if os.path.exists(users_and_groups_path):
groups = open(users_and_groups_path).read().split()
else:
groups = ['admin']
groups.append('sudo')
command = ['getent', 'group']
cp = run_command(command, check=True)
target_groups = set()
for line in cp.stdout.splitlines():
target_groups.add(line.split(':')[0])
groups = [group for group in groups if group in target_groups]
oneline_usergroups = ",".join(groups)
return oneline_usergroups
def convert_if_bool(value):
if value.lower() in ('true', 'false'):
return value.lower() == 'true'

View File

@ -17,11 +17,11 @@ import logging
from subiquity.common.errorreport import ErrorReportKind
from subiquity.common.types import ApplicationState
from subiquity.common.resources import get_users_and_groups
from subiquity.server.controller import SubiquityController
from subiquitycore.context import with_context
from subiquitycore.utils import run_command
from system_setup.common.wsl_conf import wsl_config_update
from system_setup.common.wsl_utils import get_userandgroups
log = logging.getLogger("system_setup.server.controllers.configure")
@ -87,10 +87,12 @@ class ConfigureController(SubiquityController):
% (wsl_id.username,
create_user_act.stderr))
log.debug("created user %s", wsl_id.username)
oneline_usergroups = ",".join(get_users_and_groups())
assign_grp_act = \
run_command(["/usr/sbin/usermod", "-a",
"-c", wsl_id.realname,
"-G", get_userandgroups(),
"-G", oneline_usergroups,
wsl_id.username])
if assign_grp_act.returncode != 0:
raise Exception(("Failed to assign group"