【发布时间】:2020-06-08 16:05:26
【问题描述】:
我正在创建一个工具,该工具将使用 yaml 文件创建 kubernetes 对象。我是用golang写的。该工具希望实现与 kubectl apply -f test.yaml 相同的行为
【问题讨论】:
-
kubectl is implemented in Go。你读过 kubectl 源代码吗?
标签: kubernetes kubectl client-go
我正在创建一个工具,该工具将使用 yaml 文件创建 kubernetes 对象。我是用golang写的。该工具希望实现与 kubectl apply -f test.yaml 相同的行为
【问题讨论】:
标签: kubernetes kubectl client-go
kubectl 源码比较难理解,尤其是涉及到很多非固定对象类型的创建,如何解析 yaml 到 go 对象(我搞定了,但是需要手动切换大小写转换成真正的 go 类型,这是单一类型)。
这是秘密创建代码,有什么通用的创建可以传递不同对象的列表吗?或者更好,只是简单的 yaml 字符串?
secretClient := client.CoreV1().Secrets("default")
result, err := secretClient.Create(secret)
func (o *ApplyOptions) GetObjects() ([]*resource.Info, error) {
var err error = nil
if !o.objectsCached {
// include the uninitialized objects by default if --prune is true
// unless explicitly set --include-uninitialized=false
r := o.Builder.
Unstructured().
Schema(o.Validator).
ContinueOnError().
NamespaceParam(o.Namespace).DefaultNamespace().
FilenameParam(o.EnforceNamespace, &o.DeleteOptions.FilenameOptions).
LabelSelectorParam(o.Selector).
Flatten().
Do()
o.objects, err = r.Infos()
o.objectsCached = true
}
return o.objects, err
}
r.Infos 迷路了,不确定它在哪里定义。
【讨论】: