/
transformer.go
75 lines (64 loc) · 2.63 KB
/
transformer.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
package transformer
import (
"context"
"github.com/armory/spinnaker-operator/pkg/apis/spinnaker/interfaces"
"github.com/armory/spinnaker-operator/pkg/generated"
"github.com/go-logr/logr"
v1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
)
// Generators tracks the list of transformers
var Generators []Generator
func init() {
Generators = append(Generators, &ownerTransformerGenerator{}, &targetTransformerGenerator{},
&exposeLbTransformerGenerator{}, &serverPortTransformerGenerator{}, &x509TransformerGenerator{},
&accountsTransformerGenerator{}, &secretsTransformerGenerator{}, &statsTransformerGenerator{},
&patchTransformerGenerator{})
}
// Transformer affects how Spinnaker is deployed.
// It can change the Spinnaker configuration itself with TransformConfig.
// It can also change the manifests before they are updated.
type Transformer interface {
TransformConfig(ctx context.Context) error
TransformManifests(ctx context.Context, scheme *runtime.Scheme, gen *generated.SpinnakerGeneratedConfig) error
}
// baseTransformer extends Transformer adding convenience methods.
type baseTransformer interface {
transformServiceManifest(ctx context.Context, svcName string, svc *corev1.Service) error
transformDeploymentManifest(ctx context.Context, deploymentName string, deployment *v1.Deployment) error
}
// Generator generates transformers for the given SpinnakerService
type Generator interface {
NewTransformer(svc interfaces.SpinnakerService, client client.Client, log logr.Logger) (Transformer, error)
GetName() string
}
// default implementation for all transformers
type DefaultTransformer struct {
ChildTransformer baseTransformer
}
func (t *DefaultTransformer) TransformConfig(ctx context.Context) error {
return nil
}
func (t *DefaultTransformer) TransformManifests(ctx context.Context, scheme *runtime.Scheme, gen *generated.SpinnakerGeneratedConfig) error {
for serviceName, serviceConfig := range gen.Config {
if serviceConfig.Service != nil {
if err := t.ChildTransformer.transformServiceManifest(ctx, serviceName, serviceConfig.Service); err != nil {
return err
}
}
if serviceConfig.Deployment != nil {
if err := t.ChildTransformer.transformDeploymentManifest(ctx, serviceName, serviceConfig.Deployment); err != nil {
return err
}
}
}
return nil
}
func (t *DefaultTransformer) transformServiceManifest(ctx context.Context, svcName string, svc *corev1.Service) error {
return nil
}
func (t *DefaultTransformer) transformDeploymentManifest(ctx context.Context, deploymentName string, deployment *v1.Deployment) error {
return nil
}