-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathmain.go
More file actions
80 lines (66 loc) · 2.71 KB
/
Copy pathmain.go
File metadata and controls
80 lines (66 loc) · 2.71 KB
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 main
import (
"sigs.k8s.io/controller-runtime/pkg/log"
// Register karpenter core types into the default k8s scheme.
_ "sigs.k8s.io/karpenter/pkg/apis/v1"
"sigs.k8s.io/karpenter/pkg/cloudprovider/overlay"
"sigs.k8s.io/karpenter/pkg/controllers"
"sigs.k8s.io/karpenter/pkg/controllers/state"
"sigs.k8s.io/karpenter/pkg/operator"
// Register our HCloudNodeClass v1 types.
_ "github.com/paperclipinc/karpenter-provider-hetzner/pkg/apis/v1"
hetznercp "github.com/paperclipinc/karpenter-provider-hetzner/pkg/cloudprovider"
instancetypecapacity "github.com/paperclipinc/karpenter-provider-hetzner/pkg/controllers/instancetype/capacity"
"github.com/paperclipinc/karpenter-provider-hetzner/pkg/controllers/nodeclass"
hetznerop "github.com/paperclipinc/karpenter-provider-hetzner/pkg/operator"
"github.com/paperclipinc/karpenter-provider-hetzner/pkg/providers/imagefamily"
"github.com/paperclipinc/karpenter-provider-hetzner/pkg/providers/instance"
"github.com/paperclipinc/karpenter-provider-hetzner/pkg/providers/instancetype"
)
func main() {
ctx, op := operator.NewOperator()
// Create the Hetzner Cloud API client.
hcloudClient, err := hetznerop.NewHCloudClient()
if err != nil {
log.FromContext(ctx).Error(err, "failed to create Hetzner Cloud client")
return
}
cfg, err := hetznerop.LoadConfig()
if err != nil {
log.FromContext(ctx).Error(err, "failed to load config")
return
}
// Create the three providers.
instanceProvider := instance.NewProviderWithPlacementGroups(&hcloudClient.Server, &hcloudClient.PlacementGroup, cfg.ClusterName, &hcloudClient.Action)
typeProvider := instancetype.NewProvider(&hcloudClient.ServerType, cfg.VMMemoryOverheadPercent)
imageProvider := imagefamily.NewProvider(&hcloudClient.Image)
// Create the cloud provider.
baseCloudProvider := hetznercp.NewCloudProvider(
op.GetClient(),
instanceProvider,
typeProvider,
imageProvider,
)
// Wrap with the overlay decorator (required by NewControllers).
cloudProvider := overlay.Decorate(baseCloudProvider, op.GetClient(), op.InstanceTypeStore)
// Create cluster state.
clusterState := state.NewCluster(op.Clock, op.GetClient(), cloudProvider)
// Our NodeClass status controller (network + image validation, Ready).
nodeClassController := nodeclass.NewController(op.GetClient(), &hcloudClient.Network, &hcloudClient.Firewall, &hcloudClient.SSHKey, imageProvider)
// Wire and start all controllers.
op.WithControllers(ctx, append(
controllers.NewControllers(
ctx,
op.Manager,
op.Clock,
op.GetClient(),
op.EventRecorder,
cloudProvider,
baseCloudProvider,
clusterState,
op.InstanceTypeStore,
),
nodeClassController,
instancetypecapacity.NewController(op.GetClient(), typeProvider),
)...).Start(ctx)
}