@@ -41,8 +41,6 @@ import (
41
41
"k8s.io/client-go/kubernetes"
42
42
"k8s.io/client-go/kubernetes/scheme"
43
43
v1core "k8s.io/client-go/kubernetes/typed/core/v1"
44
- "k8s.io/client-go/tools/leaderelection"
45
- "k8s.io/client-go/tools/leaderelection/resourcelock"
46
44
"k8s.io/client-go/tools/record"
47
45
48
46
"github.com/arangodb/kube-arangodb/pkg/client"
@@ -77,15 +75,21 @@ var (
77
75
host string
78
76
port int
79
77
}
80
- createCRD bool
78
+ operatorOptions struct {
79
+ enableDeployment bool // Run deployment operator
80
+ enableStorage bool // Run deployment operator
81
+ createCRD bool
82
+ }
81
83
)
82
84
83
85
func init () {
84
86
f := cmdMain .Flags ()
85
87
f .StringVar (& server .host , "server.host" , defaultServerHost , "Host to listen on" )
86
88
f .IntVar (& server .port , "server.port" , defaultServerPort , "Port to listen on" )
87
89
f .StringVar (& logLevel , "log.level" , defaultLogLevel , "Set initial log level" )
88
- f .BoolVar (& createCRD , "operator.create-crd" , true , "Disable to avoid create the custom resource definition" )
90
+ f .BoolVar (& operatorOptions .enableDeployment , "operator.deployment" , false , "Enable to run the ArangoDeployment operator" )
91
+ f .BoolVar (& operatorOptions .enableStorage , "operator.storage" , false , "Enable to run the ArangoLocalStorage operator" )
92
+ f .BoolVar (& operatorOptions .createCRD , "operator.create-crd" , true , "Disable to avoid create the custom resource definition" )
89
93
}
90
94
91
95
func main () {
@@ -107,6 +111,11 @@ func cmdMainRun(cmd *cobra.Command, args []string) {
107
111
cliLog .Fatal ().Err (err ).Msg ("Failed to initialize log service" )
108
112
}
109
113
114
+ // Check operating mode
115
+ if ! operatorOptions .enableDeployment && ! operatorOptions .enableStorage {
116
+ cliLog .Fatal ().Err (err ).Msg ("Turn on --operator.deployment or --operator.storage or both" )
117
+ }
118
+
110
119
// Log version
111
120
cliLog .Info ().Msgf ("Starting arangodb-operator, version %s build %s" , projectVersion , projectBuild )
112
121
@@ -126,48 +135,12 @@ func cmdMainRun(cmd *cobra.Command, args []string) {
126
135
cliLog .Fatal ().Err (err ).Msg ("Failed to get hostname" )
127
136
}
128
137
129
- // Create k8s client
130
- kubecli , err := k8sutil .NewKubeClient ()
131
- if err != nil {
132
- cliLog .Fatal ().Err (err ).Msg ("Failed to create kubernetes client" )
133
- }
134
-
135
138
//http.HandleFunc(probe.HTTPReadyzEndpoint, probe.ReadyzHandler)
136
139
http .Handle ("/metrics" , prometheus .Handler ())
137
140
listenAddr := net .JoinHostPort (server .host , strconv .Itoa (server .port ))
138
141
go http .ListenAndServe (listenAddr , nil )
139
142
140
- rl , err := resourcelock .New (resourcelock .EndpointsResourceLock ,
141
- namespace ,
142
- "arangodb-operator" ,
143
- kubecli .CoreV1 (),
144
- resourcelock.ResourceLockConfig {
145
- Identity : id ,
146
- EventRecorder : createRecorder (cliLog , kubecli , name , namespace ),
147
- })
148
- if err != nil {
149
- cliLog .Fatal ().Err (err ).Msg ("Failed to create resource lock" )
150
- }
151
-
152
- leaderelection .RunOrDie (leaderelection.LeaderElectionConfig {
153
- Lock : rl ,
154
- LeaseDuration : 15 * time .Second ,
155
- RenewDeadline : 10 * time .Second ,
156
- RetryPeriod : 2 * time .Second ,
157
- Callbacks : leaderelection.LeaderCallbacks {
158
- OnStartedLeading : func (stop <- chan struct {}) {
159
- run (stop , namespace , name )
160
- },
161
- OnStoppedLeading : func () {
162
- cliLog .Fatal ().Msg ("Leader election lost" )
163
- },
164
- },
165
- })
166
- }
167
-
168
- // run the operator
169
- func run (stop <- chan struct {}, namespace , name string ) {
170
- cfg , deps , err := newOperatorConfigAndDeps (namespace , name )
143
+ cfg , deps , err := newOperatorConfigAndDeps (id + "-" + name , namespace , name )
171
144
if err != nil {
172
145
cliLog .Fatal ().Err (err ).Msg ("Failed to create operator config & deps" )
173
146
}
@@ -178,13 +151,11 @@ func run(stop <-chan struct{}, namespace, name string) {
178
151
if err != nil {
179
152
cliLog .Fatal ().Err (err ).Msg ("Failed to create operator" )
180
153
}
181
- if err := o .Start (); err != nil {
182
- cliLog .Fatal ().Err (err ).Msg ("Failed to start operator" )
183
- }
154
+ o .Run ()
184
155
}
185
156
186
157
// newOperatorConfigAndDeps creates operator config & dependencies.
187
- func newOperatorConfigAndDeps (namespace , name string ) (operator.Config , operator.Dependencies , error ) {
158
+ func newOperatorConfigAndDeps (id , namespace , name string ) (operator.Config , operator.Dependencies , error ) {
188
159
kubecli , err := k8sutil .NewKubeClient ()
189
160
if err != nil {
190
161
return operator.Config {}, operator.Dependencies {}, maskAny (err )
@@ -203,18 +174,23 @@ func newOperatorConfigAndDeps(namespace, name string) (operator.Config, operator
203
174
if err != nil {
204
175
return operator.Config {}, operator.Dependencies {}, maskAny (fmt .Errorf ("Failed to created versioned client: %s" , err ))
205
176
}
177
+ eventRecorder := createRecorder (cliLog , kubecli , name , namespace )
206
178
207
179
cfg := operator.Config {
208
- Namespace : namespace ,
209
- PodName : name ,
210
- ServiceAccount : serviceAccount ,
211
- CreateCRD : createCRD ,
180
+ ID : id ,
181
+ Namespace : namespace ,
182
+ PodName : name ,
183
+ ServiceAccount : serviceAccount ,
184
+ EnableDeployment : operatorOptions .enableDeployment ,
185
+ EnableStorage : operatorOptions .enableStorage ,
186
+ CreateCRD : operatorOptions .createCRD ,
212
187
}
213
188
deps := operator.Dependencies {
214
- Log : logService .MustGetLogger ("operator" ),
215
- KubeCli : kubecli ,
216
- KubeExtCli : kubeExtCli ,
217
- CRCli : crCli ,
189
+ Log : logService .MustGetLogger ("operator" ),
190
+ KubeCli : kubecli ,
191
+ KubeExtCli : kubeExtCli ,
192
+ CRCli : crCli ,
193
+ EventRecorder : eventRecorder ,
218
194
}
219
195
220
196
return cfg , deps , nil
0 commit comments