Sfoglia il codice sorgente

add timeout and discovery check for recommender

Alexander Belanger 3 anni fa
parent
commit
701a7dcfc7
2 ha cambiato i file con 33 aggiunte e 25 eliminazioni
  1. 32 25
      internal/opa/opa.go
  2. 1 0
      workers/jobs/recommender.go

+ 32 - 25
internal/opa/opa.go

@@ -98,35 +98,42 @@ func (runner *KubernetesOPARunner) GetRecommendations(categories []string) ([]*O
 
 	res := make([]*OPARecommenderQueryResult, 0)
 
-	for _, name := range collectionNames {
-		// look up to determine if the name is registered
-		queryCollection, exists := runner.Policies[name]
+	// ping the cluster with a version check to make sure it's reachable - if not, return an error
+	_, err := runner.k8sAgent.Clientset.Discovery().ServerVersion()
 
-		if !exists {
-			return nil, fmt.Errorf("No policies for %s found", name)
-		}
+	if err != nil {
+		fmt.Printf("discovery check failed: %v\n", err.Error())
+	} else {
+		for _, name := range collectionNames {
+			// look up to determine if the name is registered
+			queryCollection, exists := runner.Policies[name]
 
-		var currResults []*OPARecommenderQueryResult
-		var err error
-
-		switch queryCollection.Kind {
-		case HelmRelease:
-			currResults, err = runner.runHelmReleaseQueries(name, queryCollection)
-		case Pod:
-			currResults, err = runner.runPodQueries(name, queryCollection)
-		case CRDList:
-			currResults, err = runner.runCRDListQueries(name, queryCollection)
-		default:
-			fmt.Printf("%s is not a supported query kind", queryCollection.Kind)
-			continue
-		}
+			if !exists {
+				return nil, fmt.Errorf("No policies for %s found", name)
+			}
 
-		if err != nil {
-			fmt.Printf("%s", err.Error())
-			continue
-		}
+			var currResults []*OPARecommenderQueryResult
+			var err error
+
+			switch queryCollection.Kind {
+			case HelmRelease:
+				currResults, err = runner.runHelmReleaseQueries(name, queryCollection)
+			case Pod:
+				currResults, err = runner.runPodQueries(name, queryCollection)
+			case CRDList:
+				currResults, err = runner.runCRDListQueries(name, queryCollection)
+			default:
+				fmt.Printf("%s is not a supported query kind", queryCollection.Kind)
+				continue
+			}
+
+			if err != nil {
+				fmt.Printf("%s", err.Error())
+				continue
+			}
 
-		res = append(res, currResults...)
+			res = append(res, currResults...)
+		}
 	}
 
 	return res, nil

+ 1 - 0
workers/jobs/recommender.go

@@ -204,6 +204,7 @@ func (n *recommender) Run() error {
 			Repo:                      n.repo,
 			DigitalOceanOAuth:         n.doConf,
 			AllowInClusterConnections: false,
+			Timeout:                   5 * time.Second,
 		})
 
 		if err != nil {