我使用自定义YAML标记来定义配置中的秘密。配置密钥的路径确定密钥库中密钥的路径。
import yaml
import pdb
yaml_str="""
databases:
master:
user: 'admin'
pass: !KMS
"""
class KMSSecret(yaml.YAMLObject):
def __repr__(self):
pdb.set_trace()
secret_path = '/' + '/'.join(self._find_key(config))
return secret_path
def _find_key(self, data):
pdb.set_trace()
for key, value in data.items():
if isinstance(value, dict) or isinstance(value, list):
path_item = self._find_key(value)
if path_item:
return [key] + path_item
elif value is self:
return [key]
@classmethod
def from_yaml(self, loader, node):
return KMSSecret()
yaml.add_constructor(u'!KMS', KMSSecret.from_yaml)
config = yaml.load(yaml_str)
在__repr__
或_find_key
内设置断点无效。
代码必须在某个时刻执行,因为在加载后检查config
变量会显示预期的表示。
将print(config)
添加到上述代码段的末尾时,断点可以正常工作。
我想更多地了解正在发生的事情以及我应该阅读的内容。