diff --git a/teamcity-kubernetes-plugin-server/pom.xml b/teamcity-kubernetes-plugin-server/pom.xml index d58bc43..f02c0bc 100644 --- a/teamcity-kubernetes-plugin-server/pom.xml +++ b/teamcity-kubernetes-plugin-server/pom.xml @@ -19,6 +19,7 @@ 4.0.0 4.7.0 + 4.7.0 teamcity-kubernetes-plugin @@ -130,6 +131,18 @@ + + + io.fabric8 + openshift-client + ${openshift-client.version} + + + org.slf4j + * + + + org.jetbrains.kotlin diff --git a/teamcity-kubernetes-plugin-server/src/main/java/jetbrains/buildServer/clouds/kubernetes/auth/KubeAuthStrategyProviderImpl.java b/teamcity-kubernetes-plugin-server/src/main/java/jetbrains/buildServer/clouds/kubernetes/auth/KubeAuthStrategyProviderImpl.java index 099091f..7bfe924 100644 --- a/teamcity-kubernetes-plugin-server/src/main/java/jetbrains/buildServer/clouds/kubernetes/auth/KubeAuthStrategyProviderImpl.java +++ b/teamcity-kubernetes-plugin-server/src/main/java/jetbrains/buildServer/clouds/kubernetes/auth/KubeAuthStrategyProviderImpl.java @@ -33,6 +33,7 @@ public class KubeAuthStrategyProviderImpl implements KubeAuthStrategyProvider { public KubeAuthStrategyProviderImpl(@NotNull TimeService timeService) { registerStrategy(new UserPasswdAuthStrategy()); + registerStrategy(new OpenShiftUserPasswdAuthStrategy()); registerStrategy(new DefaultServiceAccountAuthStrategy()); registerStrategy(new UnauthorizedAccessStrategy()); registerStrategy(new ClientCertificateAuthStrategy()); diff --git a/teamcity-kubernetes-plugin-server/src/main/java/jetbrains/buildServer/clouds/kubernetes/auth/OpenShiftUserPasswdAuthStrategy.java b/teamcity-kubernetes-plugin-server/src/main/java/jetbrains/buildServer/clouds/kubernetes/auth/OpenShiftUserPasswdAuthStrategy.java new file mode 100644 index 0000000..7639be0 --- /dev/null +++ b/teamcity-kubernetes-plugin-server/src/main/java/jetbrains/buildServer/clouds/kubernetes/auth/OpenShiftUserPasswdAuthStrategy.java @@ -0,0 +1,74 @@ +/* + * Copyright 2000-2020 JetBrains s.r.o. + * + * 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 jetbrains.buildServer.clouds.kubernetes.auth; + +import io.fabric8.kubernetes.client.ConfigBuilder; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Map; +import jetbrains.buildServer.clouds.kubernetes.connector.KubeApiConnection; +import jetbrains.buildServer.serverSide.InvalidProperty; +import jetbrains.buildServer.util.StringUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import static jetbrains.buildServer.clouds.kubernetes.KubeParametersConstants.*; + +/** + * Created by ekoshkin (koshkinev@gmail.com) on 14.06.17. + */ +public class OpenShiftUserPasswdAuthStrategy implements KubeAuthStrategy { + public static final String ID = "openshift-user-passwd"; + + @NotNull + @Override + public String getId() { + return ID; + } + + @NotNull + @Override + public String getDisplayName() { + return "OpenShift Username / Password"; + } + + @Nullable + @Override + public String getDescription() { + return "User OpenShift Username and Password authentication"; + } + + @NotNull + @Override + public ConfigBuilder apply(@NotNull ConfigBuilder clientConfig, @NotNull KubeApiConnection connection) { + String username = connection.getCustomParameter(USERNAME); + String password = connection.getCustomParameter(SECURE_PREFIX+PASSWORD); + return clientConfig.withUsername(username).withPassword(password); + } + + @Override + public Collection process(final Map properties) { + Collection retval = new ArrayList<>(); + if (StringUtil.isEmpty(properties.get(USERNAME))){ + retval.add(new InvalidProperty(USERNAME, "Username is required")); + } + if (StringUtil.isEmpty(properties.get(SECURE_PREFIX+ PASSWORD))){ + retval.add(new InvalidProperty(PASSWORD, "Username is required")); + } + return retval; + } +} diff --git a/teamcity-kubernetes-plugin-server/src/main/java/jetbrains/buildServer/clouds/kubernetes/connector/KubeApiConnectorImpl.java b/teamcity-kubernetes-plugin-server/src/main/java/jetbrains/buildServer/clouds/kubernetes/connector/KubeApiConnectorImpl.java index b5a9581..9a65b1a 100644 --- a/teamcity-kubernetes-plugin-server/src/main/java/jetbrains/buildServer/clouds/kubernetes/connector/KubeApiConnectorImpl.java +++ b/teamcity-kubernetes-plugin-server/src/main/java/jetbrains/buildServer/clouds/kubernetes/connector/KubeApiConnectorImpl.java @@ -59,7 +59,15 @@ public KubeApiConnectorImpl(@NotNull String profileId, @NotNull KubeApiConnecti myProfileId = profileId; myConnectionSettings = connectionSettings; myAuthStrategy = authStrategy; - myKubernetesClient = createClient(createConfig(myConnectionSettings, myAuthStrategy)); + if(myAuthStrategy.getId().equalsIgnoreCase("openshift-user-passwd")) { + LOG.info("Creating OpenShift Client for User / Password Authentication"); + myKubernetesClient = createClient(createConfig(myConnectionSettings, myAuthStrategy)).adapt(OpenShiftClient.class); + } + else { + LOG.info("Defaulting to kubernetes client for auth strategy"); + myKubernetesClient = createClient(createConfig(myConnectionSettings, myAuthStrategy)); + } + } @NotNull diff --git a/teamcity-kubernetes-plugin-server/src/main/resources/buildServerResources/editProfile.jsp b/teamcity-kubernetes-plugin-server/src/main/resources/buildServerResources/editProfile.jsp index ca93119..fa27549 100644 --- a/teamcity-kubernetes-plugin-server/src/main/resources/buildServerResources/editProfile.jsp +++ b/teamcity-kubernetes-plugin-server/src/main/resources/buildServerResources/editProfile.jsp @@ -108,6 +108,20 @@ Password of an authorized Kubernetes user + + + + + Username of an authorized Kubernetes user + + + + + + + Password of an authorized Kubernetes user + +