in operator/controllers/operator/javaagent_controller.go [199:261]
func (r *JavaAgentReconciler) UpdateStatus(ctx context.Context, log logr.Logger, namespace, selectorname, podselector string) error {
errCol := new(kubernetes.ErrorCollector)
// get javaagent by selectorname
javaagent := &operatorv1alpha1.JavaAgent{}
err := r.Client.Get(ctx, client.ObjectKey{Namespace: namespace, Name: selectorname + "-javaagent"}, javaagent)
if err != nil && !apierrors.IsNotFound(err) {
errCol.Collect(fmt.Errorf("failed to get javaagent: %w", err))
}
// avoid printing error info when the javaagent is creating
if javaagent.Name == "" {
log.Info("javaagent is creating...", "name", selectorname+"-javaagent")
return errCol.Error()
}
// return all pods in the request namespace with the podselector
podList := &core.PodList{}
label := strings.Split(podselector, "=")
opts := []client.ListOption{
client.InNamespace(namespace),
client.MatchingLabels{label[0]: label[1]},
}
if err := r.Client.List(ctx, podList, opts...); err != nil && !apierrors.IsNotFound(err) {
errCol.Collect(fmt.Errorf("failed to list pod: %w", err))
}
// get the pod's number that need to be injected
expectedInjectedNum := 0
// get the pod's number that injected successfully
realInjectedNum := 0
for i := range podList.Items {
labels := podList.Items[i].Labels
annotations := podList.Items[i].Annotations
if labels != nil && strings.EqualFold(strings.ToLower(labels[injector.ActiveInjectorLabel]), "true") {
expectedInjectedNum++
}
if annotations != nil && strings.EqualFold(strings.ToLower(annotations[injector.SidecarInjectSucceedAnno]), "true") {
realInjectedNum++
}
}
javaagent.Status.ExpectedInjectedNum = expectedInjectedNum
javaagent.Status.RealInjectedNum = realInjectedNum
nilTime := metav1.Time{}
now := metav1.NewTime(time.Now())
if javaagent.Status.CreationTime == nilTime {
javaagent.Status.CreationTime = now
javaagent.Status.LastUpdateTime = now
} else {
javaagent.Status.LastUpdateTime = now
}
overlay := javaagent.Status
if err := r.updateStatus(ctx, javaagent, overlay, errCol); err != nil {
errCol.Collect(fmt.Errorf("failed to update java status: %w", err))
}
log.Info("updated javaagent's status")
return errCol.Error()
}