Skip to content

Commit 5a3ddc8

Browse files
author
Mohd Uzair
authored
Merge pull request #560 from MUzairS15/MUzairS15/operator/logs
Operator Enhancement
2 parents 68bae1e + 8566eac commit 5a3ddc8

File tree

7 files changed

+72
-19
lines changed

7 files changed

+72
-19
lines changed

controllers/broker_controller.go

+14-4
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121

2222
"github.com/go-logr/logr"
2323
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
24+
appsv1 "k8s.io/api/apps/v1"
2425
"k8s.io/apimachinery/pkg/runtime"
2526
"k8s.io/client-go/kubernetes"
2627
"k8s.io/client-go/rest"
@@ -67,7 +68,9 @@ func (r *BrokerReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctr
6768
// Check if Broker controller deployed
6869
result, err := r.reconcileBroker(ctx, true, baseResource, req)
6970
if err != nil {
70-
return ctrl.Result{}, ErrReconcileBroker(err)
71+
err = ErrReconcileBroker(err)
72+
r.Log.Error(err, "broker reconcilation failed")
73+
return ctrl.Result{}, err
7174
}
7275

7376
// Check if Broker controller started
@@ -79,18 +82,24 @@ func (r *BrokerReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctr
7982
// Get broker endpoint
8083
err = brokerpackage.GetEndpoint(ctx, baseResource, r.Clientset, r.KubeConfig.Host)
8184
if err != nil {
82-
return ctrl.Result{}, ErrGetEndpoint(err)
85+
err = ErrGetEndpoint(err)
86+
r.Log.Error(err, "unable to get the broker endpoint")
87+
return ctrl.Result{}, err
8388
}
8489

8590
// Patch the broker resource
8691
patch, err := utils.Marshal(baseResource)
8792
if err != nil {
88-
return ctrl.Result{}, ErrUpdateResource(err)
93+
err = ErrUpdateResource(err)
94+
r.Log.Error(err, "unable to update broker resource")
95+
return ctrl.Result{}, err
8996
}
9097

9198
err = r.Status().Patch(ctx, baseResource, client.RawPatch(types.MergePatchType, []byte(patch)))
9299
if err != nil {
93-
return ctrl.Result{}, ErrUpdateResource(err)
100+
err = ErrUpdateResource(err)
101+
r.Log.Error(err, "unable to update broker resource")
102+
return ctrl.Result{}, err
94103
}
95104

96105
return result, nil
@@ -99,6 +108,7 @@ func (r *BrokerReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctr
99108
func (r *BrokerReconciler) SetupWithManager(mgr ctrl.Manager) error {
100109
return ctrl.NewControllerManagedBy(mgr).
101110
For(&mesheryv1alpha1.Broker{}).
111+
Owns(&appsv1.StatefulSet{}).
102112
Complete(r)
103113
}
104114

controllers/error.go

+13-13
Original file line numberDiff line numberDiff line change
@@ -39,53 +39,53 @@ const (
3939

4040
// Error definitions
4141
func ErrGetMeshsync(err error) error {
42-
return errors.New(ErrGetMeshsyncCode + ":" + "Unable to get meshsync resource")
42+
return errors.New(ErrGetMeshsyncCode + ":" + "Unable to get meshsync resource" + err.Error())
4343
}
4444

4545
func ErrCreateMeshsync(err error) error {
46-
return errors.New(ErrCreateMeshsyncCode + ":" + "Unable to create meshsync controller")
46+
return errors.New(ErrCreateMeshsyncCode + ":" + "Unable to create meshsync controller" + err.Error())
4747
}
4848

4949
func ErrDeleteMeshsync(err error) error {
50-
return errors.New(ErrDeleteMeshsyncCode + ":" + "Unable to delete meshsync controller")
50+
return errors.New(ErrDeleteMeshsyncCode + ":" + "Unable to delete meshsync controller" + err.Error())
5151
}
5252

5353
func ErrReconcileMeshsync(err error) error {
54-
return errors.New(ErrReconcileMeshsyncCode + ":" + "Error during meshsync resource reconciliation")
54+
return errors.New(ErrReconcileMeshsyncCode + ":" + "Error during meshsync resource reconciliation" + err.Error())
5555
}
5656

5757
func ErrGetBroker(err error) error {
58-
return errors.New(ErrGetBrokerCode + ":" + "Broker resource not found")
58+
return errors.New(ErrGetBrokerCode + ":" + "Broker resource not found" + err.Error())
5959
}
6060

6161
func ErrCreateBroker(err error) error {
62-
return errors.New(ErrCreateBrokerCode + ":" + "Unable to create broker controller")
62+
return errors.New(ErrCreateBrokerCode + ":" + "Unable to create broker controller" + err.Error())
6363
}
6464

6565
func ErrDeleteBroker(err error) error {
66-
return errors.New(ErrDeleteBrokerCode + ":" + "Unable to delete broker controller")
66+
return errors.New(ErrDeleteBrokerCode + ":" + "Unable to delete broker controller" + err.Error())
6767
}
6868

6969
func ErrReconcileBroker(err error) error {
70-
return errors.New(ErrReconcileBrokerCode + ":" + "Error during broker resource reconciliation")
70+
return errors.New(ErrReconcileBrokerCode + ":" + "Error during broker resource reconciliation" + err.Error())
7171
}
7272

7373
func ErrReconcileCR(err error) error {
74-
return errors.New(ErrReconcileCRCode + ":" + "Error during custom resource reconciliation")
74+
return errors.New(ErrReconcileCRCode + ":" + "Error during custom resource reconciliation" + err.Error())
7575
}
7676

7777
func ErrCheckHealth(err error) error {
78-
return errors.New(ErrCheckHealthCode + ":" + "Error during health check")
78+
return errors.New(ErrCheckHealthCode + ":" + "Error during health check" + err.Error())
7979
}
8080

8181
func ErrGetEndpoint(err error) error {
82-
return errors.New(ErrGetEndpointCode + ":" + "Unable to get endpoint")
82+
return errors.New(ErrGetEndpointCode + ":" + "Unable to get endpoint" + err.Error())
8383
}
8484

8585
func ErrUpdateResource(err error) error {
86-
return errors.New(ErrUpdateResourceCode + ":" + "Unable to update resource")
86+
return errors.New(ErrUpdateResourceCode + ":" + "Unable to update resource" + err.Error())
8787
}
8888

8989
func ErrMarshal(err error) error {
90-
return errors.New(ErrMarshalCode + ":" + "Error during marshaling")
90+
return errors.New(ErrMarshalCode + ":" + "Error during marshaling" + err.Error())
9191
}

controllers/meshsync_controller.go

+11-2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121

2222
"github.com/go-logr/logr"
2323
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
24+
appsv1 "k8s.io/api/apps/v1"
2425
"k8s.io/apimachinery/pkg/runtime"
2526
"k8s.io/client-go/kubernetes"
2627
"k8s.io/client-go/rest"
@@ -68,24 +69,31 @@ func (r *MeshSyncReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
6869
// Get broker configuration
6970
err = r.reconcileBrokerConfig(ctx, baseResource)
7071
if err != nil {
72+
r.Log.Error(err, "meshsync reconcilation failed")
7173
return ctrl.Result{}, ErrReconcileMeshsync(err)
7274
}
7375

7476
// Check if Meshsync controller running
7577
result, err := r.reconcileMeshsync(ctx, true, baseResource, req)
7678
if err != nil {
79+
err = ErrReconcileMeshsync(err)
80+
r.Log.Error(err, "meshsync reconcilation failed")
7781
return ctrl.Result{}, ErrReconcileMeshsync(err)
7882
}
7983

8084
// Patch the meshsync resource
8185
patch, err := utils.Marshal(baseResource)
8286
if err != nil {
83-
return ctrl.Result{}, ErrUpdateResource(err)
87+
err = ErrUpdateResource(err)
88+
r.Log.Error(err, "unable to update meshsync resource")
89+
return ctrl.Result{}, err
8490
}
8591

8692
err = r.Status().Patch(ctx, baseResource, client.RawPatch(types.MergePatchType, []byte(patch)))
8793
if err != nil {
88-
return ctrl.Result{}, ErrUpdateResource(err)
94+
err = ErrUpdateResource(err)
95+
r.Log.Error(err, "unable to update meshsync resource")
96+
return ctrl.Result{}, err
8997
}
9098

9199
return result, nil
@@ -94,6 +102,7 @@ func (r *MeshSyncReconciler) Reconcile(ctx context.Context, req ctrl.Request) (c
94102
func (r *MeshSyncReconciler) SetupWithManager(mgr ctrl.Manager) error {
95103
return ctrl.NewControllerManagedBy(mgr).
96104
For(&mesheryv1alpha1.MeshSync{}).
105+
Owns(&appsv1.Deployment{}).
97106
Complete(r)
98107
}
99108

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ require (
1515
github.com/go-logr/logr v1.3.0
1616
github.com/onsi/ginkgo/v2 v2.13.0
1717
github.com/onsi/gomega v1.27.10
18+
github.com/sirupsen/logrus v1.8.1
1819
k8s.io/api v0.26.1
1920
k8s.io/apiextensions-apiserver v0.26.1
2021
k8s.io/apimachinery v0.26.1

go.sum

+4
Original file line numberDiff line numberDiff line change
@@ -135,12 +135,15 @@ github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJf
135135
github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY=
136136
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
137137
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
138+
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
139+
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
138140
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
139141
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
140142
github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
141143
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
142144
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
143145
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
146+
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
144147
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
145148
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
146149
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
@@ -199,6 +202,7 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
199202
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
200203
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
201204
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
205+
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
202206
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
203207
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
204208
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=

main.go

+4
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
2828
_ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
2929
ctrl "sigs.k8s.io/controller-runtime"
30+
"sigs.k8s.io/controller-runtime/pkg/log/zap"
3031

3132
mesheryv1alpha1 "github.com/layer5io/meshery-operator/api/v1alpha1"
3233
"github.com/layer5io/meshery-operator/controllers"
@@ -55,6 +56,7 @@ func main() {
5556
"Enable leader election for controller manager. "+
5657
"Enabling this will ensure there is only one active controller manager.")
5758
flag.Parse()
59+
ctrl.SetLogger(zap.New(zap.UseFlagOptions(&zap.Options{})))
5860

5961
opID := uuid.NewUUID()
6062
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
@@ -66,12 +68,14 @@ func main() {
6668
LeaderElectionNamespace: namespace,
6769
})
6870
if err != nil {
71+
fmt.Println("RERER")
6972
setupLog.Error(err, "unable to start manager")
7073
os.Exit(1)
7174
}
7275

7376
clientset, err := kubernetes.NewForConfig(mgr.GetConfig())
7477
if err != nil {
78+
fmt.Println("RERER-222")
7579
setupLog.Error(err, "unable to initialize clientset")
7680
os.Exit(1)
7781
}

pkg/meshsync/meshsync.go

+25
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,15 @@ limitations under the License.
1717
package meshsync
1818

1919
import (
20+
"context"
21+
2022
mesheryv1alpha1 "github.com/layer5io/meshery-operator/api/v1alpha1"
2123
v1 "k8s.io/api/apps/v1"
24+
corev1 "k8s.io/api/core/v1"
25+
2226
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2327
runtime "k8s.io/apimachinery/pkg/runtime"
28+
"k8s.io/client-go/kubernetes"
2429
)
2530

2631
const (
@@ -47,3 +52,23 @@ func getServerObject(namespace, name string, replicas int32, url string) Object
4752
obj.Spec.Template.Spec.Containers[0].Env[0].Value = url // Set broker endpoint
4853
return obj
4954
}
55+
56+
func CheckHealth(ctx context.Context, m *mesheryv1alpha1.MeshSync, client *kubernetes.Clientset) error {
57+
obj, err := client.AppsV1().Deployments(m.ObjectMeta.Namespace).Get(ctx, m.ObjectMeta.Name, metav1.GetOptions{})
58+
if err != nil {
59+
return err
60+
}
61+
62+
if obj.Status.Replicas != obj.Status.ReadyReplicas {
63+
if len(obj.Status.Conditions) > 0 {
64+
return err
65+
}
66+
return err
67+
}
68+
69+
if len(obj.Status.Conditions) > 0 && (obj.Status.Conditions[0].Status == corev1.ConditionFalse || obj.Status.Conditions[0].Status == corev1.ConditionUnknown) {
70+
return err
71+
}
72+
73+
return nil
74+
}

0 commit comments

Comments
 (0)