...
1
2
3
4 package statusreaders
5
6 import (
7 "context"
8
9 appsv1 "k8s.io/api/apps/v1"
10 "k8s.io/apimachinery/pkg/api/meta"
11 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
12 "k8s.io/apimachinery/pkg/runtime/schema"
13 "sigs.k8s.io/cli-utils/pkg/kstatus/polling/engine"
14 "sigs.k8s.io/cli-utils/pkg/kstatus/polling/event"
15 "sigs.k8s.io/cli-utils/pkg/kstatus/status"
16 "sigs.k8s.io/cli-utils/pkg/object"
17 )
18
19 func NewDeploymentResourceReader(mapper meta.RESTMapper, rsStatusReader resourceTypeStatusReader) engine.StatusReader {
20 return &baseStatusReader{
21 mapper: mapper,
22 resourceStatusReader: &deploymentResourceReader{
23 mapper: mapper,
24 rsStatusReader: rsStatusReader,
25 },
26 }
27 }
28
29
30
31
32 type deploymentResourceReader struct {
33 mapper meta.RESTMapper
34
35
36
37 rsStatusReader resourceTypeStatusReader
38 }
39
40 var _ resourceTypeStatusReader = &deploymentResourceReader{}
41
42 func (d *deploymentResourceReader) Supports(gk schema.GroupKind) bool {
43 return gk == appsv1.SchemeGroupVersion.WithKind("Deployment").GroupKind()
44 }
45
46 func (d *deploymentResourceReader) ReadStatusForObject(ctx context.Context, reader engine.ClusterReader,
47 deployment *unstructured.Unstructured) (*event.ResourceStatus, error) {
48 identifier := object.UnstructuredToObjMetadata(deployment)
49
50 replicaSetStatuses, err := statusForGeneratedResources(ctx, d.mapper, reader, d.rsStatusReader, deployment,
51 appsv1.SchemeGroupVersion.WithKind("ReplicaSet").GroupKind(), "spec", "selector")
52 if err != nil {
53 return errResourceToResourceStatus(err, deployment)
54 }
55
56
57
58
59
60 res, err := status.Compute(deployment)
61 if err != nil {
62 return errResourceToResourceStatus(err, deployment, replicaSetStatuses...)
63 }
64
65 return &event.ResourceStatus{
66 Identifier: identifier,
67 Status: res.Status,
68 Resource: deployment,
69 Message: res.Message,
70 GeneratedResources: replicaSetStatuses,
71 }, nil
72 }
73
View as plain text