Skip to content

Commit 19644a3

Browse files
committed
Proxy handling code was not mapping username.
Remove usage of HttpClientUtils.getProxyUrl as it got removed in newer version of kubernetes-client
1 parent 581298f commit 19644a3

File tree

2 files changed

+47
-24
lines changed

2 files changed

+47
-24
lines changed

src/main/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesFactoryAdapter.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
77
import java.util.Base64;
88
import java.util.Collections;
9+
import java.util.HashSet;
10+
import java.util.Set;
911
import java.util.logging.Logger;
1012

1113
import com.cloudbees.plugins.credentials.CredentialsMatchers;
@@ -139,7 +141,7 @@ public KubernetesClient createClient() throws KubernetesAuthException {
139141
}
140142

141143
LOGGER.log(FINE, "Creating Kubernetes client: {0}", this.toString());
142-
// JENKINS-63584 If Jenkins has an configured Proxy and cloud has enabled proxy usage pass the arguments to K8S
144+
// JENKINS-63584 If Jenkins has a configured Proxy and cloud has enabled proxy usage pass the arguments to K8S
143145
LOGGER.log(FINE, "Proxy Settings for Cloud: " + useJenkinsProxy);
144146
if(useJenkinsProxy) {
145147
Jenkins jenkins = Jenkins.getInstanceOrNull();
@@ -150,9 +152,10 @@ public KubernetesClient createClient() throws KubernetesAuthException {
150152
if (p != null) {
151153
builder.withHttpsProxy("http://" + p.name + ":" + p.port);
152154
builder.withHttpProxy("http://" + p.name + ":" + p.port);
153-
if (p.name != null) {
155+
String proxyUserName = p.getUserName();
156+
if (proxyUserName != null) {
154157
String password = getProxyPasswordDecrypted(p);
155-
builder.withProxyUsername(p.name);
158+
builder.withProxyUsername(proxyUserName);
156159
builder.withProxyPassword(password);
157160
}
158161
builder.withNoProxy(getNoProxyHosts(p));
@@ -180,13 +183,11 @@ public KubernetesClient createClient() throws KubernetesAuthException {
180183
* @return the array of no proxy hosts
181184
*/
182185
private String[] getNoProxyHosts(@NonNull ProxyConfiguration proxy) {
183-
String[] noProxyHosts = proxy.getNoProxyHost().split("\n");
184-
int i=0;
185-
while(i<noProxyHosts.length) {
186-
noProxyHosts[i] = noProxyHosts[i].replace("*", "");
187-
i++;
186+
Set<String> noProxyHosts = new HashSet<>();
187+
for (String noProxyHost : proxy.getNoProxyHost().split("\n")) {
188+
noProxyHosts.add(noProxyHost.replace("*", ""));
188189
}
189-
return noProxyHosts;
190+
return noProxyHosts.toArray(new String[0]);
190191
}
191192

192193
private String getProxyPasswordDecrypted(ProxyConfiguration p) {

src/test/java/org/csanchez/jenkins/plugins/kubernetes/KubernetesFactoryAdapterTest.java

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828
import com.cloudbees.plugins.credentials.SystemCredentialsProvider;
2929
import hudson.ProxyConfiguration;
3030
import hudson.util.Secret;
31+
import io.fabric8.kubernetes.client.Config;
3132
import io.fabric8.kubernetes.client.KubernetesClient;
32-
import io.fabric8.kubernetes.client.utils.HttpClientUtils;
3333
import org.jenkinsci.plugins.kubernetes.auth.KubernetesAuthException;
3434
import org.jenkinsci.plugins.plaincredentials.impl.StringCredentialsImpl;
3535
import org.junit.After;
@@ -39,7 +39,6 @@
3939
import org.jvnet.hudson.test.Issue;
4040
import org.jvnet.hudson.test.JenkinsRule;
4141

42-
import java.net.MalformedURLException;
4342
import java.util.HashMap;
4443
import java.util.Map;
4544

@@ -55,8 +54,6 @@
5554
import static org.junit.Assert.assertArrayEquals;
5655
import static org.junit.Assert.assertEquals;
5756
import static org.junit.Assert.assertFalse;
58-
import static org.junit.Assert.assertNotNull;
59-
import static org.junit.Assert.assertNull;
6057
import static org.junit.Assert.assertTrue;
6158

6259
/**
@@ -176,32 +173,57 @@ public void autoConfigWithAuth() throws Exception {
176173

177174
@Test
178175
@Issue("JENKINS-70563")
179-
public void jenkinsProxyConfiguration() throws KubernetesAuthException, MalformedURLException {
176+
public void jenkinsProxyConfiguration() throws KubernetesAuthException {
180177

181178
j.jenkins.setProxy(new ProxyConfiguration("proxy.com", 123, PROXY_USERNAME, PROXY_PASSWORD, "*acme.com\n*acme*.com\n*.example.com|192.168.*"));
182179
KubernetesFactoryAdapter factory = new KubernetesFactoryAdapter("http://acme.com", null, null, null, false, 15, 5, 32, true);
183-
try(KubernetesClient client = factory.createClient()) {
184-
assertNull(HttpClientUtils.getProxyUrl(client.getConfiguration()));
180+
try (KubernetesClient client = factory.createClient()) {
181+
Config configuration = client.getConfiguration();
182+
assertEquals("http://proxy.com:123", configuration.getHttpProxy());
183+
assertEquals(PROXY_USERNAME, configuration.getProxyUsername());
184+
assertEquals(PROXY_PASSWORD, configuration.getProxyPassword());
185+
assertArrayEquals(new String[] {"acme.com", ".example.com|192.168."}, configuration.getNoProxy());
186+
assertEquals("http://proxy.com:123", configuration.getHttpsProxy());
185187
}
186188

187189
j.jenkins.setProxy(new ProxyConfiguration("proxy.com", 123, PROXY_USERNAME, PROXY_PASSWORD, "*acme.com"));
188190
factory = new KubernetesFactoryAdapter("http://acme.com", null, null, null, false, 15, 5, 32, true);
189-
try(KubernetesClient client = factory.createClient()) {
190-
assertNull(HttpClientUtils.getProxyUrl(client.getConfiguration()));
191+
try (KubernetesClient client = factory.createClient()) {
192+
Config configuration = client.getConfiguration();
193+
assertEquals("http://proxy.com:123", configuration.getHttpProxy());
194+
assertEquals(PROXY_USERNAME, configuration.getProxyUsername());
195+
assertEquals(PROXY_PASSWORD, configuration.getProxyPassword());
196+
assertArrayEquals(new String[] {"acme.com"}, configuration.getNoProxy());
197+
assertEquals("http://proxy.com:123", configuration.getHttpsProxy());
191198
}
192199
factory = new KubernetesFactoryAdapter("http://k8s.acme.com", null, null, null, false, 15, 5, 32, true);
193-
try(KubernetesClient client = factory.createClient()) {
194-
assertNull(HttpClientUtils.getProxyUrl(client.getConfiguration()));
200+
try (KubernetesClient client = factory.createClient()) {
201+
Config configuration = client.getConfiguration();
202+
assertEquals("http://proxy.com:123", configuration.getHttpProxy());
203+
assertEquals(PROXY_USERNAME, configuration.getProxyUsername());
204+
assertEquals(PROXY_PASSWORD, configuration.getProxyPassword());
205+
assertArrayEquals(new String[] {"acme.com"}, configuration.getNoProxy());
206+
assertEquals("http://proxy.com:123", configuration.getHttpsProxy());
195207
}
196208

197209
j.jenkins.setProxy(new ProxyConfiguration("proxy.com", 123, PROXY_USERNAME, PROXY_PASSWORD, "*.acme.com"));
198210
factory = new KubernetesFactoryAdapter("http://acme.com", null, null, null, false, 15, 5, 32, true);
199-
try(KubernetesClient client = factory.createClient()) {
200-
assertNotNull(HttpClientUtils.getProxyUrl(client.getConfiguration()));
211+
try (KubernetesClient client = factory.createClient()) {
212+
Config configuration = client.getConfiguration();
213+
assertEquals("http://proxy.com:123", configuration.getHttpProxy());
214+
assertEquals(PROXY_USERNAME, configuration.getProxyUsername());
215+
assertEquals(PROXY_PASSWORD, configuration.getProxyPassword());
216+
assertArrayEquals(new String[] {".acme.com"}, configuration.getNoProxy());
217+
assertEquals("http://proxy.com:123", configuration.getHttpsProxy());
201218
}
202219
factory = new KubernetesFactoryAdapter("http://k8s.acme.com", null, null, null, false, 15, 5, 32, true);
203-
try(KubernetesClient client = factory.createClient()) {
204-
assertNull(HttpClientUtils.getProxyUrl(client.getConfiguration()));
220+
try (KubernetesClient client = factory.createClient()) {
221+
Config configuration = client.getConfiguration();
222+
assertEquals("http://proxy.com:123", configuration.getHttpProxy());
223+
assertEquals(PROXY_USERNAME, configuration.getProxyUsername());
224+
assertEquals(PROXY_PASSWORD, configuration.getProxyPassword());
225+
assertArrayEquals(new String[] {".acme.com"}, configuration.getNoProxy());
226+
assertEquals("http://proxy.com:123", configuration.getHttpsProxy());
205227
}
206228
}
207229
}

0 commit comments

Comments
 (0)