package lifecycle import ( "context" "fmt" "sigs.k8s.io/controller-runtime/pkg/client" "edge-infra.dev/pkg/lib/fog" "edge-infra.dev/pkg/sds/etcd/operator/internal/resources" ) // create creates a new EtcdMember if one does not exist and // a node exists for that EtcdMember func (r *Reconciler) create(ctx context.Context, handlers *Handlers) error { log := fog.FromContext(ctx) if err := r.generateEtcdMember(handlers); err != nil { return err } if err := handlers.member.Validate(ctx); err != nil { return fmt.Errorf("EtcdMember failed validation: %w", err) } err := handlers.member.CreateRemote(ctx) if client.IgnoreAlreadyExists(err) != nil { return fmt.Errorf("failed to create EtcdMember: %w", err) } if err == nil { r.Metrics.Custom.RecordEtcdMemberCreate(handlers.member.EtcdMember) log.V(0).Info("created EtcdMember", "eoaudit", "") } return nil } // generateEtcdMember generates a new EtcdMember object for the current Node func (r *Reconciler) generateEtcdMember(handlers *Handlers) error { ip, err := handlers.node.IP() if err != nil { return fmt.Errorf("failed to get etcd host address: %w", err) } ienVersion := handlers.node.IENVersion() b := resources.NewEtcdMemberHandlerBuilder(). WithClient(handlers.member.Client). WithKey(handlers.member.Key). HandlesEtcdMember(). Named(handlers.member.Key.Name). InstalledFor(ienVersion). AtHost(ip). OnPeerPort(2380). OnClientPort(2379) handlers.member = b.Build() return nil }