How to Submit generic “runtime.Object” to Kubernetes API using client-go
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
add a comment |
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
2
ThePut()
is only for update call. Moreover, you needclientset.RESTClient().Put().Namespace(ns).Resource(resource_type).Name(name).Body(obj).Do()
.
– Shudipta Sharma
Nov 16 '18 at 17:59
add a comment |
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
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
kubernetes kubernetes-apiserver client-go
asked Nov 16 '18 at 16:18
aloisbarreras
976
976
2
ThePut()
is only for update call. Moreover, you needclientset.RESTClient().Put().Namespace(ns).Resource(resource_type).Name(name).Body(obj).Do()
.
– Shudipta Sharma
Nov 16 '18 at 17:59
add a comment |
2
ThePut()
is only for update call. Moreover, you needclientset.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
add a comment |
1 Answer
1
active
oldest
votes
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.Object
s 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
}
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.Object
s 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
}
add a comment |
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.Object
s 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
}
add a comment |
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.Object
s 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
}
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.Object
s 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
}
answered Nov 18 '18 at 9:31
Nikhita Raghunath
807813
807813
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
2
The
Put()
is only for update call. Moreover, you needclientset.RESTClient().Put().Namespace(ns).Resource(resource_type).Name(name).Body(obj).Do()
.– Shudipta Sharma
Nov 16 '18 at 17:59