#go #kubernetes
#Вперед #kubernetes
Вопрос:
У меня проблема с анализом метаданных в объекте кластерной роли из Json в Go.
Я сделал этот пример:
package main
import (
"encoding/json"
"fmt"
"k8s.io/kubernetes/pkg/apis/rbac"
)
func main() {
clusterDemo := rbac.ClusterRole{}
clusterRolesRaw := `{
"apiVersion": "rbac.authorization.k8s.io/v1",
"kind": "ClusterRole",
"metadata": {
"creationTimestamp": "2021-01-21T08:07:13Z",
"managedFields": [],
"name": "kubeadm:get-nodes",
"resourceVersion": "220",
"uid": "c78a8b10-cd20-4b64-8e4d-4f7f758c7b65"
},
"rules": []
}`
err := json.Unmarshal([]byte(clusterRolesRaw), amp;clusterDemo)
if err != nil {
fmt.Printf("unmarshal file: %v", err)
}
fmt.Printf("Name: %sn", clusterDemo.Name)
fmt.Printf("Kind: %sn", clusterDemo.Kind)
}
Запустите его с помощью
# go get -v ./...
# go run <filename>
Name:
Kind: ClusterRole
Как вы можете видеть, поле вида анализируется, а поле имени (часть метаданных) — нет.
Мой вопрос в том, почему? Похоже, вложенная структура не анализируется.
Любая помощь приветствуется, я думаю, что я что-то упускаю
Комментарии:
1. В pkg.go.dev/k8s.io/kubernetes/pkg/apis/rbac#Кластерная роль
metav1.ObjectMeta
является встроенным / встроенным полем. Итак, я не думаю, что в JSON должны быть вложенные поляmetadata
?2. Это то, что я получаю от «kubectl get clusterroles -o json»
Ответ №1:
Измените импорт с "k8s.io/kubernetes/pkg/apis/rbac"
на rbac "k8s.io/api/rbac/v1"
.
Это должно сработать.