diff options
author | Alberto Contreras <alberto.contreras@canonical.com> | 2022-05-17 19:43:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-17 11:43:49 -0600 |
commit | 3e554d16b4d539c9bd0c743793d391d30bee167a (patch) | |
tree | fd157533b1ab6ebf524f9e831c188846a419601d /cloudinit/cmd | |
parent | 98388b5ddc8f61a873631b8588a4a109b9088abd (diff) | |
download | cloud-init-git-3e554d16b4d539c9bd0c743793d391d30bee167a.tar.gz |
cli: Redact files with permission errors in commands (#1440)
For non-root users, emit warnings and redact on any
/etc/cloud/cloud.cfg.d files which raise permissions errors.
Add tests covering this behavior for query, status and render
cmds.
Migrate `test_render.py` and `test_status.py` to Pytest.
LP: #1953430
SC-658
Diffstat (limited to 'cloudinit/cmd')
-rwxr-xr-x | cloudinit/cmd/devel/__init__.py | 3 | ||||
-rwxr-xr-x | cloudinit/cmd/status.py | 19 |
2 files changed, 10 insertions, 12 deletions
diff --git a/cloudinit/cmd/devel/__init__.py b/cloudinit/cmd/devel/__init__.py index ead5f7a9..9a8f2ebd 100755 --- a/cloudinit/cmd/devel/__init__.py +++ b/cloudinit/cmd/devel/__init__.py @@ -6,6 +6,7 @@ import logging from cloudinit import log +from cloudinit.helpers import Paths from cloudinit.stages import Init @@ -16,7 +17,7 @@ def addLogHandlerCLI(logger, log_level): return logger -def read_cfg_paths(): +def read_cfg_paths() -> Paths: """Return a Paths object based on the system configuration on disk.""" init = Init(ds_deps=[]) init.read_cfg() diff --git a/cloudinit/cmd/status.py b/cloudinit/cmd/status.py index f3b4f161..1c7c209b 100755 --- a/cloudinit/cmd/status.py +++ b/cloudinit/cmd/status.py @@ -11,9 +11,10 @@ import enum import os import sys from time import gmtime, sleep, strftime +from typing import Tuple +from cloudinit.cmd.devel import read_cfg_paths from cloudinit.distros import uses_systemd -from cloudinit.stages import Init from cloudinit.util import get_cmdline, load_file, load_json CLOUDINIT_DISABLED_FILE = "/etc/cloud/cloud-init.disabled" @@ -64,17 +65,16 @@ def get_parser(parser=None): return parser -def handle_status_args(name, args): +def handle_status_args(name, args) -> int: """Handle calls to 'cloud-init status' as a subcommand.""" # Read configured paths - init = Init(ds_deps=[]) - init.read_cfg() - status, status_detail, time = get_status_details(init.paths) + paths = read_cfg_paths() + status, status_detail, time = get_status_details(paths) if args.wait: while status in (UXAppStatus.NOT_RUN, UXAppStatus.RUNNING): sys.stdout.write(".") sys.stdout.flush() - status, status_detail, time = get_status_details(init.paths) + status, status_detail, time = get_status_details(paths) sleep(0.25) sys.stdout.write("\n") print("status: {0}".format(status.value)) @@ -115,17 +115,14 @@ def _is_cloudinit_disabled(disable_file, paths): return (is_disabled, reason) -def get_status_details(paths=None): +def get_status_details(paths=None) -> Tuple[UXAppStatus, str, str]: """Return a 3-tuple of status, status_details and time of last event. @param paths: An initialized cloudinit.helpers.paths object. Values are obtained from parsing paths.run_dir/status.json. """ - if not paths: - init = Init(ds_deps=[]) - init.read_cfg() - paths = init.paths + paths = paths or read_cfg_paths() status = UXAppStatus.NOT_RUN status_detail = "" |