package com.hubspot.blazar.config; import java.util.Collections; import java.util.Map; import java.util.Set; import javax.validation.Valid; import javax.validation.constraints.NotNull; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.Optional; import io.dropwizard.db.DataSourceFactory; /** * The configuration for Blazar. * All options that control how the BlazarService behaves are configured here. These are wrapped by {@Link BlazarWrapperConfiguration} * so that there is 1 top level key in the dropwizard yaml which contains all the Blazar properties. */ public class BlazarConfiguration { // Defines the deployments of GitHub that Blazar can connect to. @NotNull @JsonProperty("github") private Map<String, GitHubConfiguration> gitHubConfiguration; // The configurations for connecting to the available Singularity clusters // The map key is the name of the cluster and the value the respective configuration. @Valid @NotNull @JsonProperty("singularityClusters") private Map<String, SingularityClusterConfiguration> singularityClusterConfigurations; // Default options we pass to the executor @Valid @NotNull @JsonProperty("executor") private ExecutorConfiguration executorConfiguration = ExecutorConfiguration.defaultConfiguration(); // Configuration for Blazar to connect to Zookeeper // Required for leader election, and for Blazar to enable the buildVisitors (only the master handles build events). @JsonProperty("zookeeper") private Optional<ZooKeeperConfiguration> zooKeeperConfiguration = Optional.absent(); /* The configuration for Blazar's mysql database * database: * driverClass: com.mysql.jdbc.Driver * user: user * password: "password" * url: jdbc:mysql://host:3306/BlazarV2 */ @Valid @NotNull @JsonProperty("database") private DataSourceFactory databaseConfiguration; // Configuration for Blazar's Ui so the backend can correctly generate links to the UI. @Valid @NotNull @JsonProperty("ui") private UiConfiguration uiConfiguration; // Optional Configuration for Slack. // Blazar uses this configuration to send messages to channels and individuals about builds @Valid @JsonProperty("slack_blazar") private Optional<BlazarSlackConfiguration> slackConfiguration = Optional.absent(); // allows you to opt-in whole repositories by name private Set<String> whitelist = Collections.emptySet(); // allows you to opt out whole repositories by name private Set<String> blacklist = Collections.emptySet(); // Controls whether this instance of blazar is configured to only accept webhooks or not. private boolean webhookOnly = false; public Map<String, GitHubConfiguration> getGitHubConfiguration() { return gitHubConfiguration; } public BlazarConfiguration setGitHubConfiguration(Map<String, GitHubConfiguration> gitHubConfiguration) { this.gitHubConfiguration = gitHubConfiguration; return this; } public Map<String, SingularityClusterConfiguration> getSingularityClusterConfigurations() { return singularityClusterConfigurations; } public BlazarConfiguration setSingularityClusterConfigurations(Map<String, SingularityClusterConfiguration> singularityClusterConfigurations) { this.singularityClusterConfigurations = singularityClusterConfigurations; return this; } public ExecutorConfiguration getExecutorConfiguration() { return executorConfiguration; } public BlazarConfiguration setExecutorConfiguration(ExecutorConfiguration executorConfiguration) { this.executorConfiguration = executorConfiguration; return this; } public Optional<ZooKeeperConfiguration> getZooKeeperConfiguration() { return zooKeeperConfiguration; } public BlazarConfiguration setZooKeeperConfiguration(ZooKeeperConfiguration zooKeeperConfiguration) { this.zooKeeperConfiguration = Optional.of(zooKeeperConfiguration); return this; } public DataSourceFactory getDatabaseConfiguration() { return databaseConfiguration; } public BlazarConfiguration setDatabaseConfiguration(DataSourceFactory databaseConfiguration) { this.databaseConfiguration = databaseConfiguration; return this; } public UiConfiguration getUiConfiguration() { return uiConfiguration; } public BlazarConfiguration setUiConfiguration(UiConfiguration uiConfiguration) { this.uiConfiguration = uiConfiguration; return this; } public Optional<BlazarSlackConfiguration> getSlackConfiguration() { return slackConfiguration; } public void setSlackConfiguration(Optional<BlazarSlackConfiguration> slackConfiguration) { this.slackConfiguration = slackConfiguration; } public Set<String> getWhitelist() { return whitelist; } public BlazarConfiguration setWhitelist(Set<String> whitelist) { this.whitelist = whitelist; return this; } public Set<String> getBlacklist() { return blacklist; } public BlazarConfiguration setBlacklist(Set<String> blacklist) { this.blacklist = blacklist; return this; } public boolean isWebhookOnly() { return webhookOnly; } public BlazarConfiguration setWebhookOnly(boolean webhookOnly) { this.webhookOnly = webhookOnly; return this; } }