| 133 | } |
| 134 | |
| 135 | func (c *controller) emitFailureEvent() { |
| 136 | if c.err == nil { |
| 137 | return |
| 138 | } |
| 139 | if c.tree == nil { |
| 140 | return |
| 141 | } |
| 142 | if c.tree.EventRecorder == nil { |
| 143 | return |
| 144 | } |
| 145 | if c.tree.GetRoot() == nil { |
| 146 | return |
| 147 | } |
| 148 | // ignore object update optimistic lock conflict |
| 149 | if apierrors.IsConflict(c.err) { |
| 150 | return |
| 151 | } |
| 152 | // TODO(free6om): make error message user-friendly |
| 153 | c.tree.EventRecorder.Eventf(c.tree.GetRoot(), corev1.EventTypeWarning, "FailedReconcile", "%s", c.err.Error()) |
| 154 | } |
| 155 | |
| 156 | func NewController(ctx context.Context, cli client.Client, req ctrl.Request, recorder record.EventRecorder, logger logr.Logger) Controller { |
| 157 | return &controller{ |