diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/SubjectAccessOperations.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/CreateOnlyResourceOperations.java similarity index 89% rename from kubernetes-client/src/main/java/io/fabric8/kubernetes/client/SubjectAccessOperations.java rename to kubernetes-client/src/main/java/io/fabric8/kubernetes/client/CreateOnlyResourceOperations.java index d91bb91fa2e..96194f48690 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/SubjectAccessOperations.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/CreateOnlyResourceOperations.java @@ -17,5 +17,5 @@ import io.fabric8.kubernetes.client.dsl.Createable; -public interface SubjectAccessOperations extends Createable { +public interface CreateOnlyResourceOperations extends Createable { } diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/DefaultKubernetesClient.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/DefaultKubernetesClient.java index e43015ed0e8..1819c7acb56 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/DefaultKubernetesClient.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/DefaultKubernetesClient.java @@ -73,12 +73,15 @@ import io.fabric8.kubernetes.api.model.ServiceAccount; import io.fabric8.kubernetes.api.model.ServiceAccountList; import io.fabric8.kubernetes.api.model.DoneableServiceAccount; +import io.fabric8.kubernetes.api.model.authentication.DoneableTokenReview; +import io.fabric8.kubernetes.api.model.authentication.TokenReview; import io.fabric8.kubernetes.api.model.coordination.v1.DoneableLease; import io.fabric8.kubernetes.api.model.coordination.v1.Lease; import io.fabric8.kubernetes.api.model.coordination.v1.LeaseList; import io.fabric8.kubernetes.client.dsl.*; import io.fabric8.kubernetes.client.dsl.base.CustomResourceDefinitionContext; import io.fabric8.kubernetes.client.dsl.internal.ClusterOperationsImpl; +import io.fabric8.kubernetes.client.dsl.internal.CreateOnlyResourceOperationsImpl; import io.fabric8.kubernetes.client.dsl.internal.apiextensions.v1beta1.CustomResourceDefinitionOperationsImpl; import io.fabric8.kubernetes.client.dsl.internal.CustomResourceOperationContext; import io.fabric8.kubernetes.client.dsl.internal.CustomResourceOperationsImpl; @@ -107,6 +110,7 @@ import io.fabric8.kubernetes.client.extended.leaderelection.LeaderElectorBuilder; import io.fabric8.kubernetes.client.utils.Serialization; import io.fabric8.kubernetes.client.informers.SharedInformerFactory; +import io.fabric8.kubernetes.client.utils.Utils; import okhttp3.OkHttpClient; import java.io.InputStream; @@ -297,6 +301,11 @@ public AuthorizationAPIGroupDSL authorization() { return adapt(AuthorizationAPIGroupClient.class); } + @Override + public CreateOnlyResourceOperations tokenReviews() { + return new CreateOnlyResourceOperationsImpl<>(httpClient, getConfiguration(), "authentication.k8s.io", "v1", Utils.getPluralFromKind(TokenReview.class.getSimpleName()), TokenReview.class); + } + @Override public , D extends Doneable> MixedOperation> customResources(CustomResourceDefinitionContext crdContext, Class resourceType, Class listClass, Class doneClass) { return new CustomResourceOperationsImpl<>(new CustomResourceOperationContext().withOkhttpClient(httpClient).withConfig(getConfiguration()) diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/KubernetesClient.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/KubernetesClient.java index 5dda5345072..b368da53365 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/KubernetesClient.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/KubernetesClient.java @@ -69,6 +69,8 @@ import io.fabric8.kubernetes.api.model.ServiceAccount; import io.fabric8.kubernetes.api.model.ServiceAccountList; import io.fabric8.kubernetes.api.model.DoneableServiceAccount; +import io.fabric8.kubernetes.api.model.authentication.DoneableTokenReview; +import io.fabric8.kubernetes.api.model.authentication.TokenReview; import io.fabric8.kubernetes.api.model.coordination.v1.DoneableLease; import io.fabric8.kubernetes.api.model.coordination.v1.Lease; import io.fabric8.kubernetes.api.model.coordination.v1.LeaseList; @@ -453,6 +455,13 @@ public interface KubernetesClient extends Client { */ AuthorizationAPIGroupDSL authorization(); + /** + * API for creating authentication.k8s.io/v1 TokenReviews + * + * @return CreateOnlyResourceOperations instance for creating TokenReview object + */ + CreateOnlyResourceOperations tokenReviews(); + /** * Get an instance of Kubernetes Client informer factory. It allows you to construct and * cache informers for API types. With it you can subscribe to all the events related to diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/V1AuthorizationAPIGroupClient.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/V1AuthorizationAPIGroupClient.java index 87f37b5fe86..7b37c8d500b 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/V1AuthorizationAPIGroupClient.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/V1AuthorizationAPIGroupClient.java @@ -23,8 +23,8 @@ import io.fabric8.kubernetes.api.model.authorization.v1.SelfSubjectAccessReview; import io.fabric8.kubernetes.api.model.authorization.v1.SelfSubjectRulesReview; import io.fabric8.kubernetes.api.model.authorization.v1.SubjectAccessReview; -import io.fabric8.kubernetes.client.dsl.internal.LocalSubjectAccessReviewOperationsImpl; -import io.fabric8.kubernetes.client.dsl.internal.SubjectAccessOperationsImpl; +import io.fabric8.kubernetes.client.dsl.internal.LocalCreateOnlyResourceReviewOperationsImpl; +import io.fabric8.kubernetes.client.dsl.internal.CreateOnlyResourceOperationsImpl; import io.fabric8.kubernetes.client.utils.Utils; import okhttp3.OkHttpClient; @@ -41,22 +41,22 @@ public V1AuthorizationAPIGroupClient(OkHttpClient httpClient, final Config confi } @Override - public SubjectAccessOperations selfSubjectAccessReview() { - return new SubjectAccessOperationsImpl<>(getHttpClient(), getConfiguration(), AUTHORIZATION_APIGROUP, AUTHORIZATION_APIVERSION, Utils.getPluralFromKind(io.fabric8.kubernetes.api.model.authorization.v1beta1.SelfSubjectAccessReview.class.getSimpleName()), SelfSubjectAccessReview.class); + public CreateOnlyResourceOperations selfSubjectAccessReview() { + return new CreateOnlyResourceOperationsImpl<>(getHttpClient(), getConfiguration(), AUTHORIZATION_APIGROUP, AUTHORIZATION_APIVERSION, Utils.getPluralFromKind(io.fabric8.kubernetes.api.model.authorization.v1beta1.SelfSubjectAccessReview.class.getSimpleName()), SelfSubjectAccessReview.class); } @Override - public SubjectAccessOperations subjectAccessReview() { - return new SubjectAccessOperationsImpl<>(getHttpClient(), getConfiguration(), AUTHORIZATION_APIGROUP, AUTHORIZATION_APIVERSION, Utils.getPluralFromKind(io.fabric8.kubernetes.api.model.authorization.v1beta1.SubjectAccessReview.class.getSimpleName()), SubjectAccessReview.class); + public CreateOnlyResourceOperations subjectAccessReview() { + return new CreateOnlyResourceOperationsImpl<>(getHttpClient(), getConfiguration(), AUTHORIZATION_APIGROUP, AUTHORIZATION_APIVERSION, Utils.getPluralFromKind(io.fabric8.kubernetes.api.model.authorization.v1beta1.SubjectAccessReview.class.getSimpleName()), SubjectAccessReview.class); } @Override - public LocalSubjectAccessReviewOperationsImpl localSubjectAccessReview() { - return new LocalSubjectAccessReviewOperationsImpl<>(getHttpClient(), getConfiguration(), AUTHORIZATION_APIGROUP, AUTHORIZATION_APIVERSION, Utils.getPluralFromKind(io.fabric8.kubernetes.api.model.authorization.v1beta1.LocalSubjectAccessReview.class.getSimpleName()), LocalSubjectAccessReview.class); + public LocalCreateOnlyResourceReviewOperationsImpl localSubjectAccessReview() { + return new LocalCreateOnlyResourceReviewOperationsImpl<>(getHttpClient(), getConfiguration(), AUTHORIZATION_APIGROUP, AUTHORIZATION_APIVERSION, Utils.getPluralFromKind(io.fabric8.kubernetes.api.model.authorization.v1beta1.LocalSubjectAccessReview.class.getSimpleName()), LocalSubjectAccessReview.class); } @Override - public SubjectAccessOperations selfSubjectRulesReview() { - return new SubjectAccessOperationsImpl<>(getHttpClient(), getConfiguration(), AUTHORIZATION_APIGROUP, AUTHORIZATION_APIVERSION, Utils.getPluralFromKind(io.fabric8.kubernetes.api.model.authorization.v1beta1.SelfSubjectRulesReview.class.getSimpleName()), SelfSubjectRulesReview.class); + public CreateOnlyResourceOperations selfSubjectRulesReview() { + return new CreateOnlyResourceOperationsImpl<>(getHttpClient(), getConfiguration(), AUTHORIZATION_APIGROUP, AUTHORIZATION_APIVERSION, Utils.getPluralFromKind(io.fabric8.kubernetes.api.model.authorization.v1beta1.SelfSubjectRulesReview.class.getSimpleName()), SelfSubjectRulesReview.class); } } diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/V1AuthorizationAPIGroupDSL.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/V1AuthorizationAPIGroupDSL.java index 4956fede38d..b669827fda0 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/V1AuthorizationAPIGroupDSL.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/V1AuthorizationAPIGroupDSL.java @@ -23,11 +23,11 @@ import io.fabric8.kubernetes.api.model.authorization.v1.SelfSubjectAccessReview; import io.fabric8.kubernetes.api.model.authorization.v1.SelfSubjectRulesReview; import io.fabric8.kubernetes.api.model.authorization.v1.SubjectAccessReview; -import io.fabric8.kubernetes.client.dsl.internal.LocalSubjectAccessReviewOperationsImpl; +import io.fabric8.kubernetes.client.dsl.internal.LocalCreateOnlyResourceReviewOperationsImpl; public interface V1AuthorizationAPIGroupDSL extends Client{ - SubjectAccessOperations selfSubjectAccessReview(); - SubjectAccessOperations subjectAccessReview(); - LocalSubjectAccessReviewOperationsImpl localSubjectAccessReview(); - SubjectAccessOperations selfSubjectRulesReview(); + CreateOnlyResourceOperations selfSubjectAccessReview(); + CreateOnlyResourceOperations subjectAccessReview(); + LocalCreateOnlyResourceReviewOperationsImpl localSubjectAccessReview(); + CreateOnlyResourceOperations selfSubjectRulesReview(); } diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/V1beta1AuthorizationAPIGroupClient.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/V1beta1AuthorizationAPIGroupClient.java index cf68adf5653..7063bfee0b4 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/V1beta1AuthorizationAPIGroupClient.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/V1beta1AuthorizationAPIGroupClient.java @@ -23,8 +23,8 @@ import io.fabric8.kubernetes.api.model.authorization.v1beta1.SelfSubjectAccessReview; import io.fabric8.kubernetes.api.model.authorization.v1beta1.SelfSubjectRulesReview; import io.fabric8.kubernetes.api.model.authorization.v1beta1.SubjectAccessReview; -import io.fabric8.kubernetes.client.dsl.internal.LocalSubjectAccessReviewOperationsImpl; -import io.fabric8.kubernetes.client.dsl.internal.SubjectAccessOperationsImpl; +import io.fabric8.kubernetes.client.dsl.internal.LocalCreateOnlyResourceReviewOperationsImpl; +import io.fabric8.kubernetes.client.dsl.internal.CreateOnlyResourceOperationsImpl; import io.fabric8.kubernetes.client.utils.Utils; import okhttp3.OkHttpClient; @@ -42,22 +42,22 @@ public V1beta1AuthorizationAPIGroupClient(OkHttpClient httpClient, final Config } @Override - public SubjectAccessOperations selfSubjectAccessReview() { - return new SubjectAccessOperationsImpl<>(getHttpClient(), getConfiguration(), AUTHORIZATION_APIGROUP, AUTHORIZATION_APIVERSION, Utils.getPluralFromKind(SelfSubjectAccessReview.class.getSimpleName()), SelfSubjectAccessReview.class); + public CreateOnlyResourceOperations selfSubjectAccessReview() { + return new CreateOnlyResourceOperationsImpl<>(getHttpClient(), getConfiguration(), AUTHORIZATION_APIGROUP, AUTHORIZATION_APIVERSION, Utils.getPluralFromKind(SelfSubjectAccessReview.class.getSimpleName()), SelfSubjectAccessReview.class); } @Override - public SubjectAccessOperations subjectAccessReview() { - return new SubjectAccessOperationsImpl<>(getHttpClient(), getConfiguration(), AUTHORIZATION_APIGROUP, AUTHORIZATION_APIVERSION, Utils.getPluralFromKind(SubjectAccessReview.class.getSimpleName()), SubjectAccessReview.class); + public CreateOnlyResourceOperations subjectAccessReview() { + return new CreateOnlyResourceOperationsImpl<>(getHttpClient(), getConfiguration(), AUTHORIZATION_APIGROUP, AUTHORIZATION_APIVERSION, Utils.getPluralFromKind(SubjectAccessReview.class.getSimpleName()), SubjectAccessReview.class); } @Override - public LocalSubjectAccessReviewOperationsImpl localSubjectAccessReview() { - return new LocalSubjectAccessReviewOperationsImpl<>(getHttpClient(), getConfiguration(), AUTHORIZATION_APIGROUP, AUTHORIZATION_APIVERSION, Utils.getPluralFromKind(LocalSubjectAccessReview.class.getSimpleName()), LocalSubjectAccessReview.class); + public LocalCreateOnlyResourceReviewOperationsImpl localSubjectAccessReview() { + return new LocalCreateOnlyResourceReviewOperationsImpl<>(getHttpClient(), getConfiguration(), AUTHORIZATION_APIGROUP, AUTHORIZATION_APIVERSION, Utils.getPluralFromKind(LocalSubjectAccessReview.class.getSimpleName()), LocalSubjectAccessReview.class); } @Override - public SubjectAccessOperations selfSubjectRulesReview() { - return new SubjectAccessOperationsImpl<>(getHttpClient(), getConfiguration(), AUTHORIZATION_APIGROUP, AUTHORIZATION_APIVERSION, Utils.getPluralFromKind(SelfSubjectRulesReview.class.getSimpleName()), SelfSubjectRulesReview.class); + public CreateOnlyResourceOperations selfSubjectRulesReview() { + return new CreateOnlyResourceOperationsImpl<>(getHttpClient(), getConfiguration(), AUTHORIZATION_APIGROUP, AUTHORIZATION_APIVERSION, Utils.getPluralFromKind(SelfSubjectRulesReview.class.getSimpleName()), SelfSubjectRulesReview.class); } } diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/V1beta1AuthorizationAPIGroupDSL.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/V1beta1AuthorizationAPIGroupDSL.java index 64e901c0f3e..b0cece7c2b3 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/V1beta1AuthorizationAPIGroupDSL.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/V1beta1AuthorizationAPIGroupDSL.java @@ -23,11 +23,11 @@ import io.fabric8.kubernetes.api.model.authorization.v1beta1.SelfSubjectAccessReview; import io.fabric8.kubernetes.api.model.authorization.v1beta1.SelfSubjectRulesReview; import io.fabric8.kubernetes.api.model.authorization.v1beta1.SubjectAccessReview; -import io.fabric8.kubernetes.client.dsl.internal.LocalSubjectAccessReviewOperationsImpl; +import io.fabric8.kubernetes.client.dsl.internal.LocalCreateOnlyResourceReviewOperationsImpl; public interface V1beta1AuthorizationAPIGroupDSL extends Client { - SubjectAccessOperations selfSubjectAccessReview(); - SubjectAccessOperations subjectAccessReview(); - LocalSubjectAccessReviewOperationsImpl localSubjectAccessReview(); - SubjectAccessOperations selfSubjectRulesReview(); + CreateOnlyResourceOperations selfSubjectAccessReview(); + CreateOnlyResourceOperations subjectAccessReview(); + LocalCreateOnlyResourceReviewOperationsImpl localSubjectAccessReview(); + CreateOnlyResourceOperations selfSubjectRulesReview(); } diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/SubjectAccessOperationsImpl.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/CreateOnlyResourceOperationsImpl.java similarity index 83% rename from kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/SubjectAccessOperationsImpl.java rename to kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/CreateOnlyResourceOperationsImpl.java index 49fbcc2b616..8d7eb504a02 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/SubjectAccessOperationsImpl.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/CreateOnlyResourceOperationsImpl.java @@ -17,7 +17,7 @@ import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.KubernetesClientException; -import io.fabric8.kubernetes.client.SubjectAccessOperations; +import io.fabric8.kubernetes.client.CreateOnlyResourceOperations; import io.fabric8.kubernetes.client.dsl.base.OperationContext; import io.fabric8.kubernetes.client.dsl.base.OperationSupport; import okhttp3.OkHttpClient; @@ -25,15 +25,15 @@ import java.io.IOException; import java.util.concurrent.ExecutionException; -public class SubjectAccessOperationsImpl extends OperationSupport implements SubjectAccessOperations { +public class CreateOnlyResourceOperationsImpl extends OperationSupport implements CreateOnlyResourceOperations { private Class subjectAccessRequestClass; - public SubjectAccessOperationsImpl(OkHttpClient client, Config config, String apiGroupName, String apiGroupVersion, String plural, Class subjectAccessRequestClass) { + public CreateOnlyResourceOperationsImpl(OkHttpClient client, Config config, String apiGroupName, String apiGroupVersion, String plural, Class subjectAccessRequestClass) { this(new OperationContext().withOkhttpClient(client).withConfig(config), apiGroupName, apiGroupVersion, plural, subjectAccessRequestClass); this.subjectAccessRequestClass = subjectAccessRequestClass; } - public SubjectAccessOperationsImpl(OperationContext context, String apiGroupName, String apiGroupVersion, String plural, Class subjectAccessRequestClass) { + public CreateOnlyResourceOperationsImpl(OperationContext context, String apiGroupName, String apiGroupVersion, String plural, Class subjectAccessRequestClass) { super(context.withApiGroupName(apiGroupName) .withApiGroupVersion(apiGroupVersion) .withPlural(plural)); diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/LocalSubjectAccessReviewOperationsImpl.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/LocalCreateOnlyResourceReviewOperationsImpl.java similarity index 67% rename from kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/LocalSubjectAccessReviewOperationsImpl.java rename to kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/LocalCreateOnlyResourceReviewOperationsImpl.java index 812f8021dea..4d9315b72e9 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/LocalSubjectAccessReviewOperationsImpl.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/LocalCreateOnlyResourceReviewOperationsImpl.java @@ -20,13 +20,13 @@ import io.fabric8.kubernetes.client.dsl.base.OperationContext; import okhttp3.OkHttpClient; -public class LocalSubjectAccessReviewOperationsImpl extends SubjectAccessOperationsImpl implements Namespaceable> { +public class LocalCreateOnlyResourceReviewOperationsImpl extends CreateOnlyResourceOperationsImpl implements Namespaceable> { private Class subjectAccessRequestClass; private String subjectAccessApiGroupName; private String subjectAccessApiGroupVersion; private String plural; - public LocalSubjectAccessReviewOperationsImpl(OkHttpClient client, Config config, String subjectAccessApiGroupName, String subjectAccessApiGroupVersion, String plural, Class subjectAccessRequestClass) { + public LocalCreateOnlyResourceReviewOperationsImpl(OkHttpClient client, Config config, String subjectAccessApiGroupName, String subjectAccessApiGroupVersion, String plural, Class subjectAccessRequestClass) { super(client, config, subjectAccessApiGroupName, subjectAccessApiGroupVersion, plural, subjectAccessRequestClass); this.subjectAccessRequestClass = subjectAccessRequestClass; this.subjectAccessApiGroupName = subjectAccessApiGroupName; @@ -34,7 +34,7 @@ public LocalSubjectAccessReviewOperationsImpl(OkHttpClient client, Config config this.plural = plural; } - public LocalSubjectAccessReviewOperationsImpl(OperationContext context, String subjectAccessApiGroupName, String subjectAccessApiGroupVersion, String plural, Class subjectAccessRequestClass) { + public LocalCreateOnlyResourceReviewOperationsImpl(OperationContext context, String subjectAccessApiGroupName, String subjectAccessApiGroupVersion, String plural, Class subjectAccessRequestClass) { super(context, subjectAccessApiGroupName, subjectAccessApiGroupVersion, plural, subjectAccessRequestClass); this.subjectAccessRequestClass = subjectAccessRequestClass; this.subjectAccessApiGroupName = subjectAccessApiGroupName; @@ -43,9 +43,9 @@ public LocalSubjectAccessReviewOperationsImpl(OperationContext context, String s } @Override - public LocalSubjectAccessReviewOperationsImpl inNamespace(String namespace) { + public LocalCreateOnlyResourceReviewOperationsImpl inNamespace(String namespace) { this.namespace = namespace; - return new LocalSubjectAccessReviewOperationsImpl<>(context.withNamespace(namespace), subjectAccessApiGroupName, subjectAccessApiGroupVersion, plural, subjectAccessRequestClass); + return new LocalCreateOnlyResourceReviewOperationsImpl<>(context.withNamespace(namespace), subjectAccessApiGroupName, subjectAccessApiGroupVersion, plural, subjectAccessRequestClass); } @Override diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/osgi/ManagedKubernetesClient.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/osgi/ManagedKubernetesClient.java index e2c72533263..9b96ba94d4a 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/osgi/ManagedKubernetesClient.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/osgi/ManagedKubernetesClient.java @@ -72,6 +72,8 @@ import io.fabric8.kubernetes.api.model.apiextensions.v1beta1.CustomResourceDefinition; import io.fabric8.kubernetes.api.model.apiextensions.v1beta1.CustomResourceDefinitionList; import io.fabric8.kubernetes.api.model.apiextensions.v1beta1.DoneableCustomResourceDefinition; +import io.fabric8.kubernetes.api.model.authentication.DoneableTokenReview; +import io.fabric8.kubernetes.api.model.authentication.TokenReview; import io.fabric8.kubernetes.api.model.coordination.v1.DoneableLease; import io.fabric8.kubernetes.api.model.coordination.v1.Lease; import io.fabric8.kubernetes.api.model.coordination.v1.LeaseList; @@ -79,6 +81,7 @@ import io.fabric8.kubernetes.client.AdmissionRegistrationAPIGroupDSL; import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.ConfigBuilder; +import io.fabric8.kubernetes.client.CreateOnlyResourceOperations; import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.NamespacedKubernetesClient; import io.fabric8.kubernetes.client.OAuthTokenProvider; @@ -431,6 +434,11 @@ public AuthorizationAPIGroupDSL authorization() { return delegate.authorization(); } + @Override + public CreateOnlyResourceOperations tokenReviews() { + return delegate.tokenReviews(); + } + @Override public , D extends Doneable> MixedOperation> customResources(CustomResourceDefinitionContext crdContext, Class resourceType, Class listClass, Class doneClass) { return delegate.customResources(crdContext, resourceType, listClass, doneClass); diff --git a/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/TokenReviewTest.java b/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/TokenReviewTest.java new file mode 100644 index 00000000000..d32bf05ed30 --- /dev/null +++ b/kubernetes-tests/src/test/java/io/fabric8/kubernetes/client/mock/TokenReviewTest.java @@ -0,0 +1,79 @@ +/** + * Copyright (C) 2015 Red Hat, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.fabric8.kubernetes.client.mock; + +import io.fabric8.kubernetes.api.model.authentication.TokenReview; +import io.fabric8.kubernetes.api.model.authentication.TokenReviewBuilder; +import io.fabric8.kubernetes.api.model.authentication.TokenReviewStatusBuilder; +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.server.mock.KubernetesServer; +import io.fabric8.kubernetes.client.utils.Serialization; +import org.junit.Rule; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.migrationsupport.rules.EnableRuleMigrationSupport; + +import java.net.HttpURLConnection; +import java.nio.charset.Charset; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@EnableRuleMigrationSupport +class TokenReviewTest { + @Rule + public KubernetesServer server = new KubernetesServer(); + + @Test + @DisplayName("Should create TokenReview") + void testCreate() { + // Given + TokenReview tokenReview = new TokenReviewBuilder() + .withNewSpec() + .withToken("eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJhdWQiOlsidmF1bHQiXSwiZXhwIjoxNTUyNjc1") + .endSpec() + .build(); + server.expect().post().withPath("/apis/authentication.k8s.io/v1/tokenreviews") + .andReply(HttpURLConnection.HTTP_OK, recordedRequest -> { + TokenReview tokenReviewReq = Serialization.unmarshal(recordedRequest.getBody().readString(Charset.defaultCharset()), TokenReview.class); + tokenReviewReq.setStatus(new TokenReviewStatusBuilder() + .withAuthenticated(true) + .withNewUser() + .withUsername("system:serviceaccount:dev:http-svc-test") + .withUid("4afdf4d0-46d2-11e9-8716-005056bf4b40") + .withGroups("system:serviceaccounts", "system:serviceaccounts:dev", "system:authenticated") + .endUser() + .addNewAudience("factors") + .build()); + + return tokenReviewReq; + }).once(); + + KubernetesClient client = server.getClient(); + + // When + tokenReview = client.tokenReviews().create(tokenReview); + + // Then + assertNotNull(tokenReview); + assertNotNull(tokenReview.getStatus()); + assertTrue(tokenReview.getStatus().getAuthenticated()); + assertEquals("system:serviceaccount:dev:http-svc-test", tokenReview.getStatus().getUser().getUsername()); + assertEquals("4afdf4d0-46d2-11e9-8716-005056bf4b40", tokenReview.getStatus().getUser().getUid()); + assertEquals(3, tokenReview.getStatus().getUser().getGroups().size()); + } +} diff --git a/openshift-client/src/main/java/io/fabric8/openshift/client/DefaultOpenShiftClient.java b/openshift-client/src/main/java/io/fabric8/openshift/client/DefaultOpenShiftClient.java index 105bad21c15..f46f375daa2 100644 --- a/openshift-client/src/main/java/io/fabric8/openshift/client/DefaultOpenShiftClient.java +++ b/openshift-client/src/main/java/io/fabric8/openshift/client/DefaultOpenShiftClient.java @@ -37,6 +37,8 @@ import io.fabric8.kubernetes.api.model.apiextensions.v1beta1.CustomResourceDefinition; import io.fabric8.kubernetes.api.model.apiextensions.v1beta1.CustomResourceDefinitionList; import io.fabric8.kubernetes.api.model.apiextensions.v1beta1.DoneableCustomResourceDefinition; +import io.fabric8.kubernetes.api.model.authentication.DoneableTokenReview; +import io.fabric8.kubernetes.api.model.authentication.TokenReview; import io.fabric8.kubernetes.api.model.coordination.v1.DoneableLease; import io.fabric8.kubernetes.api.model.coordination.v1.Lease; import io.fabric8.kubernetes.api.model.coordination.v1.LeaseList; @@ -384,6 +386,11 @@ public AuthorizationAPIGroupDSL authorization() { return delegate.authorization(); } + @Override + public CreateOnlyResourceOperations tokenReviews() { + return delegate.tokenReviews(); + } + public RawCustomResourceOperationsImpl customResource(CustomResourceDefinitionContext customResourceDefinition) { return new RawCustomResourceOperationsImpl(httpClient, getConfiguration(), customResourceDefinition); } diff --git a/openshift-client/src/main/java/io/fabric8/openshift/client/osgi/ManagedOpenShiftClient.java b/openshift-client/src/main/java/io/fabric8/openshift/client/osgi/ManagedOpenShiftClient.java index bf259b2d469..50cf30dc485 100644 --- a/openshift-client/src/main/java/io/fabric8/openshift/client/osgi/ManagedOpenShiftClient.java +++ b/openshift-client/src/main/java/io/fabric8/openshift/client/osgi/ManagedOpenShiftClient.java @@ -26,12 +26,15 @@ import io.fabric8.kubernetes.api.model.apiextensions.v1beta1.CustomResourceDefinition; import io.fabric8.kubernetes.api.model.apiextensions.v1beta1.CustomResourceDefinitionList; import io.fabric8.kubernetes.api.model.apiextensions.v1beta1.DoneableCustomResourceDefinition; +import io.fabric8.kubernetes.api.model.authentication.DoneableTokenReview; +import io.fabric8.kubernetes.api.model.authentication.TokenReview; import io.fabric8.kubernetes.api.model.coordination.v1.DoneableLease; import io.fabric8.kubernetes.api.model.coordination.v1.Lease; import io.fabric8.kubernetes.api.model.coordination.v1.LeaseList; import io.fabric8.kubernetes.client.AdmissionRegistrationAPIGroupDSL; import io.fabric8.kubernetes.client.BaseClient; import io.fabric8.kubernetes.client.Config; +import io.fabric8.kubernetes.client.CreateOnlyResourceOperations; import io.fabric8.kubernetes.client.RequestConfig; import io.fabric8.kubernetes.client.VersionInfo; import io.fabric8.kubernetes.client.dsl.*; @@ -429,6 +432,11 @@ public AuthorizationAPIGroupDSL authorization() { return delegate.authorization(); } + @Override + public CreateOnlyResourceOperations tokenReviews() { + return delegate.tokenReviews(); + } + @Override public RawCustomResourceOperationsImpl customResource(CustomResourceDefinitionContext customResourceDefinition) { return delegate.customResource(customResourceDefinition);