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"
|
return False, "缺少 deploy_path"
|
||||||
db, dbname = _get_db()
|
db, dbname = _get_db()
|
||||||
async with db.sqlorContext(dbname) as sor:
|
async with db.sqlorContext(dbname) as sor:
|
||||||
eid = getID()
|
|
||||||
try:
|
try:
|
||||||
port = int(port)
|
port = int(port)
|
||||||
except (TypeError, ValueError):
|
except (TypeError, ValueError):
|
||||||
@ -111,15 +110,17 @@ async def configure_env(project_id, env_type, host, user, deploy_path,
|
|||||||
db_port = int(db_port)
|
db_port = int(db_port)
|
||||||
except (TypeError, ValueError):
|
except (TypeError, ValueError):
|
||||||
db_port = 3306
|
db_port = 3306
|
||||||
await sor.C(TABLE, {
|
# sudo_enabled 归一化:字段 VARCHAR(1),'false'/'0'/'no'/'n' → 'N','true'/'1'/'yes'/'y' → 'Y'
|
||||||
'id': eid,
|
_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,
|
'project_id': project_id,
|
||||||
'env_type': env_type.strip(),
|
'env_type': env_type.strip(),
|
||||||
'host': host.strip(),
|
'host': host.strip(),
|
||||||
'port': port,
|
'port': port,
|
||||||
'user': user.strip(),
|
'user': user.strip(),
|
||||||
'ssh_key_path': ssh_key_path or '',
|
'ssh_key_path': ssh_key_path or '',
|
||||||
'sudo_enabled': sudo_enabled or '',
|
'sudo_enabled': se_val,
|
||||||
'deploy_path': deploy_path.strip(),
|
'deploy_path': deploy_path.strip(),
|
||||||
'python_path': python_path or '',
|
'python_path': python_path or '',
|
||||||
'db_host': db_host 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_user': db_user or '',
|
||||||
'db_password': db_password or '',
|
'db_password': db_password or '',
|
||||||
'status': S_CONFIGURED,
|
'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',
|
await record_audit(project_id, TABLE, eid, 'configure',
|
||||||
to_state=S_CONFIGURED, who=_normalize_role(who),
|
to_state=S_CONFIGURED, who=_normalize_role(who),
|
||||||
agent_id=agent_id, sor=sor)
|
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
|
return True, eid
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user