@RequestMapping(value = "/", method = RequestMethod.GET) DaemonTask<Halconfig, List<Account>> accounts(@PathVariable String deploymentName, @PathVariable String providerName, @ModelAttribute ValidationSettings validationSettings) { return GenericGetRequest.<List<Account>>builder() .getter(() -> accountService.getAllAccounts(deploymentName, providerName)) .validator(() -> accountService.validateAllAccounts(deploymentName, providerName)) .description("Get all " + providerName + " accounts") .build() .execute(validationSettings); }
@RequestMapping(value = "/account/{accountName:.+}", method = RequestMethod.GET) DaemonTask<Halconfig, Account> account(@PathVariable String deploymentName, @PathVariable String providerName, @PathVariable String accountName, @ModelAttribute ValidationSettings validationSettings) { return GenericGetRequest.<Account>builder() .getter(() -> accountService.getProviderAccount(deploymentName, providerName, accountName)) .validator(() -> accountService.validateAccount(deploymentName, providerName, accountName)) .description("Get " + accountName + " account") .build() .execute(validationSettings); }
public Account getProviderAccount(String deploymentName, String providerName, String accountName) { NodeFilter filter = new NodeFilter().setDeployment(deploymentName).setProvider(providerName).setAccount(accountName); return getAccount(filter, accountName); }
@RequestMapping(value = "/account/{accountName:.+}", method = RequestMethod.DELETE) DaemonTask<Halconfig, Void> deleteAccount(@PathVariable String deploymentName, @PathVariable String providerName, @PathVariable String accountName, @ModelAttribute ValidationSettings validationSettings) { 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); }
@SuppressWarnings("unchecked") private void removeBootstrapOnlyAccount(Providers providers, String deploymentName, String bootstrapAccountName) { Account bootstrapAccount = accountService.getAnyProviderAccount(deploymentName, bootstrapAccountName); Provider bootstrapProvider = ((Provider) bootstrapAccount.getParent()); bootstrapProvider.getAccounts().remove(bootstrapAccount); if (bootstrapProvider.getAccounts().isEmpty()) { bootstrapProvider.setEnabled(false); if (bootstrapAccount instanceof ContainerAccount) { ContainerAccount containerAccount = (ContainerAccount) bootstrapAccount; DockerRegistryAccountReverseIndex revIndex = new DockerRegistryAccountReverseIndex(providers); containerAccount.getDockerRegistries().forEach(reg -> { Set<Account> dependentAccounts = revIndex.get(reg.getAccountName()); if (dependentAccounts == null || dependentAccounts.isEmpty()) { DockerRegistryAccount regAcct = (DockerRegistryAccount) accountService.getAnyProviderAccount(deploymentName, reg.getAccountName()); ((DockerRegistryProvider) regAcct.getParent()).getAccounts().remove(regAcct); } }); if (providers.getDockerRegistry().getAccounts().isEmpty()) { providers.getDockerRegistry().setEnabled(false); } } } }
String bootstrapAccountName = deploymentEnvironment.getAccountName(); Account bootstrapAccount = accountService.getAnyProviderAccount(deploymentName, bootstrapAccountName); bootstrapAccount.makeBootstrappingAccount(artifactSourcesConfig); .map(ref -> (DockerRegistryAccount) accountService.getProviderAccount(deploymentName, DOCKER_REGISTRY, ref.getAccountName())) .collect(Collectors.toList());
@Override public void validate(ConfigProblemSetBuilder p, EcsAccount n) { p.addProblem(Severity.WARNING, "This only validates that a corresponding AWS account has been " + "created for your ECS account."); String ecsAwsAccount = n.getAwsAccount(); List<Account> accounts = accountService.getAllAccounts(configService.getCurrentDeployment(), "aws"); Optional<Account> account = accounts.stream().filter(act -> act.getName().equals(ecsAwsAccount)).findAny(); if (!account.isPresent()) { p.addProblem(Severity.ERROR, "No AWS Account found matching " + ecsAwsAccount); } }
bindings.put("openstack.default.account", openstackProvider.getPrimaryAccount()); if (openstackProvider.getPrimaryAccount() != null) { OpenstackAccount openstackAccount = (OpenstackAccount) accountService.getProviderAccount(deploymentConfiguration.getName(), "openstack", openstackProvider.getPrimaryAccount()); String firstRegion = openstackAccount.getRegions().get(0); bindings.put("openstack.default.region", firstRegion); bindings.put("aws.default.account", awsProvider.getPrimaryAccount()); if (awsProvider.getPrimaryAccount() != null) { AwsAccount awsAccount = (AwsAccount) accountService.getProviderAccount(deploymentConfiguration.getName(), "aws", awsProvider.getPrimaryAccount()); List<AwsProvider.AwsRegion> regionList = awsAccount.getRegions(); if (!regionList.isEmpty() && regionList.get(0) != null) {
@RequestMapping(value = "/options", method = RequestMethod.POST) DaemonTask<Halconfig, List<String>> newAccountOptions(@PathVariable String deploymentName, @PathVariable String providerName, @ModelAttribute ValidationSettings validationSettings, @RequestBody DaemonOptions rawAccountOptions) { String fieldName = rawAccountOptions.getField(); Account account = objectMapper.convertValue( rawAccountOptions.getResource(), Providers.translateAccountType(providerName) ); DaemonResponse.UpdateOptionsRequestBuilder builder = new DaemonResponse.UpdateOptionsRequestBuilder(); String accountName = account.getName(); builder.setUpdate(() -> accountService.addAccount(deploymentName, providerName, account)); builder.setFieldOptionsResponse(() -> accountService .getAccountOptions(deploymentName, providerName, accountName, fieldName)); builder.setSeverity(validationSettings.getSeverity()); return DaemonTaskHandler.submitTask(builder::build, "Get " + fieldName + " options"); }
@RequestMapping(value = "/", method = RequestMethod.POST) DaemonTask<Halconfig, Void> addAccount(@PathVariable String deploymentName, @PathVariable String providerName, @ModelAttribute ValidationSettings validationSettings, @RequestBody Object rawAccount) { Account account = objectMapper.convertValue( rawAccount, Providers.translateAccountType(providerName) ); 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); } }
@RequestMapping(value = "/account/{accountName:.+}/options", method = RequestMethod.PUT) DaemonTask<Halconfig, List<String>> existingAccountOptions(@PathVariable String deploymentName, @PathVariable String providerName, @PathVariable String accountName, @ModelAttribute ValidationSettings validationSettings, @RequestBody DaemonOptions rawAccountOptions) { String fieldName = rawAccountOptions.getField(); DaemonResponse.StaticOptionsRequestBuilder builder = new DaemonResponse.StaticOptionsRequestBuilder(); builder.setFieldOptionsResponse(() -> accountService .getAccountOptions(deploymentName, providerName, accountName, fieldName)); builder.setSeverity(validationSettings.getSeverity()); return DaemonTaskHandler.submitTask(builder::build, "Get " + fieldName + " options"); }
@SuppressWarnings("unchecked") private void removeBootstrapOnlyAccount(Providers providers, String deploymentName, String bootstrapAccountName) { Account bootstrapAccount = accountService.getAnyProviderAccount(deploymentName, bootstrapAccountName); Provider bootstrapProvider = ((Provider) bootstrapAccount.getParent()); bootstrapProvider.getAccounts().remove(bootstrapAccount); if (bootstrapProvider.getAccounts().isEmpty()) { bootstrapProvider.setEnabled(false); if (bootstrapAccount instanceof ContainerAccount) { ContainerAccount containerAccount = (ContainerAccount) bootstrapAccount; DockerRegistryAccountReverseIndex revIndex = new DockerRegistryAccountReverseIndex(providers); containerAccount.getDockerRegistries().forEach(reg -> { Set<Account> dependentAccounts = revIndex.get(reg.getAccountName()); if (dependentAccounts == null || dependentAccounts.isEmpty()) { DockerRegistryAccount regAcct = (DockerRegistryAccount) accountService.getAnyProviderAccount(deploymentName, reg.getAccountName()); ((DockerRegistryProvider) regAcct.getParent()).getAccounts().remove(regAcct); } }); if (providers.getDockerRegistry().getAccounts().isEmpty()) { providers.getDockerRegistry().setEnabled(false); } } } }
String bootstrapAccountName = deploymentEnvironment.getAccountName(); Account bootstrapAccount = accountService.getAnyProviderAccount(deploymentName, bootstrapAccountName); bootstrapAccount.makeBootstrappingAccount(artifactSourcesConfig); .map(ref -> (DockerRegistryAccount) accountService.getProviderAccount(deploymentName, DOCKER_REGISTRY, ref.getAccountName())) .collect(Collectors.toList());
@Override public void validate(ConfigProblemSetBuilder p, EcsAccount n) { p.addProblem(Severity.WARNING, "This only validates that a corresponding AWS account has been " + "created for your ECS account."); String ecsAwsAccount = n.getAwsAccount(); List<Account> accounts = accountService.getAllAccounts(configService.getCurrentDeployment(), "aws"); Optional<Account> account = accounts.stream().filter(act -> act.getName().equals(ecsAwsAccount)).findAny(); if (!account.isPresent()) { p.addProblem(Severity.ERROR, "No AWS Account found matching " + ecsAwsAccount); } }
bindings.put("openstack.default.account", openstackProvider.getPrimaryAccount()); if (openstackProvider.getPrimaryAccount() != null) { OpenstackAccount openstackAccount = (OpenstackAccount) accountService.getProviderAccount(deploymentConfiguration.getName(), "openstack", openstackProvider.getPrimaryAccount()); String firstRegion = openstackAccount.getRegions().get(0); bindings.put("openstack.default.region", firstRegion); bindings.put("aws.default.account", awsProvider.getPrimaryAccount()); if (awsProvider.getPrimaryAccount() != null) { AwsAccount awsAccount = (AwsAccount) accountService.getProviderAccount(deploymentConfiguration.getName(), "aws", awsProvider.getPrimaryAccount()); AwsProvider.AwsRegion firstRegion = awsAccount.getRegions().get(0); if (firstRegion != null) {
private Deployer getDeployer(DeploymentConfiguration deploymentConfiguration) { DeploymentEnvironment deploymentEnvironment = deploymentConfiguration.getDeploymentEnvironment(); DeploymentEnvironment.DeploymentType type = deploymentEnvironment.getType(); String accountName = deploymentEnvironment.getAccountName(); switch (type) { case BakeDebian: return bakeDeployer; case LocalGit: return localGitDeployer; case LocalDebian: return localDeployer; case Distributed: if (StringUtils.isEmpty(accountName)) { throw new HalException(Problem.Severity.FATAL, "An account name must be " + "specified as the desired place to run your distributed deployment."); } Account account = accountService.getAnyProviderAccount(deploymentConfiguration.getName(), accountName); Provider.ProviderType providerType = ((Provider) account.getParent()).providerType(); if (providerType == Provider.ProviderType.KUBERNETES && account.getProviderVersion() == V2) { return kubectlDeployer; } else { return distributedDeployer; } default: throw new IllegalArgumentException("Unrecognized deployment type " + type); } }
public Account getAnyProviderAccount(String deploymentName, String accountName) { NodeFilter filter = new NodeFilter().setDeployment(deploymentName).withAnyProvider().setAccount(accountName); return getAccount(filter, accountName); }
private Deployer getDeployer(DeploymentConfiguration deploymentConfiguration) { DeploymentEnvironment deploymentEnvironment = deploymentConfiguration.getDeploymentEnvironment(); DeploymentEnvironment.DeploymentType type = deploymentEnvironment.getType(); String accountName = deploymentEnvironment.getAccountName(); switch (type) { case BakeDebian: return bakeDeployer; case LocalGit: return localGitDeployer; case LocalDebian: return localDeployer; case Distributed: if (StringUtils.isEmpty(accountName)) { throw new HalException(Problem.Severity.FATAL, "An account name must be " + "specified as the desired place to run your distributed deployment."); } Account account = accountService.getAnyProviderAccount(deploymentConfiguration.getName(), accountName); Provider.ProviderType providerType = ((Provider) account.getParent()).providerType(); if (providerType == Provider.ProviderType.KUBERNETES && account.getProviderVersion() == V2) { return kubectlDeployer; } else { return distributedDeployer; } default: throw new IllegalArgumentException("Unrecognized deployment type " + type); } }
public Account getProviderAccount(String deploymentName, String providerName, String accountName) { NodeFilter filter = new NodeFilter().setDeployment(deploymentName).setProvider(providerName).setAccount(accountName); return getAccount(filter, accountName); }
private SpinnakerServiceProvider createDeployableServiceProvider(DeploymentConfiguration deploymentConfiguration) { DeploymentEnvironment deploymentEnvironment = deploymentConfiguration.getDeploymentEnvironment(); String accountName = deploymentEnvironment.getAccountName(); if (accountName == null || accountName.isEmpty()) { throw new HalException(new ConfigProblemBuilder(Problem.Severity.FATAL, "An account name must be " + "specified as the desired place to run your simple clustered deployment.").build()); } Account account = accountService.getAnyProviderAccount(deploymentConfiguration.getName(), accountName); Provider.ProviderType providerType = ((Provider) account.getParent()).providerType(); switch (providerType) { case KUBERNETES: switch (account.getProviderVersion()) { case V1: return kubernetesV1DistributedServiceProvider; case V2: return kubectlServiceProvider; default: return kubernetesV1DistributedServiceProvider; } case GOOGLE: return googleDistributedServiceProvider; default: throw new IllegalArgumentException("No Clustered Simple Deployment for " + providerType.getName()); } } }