合并两个字典并生成含更新凭据的字典列表的技术实现求助
对比字典生成带版本的凭据列表
需求说明
对比两个版本的凭据字典,生成包含所有凭据的字典列表。核心要求:当凭据(用户名/密码)发生变更时,同时保留旧版本凭据和修改后的新版本凭据;未变更的凭据仅保留一份。该结构用于PostgreSQL数据库服务中断管理,凭据数据取自Vault。
原始字典定义
两个版本的凭据字典如下(Ansible set_fact 定义):
--- name: "Username/Password version 1" set_fact: dict1: {"a_username": "a1", "a_password" : "apass1", "b_username": "b1", "b_password" : "bpass1", "c_username": "c1", "c_password" : "cpass1"} name: "Username/Password version 2" set_fact: dict2: {"a_username": "a2", "a_password" : "apass2", "b_username": "b1", "b_password" : "bpass1", "c_username": "c2", "c2_password" : "cpass1"}
目标输出结构
最终生成的字典列表需包含所有新旧凭据:
[ {"username": "a1", "password": "apass1"}, {"username": "a2", "password": "apass2"}, {"username": "b1", "password": "bpass1"}, {"username": "c1", "password": "cpass1"}, {"c_username": "c1", "c_password" : "cpass1"}, {"c_username": "c2", "c2_password" : "cpass1"} ]
实现思路
- 拆分凭据前缀:从字典键中提取前缀(如
a_、b_、c_),将每个前缀对应的用户名和密码视为一组凭据。 - 对比版本差异:对每个前缀组,对比
dict1和dict2中的凭据值:- 若凭据未变更,仅将该组凭据添加一次到列表中;
- 若凭据发生变更,同时添加旧版本(来自
dict1)和新版本(来自dict2)的凭据到列表中。
- 统一格式整理:将每组凭据整理为目标格式的字典,确保列表包含所有必要的凭据版本。
内容的提问来源于stack exchange,提问作者fable101
相关产品推荐
相关产品推荐

