@@ -48,6 +48,7 @@ type EtcdClusterReconciler struct {
48
48
// +kubebuilder:rbac:groups=etcd.aenix.io,resources=etcdclusters,verbs=get;list;watch;create;update;patch;delete
49
49
// +kubebuilder:rbac:groups=etcd.aenix.io,resources=etcdclusters/status,verbs=get;update;patch
50
50
// +kubebuilder:rbac:groups=etcd.aenix.io,resources=etcdclusters/finalizers,verbs=update
51
+ // +kubebuilder:rbac:groups="",resources=endpoints,verbs=get;list;watch
51
52
// +kubebuilder:rbac:groups="",resources=configmaps,verbs=get;list;watch;create;update;watch;delete;patch
52
53
// +kubebuilder:rbac:groups="",resources=services,verbs=get;create;delete;update;patch;list;watch
53
54
// +kubebuilder:rbac:groups="apps",resources=statefulsets,verbs=get;create;delete;update;patch;list;watch
@@ -72,6 +73,57 @@ func (r *EtcdClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request)
72
73
return reconcile.Result {}, nil
73
74
}
74
75
76
+ sts := appsv1.StatefulSet {}
77
+ // create two services and the pdb, try fetching the sts
78
+ {
79
+ c := make (chan error )
80
+ go func (chan <- error ) {
81
+ err := factory .CreateOrUpdateClientService (ctx , instance , r .Client )
82
+ if err != nil {
83
+ err = fmt .Errorf ("couldn't ensure client service: %w" , err )
84
+ }
85
+ c <- err
86
+ }(c )
87
+ go func (chan <- error ) {
88
+ err := factory .CreateOrUpdateHeadlessService (ctx , instance , r .Client )
89
+ if err != nil {
90
+ err = fmt .Errorf ("couldn't ensure headless service: %w" , err )
91
+ }
92
+ c <- err
93
+ }(c )
94
+ go func (chan <- error ) {
95
+ err := factory .CreateOrUpdatePdb (ctx , instance , r .Client )
96
+ if err != nil {
97
+ err = fmt .Errorf ("couldn't ensure pod disruption budget: %w" , err )
98
+ }
99
+ c <- err
100
+ }(c )
101
+ go func (chan <- error ) {
102
+ err := r .Get (ctx , req .NamespacedName , & sts )
103
+ if client .IgnoreNotFound (err ) != nil {
104
+ err = fmt .Errorf ("couldn't get statefulset: %w" , err )
105
+ }
106
+ c <- err
107
+ }(c )
108
+ for i := 0 ; i < 4 ; i ++ {
109
+ if err := <- c ; err != nil {
110
+ return ctrl.Result {}, err
111
+ }
112
+ }
113
+ }
114
+ /*
115
+ clusterClient, singleClients, err := factory.NewEtcdClientSet(ctx, instance, r.Client)
116
+ if err != nil {
117
+ return ctrl.Result{}, err
118
+ }
119
+ if clusterClient == nil || singleClients == nil {
120
+ // TODO: no endpoints case
121
+
122
+ }
123
+ if sts.UID != "" {
124
+ r.Patch()
125
+ }
126
+ */
75
127
// fill conditions
76
128
if len (instance .Status .Conditions ) == 0 {
77
129
factory .FillConditions (instance )
0 commit comments