|
10 | 10 | import java.nio.file.StandardCopyOption;
|
11 | 11 | import java.util.ArrayList;
|
12 | 12 | import java.util.Collections;
|
| 13 | +import java.util.HashMap; |
13 | 14 | import java.util.List;
|
14 | 15 | import java.util.Map;
|
15 | 16 | import java.util.concurrent.Callable;
|
|
39 | 40 | import oracle.weblogic.kubernetes.actions.impl.PrometheusParams;
|
40 | 41 | import oracle.weblogic.kubernetes.actions.impl.primitive.Command;
|
41 | 42 | import oracle.weblogic.kubernetes.actions.impl.primitive.CommandParams;
|
| 43 | +import oracle.weblogic.kubernetes.actions.impl.primitive.Helm; |
42 | 44 | import oracle.weblogic.kubernetes.actions.impl.primitive.HelmParams;
|
43 | 45 | import oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes;
|
44 | 46 | import oracle.weblogic.kubernetes.assertions.impl.ClusterRole;
|
45 | 47 | import oracle.weblogic.kubernetes.assertions.impl.ClusterRoleBinding;
|
| 48 | +import oracle.weblogic.kubernetes.assertions.impl.RoleBinding; |
46 | 49 | import oracle.weblogic.kubernetes.logging.LoggingFacade;
|
47 | 50 | import org.apache.commons.io.FileUtils;
|
48 | 51 |
|
|
75 | 78 | import static oracle.weblogic.kubernetes.assertions.TestAssertions.callTestWebAppAndCheckForServerNameInResponse;
|
76 | 79 | import static oracle.weblogic.kubernetes.assertions.TestAssertions.isGrafanaReady;
|
77 | 80 | import static oracle.weblogic.kubernetes.assertions.TestAssertions.isHelmReleaseDeployed;
|
| 81 | +import static oracle.weblogic.kubernetes.assertions.TestAssertions.isPrometheusAdapterReady; |
78 | 82 | import static oracle.weblogic.kubernetes.assertions.TestAssertions.isPrometheusReady;
|
79 | 83 | import static oracle.weblogic.kubernetes.utils.ApplicationUtils.callWebAppAndCheckForServerNameInResponse;
|
80 | 84 | import static oracle.weblogic.kubernetes.utils.ClusterUtils.createClusterAndVerify;
|
|
91 | 95 | import static oracle.weblogic.kubernetes.utils.ImageUtils.createTestRepoSecret;
|
92 | 96 | import static oracle.weblogic.kubernetes.utils.ImageUtils.dockerLoginAndPushImageToRegistry;
|
93 | 97 | import static oracle.weblogic.kubernetes.utils.PodUtils.execInPod;
|
| 98 | +import static oracle.weblogic.kubernetes.utils.PodUtils.getPodName; |
94 | 99 | import static oracle.weblogic.kubernetes.utils.PodUtils.setPodAntiAffinity;
|
95 | 100 | import static oracle.weblogic.kubernetes.utils.SecretUtils.createSecretWithUsernamePassword;
|
96 | 101 | import static oracle.weblogic.kubernetes.utils.ThreadSafeLogger.getLogger;
|
@@ -431,6 +436,63 @@ public static PrometheusParams installAndVerifyPrometheus(String promReleaseSuff
|
431 | 436 | return prometheusParams;
|
432 | 437 | }
|
433 | 438 |
|
| 439 | + /** |
| 440 | + * Install Prometheus adapter and wait up to five minutes until the prometheus adapter pods are ready. |
| 441 | + * |
| 442 | + * @param promAdapterReleaseName the prometheus adapter release name |
| 443 | + * @param promAdapterNamespace the prometheus adapter namespace |
| 444 | + * @return the prometheus adapter Helm installation parameters |
| 445 | + */ |
| 446 | + public static HelmParams installAndVerifyPrometheusAdapter(String promAdapterReleaseName, |
| 447 | + String promAdapterNamespace, |
| 448 | + String prometheusHost, |
| 449 | + int prometheusPort) { |
| 450 | + LoggingFacade logger = getLogger(); |
| 451 | + Path srcPromAdapterFile = Paths.get(RESOURCE_DIR, "exporter", "promadaptervalues.yaml"); |
| 452 | + |
| 453 | + // Helm install parameters |
| 454 | + HelmParams promAdapterHelmParams = new HelmParams() |
| 455 | + .releaseName(promAdapterReleaseName) |
| 456 | + .namespace(promAdapterNamespace) |
| 457 | + .repoUrl(PROMETHEUS_REPO_URL) |
| 458 | + .repoName(PROMETHEUS_REPO_NAME) |
| 459 | + .chartName("prometheus-adapter") |
| 460 | + .chartValuesFile(srcPromAdapterFile.toString()); |
| 461 | + |
| 462 | + |
| 463 | + // install prometheus adapter |
| 464 | + logger.info("Installing prometheus adapter in namespace {0}", promAdapterNamespace); |
| 465 | + Map<String, Object> chartValues = new HashMap<>(); |
| 466 | + chartValues.put("prometheus.url", "http://" + prometheusHost); |
| 467 | + chartValues.put("prometheus.port", prometheusPort); |
| 468 | + assertTrue(Helm.install(promAdapterHelmParams, chartValues), |
| 469 | + String.format("Failed to install prometheus adapter in namespace %s", promAdapterNamespace)); |
| 470 | + logger.info("Prometheus Adapter installed in namespace {0}", promAdapterNamespace); |
| 471 | + |
| 472 | + // list Helm releases matching operator release name in operator namespace |
| 473 | + logger.info("Checking prometheus adapter release {0} status in namespace {1}", |
| 474 | + promAdapterReleaseName, promAdapterNamespace); |
| 475 | + assertTrue(isHelmReleaseDeployed(promAdapterReleaseName, promAdapterNamespace), |
| 476 | + String.format("Prometheus release %s is not in deployed status in namespace %s", |
| 477 | + promAdapterReleaseName, promAdapterNamespace)); |
| 478 | + logger.info("Prometheus adapter release {0} status is deployed in namespace {1}", |
| 479 | + promAdapterReleaseName, promAdapterNamespace); |
| 480 | + |
| 481 | + // wait for the promethues adapter pod to be ready |
| 482 | + logger.info("Wait for the promethues adapter pod is ready in namespace {0}", promAdapterNamespace); |
| 483 | + String podName = assertDoesNotThrow(() -> getPodName(promAdapterNamespace, "prometheus-adapter"), |
| 484 | + "Can't find prometheus-adapter pod"); |
| 485 | + testUntil( |
| 486 | + assertDoesNotThrow(() -> isPrometheusAdapterReady(promAdapterNamespace, podName), |
| 487 | + "prometheusAdapterIsReady failed with ApiException"), |
| 488 | + logger, |
| 489 | + "prometheus adapter to be running in namespace {0}", |
| 490 | + promAdapterNamespace); |
| 491 | + |
| 492 | + return promAdapterHelmParams; |
| 493 | + } |
| 494 | + |
| 495 | + |
434 | 496 | /**
|
435 | 497 | * Install Grafana and wait up to five minutes until the grafana pod is ready.
|
436 | 498 | *
|
@@ -570,6 +632,39 @@ public static void cleanupPromGrafanaClusterRoles(String prometheusReleaseName,
|
570 | 632 | }
|
571 | 633 | }
|
572 | 634 |
|
| 635 | + /** |
| 636 | + * Extra clean up for Prometheus Adapter artifacts. |
| 637 | + * |
| 638 | + */ |
| 639 | + public static void cleanupPrometheusAdapterClusterRoles() { |
| 640 | + //extra cleanup |
| 641 | + String prometheusAdapterReleaseName = "prometheus-adapter"; |
| 642 | + try { |
| 643 | + if (ClusterRole.clusterRoleExists(prometheusAdapterReleaseName + "-resource-reader")) { |
| 644 | + Kubernetes.deleteClusterRole(prometheusAdapterReleaseName + "-resource-reader"); |
| 645 | + } |
| 646 | + if (ClusterRole.clusterRoleExists(prometheusAdapterReleaseName + "-server-resources")) { |
| 647 | + Kubernetes.deleteClusterRole(prometheusAdapterReleaseName + "-server-resources"); |
| 648 | + } |
| 649 | + if (ClusterRoleBinding.clusterRoleBindingExists(prometheusAdapterReleaseName + "-hpa-controller")) { |
| 650 | + Kubernetes.deleteClusterRoleBinding(prometheusAdapterReleaseName + "-hpa-controller"); |
| 651 | + } |
| 652 | + if (ClusterRoleBinding.clusterRoleBindingExists(prometheusAdapterReleaseName + "-resource-reader")) { |
| 653 | + Kubernetes.deleteClusterRoleBinding(prometheusAdapterReleaseName + "-resource-reader"); |
| 654 | + } |
| 655 | + if (ClusterRoleBinding.clusterRoleBindingExists(prometheusAdapterReleaseName + "-system-auth-delegator")) { |
| 656 | + Kubernetes.deleteClusterRoleBinding(prometheusAdapterReleaseName + "-system-auth-delegator"); |
| 657 | + } |
| 658 | + if (RoleBinding.roleBindingExists(prometheusAdapterReleaseName + "-auth-reader", "kube-system")) { |
| 659 | + Kubernetes.deleteNamespacedRoleBinding("kube-system", prometheusAdapterReleaseName + "-auth-reader"); |
| 660 | + } |
| 661 | + |
| 662 | + } catch (Exception ex) { |
| 663 | + //ignoring |
| 664 | + logger.info("getting exception during delete artifacts for prometheus adapter"); |
| 665 | + } |
| 666 | + } |
| 667 | + |
573 | 668 | /**
|
574 | 669 | * Download src from monitoring exporter github project and build webapp.
|
575 | 670 | *
|
@@ -937,15 +1032,6 @@ public static void verifyMonExpAppAccessThroughNginx(String nginxHost, int repli
|
937 | 1032 | logger,
|
938 | 1033 | "Verify NGINX can access the monitoring exporter metrics \n"
|
939 | 1034 | + "from all managed servers in the domain via http");
|
940 |
| - /* |
941 |
| - assertThat(callWebAppAndCheckForServerNameInResponse(curlCmd, managedServerNames, 100)) |
942 |
| - .as("Verify NGINX can access the monitoring exporter metrics " |
943 |
| - + "from all managed servers in the domain via http") |
944 |
| - .withFailMessage("NGINX can not access the monitoring exporter metrics " |
945 |
| - + "from one or more of the managed servers via http") |
946 |
| - .isTrue(); |
947 |
| -
|
948 |
| - */ |
949 | 1035 | }
|
950 | 1036 |
|
951 | 1037 | /**
|
|
0 commit comments