/
desired.go
81 lines (66 loc) · 2.3 KB
/
desired.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
package s3object
import (
"context"
"strings"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/s3"
"github.com/giantswarm/microerror"
"github.com/giantswarm/operatorkit/v7/pkg/controller/context/resourcecanceledcontext"
"k8s.io/apimachinery/pkg/api/meta"
"github.com/giantswarm/aws-operator/v15/service/controller/controllercontext"
"github.com/giantswarm/aws-operator/v15/service/controller/key"
"github.com/giantswarm/aws-operator/v15/service/internal/cloudconfig"
)
func (r *Resource) GetDesiredState(ctx context.Context, obj interface{}) (interface{}, error) {
cr, err := meta.Accessor(obj)
if err != nil {
return nil, microerror.Mask(err)
}
cc, err := controllercontext.FromContext(ctx)
if err != nil {
return nil, microerror.Mask(err)
}
paths, err := r.cloudConfig.NewPaths(ctx, obj)
if cloudconfig.IsNotFound(err) {
r.logger.Debugf(ctx, "not computing desired state", "reason", "control plane CR not available yet")
r.logger.Debugf(ctx, "canceling resource")
resourcecanceledcontext.SetCanceled(ctx)
return nil, nil
} else if err != nil {
return nil, microerror.Mask(err)
}
templates, err := r.cloudConfig.NewTemplates(ctx, obj)
if cloudconfig.IsNotFound(err) {
r.logger.Debugf(ctx, "not computing desired state", "reason", "control plane CR not available yet")
r.logger.Debugf(ctx, "canceling resource")
resourcecanceledcontext.SetCanceled(ctx)
return nil, nil
} else if cloudconfig.IsTimeout(err) {
r.logger.Debugf(ctx, "not computing desired state", "reason", "secrets are not available yet")
r.logger.Debugf(ctx, "canceling resource")
resourcecanceledcontext.SetCanceled(ctx)
return nil, nil
} else if err != nil {
return nil, microerror.Mask(err)
}
var num int
{
if len(paths) != len(templates) {
return nil, microerror.Maskf(executionFailedError, "cloud config implementation produced invalid result")
}
num = len(paths)
}
var s3Objects []*s3.PutObjectInput
for i := 0; i < num; i++ {
p := paths[i]
t := templates[i]
s3Object := &s3.PutObjectInput{
Key: aws.String(p),
Body: strings.NewReader(string(t)),
Bucket: aws.String(key.BucketName(cr, cc.Status.TenantCluster.AWS.AccountID)),
ContentLength: aws.Int64(int64(len(t))),
}
s3Objects = append(s3Objects, s3Object)
}
return s3Objects, nil
}