Un-nest switch in gateway update handler
This commit is contained in:
parent
7d5a02ad61
commit
b2b5942f4b
|
@ -891,8 +891,8 @@ func (s *state) handleUpdateTerminatingGateway(u cache.UpdateEvent, snap *Config
|
||||||
}
|
}
|
||||||
logger := s.logger.Named(logging.TerminatingGateway)
|
logger := s.logger.Named(logging.TerminatingGateway)
|
||||||
|
|
||||||
switch u.CorrelationID {
|
switch {
|
||||||
case rootsWatchID:
|
case u.CorrelationID == rootsWatchID:
|
||||||
roots, ok := u.Result.(*structs.IndexedCARoots)
|
roots, ok := u.Result.(*structs.IndexedCARoots)
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("invalid type for response: %T", u.Result)
|
return fmt.Errorf("invalid type for response: %T", u.Result)
|
||||||
|
@ -900,7 +900,7 @@ func (s *state) handleUpdateTerminatingGateway(u cache.UpdateEvent, snap *Config
|
||||||
snap.Roots = roots
|
snap.Roots = roots
|
||||||
|
|
||||||
// Update watches based on the current list of services associated with the terminating-gateway
|
// Update watches based on the current list of services associated with the terminating-gateway
|
||||||
case gatewayServicesWatchID:
|
case u.CorrelationID == gatewayServicesWatchID:
|
||||||
services, ok := u.Result.(*structs.IndexedGatewayServices)
|
services, ok := u.Result.(*structs.IndexedGatewayServices)
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("invalid type for response: %T", u.Result)
|
return fmt.Errorf("invalid type for response: %T", u.Result)
|
||||||
|
@ -1052,51 +1052,47 @@ func (s *state) handleUpdateTerminatingGateway(u cache.UpdateEvent, snap *Config
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
case strings.HasPrefix(u.CorrelationID, "external-service:"):
|
||||||
switch {
|
resp, ok := u.Result.(*structs.IndexedCheckServiceNodes)
|
||||||
// Store service instances for watched service
|
if !ok {
|
||||||
case strings.HasPrefix(u.CorrelationID, "external-service:"):
|
return fmt.Errorf("invalid type for response: %T", u.Result)
|
||||||
resp, ok := u.Result.(*structs.IndexedCheckServiceNodes)
|
|
||||||
if !ok {
|
|
||||||
return fmt.Errorf("invalid type for response: %T", u.Result)
|
|
||||||
}
|
|
||||||
|
|
||||||
sid := structs.ServiceIDFromString(strings.TrimPrefix(u.CorrelationID, "external-service:"))
|
|
||||||
|
|
||||||
if len(resp.Nodes) > 0 {
|
|
||||||
snap.TerminatingGateway.ServiceGroups[sid] = resp.Nodes
|
|
||||||
} else if _, ok := snap.TerminatingGateway.ServiceGroups[sid]; ok {
|
|
||||||
delete(snap.TerminatingGateway.ServiceGroups, sid)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Store leaf cert for watched service
|
|
||||||
case strings.HasPrefix(u.CorrelationID, "service-leaf:"):
|
|
||||||
leaf, ok := u.Result.(*structs.IssuedCert)
|
|
||||||
if !ok {
|
|
||||||
return fmt.Errorf("invalid type for response: %T", u.Result)
|
|
||||||
}
|
|
||||||
|
|
||||||
sid := structs.ServiceIDFromString(strings.TrimPrefix(u.CorrelationID, "service-leaf:"))
|
|
||||||
snap.TerminatingGateway.ServiceLeaves[sid] = leaf
|
|
||||||
|
|
||||||
case strings.HasPrefix(u.CorrelationID, "service-resolver:"):
|
|
||||||
configEntries, ok := u.Result.(*structs.IndexedConfigEntries)
|
|
||||||
if !ok {
|
|
||||||
return fmt.Errorf("invalid type for response: %T", u.Result)
|
|
||||||
}
|
|
||||||
// There should only ever be one entry for a service resolver within a namespace
|
|
||||||
if len(configEntries.Entries) == 1 {
|
|
||||||
if resolver, ok := configEntries.Entries[0].(*structs.ServiceResolverConfigEntry); ok {
|
|
||||||
snap.TerminatingGateway.ServiceResolvers[structs.NewServiceID(resolver.Name, &resolver.EnterpriseMeta)] = resolver
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
case strings.HasPrefix(u.CorrelationID, "service-intentions:"):
|
|
||||||
// no-op: Intentions don't get stored in the snapshot, calls to ConnectAuthorize will fetch them from the cache
|
|
||||||
|
|
||||||
default:
|
|
||||||
// do nothing
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sid := structs.ServiceIDFromString(strings.TrimPrefix(u.CorrelationID, "external-service:"))
|
||||||
|
|
||||||
|
if len(resp.Nodes) > 0 {
|
||||||
|
snap.TerminatingGateway.ServiceGroups[sid] = resp.Nodes
|
||||||
|
} else if _, ok := snap.TerminatingGateway.ServiceGroups[sid]; ok {
|
||||||
|
delete(snap.TerminatingGateway.ServiceGroups, sid)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Store leaf cert for watched service
|
||||||
|
case strings.HasPrefix(u.CorrelationID, "service-leaf:"):
|
||||||
|
leaf, ok := u.Result.(*structs.IssuedCert)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("invalid type for response: %T", u.Result)
|
||||||
|
}
|
||||||
|
|
||||||
|
sid := structs.ServiceIDFromString(strings.TrimPrefix(u.CorrelationID, "service-leaf:"))
|
||||||
|
snap.TerminatingGateway.ServiceLeaves[sid] = leaf
|
||||||
|
|
||||||
|
case strings.HasPrefix(u.CorrelationID, "service-resolver:"):
|
||||||
|
configEntries, ok := u.Result.(*structs.IndexedConfigEntries)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("invalid type for response: %T", u.Result)
|
||||||
|
}
|
||||||
|
// There should only ever be one entry for a service resolver within a namespace
|
||||||
|
if len(configEntries.Entries) == 1 {
|
||||||
|
if resolver, ok := configEntries.Entries[0].(*structs.ServiceResolverConfigEntry); ok {
|
||||||
|
snap.TerminatingGateway.ServiceResolvers[structs.NewServiceID(resolver.Name, &resolver.EnterpriseMeta)] = resolver
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
case strings.HasPrefix(u.CorrelationID, "service-intentions:"):
|
||||||
|
// no-op: Intentions don't get stored in the snapshot, calls to ConnectAuthorize will fetch them from the cache
|
||||||
|
|
||||||
|
default:
|
||||||
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
Loading…
Reference in a new issue