59 lines
2.3 KiB
Python
59 lines
2.3 KiB
Python
from __future__ import annotations
|
||
|
||
from typing import List
|
||
|
||
from ad_user_creator.models import UserInputRecord
|
||
from ad_user_creator.user_service import UserService
|
||
|
||
|
||
def _split_optional_groups(text: str) -> List[str]:
|
||
if not text.strip():
|
||
return []
|
||
items = [item.strip() for item in text.replace(",", ",").split(",")]
|
||
return [item for item in items if item]
|
||
|
||
|
||
def run_interactive_create(user_service: UserService, default_base_group: str, dry_run: bool = False) -> None:
|
||
print("请输入 AD 用户信息:")
|
||
display_name = input("显示名称(姓名): ").strip()
|
||
sam_account_name = input("用户名(sAMAccountName): ").strip()
|
||
email = input("邮箱(mail): ").strip()
|
||
dept_ou = input("部门 OU (例如 CEO 或 RnD/tm_hardware): ").strip()
|
||
base_group_input = input(f"基础组(默认 {default_base_group}): ").strip()
|
||
base_group = base_group_input or default_base_group
|
||
project_groups = _split_optional_groups(input("项目组(逗号分隔,可空): "))
|
||
resource_groups = _split_optional_groups(input("资源组(逗号分隔,可空): "))
|
||
|
||
record = UserInputRecord(
|
||
display_name=display_name,
|
||
sam_account_name=sam_account_name,
|
||
email=email,
|
||
dept_ou=dept_ou,
|
||
base_group=base_group,
|
||
project_groups=project_groups,
|
||
resource_groups=resource_groups,
|
||
)
|
||
plan = user_service.preview_plan(record)
|
||
|
||
print("\n预览:")
|
||
print(f"- 显示名称: {plan.display_name}")
|
||
print(f"- 用户名: {plan.sam_account_name}")
|
||
print(f"- 邮箱: {plan.email}")
|
||
print(f"- 部门 OU: {record.dept_ou}")
|
||
print(f"- 用户 DN: {plan.user_dn}")
|
||
print(f"- 基础组: {plan.base_group}")
|
||
print(f"- 项目组: {', '.join(plan.project_groups) if plan.project_groups else '(空)'}")
|
||
print(f"- 资源组: {', '.join(plan.resource_groups) if plan.resource_groups else '(空)'}")
|
||
print(f"- uid: {plan.uid}")
|
||
print(f"- uidNumber: {plan.uid_number}")
|
||
print(f"- gidNumber: {plan.gid_number}")
|
||
print(f"- unixHomeDirectory: {plan.unix_home_directory}")
|
||
|
||
confirm = input("\n确认创建? [y/N]: ").strip().lower()
|
||
if confirm not in {"y", "yes"}:
|
||
print("已取消。")
|
||
return
|
||
|
||
result = user_service.process_user(record, dry_run=dry_run)
|
||
print(f"执行结果: {result.status} {result.reason}")
|