@@ -2,7 +2,6 @@ package engine
2
2
3
3
import (
4
4
"context"
5
- b64 "encoding/base64"
6
5
"fmt"
7
6
"net/url"
8
7
"strings"
@@ -13,43 +12,18 @@ import (
13
12
"github.com/web-seven/overlock/internal/install"
14
13
"github.com/web-seven/overlock/internal/install/helm"
15
14
"github.com/web-seven/overlock/internal/namespace"
16
- "gopkg.in/yaml.v3"
17
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
18
- "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
19
- "k8s.io/apimachinery/pkg/runtime"
20
- "k8s.io/apimachinery/pkg/types"
21
15
"k8s.io/client-go/rest"
22
16
23
17
"go.uber.org/zap"
24
- corev1 "k8s.io/api/core/v1"
25
- rbacv1 "k8s.io/api/rbac/v1"
26
- extv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
27
- "sigs.k8s.io/controller-runtime/pkg/builder"
28
- "sigs.k8s.io/controller-runtime/pkg/client"
29
- "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
30
- "sigs.k8s.io/controller-runtime/pkg/event"
31
- "sigs.k8s.io/controller-runtime/pkg/manager"
32
- "sigs.k8s.io/controller-runtime/pkg/predicate"
33
- "sigs.k8s.io/controller-runtime/pkg/reconcile"
34
18
)
35
19
36
- type SecretReconciler struct {
37
- serverIP string
38
- client.Client
39
- context.CancelFunc
40
- }
41
-
42
20
const (
43
- RepoUrl = "https://charts.crossplane.io/stable"
44
- ChartName = "crossplane"
45
- ReleaseName = "overlock-crossplane"
46
- Version = "1.15.2"
47
- kindClusterRole = "ClusterRole"
48
- ProviderConfigName = "overlock-kubernetes-provider-config"
49
- helmProviderConfigName = "overlock-helm-provider-config"
50
- aggregateToAdmin = "rbac.crossplane.io/aggregate-to-admin"
51
- trueVal = "true"
52
- errParsePackageName = "package name is not valid"
21
+ RepoUrl = "https://charts.crossplane.io/stable"
22
+ ChartName = "crossplane"
23
+ ReleaseName = "overlock-crossplane"
24
+ Version = "1.17.1"
25
+ trueVal = "true"
26
+ errParsePackageName = "package name is not valid"
53
27
)
54
28
55
29
var (
@@ -148,257 +122,6 @@ func ManagedSelector(m map[string]string) string {
148
122
return strings .Join (selectors , "," )
149
123
}
150
124
151
- // Setup Kubernetes provider which has crossplane admin aggregation role assigned
152
- func SetupPrivilegedKubernetesProvider (ctx context.Context , configClient * rest.Config , logger * zap.SugaredLogger ) error {
153
-
154
- pcn := ProviderConfigName
155
-
156
- sa := & corev1.ServiceAccount {
157
- ObjectMeta : metav1.ObjectMeta {
158
- Name : pcn ,
159
- Namespace : namespace .Namespace ,
160
- },
161
- }
162
-
163
- saSec := & corev1.Secret {
164
- ObjectMeta : metav1.ObjectMeta {
165
- Name : pcn ,
166
- Namespace : namespace .Namespace ,
167
- Annotations : map [string ]string {
168
- "kubernetes.io/service-account.name" : sa .Name ,
169
- },
170
- },
171
- Type : corev1 .SecretTypeServiceAccountToken ,
172
- }
173
-
174
- cr := & rbacv1.ClusterRole {
175
- ObjectMeta : metav1.ObjectMeta {
176
- Name : pcn ,
177
- },
178
- Rules : []rbacv1.PolicyRule {
179
- {
180
- APIGroups : []string {"*" , "" },
181
- Verbs : []string {"*" },
182
- Resources : []string {"*" },
183
- },
184
- },
185
- }
186
-
187
- crb := & rbacv1.ClusterRoleBinding {
188
- ObjectMeta : metav1.ObjectMeta {
189
- Name : pcn ,
190
- },
191
- Subjects : []rbacv1.Subject {
192
- {
193
- Kind : rbacv1 .ServiceAccountKind ,
194
- Name : sa .Name ,
195
- Namespace : namespace .Namespace ,
196
- },
197
- },
198
- RoleRef : rbacv1.RoleRef {
199
- APIGroup : rbacv1 .GroupName ,
200
- Kind : kindClusterRole ,
201
- Name : cr .Name ,
202
- },
203
- }
204
-
205
- scheme := runtime .NewScheme ()
206
- rbacv1 .AddToScheme (scheme )
207
- corev1 .AddToScheme (scheme )
208
- extv1 .AddToScheme (scheme )
209
- ctrl , _ := client .New (configClient , client.Options {Scheme : scheme })
210
- for _ , res := range []client.Object {sa , saSec , cr , crb } {
211
- _ , err := controllerutil .CreateOrUpdate (ctx , ctrl , res , func () error {
212
- return nil
213
- })
214
- if err != nil {
215
- return err
216
- }
217
- }
218
-
219
- svc := & corev1.Service {}
220
- err := ctrl .Get (ctx , types.NamespacedName {Namespace : "default" , Name : "kubernetes" }, svc )
221
- if err != nil {
222
- return err
223
- }
224
-
225
- mgr , err := manager .New (configClient , manager.Options {})
226
- if err != nil {
227
- return err
228
- }
229
- mgrContext , cancel := context .WithCancel (context .Background ())
230
- if err = builder .
231
- ControllerManagedBy (mgr ).
232
- For (& corev1.ServiceAccount {}).
233
- WithEventFilter (predicate.Funcs {
234
- UpdateFunc : func (e event.UpdateEvent ) bool {
235
- return e .ObjectNew .GetName () == ProviderConfigName
236
- },
237
- DeleteFunc : func (e event.DeleteEvent ) bool {
238
- return e .Object .GetName () == ProviderConfigName
239
- },
240
- CreateFunc : func (e event.CreateEvent ) bool {
241
- return e .Object .GetName () == ProviderConfigName
242
- },
243
- GenericFunc : func (e event.GenericEvent ) bool {
244
- return e .Object .GetName () == ProviderConfigName
245
- },
246
- },
247
- ).
248
- Complete (& SecretReconciler {
249
- Client : ctrl ,
250
- CancelFunc : cancel ,
251
- serverIP : "https://" + svc .Spec .ClusterIP + ":443" ,
252
- }); err != nil {
253
- return err
254
- }
255
- logger .Debug ("Starting reconciliation of Kubernetes Provider" )
256
- mgr .Start (mgrContext )
257
- return nil
258
- }
259
-
260
- // Reconcile SvcAcc secret for make kubeconfig
261
- func (a * SecretReconciler ) Reconcile (ctx context.Context , req reconcile.Request ) (reconcile.Result , error ) {
262
- sec := & corev1.Secret {}
263
- err := a .Get (ctx , req .NamespacedName , sec )
264
- if err != nil {
265
- return reconcile.Result {}, err
266
- } else if sec .GetName () != ProviderConfigName {
267
- return reconcile.Result {Requeue : true }, nil
268
- }
269
-
270
- if _ , err = controllerutil .CreateOrUpdate (ctx , a .Client , sec , func () error {
271
- kubeconfig , _ := yaml .Marshal (& map [string ]interface {}{
272
- "apiVersion" : "v1" ,
273
- "kind" : "Config" ,
274
- "current-context" : "in-cluster" ,
275
- "clusters" : []map [string ]interface {}{
276
- {
277
- "cluster" : map [string ]interface {}{
278
- "certificate-authority-data" : b64 .StdEncoding .EncodeToString (sec .Data ["ca.crt" ]),
279
- "server" : a .serverIP ,
280
- },
281
- "name" : "in-cluster" ,
282
- },
283
- },
284
- "contexts" : []map [string ]interface {}{
285
- {
286
- "context" : map [string ]interface {}{
287
- "cluster" : "in-cluster" ,
288
- "user" : "in-cluster" ,
289
- "namespace" : "overlock-system" ,
290
- },
291
- "name" : "in-cluster" ,
292
- },
293
- },
294
- "preferences" : map [string ]interface {}{},
295
- "users" : []map [string ]interface {}{
296
- {
297
- "name" : "in-cluster" ,
298
- "user" : map [string ]interface {}{
299
- "token" : string (sec .Data ["token" ]),
300
- },
301
- },
302
- },
303
- })
304
-
305
- sec .Data ["kubeconfig" ] = []byte (kubeconfig )
306
- return nil
307
- }); err != nil {
308
- return reconcile.Result {}, err
309
- }
310
-
311
- crd := & extv1.CustomResourceDefinition {}
312
- err = a .Get (ctx , types.NamespacedName {Name : "providerconfigs.kubernetes.crossplane.io" }, crd )
313
- if err != nil {
314
- return reconcile.Result {Requeue : true }, err
315
- }
316
-
317
- pc := & unstructured.Unstructured {
318
- Object : map [string ]interface {}{
319
- "apiVersion" : "kubernetes.crossplane.io/v1alpha1" ,
320
- "kind" : "ProviderConfig" ,
321
- "metadata" : map [string ]interface {}{
322
- "name" : ProviderConfigName ,
323
- },
324
- },
325
- }
326
-
327
- hpc := & unstructured.Unstructured {
328
- Object : map [string ]interface {}{
329
- "apiVersion" : "helm.crossplane.io/v1beta1" ,
330
- "kind" : "ProviderConfig" ,
331
- "metadata" : map [string ]interface {}{
332
- "name" : helmProviderConfigName ,
333
- },
334
- },
335
- }
336
-
337
- envObj := & unstructured.Unstructured {
338
- Object : map [string ]interface {}{
339
- "apiVersion" : "overlock.io/v1alpha1" ,
340
- "kind" : "Environment" ,
341
- "metadata" : map [string ]interface {}{
342
- "name" : "environment" ,
343
- },
344
- "spec" : map [string ]interface {}{
345
- "crossplane:" : map [string ]interface {}{},
346
- "kyverno:" : map [string ]interface {}{},
347
- "name" : ReleaseName ,
348
- "namespace" : namespace .Namespace ,
349
- "configuration" : map [string ]interface {}{
350
- "packages" : []interface {}{},
351
- },
352
- "provider" : map [string ]interface {}{
353
- "packages" : []interface {}{},
354
- },
355
- "helmProviderCfgRef" : helmProviderConfigName ,
356
- "kubernetesProviderCfgRef" : ProviderConfigName ,
357
- },
358
- },
359
- }
360
-
361
- if _ , err = controllerutil .CreateOrUpdate (ctx , a .Client , pc , func () error {
362
- pc .Object ["spec" ] = map [string ]interface {}{
363
- "credentials" : map [string ]interface {}{
364
- "secretRef" : map [string ]interface {}{
365
- "key" : "kubeconfig" ,
366
- "name" : ProviderConfigName ,
367
- "namespace" : namespace .Namespace ,
368
- },
369
- "source" : "Secret" ,
370
- },
371
- }
372
- return nil
373
- }); err != nil {
374
- return reconcile.Result {}, err
375
- }
376
-
377
- if _ , err = controllerutil .CreateOrUpdate (ctx , a .Client , hpc , func () error {
378
- hpc .Object ["spec" ] = map [string ]interface {}{
379
- "credentials" : map [string ]interface {}{
380
- "secretRef" : map [string ]interface {}{
381
- "key" : "kubeconfig" ,
382
- "name" : ProviderConfigName ,
383
- "namespace" : namespace .Namespace ,
384
- },
385
- "source" : "Secret" ,
386
- },
387
- }
388
- return nil
389
- }); err != nil {
390
- return reconcile.Result {}, err
391
- }
392
-
393
- if _ , err = controllerutil .CreateOrUpdate (ctx , a .Client , envObj , func () error { return nil }); err != nil {
394
- return reconcile.Result {}, err
395
- }
396
-
397
- a .CancelFunc ()
398
-
399
- return reconcile.Result {}, nil
400
- }
401
-
402
125
func BuildPack (pack v1.Package , img string , pkgMap map [string ]string ) error {
403
126
ref , err := name .ParseReference (img , name .WithDefaultRegistry ("" ))
404
127
if err != nil {
0 commit comments