fix: configure_env 按 (project_id, env_type) upsert + sudo_enabled 归一化 VARCHAR(1)
- 修复反复 INSERT Duplicate entry(1062):先查 (project_id, env_type) 已存在则 UPDATE - 修复 DataError(1406):'false' 字符串超长,归一化为 'Y'/'N' 单字符
This commit is contained in:
parent
0af4faff21
commit
ea6df9c7c6
@ -102,7 +102,6 @@ async def configure_env(project_id, env_type, host, user, deploy_path,
|
||||
return False, "缺少 deploy_path"
|
||||
db, dbname = _get_db()
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
eid = getID()
|
||||
try:
|
||||
port = int(port)
|
||||
except (TypeError, ValueError):
|
||||
@ -111,15 +110,17 @@ async def configure_env(project_id, env_type, host, user, deploy_path,
|
||||
db_port = int(db_port)
|
||||
except (TypeError, ValueError):
|
||||
db_port = 3306
|
||||
await sor.C(TABLE, {
|
||||
'id': eid,
|
||||
# sudo_enabled 归一化:字段 VARCHAR(1),'false'/'0'/'no'/'n' → 'N','true'/'1'/'yes'/'y' → 'Y'
|
||||
_se = str(sudo_enabled).strip().lower() if sudo_enabled else ''
|
||||
se_val = 'Y' if _se in ('1', 'true', 'yes', 'y', '是') else 'N'
|
||||
data = {
|
||||
'project_id': project_id,
|
||||
'env_type': env_type.strip(),
|
||||
'host': host.strip(),
|
||||
'port': port,
|
||||
'user': user.strip(),
|
||||
'ssh_key_path': ssh_key_path or '',
|
||||
'sudo_enabled': sudo_enabled or '',
|
||||
'sudo_enabled': se_val,
|
||||
'deploy_path': deploy_path.strip(),
|
||||
'python_path': python_path or '',
|
||||
'db_host': db_host or '',
|
||||
@ -128,11 +129,24 @@ async def configure_env(project_id, env_type, host, user, deploy_path,
|
||||
'db_user': db_user or '',
|
||||
'db_password': db_password or '',
|
||||
'status': S_CONFIGURED,
|
||||
})
|
||||
}
|
||||
# upsert:按 (project_id, env_type) 查已存在(UNIQUE 约束),存在则 UPDATE,否则 INSERT
|
||||
existing = await sor.sqlExe(
|
||||
"SELECT id FROM sd_deploy_envs WHERE project_id=${pid}$ AND env_type=${et}$",
|
||||
{"pid": project_id, "et": env_type.strip()})
|
||||
await sor.sqlExe("COMMIT", {})
|
||||
if existing:
|
||||
eid = existing[0].id
|
||||
data['id'] = eid
|
||||
await sor.U(TABLE, data)
|
||||
else:
|
||||
eid = getID()
|
||||
data['id'] = eid
|
||||
await sor.C(TABLE, data)
|
||||
await record_audit(project_id, TABLE, eid, 'configure',
|
||||
to_state=S_CONFIGURED, who=_normalize_role(who),
|
||||
agent_id=agent_id, sor=sor)
|
||||
logger.info("configure_env: %s project=%s type=%s", eid, project_id, env_type.strip())
|
||||
logger.info("configure_env: %s project=%s type=%s (upsert)", eid, project_id, env_type.strip())
|
||||
return True, eid
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user