...
1 package lifecycle
2
3 import (
4 "context"
5 "fmt"
6
7 "sigs.k8s.io/controller-runtime/pkg/client"
8
9 "edge-infra.dev/pkg/lib/fog"
10 "edge-infra.dev/pkg/sds/etcd/operator/internal/resources"
11 )
12
13
14
15 func (r *Reconciler) create(ctx context.Context, handlers *Handlers) error {
16 log := fog.FromContext(ctx)
17 if err := r.generateEtcdMember(handlers); err != nil {
18 return err
19 }
20 if err := handlers.member.Validate(ctx); err != nil {
21 return fmt.Errorf("EtcdMember failed validation: %w", err)
22 }
23 err := handlers.member.CreateRemote(ctx)
24 if client.IgnoreAlreadyExists(err) != nil {
25 return fmt.Errorf("failed to create EtcdMember: %w", err)
26 }
27 if err == nil {
28 r.Metrics.Custom.RecordEtcdMemberCreate(handlers.member.EtcdMember)
29 log.V(0).Info("created EtcdMember", "eoaudit", "")
30 }
31 return nil
32 }
33
34
35 func (r *Reconciler) generateEtcdMember(handlers *Handlers) error {
36 ip, err := handlers.node.IP()
37 if err != nil {
38 return fmt.Errorf("failed to get etcd host address: %w", err)
39 }
40
41 ienVersion := handlers.node.IENVersion()
42
43 b := resources.NewEtcdMemberHandlerBuilder().
44 WithClient(handlers.member.Client).
45 WithKey(handlers.member.Key).
46 HandlesEtcdMember().
47 Named(handlers.member.Key.Name).
48 InstalledFor(ienVersion).
49 AtHost(ip).
50 OnPeerPort(2380).
51 OnClientPort(2379)
52 handlers.member = b.Build()
53
54 return nil
55 }
56
View as plain text