summaryrefslogtreecommitdiffstats
path: root/src/k8splugin/internal/app/client.go
diff options
context:
space:
mode:
authorKonrad Bańka <k.banka@samsung.com>2021-02-24 18:28:56 +0100
committerKonrad Bańka <k.banka@samsung.com>2021-02-24 21:43:07 +0100
commit74dfd71d3628c52e63f66c079244638c675b2b9c (patch)
tree1162640670a7bf6b3f8f3ab29b58da8bd064cff1 /src/k8splugin/internal/app/client.go
parent69f17bdaf539b3ad89f0c3770ea624b512b80fbd (diff)
Provide Query API for CNF Instances
Query API doesn't directly use Status API code, in order to allow for querying derived resources that might not be typically returned by Status API like replicasets for deployment. Issue-ID: MULTICLOUD-1305 Signed-off-by: Konrad Bańka <k.banka@samsung.com> Change-Id: If15adce23845880f3e6771cc8eab78a78ab13517
Diffstat (limited to 'src/k8splugin/internal/app/client.go')
-rw-r--r--src/k8splugin/internal/app/client.go35
1 files changed, 34 insertions, 1 deletions
diff --git a/src/k8splugin/internal/app/client.go b/src/k8splugin/internal/app/client.go
index 6762d1bc..f0edf8c9 100644
--- a/src/k8splugin/internal/app/client.go
+++ b/src/k8splugin/internal/app/client.go
@@ -1,6 +1,6 @@
/*
Copyright 2018 Intel Corporation.
-Copyright © 2020 Samsung Electronics
+Copyright © 2021 Samsung Electronics
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -90,6 +90,39 @@ func (k *KubernetesClient) getPodsByLabel(namespace string) ([]ResourceStatus, e
return resp, nil
}
+func (k *KubernetesClient) queryResources(apiVersion, kind, labelSelector, namespace string) ([]ResourceStatus, error) {
+ dynClient := k.GetDynamicClient()
+ mapper := k.GetMapper()
+ gvk := schema.FromAPIVersionAndKind(apiVersion, kind)
+ mapping, err := mapper.RESTMapping(gvk.GroupKind(), gvk.Version)
+ if err != nil {
+ return nil, pkgerrors.Wrap(err, "Preparing mapper based on GVK")
+ }
+
+ gvr := mapping.Resource
+ opts := metav1.ListOptions{
+ LabelSelector: labelSelector,
+ }
+ var unstrList *unstructured.UnstructuredList
+ switch mapping.Scope.Name() {
+ case meta.RESTScopeNameNamespace:
+ unstrList, err = dynClient.Resource(gvr).Namespace(namespace).List(opts)
+ case meta.RESTScopeNameRoot:
+ unstrList, err = dynClient.Resource(gvr).List(opts)
+ default:
+ return nil, pkgerrors.New("Got an unknown RESTScopeName for mapping: " + gvk.String())
+ }
+ if err != nil {
+ return nil, pkgerrors.Wrap(err, "Querying for resources")
+ }
+
+ resp := make([]ResourceStatus, len(unstrList.Items))
+ for _, unstr := range unstrList.Items {
+ resp = append(resp, ResourceStatus{unstr.GetName(), gvk, unstr})
+ }
+ return resp, nil
+}
+
// getResourcesStatus yields status of given generic resource
func (k *KubernetesClient) getResourceStatus(res helm.KubernetesResource, namespace string) (ResourceStatus, error) {
dynClient := k.GetDynamicClient()