commit
f86a533ed6
|
@ -83,6 +83,20 @@ class ShutdownController(SubiquityController):
|
|||
elif self.app.state == ApplicationState.DONE:
|
||||
await self.shutdown()
|
||||
|
||||
async def copy_cloud_init_logs(self, target_logs):
|
||||
# Preserve ephemeral boot cloud-init logs if applicable
|
||||
cloudinit_logs = (
|
||||
"/var/log/cloud-init.log",
|
||||
"/var/log/cloud-init-output.log",
|
||||
)
|
||||
for logfile in cloudinit_logs:
|
||||
if not os.path.exists(logfile):
|
||||
continue
|
||||
set_log_perms(logfile)
|
||||
await self.app.command_runner.run(
|
||||
["cp", "-a", logfile, "/var/log/installer"]
|
||||
)
|
||||
|
||||
@with_context()
|
||||
async def copy_logs_to_target(self, context):
|
||||
if self.opts.dry_run and "copy-logs-fail" in self.app.debug_flags:
|
||||
|
@ -96,19 +110,7 @@ class ShutdownController(SubiquityController):
|
|||
if self.opts.dry_run:
|
||||
os.makedirs(target_logs, exist_ok=True)
|
||||
else:
|
||||
# Preserve ephemeral boot cloud-init logs if applicable
|
||||
cloudinit_logs = [
|
||||
cloudinit_log
|
||||
for cloudinit_log in (
|
||||
"/var/log/cloud-init.log",
|
||||
"/var/log/cloud-init-output.log",
|
||||
)
|
||||
if os.path.exists(cloudinit_log)
|
||||
]
|
||||
if cloudinit_logs:
|
||||
await self.app.command_runner.run(
|
||||
["cp", "-a"] + cloudinit_logs + ["/var/log/installer"]
|
||||
)
|
||||
await self.copy_cloud_init_logs(target_logs)
|
||||
await self.app.command_runner.run(
|
||||
["cp", "-aT", "/var/log/installer", target_logs]
|
||||
)
|
||||
|
|
|
@ -44,7 +44,7 @@ def set_log_perms(target, *, group_write=False, mode=None, group=_DEF_GROUP):
|
|||
if group_write:
|
||||
mode |= 0o020
|
||||
os.chmod(target, mode)
|
||||
os.chown(target, -1, grp.getgrnam(group).gr_gid)
|
||||
os.chown(target, 0, grp.getgrnam(group).gr_gid)
|
||||
|
||||
|
||||
@contextlib.contextmanager
|
||||
|
|
|
@ -64,52 +64,52 @@ class TestLogPerms(SubiTestCase):
|
|||
Path(target).touch()
|
||||
set_log_perms(target)
|
||||
self.chmod.assert_called_once_with(target, _DEF_PERMS_FILE)
|
||||
self.chown.assert_called_once_with(target, -1, self.mock_gid)
|
||||
self.chown.assert_called_once_with(target, 0, self.mock_gid)
|
||||
|
||||
def test_defaults_dir(self):
|
||||
target = self.tmp_dir()
|
||||
set_log_perms(target)
|
||||
self.chmod.assert_called_once_with(target, _DEF_PERMS_FILE | 0o110)
|
||||
self.chown.assert_called_once_with(target, -1, self.mock_gid)
|
||||
self.chown.assert_called_once_with(target, 0, self.mock_gid)
|
||||
|
||||
def test_group_write_file(self):
|
||||
target = self.tmp_path("file")
|
||||
Path(target).touch()
|
||||
set_log_perms(target, group_write=True)
|
||||
self.chmod.assert_called_once_with(target, _DEF_PERMS_FILE | 0o020)
|
||||
self.chown.assert_called_once_with(target, -1, self.mock_gid)
|
||||
self.chown.assert_called_once_with(target, 0, self.mock_gid)
|
||||
|
||||
def test_group_write_dir(self):
|
||||
target = self.tmp_dir()
|
||||
set_log_perms(target, group_write=True)
|
||||
self.chmod.assert_called_once_with(target, _DEF_PERMS_FILE | 0o130)
|
||||
self.chown.assert_called_once_with(target, -1, self.mock_gid)
|
||||
self.chown.assert_called_once_with(target, 0, self.mock_gid)
|
||||
|
||||
def test_nogroup_write_file(self):
|
||||
target = self.tmp_path("file")
|
||||
Path(target).touch()
|
||||
set_log_perms(target, group_write=False)
|
||||
self.chmod.assert_called_once_with(target, _DEF_PERMS_FILE)
|
||||
self.chown.assert_called_once_with(target, -1, self.mock_gid)
|
||||
self.chown.assert_called_once_with(target, 0, self.mock_gid)
|
||||
|
||||
def test_nogroup_write_dir(self):
|
||||
target = self.tmp_dir()
|
||||
set_log_perms(target, group_write=False)
|
||||
self.chmod.assert_called_once_with(target, _DEF_PERMS_FILE | 0o110)
|
||||
self.chown.assert_called_once_with(target, -1, self.mock_gid)
|
||||
self.chown.assert_called_once_with(target, 0, self.mock_gid)
|
||||
|
||||
def test_mode_file(self):
|
||||
target = self.tmp_path("file")
|
||||
Path(target).touch()
|
||||
set_log_perms(target, mode=0o510)
|
||||
self.chmod.assert_called_once_with(target, 0o510)
|
||||
self.chown.assert_called_once_with(target, -1, self.mock_gid)
|
||||
self.chown.assert_called_once_with(target, 0, self.mock_gid)
|
||||
|
||||
def test_mode_dir(self):
|
||||
target = self.tmp_dir()
|
||||
set_log_perms(target, mode=0o510)
|
||||
self.chmod.assert_called_once_with(target, 0o510)
|
||||
self.chown.assert_called_once_with(target, -1, self.mock_gid)
|
||||
self.chown.assert_called_once_with(target, 0, self.mock_gid)
|
||||
|
||||
def test_group_file(self):
|
||||
self.getgrnam.return_value = Mock(gr_gid=11)
|
||||
|
@ -117,11 +117,11 @@ class TestLogPerms(SubiTestCase):
|
|||
Path(target).touch()
|
||||
set_log_perms(target, group="group1")
|
||||
self.chmod.assert_called_once_with(target, _DEF_PERMS_FILE)
|
||||
self.chown.assert_called_once_with(target, -1, 11)
|
||||
self.chown.assert_called_once_with(target, 0, 11)
|
||||
|
||||
def test_group_dir(self):
|
||||
self.getgrnam.return_value = Mock(gr_gid=11)
|
||||
target = self.tmp_dir()
|
||||
set_log_perms(target, group="group1")
|
||||
self.chmod.assert_called_once_with(target, _DEF_PERMS_FILE | 0o110)
|
||||
self.chown.assert_called_once_with(target, -1, 11)
|
||||
self.chown.assert_called_once_with(target, 0, 11)
|
||||
|
|
Loading…
Reference in New Issue