chore(ingressroute): remove hashable fields from queue store
This commit is contained in:
parent
c10b760c0b
commit
7839bcf3cb
1 changed files with 39 additions and 24 deletions
|
@ -51,31 +51,14 @@ func (i *ingressRouteClient) Watch(stopCh chan struct{}) {
|
||||||
_, err := informer.AddEventHandler(cache.ResourceEventHandlerFuncs{
|
_, err := informer.AddEventHandler(cache.ResourceEventHandlerFuncs{
|
||||||
AddFunc: func(obj interface{}) {
|
AddFunc: func(obj interface{}) {
|
||||||
key, err := cache.MetaNamespaceKeyFunc(obj)
|
key, err := cache.MetaNamespaceKeyFunc(obj)
|
||||||
if err != nil {
|
if err == nil {
|
||||||
return
|
queue.Add(event{key: key, eventType: watch.Added, object: &obj})
|
||||||
}
|
}
|
||||||
|
|
||||||
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{}) {
|
UpdateFunc: func(_, newObj interface{}) {
|
||||||
key, err := cache.MetaNamespaceKeyFunc(newObj)
|
key, err := cache.MetaNamespaceKeyFunc(newObj)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
queue.Add(event{key: key, eventType: watch.Modified})
|
queue.Add(event{key: key, eventType: watch.Modified, object: &newObj})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
DeleteFunc: func(obj interface{}) {
|
DeleteFunc: func(obj interface{}) {
|
||||||
|
@ -85,7 +68,7 @@ func (i *ingressRouteClient) Watch(stopCh chan struct{}) {
|
||||||
|
|
||||||
key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj)
|
key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
queue.Add(event{key: key, eventType: watch.Deleted})
|
queue.Add(event{key: key, eventType: watch.Deleted, object: &obj})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
@ -122,20 +105,52 @@ func (i *ingressRouteClient) processNextItem(queue workqueue.TypedRateLimitingIn
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
convObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(event.object)
|
||||||
|
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
|
//nolint:exhaustive // ignore missing switch cases
|
||||||
switch event.eventType {
|
switch event.eventType {
|
||||||
case watch.Added, watch.Modified:
|
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 createErr != nil {
|
||||||
if errors.Is(createErr, certmanager.ErrCertificateAlreadyExist) {
|
if errors.Is(createErr, certmanager.ErrCertificateAlreadyExist) {
|
||||||
log.Printf("Certificate %s for %s already exists", secretName, event.key)
|
log.Printf("Certificate %s for %s already exists", secretName, event.key)
|
||||||
} else {
|
} else {
|
||||||
log.Printf("Failed to create certificate %s: %v", event.key, createErr)
|
log.Printf("Failed to create certificate %s: %v", event.key, createErr)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
log.Printf("Certificate %s for %s created", secretName, event.key)
|
||||||
}
|
}
|
||||||
case watch.Deleted:
|
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)
|
log.Printf("Failed to delete certificate %s: %v", event.key, deleteErr)
|
||||||
|
} else {
|
||||||
|
log.Printf("Certificate %s for %s deleted", secretName, event.key)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -145,7 +160,7 @@ func (i *ingressRouteClient) processNextItem(queue workqueue.TypedRateLimitingIn
|
||||||
type event struct {
|
type event struct {
|
||||||
key string
|
key string
|
||||||
eventType watch.EventType
|
eventType watch.EventType
|
||||||
routes []map[string]interface{}
|
object *interface{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func routeInterfaceToMapSlice(input []interface{}) ([]map[string]interface{}, error) {
|
func routeInterfaceToMapSlice(input []interface{}) ([]map[string]interface{}, error) {
|
||||||
|
|
Loading…
Reference in a new issue