Skip to content

Commit 0dfb87f

Browse files
committed
render user and group identity flags in previews
1 parent 3f6e567 commit 0dfb87f

2 files changed

Lines changed: 74 additions & 2 deletions

File tree

src/automax/plugins/manual_preview.py

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,37 @@ def _db_query(params: Dict[str, Any]) -> str:
8585
return str(query).replace("'", "'\\''")
8686

8787

88+
def _groupadd_flags(params: Dict[str, Any]) -> str:
89+
flags: list[str] = []
90+
if bool(params.get("system", False)):
91+
flags.append("--system")
92+
if params.get("gid") is not None:
93+
flags.extend(["--gid", _q(params["gid"])])
94+
return " ".join(flags)
95+
96+
97+
def _useradd_flags(params: Dict[str, Any]) -> str:
98+
flags: list[str] = []
99+
if bool(params.get("system", False)):
100+
flags.append("--system")
101+
if params.get("uid") is not None:
102+
flags.extend(["--uid", _q(params["uid"])])
103+
if params.get("group"):
104+
flags.extend(["--gid", _q(params["group"])])
105+
groups = _list(params.get("groups"))
106+
if groups:
107+
flags.extend(["--groups", _q(",".join(groups))])
108+
if params.get("shell"):
109+
flags.extend(["--shell", _q(params["shell"])])
110+
if params.get("home"):
111+
flags.extend(["--home-dir", _q(params["home"])])
112+
if "create_home" in params:
113+
flags.append("--create-home" if bool(params.get("create_home")) else "--no-create-home")
114+
if params.get("comment"):
115+
flags.extend(["--comment", _q(params["comment"])])
116+
return " ".join(flags)
117+
118+
88119
def fallback_manual_commands(plugin_name: str, params: Dict[str, Any], context: ExecutionContext) -> list[str]:
89120
"""Return deterministic manual commands for legacy plugins that do not override them."""
90121
sudo = _sudo(params)
@@ -190,7 +221,9 @@ def fallback_manual_commands(plugin_name: str, params: Dict[str, Any], context:
190221

191222
if plugin_name.startswith("user."):
192223
if plugin_name == "user.create":
193-
return [f"id -u {_q(name)} >/dev/null 2>&1 || {sudo}useradd {_q(name)}"]
224+
flags = _useradd_flags(params)
225+
flag_text = f" {flags}" if flags else ""
226+
return [f"id -u {_q(name)} >/dev/null 2>&1 || {sudo}useradd{flag_text} {_q(name)}"]
194227
if plugin_name == "user.remove":
195228
return [f"{sudo}userdel {'-r ' if params.get('remove_home') else ''}{_q(name)}"]
196229
if plugin_name == "user.exists":
@@ -206,7 +239,9 @@ def fallback_manual_commands(plugin_name: str, params: Dict[str, Any], context:
206239

207240
if plugin_name.startswith("group."):
208241
if plugin_name == "group.create":
209-
return [f"getent group {_q(name)} >/dev/null || {sudo}groupadd {_q(name)}"]
242+
flags = _groupadd_flags(params)
243+
flag_text = f" {flags}" if flags else ""
244+
return [f"getent group {_q(name)} >/dev/null || {sudo}groupadd{flag_text} {_q(name)}"]
210245
if plugin_name == "group.remove":
211246
return [f"{sudo}groupdel {_q(name)}"]
212247
if plugin_name == "group.exists":

tests/test_next_engine.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3409,6 +3409,43 @@ def _sysops_preview_context() -> ExecutionContext:
34093409
)
34103410

34113411

3412+
def test_user_group_manual_commands_render_identity_flags():
3413+
from automax.plugins.manual_preview import fallback_manual_commands
3414+
3415+
context = ExecutionContext(run_id="run", dry_run=True, job={}, task={}, step={}, substep={}, target=Target(name="node1", host="node1"), vars={}, outputs={}, secrets={})
3416+
3417+
group_command = fallback_manual_commands(
3418+
"group.create",
3419+
{"name": "oinstall", "gid": 54321, "system": True, "sudo": True},
3420+
context,
3421+
)[0]
3422+
assert group_command == "getent group oinstall >/dev/null || sudo -n groupadd --system --gid 54321 oinstall"
3423+
3424+
user_command = fallback_manual_commands(
3425+
"user.create",
3426+
{
3427+
"name": "grid",
3428+
"uid": 54331,
3429+
"group": "oinstall",
3430+
"groups": ["asmadmin", "asmdba"],
3431+
"shell": "/bin/bash",
3432+
"home": "/home/grid",
3433+
"create_home": True,
3434+
"comment": "Oracle Grid Infrastructure owner",
3435+
"sudo": True,
3436+
},
3437+
context,
3438+
)[0]
3439+
assert "useradd" in user_command
3440+
assert "--uid 54331" in user_command
3441+
assert "--gid oinstall" in user_command
3442+
assert "--groups asmadmin,asmdba" in user_command
3443+
assert "--shell /bin/bash" in user_command
3444+
assert "--home-dir /home/grid" in user_command
3445+
assert "--create-home" in user_command
3446+
assert "--comment 'Oracle Grid Infrastructure owner'" in user_command
3447+
3448+
34123449
def test_lvm_plugins_render_manual_commands_and_previews():
34133450
from automax.plugins.lvm import (
34143451
LvmLvExtendPlugin,

0 commit comments

Comments
 (0)