Skip to content

Commit

Permalink
feat(controllers): Add new generic request handlers (#1119)
Browse files Browse the repository at this point in the history
* feat(controllers): Add new generic request handlers

* refactor(controllers): Refactor controllers to use new handlers
  • Loading branch information
ezimanyi committed Dec 10, 2018
1 parent 4a30e37 commit d28fddd
Show file tree
Hide file tree
Showing 24 changed files with 642 additions and 1,124 deletions.
Expand Up @@ -25,18 +25,16 @@
import com.netflix.spinnaker.halyard.config.services.v1.AccountService;
import com.netflix.spinnaker.halyard.core.DaemonOptions;
import com.netflix.spinnaker.halyard.core.DaemonResponse;
import com.netflix.spinnaker.halyard.core.DaemonResponse.UpdateRequestBuilder;
import com.netflix.spinnaker.halyard.core.problem.v1.ProblemSet;
import com.netflix.spinnaker.halyard.core.tasks.v1.DaemonTask;
import com.netflix.spinnaker.halyard.core.tasks.v1.DaemonTaskHandler;
import com.netflix.spinnaker.halyard.models.v1.ValidationSettings;
import com.netflix.spinnaker.halyard.util.v1.GenericDeleteRequest;
import com.netflix.spinnaker.halyard.util.v1.GenericGetRequest;
import com.netflix.spinnaker.halyard.util.v1.GenericUpdateRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.nio.file.Path;
import java.util.List;
import java.util.function.Supplier;

@RestController
@RequiredArgsConstructor
Expand Down Expand Up @@ -114,24 +112,13 @@ DaemonTask<Halconfig, Void> deleteAccount(@PathVariable String deploymentName,
@PathVariable String providerName,
@PathVariable String accountName,
@ModelAttribute ValidationSettings validationSettings) {
UpdateRequestBuilder builder = new UpdateRequestBuilder();

builder
.setUpdate(() -> accountService.deleteAccount(deploymentName, providerName, accountName));
builder.setSeverity(validationSettings.getSeverity());

Supplier<ProblemSet> doValidate = ProblemSet::new;
if (validationSettings.isValidate()) {
doValidate = () -> accountService.validateAllAccounts(deploymentName, providerName);
}

builder.setValidate(doValidate);
builder.setRevert(() -> halconfigParser.undoChanges());
builder.setSave(() -> halconfigParser.saveConfig());
Path configPath = halconfigDirectoryStructure.getConfigPath(deploymentName);
builder.setClean(() -> halconfigParser.cleanLocalFiles(configPath));

return DaemonTaskHandler.submitTask(builder::build, "Delete the " + accountName + " account");
return GenericDeleteRequest.builder(halconfigParser)
.stagePath(halconfigDirectoryStructure.getStagingPath(deploymentName))
.deleter(() -> accountService.deleteAccount(deploymentName, providerName, accountName))
.validator(() -> accountService.validateAllAccounts(deploymentName, providerName))
.description("Delete the " + accountName + " account")
.build()
.execute(validationSettings);
}

@RequestMapping(value = "/account/{accountName:.+}", method = RequestMethod.PUT)
Expand All @@ -144,27 +131,13 @@ DaemonTask<Halconfig, Void> setAccount(@PathVariable String deploymentName,
rawAccount,
Providers.translateAccountType(providerName)
);

UpdateRequestBuilder builder = new UpdateRequestBuilder();

Path configPath = halconfigDirectoryStructure.getConfigPath(deploymentName);
builder.setStage(() -> account.stageLocalFiles(configPath));
builder.setUpdate(
() -> accountService.setAccount(deploymentName, providerName, accountName, account));
builder.setSeverity(validationSettings.getSeverity());

Supplier<ProblemSet> doValidate = ProblemSet::new;
if (validationSettings.isValidate()) {
doValidate = () -> accountService
.validateAccount(deploymentName, providerName, account.getName());
}

builder.setValidate(doValidate);
builder.setRevert(() -> halconfigParser.undoChanges());
builder.setSave(() -> halconfigParser.saveConfig());
builder.setClean(() -> halconfigParser.cleanLocalFiles(configPath));

return DaemonTaskHandler.submitTask(builder::build, "Edit the " + accountName + " account");
return GenericUpdateRequest.<Account>builder(halconfigParser)
.stagePath(halconfigDirectoryStructure.getStagingPath(deploymentName))
.updater(a -> accountService.setAccount(deploymentName, providerName, accountName, a))
.validator(() -> accountService.validateAccount(deploymentName, providerName, account.getName()))
.description("Edit the " + accountName + " account")
.build()
.execute(validationSettings, account);
}

@RequestMapping(value = "/", method = RequestMethod.POST)
Expand All @@ -176,26 +149,12 @@ DaemonTask<Halconfig, Void> addAccount(@PathVariable String deploymentName,
rawAccount,
Providers.translateAccountType(providerName)
);

UpdateRequestBuilder builder = new UpdateRequestBuilder();

Path configPath = halconfigDirectoryStructure.getConfigPath(deploymentName);
builder.setStage(() -> account.stageLocalFiles(configPath));
builder.setSeverity(validationSettings.getSeverity());
builder.setUpdate(() -> accountService.addAccount(deploymentName, providerName, account));

Supplier<ProblemSet> doValidate = ProblemSet::new;
if (validationSettings.isValidate()) {
doValidate = () -> accountService
.validateAccount(deploymentName, providerName, account.getName());
}

builder.setValidate(doValidate);
builder.setRevert(() -> halconfigParser.undoChanges());
builder.setSave(() -> halconfigParser.saveConfig());
builder.setClean(() -> halconfigParser.cleanLocalFiles(configPath));

return DaemonTaskHandler
.submitTask(builder::build, "Add the " + account.getName() + " account");
return GenericUpdateRequest.<Account>builder(halconfigParser)
.stagePath(halconfigDirectoryStructure.getStagingPath(deploymentName))
.updater(a -> accountService.addAccount(deploymentName, providerName, a))
.validator(() -> accountService.validateAccount(deploymentName, providerName, account.getName()))
.description("Add the " + account.getName() + " account")
.build()
.execute(validationSettings, account);
}
}
Expand Up @@ -25,18 +25,15 @@
import com.netflix.spinnaker.halyard.config.model.v1.node.Artifacts;
import com.netflix.spinnaker.halyard.config.model.v1.node.Halconfig;
import com.netflix.spinnaker.halyard.config.services.v1.ArtifactAccountService;
import com.netflix.spinnaker.halyard.core.DaemonResponse.UpdateRequestBuilder;
import com.netflix.spinnaker.halyard.core.problem.v1.ProblemSet;
import com.netflix.spinnaker.halyard.core.tasks.v1.DaemonTask;
import com.netflix.spinnaker.halyard.core.tasks.v1.DaemonTaskHandler;
import com.netflix.spinnaker.halyard.models.v1.ValidationSettings;
import com.netflix.spinnaker.halyard.util.v1.GenericDeleteRequest;
import com.netflix.spinnaker.halyard.util.v1.GenericGetRequest;
import com.netflix.spinnaker.halyard.util.v1.GenericUpdateRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.nio.file.Path;
import java.util.List;
import java.util.function.Supplier;

@RestController
@RequiredArgsConstructor
Expand Down Expand Up @@ -77,23 +74,13 @@ DaemonTask<Halconfig, Void> deleteArtifactAccount(@PathVariable String deploymen
@PathVariable String providerName,
@PathVariable String accountName,
@ModelAttribute ValidationSettings validationSettings) {
UpdateRequestBuilder builder = new UpdateRequestBuilder();

builder.setUpdate(() -> accountService.deleteArtifactAccount(deploymentName, providerName, accountName));
builder.setSeverity(validationSettings.getSeverity());

Supplier<ProblemSet> doValidate = ProblemSet::new;
if (validationSettings.isValidate()) {
doValidate = () -> accountService.validateAllArtifactAccounts(deploymentName, providerName);
}

builder.setValidate(doValidate);
builder.setRevert(() -> halconfigParser.undoChanges());
builder.setSave(() -> halconfigParser.saveConfig());
Path configPath = halconfigDirectoryStructure.getConfigPath(deploymentName);
builder.setClean(() -> halconfigParser.cleanLocalFiles(configPath));

return DaemonTaskHandler.submitTask(builder::build, "Delete the " + accountName + " artifact account");
return GenericDeleteRequest.builder(halconfigParser)
.stagePath(halconfigDirectoryStructure.getStagingPath(deploymentName))
.deleter(() -> accountService.deleteArtifactAccount(deploymentName, providerName, accountName))
.validator(() -> accountService.validateAllArtifactAccounts(deploymentName, providerName))
.description("Delete the " + accountName + " artifact account")
.build()
.execute(validationSettings);
}

@RequestMapping(value = "/account/{accountName:.+}", method = RequestMethod.PUT)
Expand All @@ -106,25 +93,13 @@ DaemonTask<Halconfig, Void> setArtifactAccount(@PathVariable String deploymentNa
rawArtifactAccount,
Artifacts.translateArtifactAccountType(providerName)
);

UpdateRequestBuilder builder = new UpdateRequestBuilder();

Path configPath = halconfigDirectoryStructure.getConfigPath(deploymentName);
builder.setStage(() -> account.stageLocalFiles(configPath));
builder.setUpdate(() -> accountService.setArtifactAccount(deploymentName, providerName, accountName, account));
builder.setSeverity(validationSettings.getSeverity());

Supplier<ProblemSet> doValidate = ProblemSet::new;
if (validationSettings.isValidate()) {
doValidate = () -> accountService.validateArtifactAccount(deploymentName, providerName, account.getName());
}

builder.setValidate(doValidate);
builder.setRevert(() -> halconfigParser.undoChanges());
builder.setSave(() -> halconfigParser.saveConfig());
builder.setClean(() -> halconfigParser.cleanLocalFiles(configPath));

return DaemonTaskHandler.submitTask(builder::build, "Edit the " + accountName + " artifact account");
return GenericUpdateRequest.<ArtifactAccount>builder(halconfigParser)
.stagePath(halconfigDirectoryStructure.getStagingPath(deploymentName))
.updater(a -> accountService.setArtifactAccount(deploymentName, providerName, accountName, a))
.validator(() -> accountService.validateArtifactAccount(deploymentName, providerName, account.getName()))
.description("Edit the " + accountName + " artifact account")
.build()
.execute(validationSettings, account);
}

@RequestMapping(value = "/", method = RequestMethod.POST)
Expand All @@ -136,24 +111,12 @@ DaemonTask<Halconfig, Void> addArtifactAccount(@PathVariable String deploymentNa
rawArtifactAccount,
Artifacts.translateArtifactAccountType(providerName)
);

UpdateRequestBuilder builder = new UpdateRequestBuilder();

Path configPath = halconfigDirectoryStructure.getConfigPath(deploymentName);
builder.setStage(() -> account.stageLocalFiles(configPath));
builder.setSeverity(validationSettings.getSeverity());
builder.setUpdate(() -> accountService.addArtifactAccount(deploymentName, providerName, account));

Supplier<ProblemSet> doValidate = ProblemSet::new;
if (validationSettings.isValidate()) {
doValidate = () -> accountService.validateArtifactAccount(deploymentName, providerName, account.getName());
}

builder.setValidate(doValidate);
builder.setRevert(() -> halconfigParser.undoChanges());
builder.setSave(() -> halconfigParser.saveConfig());
builder.setClean(() -> halconfigParser.cleanLocalFiles(configPath));

return DaemonTaskHandler.submitTask(builder::build, "Add the " + account.getName() + " artifact account");
return GenericUpdateRequest.<ArtifactAccount>builder(halconfigParser)
.stagePath(halconfigDirectoryStructure.getStagingPath(deploymentName))
.updater(a -> accountService.addArtifactAccount(deploymentName, providerName, a))
.validator(() -> accountService.validateArtifactAccount(deploymentName, providerName, account.getName()))
.description("Add the " + account.getName() + " artifact account")
.build()
.execute(validationSettings, account);
}
}
Expand Up @@ -25,18 +25,15 @@
import com.netflix.spinnaker.halyard.config.model.v1.node.Artifacts;
import com.netflix.spinnaker.halyard.config.model.v1.node.Halconfig;
import com.netflix.spinnaker.halyard.config.services.v1.ArtifactProviderService;
import com.netflix.spinnaker.halyard.core.DaemonResponse.UpdateRequestBuilder;
import com.netflix.spinnaker.halyard.core.problem.v1.ProblemSet;
import com.netflix.spinnaker.halyard.core.tasks.v1.DaemonTask;
import com.netflix.spinnaker.halyard.core.tasks.v1.DaemonTaskHandler;
import com.netflix.spinnaker.halyard.models.v1.ValidationSettings;
import com.netflix.spinnaker.halyard.util.v1.GenericEnableDisableRequest;
import com.netflix.spinnaker.halyard.util.v1.GenericGetRequest;
import com.netflix.spinnaker.halyard.util.v1.GenericUpdateRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.nio.file.Path;
import java.util.List;
import java.util.function.Supplier;

@RestController
@RequiredArgsConstructor
Expand Down Expand Up @@ -68,47 +65,26 @@ DaemonTask<Halconfig, Void> setArtifactProvider(@PathVariable String deploymentN
rawArtifactProvider,
Artifacts.translateArtifactProviderType(providerName)
);

UpdateRequestBuilder builder = new UpdateRequestBuilder();

Path configPath = halconfigDirectoryStructure.getConfigPath(deploymentName);
builder.setStage(() -> provider.stageLocalFiles(configPath));
builder.setUpdate(() -> providerService.setArtifactProvider(deploymentName, provider));
builder.setSeverity(validationSettings.getSeverity());

Supplier<ProblemSet> doValidate = ProblemSet::new;
if (validationSettings.isValidate()) {
doValidate = () -> providerService.validateArtifactProvider(deploymentName, providerName);
}

builder.setValidate(doValidate);
builder.setRevert(() -> halconfigParser.undoChanges());
builder.setSave(() -> halconfigParser.saveConfig());
builder.setClean(() -> halconfigParser.cleanLocalFiles(configPath));

return DaemonTaskHandler.submitTask(builder::build, "Edit the " + providerName + " provider");
return GenericUpdateRequest.<ArtifactProvider>builder(halconfigParser)
.stagePath(halconfigDirectoryStructure.getStagingPath(deploymentName))
.updater(p -> providerService.setArtifactProvider(deploymentName, p))
.validator(() -> providerService.validateArtifactProvider(deploymentName, providerName))
.description("Edit the " + providerName + " provider")
.build()
.execute(validationSettings, provider);
}

@RequestMapping(value = "/{providerName:.+}/enabled", method = RequestMethod.PUT)
DaemonTask<Halconfig, Void> setEnabled(@PathVariable String deploymentName,
@PathVariable String providerName,
@ModelAttribute ValidationSettings validationSettings,
@RequestBody boolean enabled) {
UpdateRequestBuilder builder = new UpdateRequestBuilder();

builder.setUpdate(() -> providerService.setEnabled(deploymentName, providerName, enabled));
builder.setSeverity(validationSettings.getSeverity());

Supplier<ProblemSet> doValidate = ProblemSet::new;
if (validationSettings.isValidate()) {
doValidate = () -> providerService.validateArtifactProvider(deploymentName, providerName);
}

builder.setValidate(doValidate);
builder.setRevert(() -> halconfigParser.undoChanges());
builder.setSave(() -> halconfigParser.saveConfig());

return DaemonTaskHandler.submitTask(builder::build, "Edit the " + providerName + " provider");
return GenericEnableDisableRequest.builder(halconfigParser)
.updater(e -> providerService.setEnabled(deploymentName, providerName, e))
.validator(() -> providerService.validateArtifactProvider(deploymentName, providerName))
.description("Edit the " + providerName + " provider")
.build()
.execute(validationSettings, enabled);
}

@RequestMapping(value = "/", method = RequestMethod.GET)
Expand Down

0 comments on commit d28fddd

Please sign in to comment.