fix(kubernetes): Prevent rerunning initial cluster detection [EE-5170] (#8666)

pull/8680/head
Dakota Walsh 2023-03-16 15:39:26 +13:00 committed by GitHub
parent 6ee5cc6a56
commit f17a608dc7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 7 deletions

View File

@ -64,6 +64,7 @@
"UseServerMetrics": false "UseServerMetrics": false
}, },
"Flags": { "Flags": {
"IsServerIngressClassDetected": false,
"IsServerMetricsDetected": false, "IsServerMetricsDetected": false,
"IsServerStorageDetected": false "IsServerStorageDetected": false
}, },

View File

@ -76,6 +76,16 @@ func EndpointSet(endpointIDs []portainer.EndpointID) map[portainer.EndpointID]bo
} }
func InitialIngressClassDetection(endpoint *portainer.Endpoint, endpointService dataservices.EndpointService, factory *cli.ClientFactory) { func InitialIngressClassDetection(endpoint *portainer.Endpoint, endpointService dataservices.EndpointService, factory *cli.ClientFactory) {
if endpoint.Kubernetes.Flags.IsServerIngressClassDetected {
return
}
defer func() {
endpoint.Kubernetes.Flags.IsServerIngressClassDetected = true
endpointService.UpdateEndpoint(
portainer.EndpointID(endpoint.ID),
endpoint,
)
}()
cli, err := factory.GetKubeClient(endpoint) cli, err := factory.GetKubeClient(endpoint)
if err != nil { if err != nil {
log.Debug().Err(err).Msg("unable to create kubernetes client for ingress class detection") log.Debug().Err(err).Msg("unable to create kubernetes client for ingress class detection")
@ -107,6 +117,16 @@ func InitialIngressClassDetection(endpoint *portainer.Endpoint, endpointService
} }
func InitialMetricsDetection(endpoint *portainer.Endpoint, endpointService dataservices.EndpointService, factory *cli.ClientFactory) { func InitialMetricsDetection(endpoint *portainer.Endpoint, endpointService dataservices.EndpointService, factory *cli.ClientFactory) {
if endpoint.Kubernetes.Flags.IsServerMetricsDetected {
return
}
defer func() {
endpoint.Kubernetes.Flags.IsServerMetricsDetected = true
endpointService.UpdateEndpoint(
portainer.EndpointID(endpoint.ID),
endpoint,
)
}()
cli, err := factory.GetKubeClient(endpoint) cli, err := factory.GetKubeClient(endpoint)
if err != nil { if err != nil {
log.Debug().Err(err).Msg("unable to create kubernetes client for initial metrics detection") log.Debug().Err(err).Msg("unable to create kubernetes client for initial metrics detection")
@ -118,11 +138,6 @@ func InitialMetricsDetection(endpoint *portainer.Endpoint, endpointService datas
return return
} }
endpoint.Kubernetes.Configuration.UseServerMetrics = true endpoint.Kubernetes.Configuration.UseServerMetrics = true
endpoint.Kubernetes.Flags.IsServerMetricsDetected = true
err = endpointService.UpdateEndpoint(
portainer.EndpointID(endpoint.ID),
endpoint,
)
if err != nil { if err != nil {
log.Debug().Err(err).Msg("unable to enable UseServerMetrics inside the database") log.Debug().Err(err).Msg("unable to enable UseServerMetrics inside the database")
return return
@ -158,6 +173,16 @@ func storageDetect(endpoint *portainer.Endpoint, endpointService dataservices.En
} }
func InitialStorageDetection(endpoint *portainer.Endpoint, endpointService dataservices.EndpointService, factory *cli.ClientFactory) { func InitialStorageDetection(endpoint *portainer.Endpoint, endpointService dataservices.EndpointService, factory *cli.ClientFactory) {
if endpoint.Kubernetes.Flags.IsServerStorageDetected {
return
}
defer func() {
endpoint.Kubernetes.Flags.IsServerStorageDetected = true
endpointService.UpdateEndpoint(
portainer.EndpointID(endpoint.ID),
endpoint,
)
}()
log.Info().Msg("attempting to detect storage classes in the cluster") log.Info().Msg("attempting to detect storage classes in the cluster")
err := storageDetect(endpoint, endpointService, factory) err := storageDetect(endpoint, endpointService, factory)
if err == nil { if err == nil {

View File

@ -588,8 +588,11 @@ type (
Flags KubernetesFlags `json:"Flags"` Flags KubernetesFlags `json:"Flags"`
} }
// KubernetesFlags are used to detect if we need to run initial cluster
// detection again.
KubernetesFlags struct { KubernetesFlags struct {
IsServerMetricsDetected bool `json:"IsServerMetricsDetected"` IsServerMetricsDetected bool `json:"IsServerMetricsDetected"`
IsServerIngressClassDetected bool `json:"IsServerIngressClassDetected"`
IsServerStorageDetected bool `json:"IsServerStorageDetected"` IsServerStorageDetected bool `json:"IsServerStorageDetected"`
} }