@@ -18,19 +18,24 @@ package v2
18
18
19
19
import (
20
20
"fmt"
21
+ "hash/fnv"
21
22
"path/filepath"
23
+ "text/template"
22
24
23
25
"sigs.k8s.io/kubebuilder/pkg/model/file"
24
26
)
25
27
26
28
const defaultMainPath = "main.go"
27
29
28
30
var _ file.Template = & Main {}
31
+ var _ file.UseCustomFuncMap = & Main {}
29
32
30
33
// Main scaffolds the controller manager entry point
31
34
type Main struct {
32
35
file.TemplateMixin
33
36
file.BoilerplateMixin
37
+ file.DomainMixin
38
+ file.RepositoryMixin
34
39
}
35
40
36
41
// SetTemplateDefaults implements file.Template
@@ -48,6 +53,19 @@ func (f *Main) SetTemplateDefaults() error {
48
53
return nil
49
54
}
50
55
56
+ func hash (s string ) (string , error ) {
57
+ hasher := fnv .New32a ()
58
+ hasher .Write ([]byte (s )) // nolint:errcheck
59
+ return fmt .Sprintf ("%x" , hasher .Sum (nil )), nil
60
+ }
61
+
62
+ // GetFuncMap implements file.UseCustomFuncMap
63
+ func (f * Main ) GetFuncMap () template.FuncMap {
64
+ fm := file .DefaultFuncMap ()
65
+ fm ["hash" ] = hash
66
+ return fm
67
+ }
68
+
51
69
var _ file.Inserter = & MainUpdater {}
52
70
53
71
// MainUpdater updates main.go to run Controllers
@@ -220,8 +238,9 @@ func main() {
220
238
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
221
239
Scheme: scheme,
222
240
MetricsBindAddress: metricsAddr,
223
- LeaderElection: enableLeaderElection,
224
241
Port: 9443,
242
+ LeaderElection: enableLeaderElection,
243
+ LeaderElectionID: "{{ hash .Repo }}.{{ .Domain }}",
225
244
})
226
245
if err != nil {
227
246
setupLog.Error(err, "unable to start manager")
0 commit comments