chore(ingressroute): remove hashable fields from queue store
This commit is contained in:
parent
0cec08d0ec
commit
465a6b12e9
1 changed files with 40 additions and 24 deletions
|
@ -51,26 +51,9 @@ func (i *ingressRouteClient) Watch(stopCh chan struct{}) {
|
|||
_, err := informer.AddEventHandler(cache.ResourceEventHandlerFuncs{
|
||||
AddFunc: func(obj interface{}) {
|
||||
key, err := cache.MetaNamespaceKeyFunc(obj)
|
||||
if err != nil {
|
||||
return
|
||||
if err == nil {
|
||||
queue.Add(event{key: key, eventType: watch.Added})
|
||||
}
|
||||
|
||||
convObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
rawRoutes, found, err := unstructured.NestedSlice(convObj, "spec", "routes")
|
||||
if err != nil || !found {
|
||||
return
|
||||
}
|
||||
|
||||
routes, err := routeInterfaceToMapSlice(rawRoutes)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
queue.Add(event{key: key, eventType: watch.Added, routes: routes})
|
||||
},
|
||||
UpdateFunc: func(_, newObj interface{}) {
|
||||
key, err := cache.MetaNamespaceKeyFunc(newObj)
|
||||
|
@ -96,12 +79,12 @@ func (i *ingressRouteClient) Watch(stopCh chan struct{}) {
|
|||
go informer.Run(stopCh)
|
||||
|
||||
wait.Until(func() {
|
||||
for i.processNextItem(queue) {
|
||||
for i.processNextItem(queue, informer) {
|
||||
}
|
||||
}, time.Second, stopCh)
|
||||
}
|
||||
|
||||
func (i *ingressRouteClient) processNextItem(queue workqueue.TypedRateLimitingInterface[any]) bool {
|
||||
func (i *ingressRouteClient) processNextItem(queue workqueue.TypedRateLimitingInterface[any], informer cache.SharedInformer) bool {
|
||||
item, quit := queue.Get()
|
||||
if quit {
|
||||
return false
|
||||
|
@ -122,10 +105,44 @@ func (i *ingressRouteClient) processNextItem(queue workqueue.TypedRateLimitingIn
|
|||
return true
|
||||
}
|
||||
|
||||
obj, exists, err := informer.GetStore().GetByKey(event.key)
|
||||
if err != nil || !exists {
|
||||
log.Printf("Failed to retrieve object for key %s: %v", event.key, err)
|
||||
return true
|
||||
}
|
||||
|
||||
convObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj)
|
||||
if err != nil {
|
||||
log.Printf("Failed to convert unstructured object for key %s: %v", event.key, err)
|
||||
return true
|
||||
}
|
||||
|
||||
rawRoutes, found, err := unstructured.NestedSlice(convObj, "spec", "routes")
|
||||
if err != nil || !found {
|
||||
log.Printf("No routes found for key %s", event.key)
|
||||
return true
|
||||
}
|
||||
|
||||
secretName, found, err := unstructured.NestedString(convObj, "spec", "tls", "secretName")
|
||||
if err != nil {
|
||||
log.Printf("Failed to scrape secret name for %s: %v", event.key, err)
|
||||
return true
|
||||
}
|
||||
if !found {
|
||||
log.Printf("No secret name found, using ingressroute name %s", name)
|
||||
secretName = name
|
||||
}
|
||||
|
||||
routes, err := routeInterfaceToMapSlice(rawRoutes)
|
||||
if err != nil {
|
||||
log.Printf("Failed to convert routes for key %s: %v", event.key, err)
|
||||
return true
|
||||
}
|
||||
|
||||
//nolint:exhaustive // ignore missing switch cases
|
||||
switch event.eventType {
|
||||
case watch.Added, watch.Modified:
|
||||
createErr := i.client.certmanager.Certificates.Create(context.Background(), namespace, name, event.routes)
|
||||
createErr := i.client.certmanager.Certificates.Create(context.Background(), namespace, secretName, routes)
|
||||
if createErr != nil {
|
||||
if errors.Is(createErr, certmanager.ErrCertificateAlreadyExist) {
|
||||
log.Printf("Certificate %s already exists", event.key)
|
||||
|
@ -134,7 +151,7 @@ func (i *ingressRouteClient) processNextItem(queue workqueue.TypedRateLimitingIn
|
|||
}
|
||||
}
|
||||
case watch.Deleted:
|
||||
if deleteErr := i.client.certmanager.Certificates.Delete(context.Background(), namespace, name); deleteErr != nil {
|
||||
if deleteErr := i.client.certmanager.Certificates.Delete(context.Background(), namespace, secretName); deleteErr != nil {
|
||||
log.Printf("Failed to delete certificate %s: %v", event.key, deleteErr)
|
||||
}
|
||||
}
|
||||
|
@ -145,7 +162,6 @@ func (i *ingressRouteClient) processNextItem(queue workqueue.TypedRateLimitingIn
|
|||
type event struct {
|
||||
key string
|
||||
eventType watch.EventType
|
||||
routes []map[string]interface{}
|
||||
}
|
||||
|
||||
func routeInterfaceToMapSlice(input []interface{}) ([]map[string]interface{}, error) {
|
||||
|
|
Loading…
Add table
Reference in a new issue