...
1
2
3
4 package statusreaders
5
6 import (
7 "context"
8
9 "k8s.io/apimachinery/pkg/api/meta"
10 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
11 "k8s.io/apimachinery/pkg/runtime/schema"
12 "sigs.k8s.io/cli-utils/pkg/kstatus/polling/engine"
13 "sigs.k8s.io/cli-utils/pkg/kstatus/polling/event"
14 "sigs.k8s.io/cli-utils/pkg/kstatus/status"
15 "sigs.k8s.io/cli-utils/pkg/object"
16 )
17
18
19
20
21 type StatusFunc func(u *unstructured.Unstructured) (*status.Result, error)
22
23 func NewGenericStatusReader(mapper meta.RESTMapper, statusFunc StatusFunc) engine.StatusReader {
24 return &baseStatusReader{
25 mapper: mapper,
26 resourceStatusReader: &genericStatusReader{
27 mapper: mapper,
28 statusFunc: statusFunc,
29 },
30 }
31 }
32
33
34
35
36
37
38
39 type genericStatusReader struct {
40 mapper meta.RESTMapper
41
42 statusFunc StatusFunc
43 }
44
45 var _ resourceTypeStatusReader = &genericStatusReader{}
46
47 func (g *genericStatusReader) Supports(schema.GroupKind) bool {
48 return true
49 }
50
51 func (g *genericStatusReader) ReadStatusForObject(_ context.Context, _ engine.ClusterReader, resource *unstructured.Unstructured) (*event.ResourceStatus, error) {
52 identifier := object.UnstructuredToObjMetadata(resource)
53
54 res, err := g.statusFunc(resource)
55 if err != nil {
56 return errResourceToResourceStatus(err, resource)
57 }
58
59 return &event.ResourceStatus{
60 Identifier: identifier,
61 Status: res.Status,
62 Resource: resource,
63 Message: res.Message,
64 }, nil
65 }
66
View as plain text