summaryrefslogtreecommitdiff
path: root/cloudinit/cmd
diff options
context:
space:
mode:
authorAlberto Contreras <alberto.contreras@canonical.com>2022-05-17 19:43:49 +0200
committerGitHub <noreply@github.com>2022-05-17 11:43:49 -0600
commit3e554d16b4d539c9bd0c743793d391d30bee167a (patch)
treefd157533b1ab6ebf524f9e831c188846a419601d /cloudinit/cmd
parent98388b5ddc8f61a873631b8588a4a109b9088abd (diff)
downloadcloud-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-xcloudinit/cmd/devel/__init__.py3
-rwxr-xr-xcloudinit/cmd/status.py19
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 = ""