getDynamicClientOnKind returns a dynamic client on an Unstructured type. This client can be further namespaced.
(apiversion string, kind string, config *rest.Config)
| 95 | |
| 96 | // getDynamicClientOnKind returns a dynamic client on an Unstructured type. This client can be further namespaced. |
| 97 | func getDynamicClientOnKind(apiversion string, kind string, config *rest.Config) (dynamic.NamespaceableResourceInterface, bool, error) { |
| 98 | gvk := schema.FromAPIVersionAndKind(apiversion, kind) |
| 99 | apiRes, err := getAPIResourceForGVK(gvk, config) |
| 100 | if err != nil { |
| 101 | slog.Error( |
| 102 | "unable to get apiresource", |
| 103 | slog.String("groupVersionKind", gvk.String()), |
| 104 | slog.Any("error", err), |
| 105 | ) |
| 106 | return nil, false, fmt.Errorf("unable to get apiresource from unstructured: %s: %w", gvk.String(), err) |
| 107 | } |
| 108 | gvr := schema.GroupVersionResource{ |
| 109 | Group: apiRes.Group, |
| 110 | Version: apiRes.Version, |
| 111 | Resource: apiRes.Name, |
| 112 | } |
| 113 | intf, err := dynamic.NewForConfig(config) |
| 114 | if err != nil { |
| 115 | slog.Error("unable to get dynamic client", slog.Any("error", err)) |
| 116 | return nil, false, err |
| 117 | } |
| 118 | res := intf.Resource(gvr) |
| 119 | return res, apiRes.Namespaced, nil |
| 120 | } |
| 121 | |
| 122 | func getAPIResourceForGVK(gvk schema.GroupVersionKind, config *rest.Config) (metav1.APIResource, error) { |
| 123 | res := metav1.APIResource{} |
no test coverage detected
searching dependent graphs…