英文:
Create custom resource with go Kubernetes client
问题
我想使用Go Kubernetes客户端基于已部署的CRD部署自定义资源。根据客户端的文档,我将示例调整为以下形式:
u := &unstructured.Unstructured{}
u.Object = map[string]interface{}{
"metadata": map[string]interface{}{
"name": task.Name,
},
"spec": map[string]interface{}{
"steps": []interface{}{
map[string]interface{}{
"image": "ubuntu",
"name": "hello",
"command": []interface{}{"echo"},
"args": []interface{}{"Hello World!"},
},
},
},
}
u.SetGroupVersionKind(schema.GroupVersionKind{
Group: "tekton.dev",
Version: "v1beta1",
Kind: "Task",
})
err := c.Create(context.Background(), u)
if err != nil {
logger.Error("Error creating TektonTask!", "ERR", err)
} else {
logger.Info("Created TektonTask.", "Task", u)
}
当我尝试执行该代码时,我没有从logger.Error
得到反馈,而是出现了恐慌:
runtime error: invalid memory address or nil pointer dereference
goroutine 12
所有的操作都在处理HTTP请求的内部运行,但因为我之前已经使用过其他(非CRD基础)资源,所以我认为这不是问题所在。在扩展日志记录时,我发现在以下代码行创建资源之前一切正常:
err := c.Create(context.Background(), u)
英文:
I want to deploy a custom resource based on an already deployed CRD using the go Kubernetes client. Based on the documentation of the client I adapted the example to look like this:
u := &unstructured.Unstructured{}
u.Object = map[string]interface{}{
"metadata": map[string]interface{}{
"name": task.Name,
},
"spec": map[string]interface{}{
"steps": []interface{}{
map[string]interface{}{
"image": "ubuntu",
"name": "hello",
"command": []interface{}{
"echo",
},
"args": []interface{}{
"Hello World!",
},
},
},
},
}
u.SetGroupVersionKind(schema.GroupVersionKind{
Group: "tekton.dev",
Version: "v1beta1",
Kind: "Task",
})
err := c.Create(context.Background(), u)
if err != nil {
logger.Error("Error creating TektonTask!", "ERR", err)
} else {
logger.Info("Created TektonTask.", "Task", u)
}
When I try to execute the code I don't get a feedback from the logger.Error but a panic with:
runtime error: invalid memory address or nil pointer dereference
goroutine 12
Everything is running inside a http request handling but because I used that with other (non crd based) resources already I would assume that this is not the issue.
When expanding logging I saw that everything works until the creation of the resource with the line
err := c.Create(context.Background(), u)
答案1
得分: 0
发现问题了。我忘记用以下代码初始化客户端:
c, err := client.New(config.GetConfigOrDie(), client.Options{})
英文:
Found the issue. I forgot to initialise the client with
c, err := client.New(config.GetConfigOrDie(), client.Options{})
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论