/
control_eclipse_che.go
109 lines (90 loc) · 3.38 KB
/
control_eclipse_che.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package workshop
import (
"context"
cheorgv1 "github.com/eclipse/che-operator/pkg/apis/org/v1"
"github.com/go-logr/logr"
workshopv1alpha1 "github.com/kameshsampath/workshop-operator/pkg/apis/kameshs/v1alpha1"
"github.com/kameshsampath/workshop-operator/pkg/create"
"github.com/kameshsampath/workshop-operator/pkg/update"
olmv1alpha1 "github.com/operator-framework/operator-lifecycle-manager/pkg/api/apis/operators/v1alpha1"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/types"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
)
func (r *ReconcileWorkshop) installAndConfigureEclipseChe(reqLogger logr.Logger, workshop *workshopv1alpha1.Workshop) error {
//Install Eclipse Che
cheProject := create.CheProject()
err := r.client.Get(context.TODO(),
types.NamespacedName{Name: create.CheInstallNamespace}, cheProject)
if err != nil && errors.IsNotFound(err) {
reqLogger.Info("Creating Che project")
err = r.client.Create(context.TODO(), cheProject)
if err != nil {
return err
}
controllerutil.SetControllerReference(workshop, cheProject, r.scheme)
}
cheCSC := create.CheCatalogSourceConfig()
err = r.client.Get(context.TODO(),
types.NamespacedName{Name: create.CheCSCName, Namespace: create.CSCNS}, cheCSC)
if err != nil && errors.IsNotFound(err) {
reqLogger.Info("Creating Che CatalogSource Config")
err = r.client.Create(context.TODO(), cheCSC)
if err != nil {
return err
}
controllerutil.SetControllerReference(workshop, cheCSC, r.scheme)
}
cheOG := create.CheOperatorGroup()
err = r.client.Get(context.TODO(),
types.NamespacedName{Name: create.CheOperatorGroupName, Namespace: create.CheInstallNamespace}, cheOG)
if err != nil && errors.IsNotFound(err) {
reqLogger.Info("Creating Che Operator Group ")
err = r.client.Create(context.TODO(), cheOG)
if err != nil {
return err
}
controllerutil.SetControllerReference(workshop, cheOG, r.scheme)
}
cheSub := create.CheSubscription(workshop.Spec)
err = r.client.Get(context.TODO(),
types.NamespacedName{Name: create.CheSubscriptionName, Namespace: create.CheInstallNamespace}, cheSub)
if err != nil && errors.IsNotFound(err) {
reqLogger.Info("Creating Che Subscription")
err = r.client.Create(context.TODO(), cheSub)
if err != nil {
return err
}
controllerutil.SetControllerReference(workshop, cheSub, r.scheme)
}
//TEMPORARY: Patch the pod with Keycloak enabled advanced features enabled image
if workshop.Spec.Stack.Che.EnableTokenExchange {
log.Info("Enabling Token Exchange")
cheCsv := &olmv1alpha1.ClusterServiceVersion{}
err := r.client.Get(context.TODO(),
types.NamespacedName{Name: "eclipse-che.v" + workshop.Spec.Stack.Che.CheVersion, Namespace: create.CheInstallNamespace}, cheCsv)
if err != nil {
if errors.IsNotFound(err) {
log.Error(err, "Error loading Eclipse Che CSV")
}
return err
}
err = update.CheForTokenExchange(workshop.Spec, reqLogger)
if err != nil {
return err
}
}
che := create.CheCluster(workshop.Spec)
eche := &cheorgv1.CheCluster{}
err = r.client.Get(context.TODO(),
types.NamespacedName{Name: create.CheSubscriptionName, Namespace: create.CheInstallNamespace}, eche)
if err != nil && errors.IsNotFound(err) {
reqLogger.Info("Creating Che Cluster")
err = r.client.Create(context.TODO(), che)
if err != nil {
return err
}
controllerutil.SetControllerReference(workshop, che, r.scheme)
}
return nil
}