diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItUsabilityOperatorHelmChart.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItUsabilityOperatorHelmChart.java index 68ff3a734c9..a7095cdf693 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItUsabilityOperatorHelmChart.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/ItUsabilityOperatorHelmChart.java @@ -1,4 +1,4 @@ -// Copyright (c) 2020, 2023, Oracle and/or its affiliates. +// Copyright (c) 2020, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes; @@ -311,6 +311,7 @@ void testDeleteOperatorButNotDomain() { + "after the operator was deleted"); assertTrue(checkManagedServerConfiguration(domain1Namespace, domain1Uid)); } finally { + cleanUpSA(opNamespace); if (!isDomain1Running) { cleanUpDomainSecrets(domain1Namespace); } diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/actions/impl/ServiceAccount.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/actions/impl/ServiceAccount.java index 8037d5d559d..465cbbe8359 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/actions/impl/ServiceAccount.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/actions/impl/ServiceAccount.java @@ -1,10 +1,11 @@ -// Copyright (c) 2020, 2021, Oracle and/or its affiliates. +// Copyright (c) 2020, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes.actions.impl; import io.kubernetes.client.openapi.ApiException; import io.kubernetes.client.openapi.models.V1ServiceAccount; +import io.kubernetes.client.openapi.models.V1ServiceAccountList; import oracle.weblogic.kubernetes.actions.impl.primitive.Kubernetes; public class ServiceAccount { @@ -31,4 +32,22 @@ public static boolean create(V1ServiceAccount serviceAccount) throws ApiExceptio public static boolean delete(String name, String namespace) { return Kubernetes.deleteServiceAccount(name, namespace); } + + /** + * Verify whether the service account exists in the namespace. + * @param name name of the service account + * @param namespace namespace where the service account exits + * @return true if the service account exists, false otherwise + */ + public static boolean serviceAccountExists(String name, String namespace) { + V1ServiceAccountList sas = Kubernetes.listServiceAccounts(namespace); + if (sas != null) { + for (V1ServiceAccount sa : sas.getItems()) { + if (sa.getMetadata().getName().equals(name)) { + return true; + } + } + } + return false; + } } diff --git a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/OperatorUtils.java b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/OperatorUtils.java index 8bbb8f2341c..df73ef73648 100644 --- a/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/OperatorUtils.java +++ b/integration-tests/src/test/java/oracle/weblogic/kubernetes/utils/OperatorUtils.java @@ -1,4 +1,4 @@ -// Copyright (c) 2021, 2023, Oracle and/or its affiliates. +// Copyright (c) 2021, 2024, Oracle and/or its affiliates. // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. package oracle.weblogic.kubernetes.utils; @@ -11,6 +11,7 @@ import io.kubernetes.client.openapi.models.V1Pod; import io.kubernetes.client.openapi.models.V1ServiceAccount; import oracle.weblogic.kubernetes.actions.impl.OperatorParams; +import oracle.weblogic.kubernetes.actions.impl.ServiceAccount; import oracle.weblogic.kubernetes.actions.impl.primitive.Command; import oracle.weblogic.kubernetes.actions.impl.primitive.CommandParams; import oracle.weblogic.kubernetes.actions.impl.primitive.HelmParams; @@ -441,12 +442,14 @@ public static OperatorParams installAndVerifyOperator(String opNamespace, LoggingFacade logger = getLogger(); // Create a service account for the unique opNamespace - logger.info("Creating service account"); - assertDoesNotThrow(() -> createServiceAccount(new V1ServiceAccount() - .metadata(new V1ObjectMeta() - .namespace(opNamespace) - .name(opServiceAccount)))); - logger.info("Created service account: {0}", opServiceAccount); + if (!ServiceAccount.serviceAccountExists(opServiceAccount, opNamespace)) { + logger.info("Creating service account"); + assertDoesNotThrow(() -> createServiceAccount(new V1ServiceAccount() + .metadata(new V1ObjectMeta() + .namespace(opNamespace) + .name(opServiceAccount)))); + logger.info("Created service account: {0}", opServiceAccount); + } operatorImage = getOperatorImageName(); if (ARM) { @@ -647,13 +650,14 @@ public static OperatorParams installAndVerifyOperator(String opNamespace, LoggingFacade logger = getLogger(); // Create a service account for the unique opNamespace - logger.info("Creating service account"); - assertDoesNotThrow(() -> createServiceAccount(new V1ServiceAccount() - .metadata(new V1ObjectMeta() - .namespace(opNamespace) - .name(opServiceAccount)))); - logger.info("Created service account: {0}", opServiceAccount); - + if (!ServiceAccount.serviceAccountExists(opServiceAccount, opNamespace)) { + logger.info("Creating service account"); + assertDoesNotThrow(() -> createServiceAccount(new V1ServiceAccount() + .metadata(new V1ObjectMeta() + .namespace(opNamespace) + .name(opServiceAccount)))); + logger.info("Created service account: {0}", opServiceAccount); + } // get operator image name String operatorImage = getOperatorImageName();