- 您可能会好奇上述FromUnstructured方法究竟是如何实现转换的,咱们去看下此方法的内部实现,如下图所示,其实也没啥悬念了,通过反射可以得到podList的字段信息:
- 至此,Unstructured的分析就结束了吗?没有,强烈推荐您进入上图红框2中的fromUnstructured方法去看细节,这里面是非常精彩的,以podList为例,这是个数据结构,而fromUnstructured只处理原始类型,对于数据结构会调用structFromUnstructured方法处理,在structFromUnstructured方法中
处理数据结构的每个字段,又会调用fromUnstructured,这是相互迭代的过程,最终,不论podList中有多少数据结构的嵌套都会被处理掉,篇幅所限就不展开相信分析了,下图是一部分关键代码:
-
小结:Unstructured转为资源对象的套路并不神秘,无非是用反射取得资源对象的字段类型,然后按照字段名去Unstructured的map中取得原始数据,再用反射设置到资源对象的字段中即可;
-
做完了准备工作,接下来该回到本篇文章的主题了:dynamicClient客户端
[](()关于dynamicClient
-
deployment、pod这些资源,其数据结构是明确的固定的,可以精确对应到Clientset中的数据结构和方法,但是对于CRD(用户自定义资源),Clientset客户端就无能为力了,此时需要有一种数据结构来承载资源对象的数据,也要有对应的方法来处理这些数据;
-
此刻,前面提到的Unstructured可以登场了,没错,把Clientset不支持的资源对象交给Unstructured来承载,接下来看看dynamicClient和Unstructured的关系:
-
先看数据结构定义,和