forked from onosproject/helmit
/
persistentvolumesreader.go
103 lines (95 loc) · 2.79 KB
/
persistentvolumesreader.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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// Code generated by helmit-generate. DO NOT EDIT.
package v1
import (
"context"
"github.com/wangxn2015/helmit/pkg/kubernetes/resource"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
kubernetes "k8s.io/client-go/kubernetes"
"time"
)
type PersistentVolumesReader interface {
Get(ctx context.Context, name string) (*PersistentVolume, error)
List(ctx context.Context) ([]*PersistentVolume, error)
}
func NewPersistentVolumesReader(client resource.Client, filter resource.Filter) PersistentVolumesReader {
return &persistentVolumesReader{
Client: client,
filter: filter,
}
}
type persistentVolumesReader struct {
resource.Client
filter resource.Filter
}
func (c *persistentVolumesReader) Get(ctx context.Context, name string) (*PersistentVolume, error) {
persistentVolume := &corev1.PersistentVolume{}
client, err := kubernetes.NewForConfig(c.Config())
if err != nil {
return nil, err
}
err = client.CoreV1().
RESTClient().
Get().
NamespaceIfScoped(c.Namespace(), PersistentVolumeKind.Scoped).
Resource(PersistentVolumeResource.Name).
Name(name).
VersionedParams(&metav1.ListOptions{}, metav1.ParameterCodec).
Timeout(time.Minute).
Do(ctx).
Into(persistentVolume)
if err != nil {
return nil, err
} else {
ok, err := c.filter(metav1.GroupVersionKind{
Group: PersistentVolumeKind.Group,
Version: PersistentVolumeKind.Version,
Kind: PersistentVolumeKind.Kind,
}, persistentVolume.ObjectMeta)
if err != nil {
return nil, err
} else if !ok {
return nil, errors.NewNotFound(schema.GroupResource{
Group: PersistentVolumeKind.Group,
Resource: PersistentVolumeResource.Name,
}, name)
}
}
return NewPersistentVolume(persistentVolume, c.Client), nil
}
func (c *persistentVolumesReader) List(ctx context.Context) ([]*PersistentVolume, error) {
list := &corev1.PersistentVolumeList{}
client, err := kubernetes.NewForConfig(c.Config())
if err != nil {
return nil, err
}
err = client.CoreV1().
RESTClient().
Get().
NamespaceIfScoped(c.Namespace(), PersistentVolumeKind.Scoped).
Resource(PersistentVolumeResource.Name).
VersionedParams(&metav1.ListOptions{}, metav1.ParameterCodec).
Timeout(time.Minute).
Do(ctx).
Into(list)
if err != nil {
return nil, err
}
results := make([]*PersistentVolume, 0, len(list.Items))
for _, persistentVolume := range list.Items {
ok, err := c.filter(metav1.GroupVersionKind{
Group: PersistentVolumeKind.Group,
Version: PersistentVolumeKind.Version,
Kind: PersistentVolumeKind.Kind,
}, persistentVolume.ObjectMeta)
if err != nil {
return nil, err
} else if ok {
copy := persistentVolume
results = append(results, NewPersistentVolume(©, c.Client))
}
}
return results, nil
}