package main
import (
"context"
"io/ioutil"
"k8s.io/client-go/rest"
"k8s.io/apimachinery/pkg/api/meta"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
yamlCodec "k8s.io/apimachinery/pkg/runtime/serializer/yaml"
"k8s.io/client-go/discovery"
memory "k8s.io/client-go/discovery/cached"
"k8s.io/client-go/dynamic"
"k8s.io/client-go/restmapper"
)
func dynamicCreate(ctx context.Context, cfg *rest.Config, codec runtime.Serializer, data []byte) error {
discoveryClient, err := discovery.NewDiscoveryClientForConfig(cfg)
if err != nil {
return err
}
mapper := restmapper.NewDeferredDiscoveryRESTMapper(memory.NewMemCacheClient(discoveryClient))
dynamicClient, err := dynamic.NewForConfig(cfg)
if err != nil {
return err
}
obj := &unstructured.Unstructured{}
_, gvk, err := codec.Decode(data, nil, obj)
if err != nil {
return err
}
mapping, err := mapper.RESTMapping(gvk.GroupKind(), gvk.Version)
if err != nil {
return err
}
var dynamicResource dynamic.ResourceInterface = dynamicClient.Resource(mapping.Resource)
if mapping.Scope.Name() == meta.RESTScopeNameNamespace {
namesapce := obj.GetNamespace()
if namesapce == "" {
namesapce = "default"
}
dynamicResource = dynamicClient.Resource(mapping.Resource).Namespace(namesapce)
}
if _, err := dynamicResource.Create(ctx, obj, metav1.CreateOptions{}); err != nil {
return err
}
return nil
}
func main() {
data, err := ioutil.ReadFile("./demo.yaml")
if err != nil {
panic(err)
}
restConfig := &rest.Config{
Host: "yourk8shost",
BearerToken: "yourtoken",
TLSClientConfig: rest.TLSClientConfig{
Insecure: true,
},
}
ctx := context.TODO()
codec := yamlCodec.NewDecodingSerializer(unstructured.UnstructuredJSONScheme)
if err := dynamicCreate(ctx, restConfig, codec, data); err != nil {
panic(err)
}
}
未知yaml中gvk时候client go创建资源
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 问题备忘: 编号问题解决0用apiserver的url方式请求的时候具备了哪些权限?以及用kubeconfig或者...
- UIord平台将带来内容创作的春天 村目 2018-02-13 19:57 · 字数 561 · 阅读 0 · 区...