use of com.netflix.spinnaker.halyard.config.model.v1.node.DeploymentEnvironment in project halyard by spinnaker.
the class ClouddriverBootstrapProfileFactory method setProfile.
@Override
@SuppressWarnings("unchecked")
protected void setProfile(Profile profile, DeploymentConfiguration deploymentConfiguration, SpinnakerRuntimeSettings endpoints) {
super.setProfile(profile, deploymentConfiguration, endpoints);
DeploymentEnvironment deploymentEnvironment = deploymentConfiguration.getDeploymentEnvironment();
if (deploymentEnvironment.getType() != DeploymentEnvironment.DeploymentType.Distributed) {
throw new IllegalStateException("There is no need to produce a bootstrapping clouddriver for a non-remote deployment of Spinnaker. This is a bug.");
}
// We need to make modifications to this deployment configuration, but can't use helpful objects
// like the accountService on a clone. Therefore, we'll make the modifications in place and
// restore to the original state when the modifications are written out.
Providers originalProviders = deploymentConfiguration.getProviders().cloneNode(Providers.class);
Providers modifiedProviders = deploymentConfiguration.getProviders();
String deploymentName = deploymentConfiguration.getName();
String bootstrapAccountName = deploymentEnvironment.getAccountName();
Account bootstrapAccount = accountService.getAnyProviderAccount(deploymentName, bootstrapAccountName);
bootstrapAccount.makeBootstrappingAccount(artifactSourcesConfig);
Provider bootstrapProvider = (Provider) bootstrapAccount.getParent();
disableAllProviders(modifiedProviders);
bootstrapProvider.setEnabled(true);
bootstrapProvider.setAccounts(Collections.singletonList(bootstrapAccount));
if (bootstrapAccount instanceof ContainerAccount) {
ContainerAccount containerAccount = (ContainerAccount) bootstrapAccount;
List<DockerRegistryAccount> bootstrapRegistries = containerAccount.getDockerRegistries().stream().map(ref -> (DockerRegistryAccount) accountService.getProviderAccount(deploymentName, DOCKER_REGISTRY, ref.getAccountName())).collect(Collectors.toList());
DockerRegistryProvider dockerProvider = modifiedProviders.getDockerRegistry();
dockerProvider.setEnabled(true);
dockerProvider.setAccounts(bootstrapRegistries);
}
if (bootstrapAccount instanceof SupportsConsul) {
SupportsConsul consulAccount = (SupportsConsul) bootstrapAccount;
ConsulConfig config = consulAccount.getConsul();
if (config == null) {
config = new ConsulConfig();
consulAccount.setConsul(config);
}
consulAccount.getConsul().setEnabled(true);
} else {
log.warn("Attempting to perform a distributed deployment to account \"" + bootstrapAccount.getName() + "\" without a discovery mechanism");
}
List<String> files = backupRequiredFiles(modifiedProviders, deploymentConfiguration.getName());
profile.appendContents(yamlToString(modifiedProviders)).appendContents("services.fiat.enabled: false").appendContents(profile.getBaseContents()).setRequiredFiles(files);
deploymentConfiguration.setProviders(originalProviders);
}
use of com.netflix.spinnaker.halyard.config.model.v1.node.DeploymentEnvironment in project halyard by spinnaker.
the class EditDeploymentEnvironmentCommand method executeThis.
@Override
protected void executeThis() {
String currentDeployment = getCurrentDeployment();
DeploymentEnvironment deploymentEnvironment = new OperationHandler<DeploymentEnvironment>().setFailureMesssage("Failed to get your deployment environment.").setOperation(Daemon.getDeploymentEnvironment(currentDeployment, false)).get();
int originalHash = deploymentEnvironment.hashCode();
DeploymentEnvironment.GitConfig gitConfig = deploymentEnvironment.getGitConfig();
if (gitConfig == null) {
gitConfig = new DeploymentEnvironment.GitConfig();
}
gitConfig.setOriginUser(isSet(gitOriginUser) ? gitOriginUser : gitConfig.getOriginUser());
gitConfig.setUpstreamUser(isSet(gitUpstreamUser) ? gitUpstreamUser : gitConfig.getUpstreamUser());
deploymentEnvironment.setGitConfig(gitConfig);
DeploymentEnvironment.Consul consul = deploymentEnvironment.getConsul();
if (consul == null) {
consul = new DeploymentEnvironment.Consul();
}
DeploymentEnvironment.Vault vault = deploymentEnvironment.getVault();
if (vault == null) {
vault = new DeploymentEnvironment.Vault();
}
deploymentEnvironment.setAccountName(isSet(accountName) ? accountName : deploymentEnvironment.getAccountName());
deploymentEnvironment.setBootstrapOnly(isSet(bootstrapOnly) ? bootstrapOnly : deploymentEnvironment.getBootstrapOnly());
deploymentEnvironment.setUpdateVersions(isSet(updateVersions) ? updateVersions : deploymentEnvironment.getUpdateVersions());
deploymentEnvironment.setType(type != null ? type : deploymentEnvironment.getType());
consul.setAddress(isSet(consulAddress) ? consulAddress : consul.getAddress());
consul.setEnabled(isSet(consulEnabled) ? consulEnabled : consul.isEnabled());
deploymentEnvironment.setConsul(consul);
vault.setAddress(isSet(vaultAddress) ? vaultAddress : vault.getAddress());
vault.setEnabled(isSet(vaultEnabled) ? vaultEnabled : vault.isEnabled());
deploymentEnvironment.setVault(vault);
deploymentEnvironment.setLocation(isSet(location) ? location : deploymentEnvironment.getLocation());
if (originalHash == deploymentEnvironment.hashCode()) {
AnsiUi.failure("No changes supplied.");
return;
}
new OperationHandler<Void>().setFailureMesssage("Failed to update your deployment environment.").setSuccessMessage("Successfully updated your deployment environment.").setOperation(Daemon.setDeploymentEnvironment(currentDeployment, !noValidate, deploymentEnvironment)).get();
}
use of com.netflix.spinnaker.halyard.config.model.v1.node.DeploymentEnvironment in project halyard by spinnaker.
the class DeploymentEnvironmentValidator method validateDistributedDeployment.
private void validateDistributedDeployment(ConfigProblemSetBuilder p, DeploymentEnvironment n) {
String accountName = n.getAccountName();
if (StringUtils.isEmpty(accountName)) {
p.addProblem(Problem.Severity.FATAL, "An account name must be specified when using a Distributed deployment.");
return;
}
DeploymentConfiguration deploymentConfiguration = n.parentOfType(DeploymentConfiguration.class);
Account account;
try {
account = accountService.getAnyProviderAccount(deploymentConfiguration.getName(), n.getAccountName());
} catch (ConfigNotFoundException e) {
p.addProblem(Problem.Severity.FATAL, "Account " + accountName + " not defined.");
return;
}
if (account instanceof GoogleAccount) {
p.addProblem(Problem.Severity.WARNING, "Support for distributed deployments on GCE aren't fully supported yet.");
} else if (account instanceof KubernetesAccount) {
kubernetesAccountValidator.ensureKubectlExists(p);
} else {
p.addProblem(Problem.Severity.FATAL, "Account " + accountName + " is not in a provider that supports distributed installation of Spinnaker yet");
}
}
use of com.netflix.spinnaker.halyard.config.model.v1.node.DeploymentEnvironment in project halyard by spinnaker.
the class DeploymentEnvironmentService method getDeploymentEnvironment.
public DeploymentEnvironment getDeploymentEnvironment(String deploymentName) {
NodeFilter filter = new NodeFilter().setDeployment(deploymentName).setDeploymentEnvironment();
List<DeploymentEnvironment> matching = lookupService.getMatchingNodesOfType(filter, DeploymentEnvironment.class);
switch(matching.size()) {
case 0:
DeploymentEnvironment deploymentEnvironment = new DeploymentEnvironment();
setDeploymentEnvironment(deploymentName, deploymentEnvironment);
return deploymentEnvironment;
case 1:
return matching.get(0);
default:
throw new RuntimeException("It shouldn't be possible to have multiple deploymentEnvironment nodes. This is a bug.");
}
}
Aggregations