How to Submit generic “runtime.Object” to Kubernetes API using client-go












5














I'm using AWS' EKS which is Kubernetes v1.10 and I'm using client-go v7.0.0.



What I'm trying to do is parse a .yml file with multiple Kubernetes resource definitions in a file and submit those resources to the Kubernetes API. I can successfully parse the files using this code scheme.Codecs.UniversalDeserializer().Decode, and I get back an array of runtime.Object.



I know that all the Kubernetes resources conform to the runtime.Object interface, but I can't find a way to submit the generic interface to the API. Most methods I've seen use the methods on the concrete types like Deployment, Pod, etc.



I've seen some code around a generic RESTClient like this clientset.RESTClient().Put().Body(obj).Do(), but that doesn't work and I can't figure it out.



I know my clientset is configured correctly because I can successfully list all Pods.










share|improve this question


















  • 2




    The Put() is only for update call. Moreover, you need clientset.RESTClient().Put().Namespace(ns).Resource(resource_type).Name(name).Body(obj).Do().
    – Shudipta Sharma
    Nov 16 '18 at 17:59
















5














I'm using AWS' EKS which is Kubernetes v1.10 and I'm using client-go v7.0.0.



What I'm trying to do is parse a .yml file with multiple Kubernetes resource definitions in a file and submit those resources to the Kubernetes API. I can successfully parse the files using this code scheme.Codecs.UniversalDeserializer().Decode, and I get back an array of runtime.Object.



I know that all the Kubernetes resources conform to the runtime.Object interface, but I can't find a way to submit the generic interface to the API. Most methods I've seen use the methods on the concrete types like Deployment, Pod, etc.



I've seen some code around a generic RESTClient like this clientset.RESTClient().Put().Body(obj).Do(), but that doesn't work and I can't figure it out.



I know my clientset is configured correctly because I can successfully list all Pods.










share|improve this question


















  • 2




    The Put() is only for update call. Moreover, you need clientset.RESTClient().Put().Namespace(ns).Resource(resource_type).Name(name).Body(obj).Do().
    – Shudipta Sharma
    Nov 16 '18 at 17:59














5












5








5







I'm using AWS' EKS which is Kubernetes v1.10 and I'm using client-go v7.0.0.



What I'm trying to do is parse a .yml file with multiple Kubernetes resource definitions in a file and submit those resources to the Kubernetes API. I can successfully parse the files using this code scheme.Codecs.UniversalDeserializer().Decode, and I get back an array of runtime.Object.



I know that all the Kubernetes resources conform to the runtime.Object interface, but I can't find a way to submit the generic interface to the API. Most methods I've seen use the methods on the concrete types like Deployment, Pod, etc.



I've seen some code around a generic RESTClient like this clientset.RESTClient().Put().Body(obj).Do(), but that doesn't work and I can't figure it out.



I know my clientset is configured correctly because I can successfully list all Pods.










share|improve this question













I'm using AWS' EKS which is Kubernetes v1.10 and I'm using client-go v7.0.0.



What I'm trying to do is parse a .yml file with multiple Kubernetes resource definitions in a file and submit those resources to the Kubernetes API. I can successfully parse the files using this code scheme.Codecs.UniversalDeserializer().Decode, and I get back an array of runtime.Object.



I know that all the Kubernetes resources conform to the runtime.Object interface, but I can't find a way to submit the generic interface to the API. Most methods I've seen use the methods on the concrete types like Deployment, Pod, etc.



I've seen some code around a generic RESTClient like this clientset.RESTClient().Put().Body(obj).Do(), but that doesn't work and I can't figure it out.



I know my clientset is configured correctly because I can successfully list all Pods.







kubernetes kubernetes-apiserver client-go






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 16 '18 at 16:18









aloisbarreras

976




976








  • 2




    The Put() is only for update call. Moreover, you need clientset.RESTClient().Put().Namespace(ns).Resource(resource_type).Name(name).Body(obj).Do().
    – Shudipta Sharma
    Nov 16 '18 at 17:59














  • 2




    The Put() is only for update call. Moreover, you need clientset.RESTClient().Put().Namespace(ns).Resource(resource_type).Name(name).Body(obj).Do().
    – Shudipta Sharma
    Nov 16 '18 at 17:59








2




2




The Put() is only for update call. Moreover, you need clientset.RESTClient().Put().Namespace(ns).Resource(resource_type).Name(name).Body(obj).Do().
– Shudipta Sharma
Nov 16 '18 at 17:59




The Put() is only for update call. Moreover, you need clientset.RESTClient().Put().Namespace(ns).Resource(resource_type).Name(name).Body(obj).Do().
– Shudipta Sharma
Nov 16 '18 at 17:59












1 Answer
1






active

oldest

votes


















1














If you have a "generic" runtime.Object, you can use the dynamic client in client-go for this. The dynamic client deals with unstructured.Unstructured objects and all runtime.Objects can be converted to it. Here is an example:



// create the dynamic client from kubeconfig
dynamicClient, err := dynamic.NewForConfig(kubeconfig)
if err != nil {
return err
}

// convert the runtime.Object to unstructured.Unstructured
unstructuredObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj)
if err != nil {
return err
}

// create the object using the dynamic client
nodeResource := schema.GroupVersionResource{Version: "v1", Resource: "Node"}
createdUnstructuredObj, err := dynamicClient.Resource(nodeResource).Namespace(ns).Create(unstructuredObj)
if err != nil {
return err
}

// convert unstructured.Unstructured to a Node
var node *corev1.Node
if err = runtime.DefaultUnstructuredConverter.FromUnstructured(createdUnstructuredObj, node); err != nil {
return err
}





share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53341727%2fhow-to-submit-generic-runtime-object-to-kubernetes-api-using-client-go%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    1














    If you have a "generic" runtime.Object, you can use the dynamic client in client-go for this. The dynamic client deals with unstructured.Unstructured objects and all runtime.Objects can be converted to it. Here is an example:



    // create the dynamic client from kubeconfig
    dynamicClient, err := dynamic.NewForConfig(kubeconfig)
    if err != nil {
    return err
    }

    // convert the runtime.Object to unstructured.Unstructured
    unstructuredObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj)
    if err != nil {
    return err
    }

    // create the object using the dynamic client
    nodeResource := schema.GroupVersionResource{Version: "v1", Resource: "Node"}
    createdUnstructuredObj, err := dynamicClient.Resource(nodeResource).Namespace(ns).Create(unstructuredObj)
    if err != nil {
    return err
    }

    // convert unstructured.Unstructured to a Node
    var node *corev1.Node
    if err = runtime.DefaultUnstructuredConverter.FromUnstructured(createdUnstructuredObj, node); err != nil {
    return err
    }





    share|improve this answer


























      1














      If you have a "generic" runtime.Object, you can use the dynamic client in client-go for this. The dynamic client deals with unstructured.Unstructured objects and all runtime.Objects can be converted to it. Here is an example:



      // create the dynamic client from kubeconfig
      dynamicClient, err := dynamic.NewForConfig(kubeconfig)
      if err != nil {
      return err
      }

      // convert the runtime.Object to unstructured.Unstructured
      unstructuredObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj)
      if err != nil {
      return err
      }

      // create the object using the dynamic client
      nodeResource := schema.GroupVersionResource{Version: "v1", Resource: "Node"}
      createdUnstructuredObj, err := dynamicClient.Resource(nodeResource).Namespace(ns).Create(unstructuredObj)
      if err != nil {
      return err
      }

      // convert unstructured.Unstructured to a Node
      var node *corev1.Node
      if err = runtime.DefaultUnstructuredConverter.FromUnstructured(createdUnstructuredObj, node); err != nil {
      return err
      }





      share|improve this answer
























        1












        1








        1






        If you have a "generic" runtime.Object, you can use the dynamic client in client-go for this. The dynamic client deals with unstructured.Unstructured objects and all runtime.Objects can be converted to it. Here is an example:



        // create the dynamic client from kubeconfig
        dynamicClient, err := dynamic.NewForConfig(kubeconfig)
        if err != nil {
        return err
        }

        // convert the runtime.Object to unstructured.Unstructured
        unstructuredObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj)
        if err != nil {
        return err
        }

        // create the object using the dynamic client
        nodeResource := schema.GroupVersionResource{Version: "v1", Resource: "Node"}
        createdUnstructuredObj, err := dynamicClient.Resource(nodeResource).Namespace(ns).Create(unstructuredObj)
        if err != nil {
        return err
        }

        // convert unstructured.Unstructured to a Node
        var node *corev1.Node
        if err = runtime.DefaultUnstructuredConverter.FromUnstructured(createdUnstructuredObj, node); err != nil {
        return err
        }





        share|improve this answer












        If you have a "generic" runtime.Object, you can use the dynamic client in client-go for this. The dynamic client deals with unstructured.Unstructured objects and all runtime.Objects can be converted to it. Here is an example:



        // create the dynamic client from kubeconfig
        dynamicClient, err := dynamic.NewForConfig(kubeconfig)
        if err != nil {
        return err
        }

        // convert the runtime.Object to unstructured.Unstructured
        unstructuredObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj)
        if err != nil {
        return err
        }

        // create the object using the dynamic client
        nodeResource := schema.GroupVersionResource{Version: "v1", Resource: "Node"}
        createdUnstructuredObj, err := dynamicClient.Resource(nodeResource).Namespace(ns).Create(unstructuredObj)
        if err != nil {
        return err
        }

        // convert unstructured.Unstructured to a Node
        var node *corev1.Node
        if err = runtime.DefaultUnstructuredConverter.FromUnstructured(createdUnstructuredObj, node); err != nil {
        return err
        }






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 18 '18 at 9:31









        Nikhita Raghunath

        807813




        807813






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53341727%2fhow-to-submit-generic-runtime-object-to-kubernetes-api-using-client-go%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Biblatex bibliography style without URLs when DOI exists (in Overleaf with Zotero bibliography)

            ComboBox Display Member on multiple fields

            Is it possible to collect Nectar points via Trainline?