如何遍历返回的k8s客户端对象中的项目?

How to iterate over items in returned k8s client object?

提问人:Seeking Guidance 提问时间:3/29/2023 更新时间:3/29/2023 访问量:141

问:

我正在使用 Python 3 和 K8s 客户端来查询各种集群信息。

在某些情况下,客户端返回的不是格式正确的 json 对象,而是我无法弄清楚如何“读取”的自定义对象。

作为一个具体的例子,我使用的是 k8s 客户端方法:list_persistent_volume_claim_for_all_namespaces()

这将返回 V1PersistentVolumeClaim 类型的实例,如下所述: https://github.com/kubernetes-client/python/blob/master/kubernetes/docs/V1PersistentVolumeClaim.md

我的问题是如何处理这些实例并提取包含的信息?我想像迭代任何 Json 对象一样遍历内容,但这不起作用。我可以将其作为字符串引用,但是,引用问题、未加引号的值、未加引号的数字、嵌入的换行符等非常肮脏。我已经能够用一堆正则表达式子来清理它,但是,这是一场噩梦,我永远不知道什么时候会出现其他一些数据并破坏它。有没有更好的方法来提取这些信息?或者有关如何解析返回结果的文档链接会很棒......我在这里错过了什么?

谢谢,丹尼斯

Python Kubernetes 命名空间 客户端

评论

0赞 David Maze 3/29/2023
你有更完整的代码示例吗?我希望这样的客户端调用能够返回该对象的实例;您根本不应该直接看到 JSON。
0赞 Seeking Guidance 3/31/2023
感谢 Maze,@David它对我来说“看起来”像 JSON,但实际上是一个 yaml 字符串(有点)。我说“有点”是因为在数据中,它有字符串“datetime.datetime(yyyy, mm, dd, hh, ss, tz....)”。注意:所有日期时间数字均已填充。另外,还有一个格式为“...”的糟糕字符串。(即,嵌入在单引号字符串之间的 CRLF,没有逗号)。显然yaml.safe_load无法处理这两种情况。一旦我清理了它们,我就可以进行yaml.safe_load并转换为 python 中的字典和进程。

答:

0赞 Seeking Guidance 3/29/2023 #1

嘟......还没有对 yaml 做太多事情。尤其是.raw像这样的 yaml 字符串。yaml.safe_load(str) 将其转换为字典...方便。。。