mirror of https://github.com/k3s-io/k3s
Add a configuration step to make the test work on GKE
parent
71f14cf335
commit
35f10074fb
|
@ -58,6 +58,7 @@ var (
|
|||
AdapterForOldResourceModel = "adapter_old_resource_model.yaml"
|
||||
AdapterForNewResourceModel = "adapter_new_resource_model.yaml"
|
||||
AdapterDefault = AdapterForOldResourceModel
|
||||
ClusterAdminBinding = "e2e-test-cluster-admin-binding"
|
||||
)
|
||||
|
||||
// CustomMetricContainerSpec allows to specify a config for StackdriverExporterDeployment
|
||||
|
@ -240,8 +241,15 @@ func prometheusExporterPodSpec(metricName string, metricValue int64, port int32)
|
|||
// CreateAdapter creates Custom Metrics - Stackdriver adapter
|
||||
// adapterDeploymentFile should be a filename for adapter deployment located in StagingDeploymentLocation
|
||||
func CreateAdapter(adapterDeploymentFile string) error {
|
||||
// A workaround to make the work on GKE. GKE doesn't normally allow to create cluster roles,
|
||||
// which the adapter deployment does. The solution is to create cluster role binding for
|
||||
// cluster-admin role and currently used service account.
|
||||
err := createClusterAdminBinding()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
adapterURL := StagingDeploymentsLocation + adapterDeploymentFile
|
||||
err := exec.Command("wget", adapterURL).Run()
|
||||
err = exec.Command("wget", adapterURL).Run()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -250,6 +258,19 @@ func CreateAdapter(adapterDeploymentFile string) error {
|
|||
return err
|
||||
}
|
||||
|
||||
func createClusterAdminBinding() error {
|
||||
stdout, stderr, err := framework.RunCmd("gcloud", "config", "get-value", "core/account")
|
||||
if err != nil {
|
||||
framework.Logf(stderr)
|
||||
return err
|
||||
}
|
||||
serviceAccount := strings.TrimSpace(stdout)
|
||||
framework.Logf("current service account: %q", serviceAccount)
|
||||
stat, err := framework.RunKubectl("create", "clusterrolebinding", ClusterAdminBinding, "--clusterrole=cluster-admin", "--user="+serviceAccount)
|
||||
framework.Logf(stat)
|
||||
return err
|
||||
}
|
||||
|
||||
// CreateDescriptors creates descriptors for metrics: CustomMetricName and UnusedMetricName.
|
||||
func CreateDescriptors(service *gcm.Service, projectId string) error {
|
||||
_, err := service.Projects.MetricDescriptors.Create(fmt.Sprintf("projects/%s", projectId), &gcm.MetricDescriptor{
|
||||
|
@ -294,4 +315,13 @@ func CleanupAdapter(adapterDeploymentFile string) {
|
|||
if err != nil {
|
||||
framework.Logf("Failed to delete adapter deployment file: %s", err)
|
||||
}
|
||||
cleanupClusterAdminBinding()
|
||||
}
|
||||
|
||||
func cleanupClusterAdminBinding() {
|
||||
stat, err := framework.RunKubectl("delete", "clusterrolebinding", ClusterAdminBinding)
|
||||
framework.Logf(stat)
|
||||
if err != nil {
|
||||
framework.Logf("Failed to delete cluster admin binding: %s", err)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -216,10 +216,10 @@ func verifyResponseFromExternalMetricsAPI(f *framework.Framework, externalMetric
|
|||
req1, _ := labels.NewRequirement("resource.type", selection.Equals, []string{"k8s_pod"})
|
||||
// It's important to filter out only metrics from the right namespace, since multiple e2e tests
|
||||
// may run in the same project concurrently. "dummy" is added to test
|
||||
req2, _ := labels.NewRequirement("resource.label.namespace_name", selection.In, []string{string(f.Namespace.Name), "dummy"})
|
||||
req3, _ := labels.NewRequirement("resource.label.pod_name", selection.Exists, []string{})
|
||||
req4, _ := labels.NewRequirement("resource.label.location", selection.NotEquals, []string{"dummy"})
|
||||
req5, _ := labels.NewRequirement("resource.label.cluster_name", selection.NotIn, []string{"foo", "bar"})
|
||||
req2, _ := labels.NewRequirement("resource.labels.namespace_name", selection.In, []string{string(f.Namespace.Name), "dummy"})
|
||||
req3, _ := labels.NewRequirement("resource.labels.pod_name", selection.Exists, []string{})
|
||||
req4, _ := labels.NewRequirement("resource.labels.location", selection.NotEquals, []string{"dummy"})
|
||||
req5, _ := labels.NewRequirement("resource.labels.cluster_name", selection.NotIn, []string{"foo", "bar"})
|
||||
values, err := externalMetricsClient.
|
||||
NamespacedMetrics("dummy").
|
||||
List("custom.googleapis.com|"+CustomMetricName, labels.NewSelector().Add(*req1, *req2, *req3, *req4, *req5))
|
||||
|
@ -232,7 +232,7 @@ func verifyResponseFromExternalMetricsAPI(f *framework.Framework, externalMetric
|
|||
if values.Items[0].MetricName != "custom.googleapis.com|"+CustomMetricName ||
|
||||
values.Items[0].Value.Value() != CustomMetricValue ||
|
||||
// Check one label just to make sure labels are included
|
||||
values.Items[0].MetricLabels["resource.label.namespace_name"] != string(f.Namespace.Name) {
|
||||
values.Items[0].MetricLabels["resource.labels.namespace_name"] != string(f.Namespace.Name) {
|
||||
framework.Failf("Unexpected result for metric %s: %v", CustomMetricName, values.Items[0])
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue