in pkg/controller/console/console_controller.go [110:184]
func (r *ReconcileConsole) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) {
reqLogger := log.WithValues("Request.Namespace", request.Namespace, "Request.Name", request.Name)
reqLogger.Info("Reconciling Console")
// Fetch the Console instance
instance := &rocketmqv1alpha1.Console{}
err := r.client.Get(context.TODO(), request.NamespacedName, instance)
if err != nil {
if errors.IsNotFound(err) {
// Request object not found, could have been deleted after reconcile request.
// Owned objects are automatically garbage collected. For additional cleanup logic use finalizers.
// Return and don't requeue
return reconcile.Result{}, nil
}
// Error reading the object - requeue the request.
return reconcile.Result{}, err
}
if instance.Spec.NameServers == "" {
// wait for name server ready if nameServers is omitted
for {
if share.IsNameServersStrInitialized {
break
} else {
log.Info("Waiting for name server ready...")
time.Sleep(time.Duration(cons.WaitForNameServerReadyInSecond) * time.Second)
}
}
} else {
share.NameServersStr = instance.Spec.NameServers
}
consoleDeployment := newDeploymentForCR(instance)
// Set Console instance as the owner and controller
if err := controllerutil.SetControllerReference(instance, consoleDeployment, r.scheme); err != nil {
return reconcile.Result{}, err
}
// Check if this Pod already exists
found := &appsv1.Deployment{}
err = r.client.Get(context.TODO(), types.NamespacedName{Name: consoleDeployment.Name, Namespace: consoleDeployment.Namespace}, found)
if err != nil && errors.IsNotFound(err) {
reqLogger.Info("Creating RocketMQ Console Deployment", "Namespace", consoleDeployment, "Name", consoleDeployment.Name)
err = r.client.Create(context.TODO(), consoleDeployment)
if err != nil {
return reconcile.Result{}, err
}
// created successfully - don't requeue
return reconcile.Result{}, nil
} else if err != nil {
return reconcile.Result{}, err
}
// Support console deployment update
if !reflect.DeepEqual(instance.Spec.ConsoleDeployment.Spec.Replicas, found.Spec.Replicas) ||
!reflect.DeepEqual(instance.Spec.ConsoleDeployment.Spec.Template.Spec.Containers[0].Resources, found.Spec.Template.Spec.Containers[0].Resources) {
found.Spec.Replicas = instance.Spec.ConsoleDeployment.Spec.Replicas
found.Spec.Template.Spec.Containers[0].Resources = instance.Spec.ConsoleDeployment.Spec.Template.Spec.Containers[0].Resources
err = r.client.Update(context.TODO(), found)
if err != nil {
reqLogger.Error(err, "Failed to update console CR", "Namespace", found.Namespace, "Name", found.Name)
} else {
reqLogger.Info("Successfully updated console CR", "Namespace", found.Namespace, "Name", found.Name)
}
}
// TODO: update console if name server address changes
// CR already exists - don't requeue
reqLogger.Info("Skip reconcile: RocketMQ Console Deployment already exists", "Namespace", found.Namespace, "Name", found.Name)
return reconcile.Result{}, nil
}