-
Notifications
You must be signed in to change notification settings - Fork 1
/
list_resources.go
76 lines (66 loc) · 2.04 KB
/
list_resources.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
Copyright 2017 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package tpr
import (
"github.com/golang/glog"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/runtime"
restclient "k8s.io/client-go/rest"
"k8s.io/kubernetes/pkg/api/v1"
)
// listResource uses cl to get resources of the given kind from the given namespace, and decodes
// the resources into listObj.
func listResource(
cl restclient.Interface,
ns string,
kind Kind,
listObj runtime.Object,
codec runtime.Codec,
) ([]runtime.Object, error) {
req := cl.Get().AbsPath(
"apis",
groupName,
tprVersion,
"namespaces",
ns,
kind.URLName(),
)
var unknown runtime.Unknown
if err := req.Do().Into(&unknown); err != nil {
glog.Errorf("doing request (%s)", err)
return nil, err
}
if err := decode(codec, unknown.Raw, listObj); err != nil {
return nil, err
}
objs, err := meta.ExtractList(listObj)
if err != nil {
glog.Errorf("extracting list items from the list object (%s)", err)
return nil, err
}
return objs, nil
}
// getAllNamespaces uses cl to get all namespaces
func getAllNamespaces(cl restclient.Interface) (*v1.NamespaceList, error) {
req := cl.Get().AbsPath("api", "v1", "namespaces")
var nsList v1.NamespaceList
if err := req.Do().Into(&nsList); err != nil {
glog.Errorf("getting all namespaces (%s)", err)
return nil, err
}
return &nsList, nil
}
// stripNamespacesFromList removes the namespaces from each object in the list represented by obj
func stripNamespacesFromList(obj runtime.Object) error {
return meta.EachListItem(obj, removeNamespace)
}