Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ public class SingularityMesosClient implements MesosClient {
public static final String DEFAULT_HTTP_CLIENT_NAME = "mesos.http.client";
public static final String SHORT_TIMEOUT_HTTP_CLIENT_NAME =
"mesos.http.client.short.timeout";
public static final String MESOS_CREDENTIALS = "mesos.http.client.credentials";

private static final Logger LOG = LoggerFactory.getLogger(SingularityMesosClient.class);

Expand All @@ -39,14 +40,17 @@ public class SingularityMesosClient implements MesosClient {

private final HttpClient httpClient;
private final HttpClient shortTimeoutHttpClient;
private final UserAndPassword credentials;

@Inject
public SingularityMesosClient(
@Named(DEFAULT_HTTP_CLIENT_NAME) HttpClient httpClient,
@Named(SHORT_TIMEOUT_HTTP_CLIENT_NAME) HttpClient shortTimeoutHttpClient
@Named(SHORT_TIMEOUT_HTTP_CLIENT_NAME) HttpClient shortTimeoutHttpClient,
@Named(MESOS_CREDENTIALS) UserAndPassword credentials
) {
this.httpClient = httpClient;
this.shortTimeoutHttpClient = shortTimeoutHttpClient;
this.credentials = credentials;
}

@Override
Expand All @@ -68,11 +72,11 @@ private HttpResponse getFromMesos(String uri, boolean useShortTimeout) {
LOG.debug("Fetching {} from mesos", uri);

try {
response =
currentHttpClient.execute(
HttpRequest.newBuilder().setUrl(uri).build(),
new Options()
);
HttpRequest.Builder requestBuilder = HttpRequest.newBuilder().setUrl(uri);
if (credentials.hasCredentials()) {
requestBuilder.addBasicAuth(credentials.getUser(), credentials.getPassword());
}
response = currentHttpClient.execute(requestBuilder.build(), new Options());

LOG.debug(
"Response {} - {} after {}",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,16 @@ public class SingularityMesosClientModule extends AbstractModule {
"singularity.mesos.client.object.mapper";
private static final int MESOS_CLIENT_HTTP_SHORT_TIMEOUT_SECONDS = 5;

private final UserAndPassword credentials;

public SingularityMesosClientModule(UserAndPassword credentials) {
this.credentials = credentials;
}

public SingularityMesosClientModule() {
this.credentials = UserAndPassword.empty();
}

@Override
protected void configure() {
ObjectMapper objectMapper = JavaUtils.newObjectMapper();
Expand All @@ -26,6 +36,9 @@ protected void configure() {
bind(HttpClient.class)
.annotatedWith(Names.named(SingularityMesosClient.DEFAULT_HTTP_CLIENT_NAME))
.toInstance(new NingHttpClient(httpConfigBuilder.build()));
bind(UserAndPassword.class)
.annotatedWith(Names.named(SingularityMesosClient.MESOS_CREDENTIALS))
.toInstance(credentials);

bind(HttpClient.class)
.annotatedWith(Names.named(SingularityMesosClient.SHORT_TIMEOUT_HTTP_CLIENT_NAME))
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.hubspot.mesos.client;

public class UserAndPassword {
private final String user;
private final String password;

public static UserAndPassword empty() {
return new UserAndPassword(null, null);
}

public UserAndPassword(String user, String password) {
this.user = user;
this.password = password;
}

public String getUser() {
return user;
}

public String getPassword() {
return password;
}

public boolean hasCredentials() {
return user != null && password != null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@
import com.google.inject.Singleton;
import com.hubspot.dropwizard.guicier.DropwizardAwareModule;
import com.hubspot.mesos.client.SingularityMesosClientModule;
import com.hubspot.mesos.client.UserAndPassword;
import com.hubspot.singularity.auth.dw.SingularityAuthenticatorClass;
import com.hubspot.singularity.config.IndexViewConfiguration;
import com.hubspot.singularity.config.MesosConfiguration;
import com.hubspot.singularity.config.SingularityConfiguration;
import com.hubspot.singularity.data.SingularityDataModule;
import com.hubspot.singularity.data.history.SingularityDbModule;
Expand Down Expand Up @@ -50,9 +52,25 @@ public void configure(Binder binder) {
binder.install(dbModuleProvider.apply(getConfiguration()));
binder.install(new SingularityMesosModule());
binder.install(new SingularityZkMigrationsModule());
binder.install(new SingularityMesosClientModule());
binder.install(new SingularityJerseyModule());

MesosConfiguration mesosConfiguration = getConfiguration().getMesosConfiguration();
if (
mesosConfiguration.getMesosUsername().isPresent() &&
mesosConfiguration.getMesosPassword().isPresent()
) {
binder.install(
new SingularityMesosClientModule(
new UserAndPassword(
mesosConfiguration.getMesosUsername().get(),
mesosConfiguration.getMesosPassword().get()
)
)
);
} else {
binder.install(new SingularityMesosClientModule());
}

// API Docs
getEnvironment().jersey().register(SingularityOpenApiResource.class);

Expand Down