Vastai-ConnectHub/extensions/sync_ehr_to_ad/README.md

102 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# sync_ehr_to_ad 使用说明
该 extension 从北森 EHR 拉取当前用户信息,并同步到本地 AD 域中已存在的用户对象。
## Job
- `handler_path`: `extensions.sync_ehr_to_ad.job:SyncEhrToAdUserJob`
- `job_id`: `sync_ehr_to_ad.sync_users`
同步行为:
- 只处理当前在职用户。
- 只更新 AD 中已存在的 `sAMAccountName` 用户,不自动创建 AD 账号。
- 更新前会比对 AD 当前值与 EHR 目标值;一致则跳过,不一致才更新差异字段。
- 默认写入后立即回读校验;如果 LDAP 返回成功但字段未落地Job 会报失败并记录未生效字段。
- EHR 目标值为空时不会清空 AD 字段。
- 如果配置了 `target_sam_accounts`,只对列表中的 AD 账号执行同步。
## public_cfg 示例
```json
{
"ldap_uri": "ldaps://dc01.vastai.com:636",
"ldap_base_dn": "DC=vastai,DC=com",
"ldap_user_filter": "(sAMAccountName={sAMAccountName})",
"ldap_verify_tls": false,
"dry_run": true,
"verify_after_write": true,
"target_sam_accounts": ["fchen", "jqian"],
"proxy_alias_domain": "vastaitech.com",
"default_company": "Vastai Technologies",
"department_code_ad_attribute": "departmentNumber",
"postal_code": "201210",
"location_mappings": {
"上海": {
"co": "China",
"c": "CN",
"countryCode": 156,
"st": "Shanghai",
"l": "Shanghai"
}
}
}
```
## secret_cfg 示例
```json
{
"app_key": "EHR_APP_KEY",
"app_secret": "EHR_APP_SECRET",
"ldap_bind_dn": "CN=svc-ehr-ad,OU=Service Accounts,DC=vastai,DC=com",
"ldap_bind_password": "password"
}
```
## 常用 public_cfg
- `target_sam_accounts`: 可选,字符串数组。传入后只同步这些 AD 账号;不传则同步所有当前用户。
- `dry_run`: 可选,默认 `false`。建议首次配置为 `true`,只记录会变更的字段,不写入 AD。
- `verify_after_write`: 可选,默认 `true`。真实写入后回读 AD 字段,确认修改已落地。
- `ldap_uri`: AD LDAP 地址,如 `ldaps://dc01.vastai.com:636`
- `ldap_base_dn`: AD 用户搜索根 DN。
- `ldap_user_filter`: 用户搜索过滤器,默认 `(sAMAccountName={sAMAccountName})`
- `ldap_verify_tls`: 是否校验证书,默认 `true`
- `proxy_alias_domain`: 生成 `smtp:<sAMAccountName>@domain` 别名时使用的域名。
- `department_code_ad_attribute`: 部门编码写入的 AD 属性,默认 `departmentNumber`
- `street_address_key`: 具体地址字段编码,默认 `WorkSpacevalue`,写入 AD 的 `streetAddress`;取不到时会兜底尝试 `extgzddxx_606508_618643707`
- `default_company`: 固定公司名;不传时尝试取 EHR 根组织名称。
- `location_mappings`: 工作地点到 AD 国家、省、市字段的映射。
## 指定用户同步示例
只验证并同步 `fchen` 一个用户:
```json
{
"ldap_uri": "ldaps://dc01.vastai.com:636",
"ldap_base_dn": "DC=vastai,DC=com",
"ldap_verify_tls": false,
"dry_run": true,
"verify_after_write": true,
"target_sam_accounts": ["fchen"],
"proxy_alias_domain": "vastaitech.com",
"default_company": "Vastai Technologies"
}
```
确认日志中的 `changed_attrs` 符合预期后,将 `dry_run` 改为 `false` 即可真实写入。
## 返回统计
Job 返回结果包含:
- `filtered_by_target_sam`: 是否启用了指定用户过滤。
- `target_sam_accounts`: 指定用户数量。
- `processed`: 实际处理的用户数。
- `updated`: 有差异并执行更新的用户数。
- `skipped_unchanged`: AD 与 EHR 一致而跳过的用户数。
- `skipped_not_found_ad`: EHR 有 AD 账号但 AD 中找不到的用户数。
- `failed`: 同步失败的用户数。