-
Notifications
You must be signed in to change notification settings - Fork 1
/
k8s.go
91 lines (72 loc) · 2.01 KB
/
k8s.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
82
83
84
85
86
87
88
89
90
91
package k8s
import (
"fmt"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
"github.com/spigell/pulumi-hcloud-kube-hetzner/internal/k8s/addons"
"github.com/spigell/pulumi-hcloud-kube-hetzner/internal/k8s/addons/ccm"
audit "github.com/spigell/pulumi-hcloud-kube-hetzner/internal/k8s/audit"
manager "github.com/spigell/pulumi-hcloud-kube-hetzner/internal/k8s/cluster-manager"
"github.com/spigell/pulumi-hcloud-kube-hetzner/internal/k8s/distributions/k3s"
"github.com/spigell/pulumi-hcloud-kube-hetzner/internal/k8s/k8sconfig"
"github.com/spigell/pulumi-hcloud-kube-hetzner/internal/program"
)
type K8S struct {
ctx *program.Context
distr string
addons []addons.Addon
mgmt *manager.ClusterManager
runner *Runner
auditLog *audit.AuditLog
}
func New(ctx *program.Context, config *k8sconfig.Config, nodes map[string]*manager.Node) *K8S {
mgmt := manager.New(ctx, nodes)
addons := addons.New(config.Addons)
auditLog := audit.NewAuditLog(config.AuditLog)
return &K8S{
ctx: ctx,
addons: addons,
mgmt: mgmt,
runner: NewRunner(ctx, addons).WithClusterManager(mgmt),
auditLog: auditLog,
}
}
func (k *K8S) K3S() *k3s.K3S {
k.distr = k3s.DistrName
return k3s.New(k.ctx)
}
func (k *K8S) Distr() string {
return k.distr
}
func (k *K8S) Addons() []addons.Addon {
return k.addons
}
func (k *K8S) CCM() *ccm.CCM {
return k.addon(ccm.Name).(*ccm.CCM)
}
func (k *K8S) Validate() error {
if err := k.mgmt.ValidateNodePatches(); err != nil {
return fmt.Errorf("failed to validate node patches: %w", err)
}
return addons.Validate(k.addons)
}
func (k *K8S) Up(kubeconfig pulumi.AnyOutput, deps []pulumi.Resource) error {
prov, err := k.Provider(kubeconfig, deps)
if err != nil {
return err
}
if err := k.mgmt.Up(kubeconfig, prov); err != nil {
return err
}
return k.runner.Run(prov)
}
func (k *K8S) AuditLog() *audit.AuditLog {
return k.auditLog
}
func (k *K8S) addon(name string) addons.Addon {
for _, addon := range k.addons {
if addon.Name() == name {
return addon
}
}
return nil
}