(tree *kubebuilderx.ObjectTree)
| 49 | } |
| 50 | |
| 51 | func (c *traceCalculator) Reconcile(tree *kubebuilderx.ObjectTree) (kubebuilderx.Result, error) { |
| 52 | trace, _ := tree.GetRoot().(*tracev1.ReconciliationTrace) |
| 53 | objs := tree.List(&corev1.ConfigMap{}) |
| 54 | var i18nResource *corev1.ConfigMap |
| 55 | if len(objs) > 0 { |
| 56 | i18nResource, _ = objs[0].(*corev1.ConfigMap) |
| 57 | } |
| 58 | |
| 59 | root := &kbappsv1.Cluster{} |
| 60 | objectKey := client.ObjectKeyFromObject(trace) |
| 61 | if trace.Spec.TargetObject != nil { |
| 62 | objectKey = client.ObjectKey{ |
| 63 | Namespace: trace.Spec.TargetObject.Namespace, |
| 64 | Name: trace.Spec.TargetObject.Name, |
| 65 | } |
| 66 | } |
| 67 | if err := c.cli.Get(c.ctx, objectKey, root); err != nil { |
| 68 | return kubebuilderx.Commit, err |
| 69 | } |
| 70 | |
| 71 | // handle object changes |
| 72 | // build new object set from cache |
| 73 | newObjectMap, err := getObjectsFromCache(c.ctx, c.cli, root, getKBOwnershipRules()) |
| 74 | if err != nil { |
| 75 | return kubebuilderx.Commit, err |
| 76 | } |
| 77 | // build old object set from store |
| 78 | currentState := &trace.Status.CurrentState |
| 79 | oldObjectMap, err := getObjectsFromTree(currentState.ObjectTree, c.store, c.scheme) |
| 80 | if err != nil { |
| 81 | return kubebuilderx.Commit, err |
| 82 | } |
| 83 | changes := buildChanges(oldObjectMap, newObjectMap, buildDescriptionFormatter(i18nResource, defaultLocale, trace.Spec.Locale)) |
| 84 | |
| 85 | // handle event changes |
| 86 | newEventMap, err := filterEvents(getEventsFromCache(c.ctx, c.cli), newObjectMap) |
| 87 | if err != nil { |
| 88 | return kubebuilderx.Commit, err |
| 89 | } |
| 90 | oldEventMap, err := filterEvents(getEventsFromStore(c.store), oldObjectMap) |
| 91 | if err != nil { |
| 92 | return kubebuilderx.Commit, err |
| 93 | } |
| 94 | eventChanges := buildChanges(oldEventMap, newEventMap, buildDescriptionFormatter(i18nResource, defaultLocale, trace.Spec.Locale)) |
| 95 | changes = append(changes, eventChanges...) |
| 96 | |
| 97 | if len(changes) == 0 { |
| 98 | return kubebuilderx.Continue, nil |
| 99 | } |
| 100 | |
| 101 | // sort the changes by resource version. |
| 102 | sort.SliceStable(changes, func(i, j int) bool { |
| 103 | return changes[i].Revision < changes[j].Revision |
| 104 | }) |
| 105 | |
| 106 | // concat it to current changes |
| 107 | currentState.Changes = append(currentState.Changes, changes...) |
| 108 |
nothing calls this directly
no test coverage detected