-
Notifications
You must be signed in to change notification settings - Fork 270
/
createcluster.go
80 lines (70 loc) 路 2.31 KB
/
createcluster.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
package createcluster
import (
"context"
"fmt"
"runtime"
"github.com/aws/eks-anywhere/pkg/cluster"
"github.com/aws/eks-anywhere/pkg/gitops/flux"
"github.com/aws/eks-anywhere/pkg/kubeconfig"
"github.com/aws/eks-anywhere/pkg/providers"
"github.com/aws/eks-anywhere/pkg/validations"
)
type ValidationManager struct {
clusterSpec *cluster.Spec
provider providers.Provider
gitOpsFlux *flux.Flux
createValidations Validator
dockerExec validations.DockerExecutable
}
type Validator interface {
PreflightValidations(ctx context.Context) []validations.Validation
}
func NewValidations(clusterSpec *cluster.Spec, provider providers.Provider, gitOpsFlux *flux.Flux, createValidations Validator, dockerExec validations.DockerExecutable) *ValidationManager {
return &ValidationManager{
clusterSpec: clusterSpec,
provider: provider,
gitOpsFlux: gitOpsFlux,
createValidations: createValidations,
dockerExec: dockerExec,
}
}
func (v *ValidationManager) Validate(ctx context.Context) error {
runner := validations.NewRunner()
runner.Register(v.generateCreateValidations(ctx)...)
runner.Register(v.gitOpsFlux.Validations(ctx, v.clusterSpec)...)
err := runner.Run()
return err
}
func (v *ValidationManager) generateCreateValidations(ctx context.Context) []validations.Validation {
vs := []validations.Validation{
func() *validations.ValidationResult {
return &validations.ValidationResult{
Name: "validate docker executable",
Err: validations.ValidateDockerExecutable(ctx, v.dockerExec, runtime.GOOS),
Silent: true,
}
},
func() *validations.ValidationResult {
return &validations.ValidationResult{
Name: "validate kubeconfig path",
Err: kubeconfig.ValidateKubeconfigPath(v.clusterSpec.Cluster.Name),
Silent: true,
}
},
func() *validations.ValidationResult {
return &validations.ValidationResult{
Name: "validate cluster",
Err: cluster.ValidateConfig(v.clusterSpec.Config),
Silent: true,
}
},
func() *validations.ValidationResult {
return &validations.ValidationResult{
Name: fmt.Sprintf("validate %s Provider", v.provider.Name()),
Err: v.provider.SetupAndValidateCreateCluster(ctx, v.clusterSpec),
}
},
}
vs = append(vs, v.createValidations.PreflightValidations(ctx)...)
return vs
}