Skip to content

Commit

Permalink
Merge pull request #1819 from dbungert/cloud-init-log
Browse files Browse the repository at this point in the history
Cloud init log
  • Loading branch information
dbungert authored Oct 5, 2023
2 parents 3a319e7 + ab0af63 commit f86a533
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 24 deletions.
28 changes: 15 additions & 13 deletions subiquity/server/controllers/shutdown.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,20 @@ async def _run(self):
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:
Expand All @@ -96,19 +110,7 @@ async def copy_logs_to_target(self, context):
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]
)
Expand Down
2 changes: 1 addition & 1 deletion subiquitycore/file_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
20 changes: 10 additions & 10 deletions subiquitycore/tests/test_file_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,64 +64,64 @@ def test_defaults_file(self):
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)
target = self.tmp_path("file")
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)

0 comments on commit f86a533

Please sign in to comment.