@Override public void validate(ConfigProblemSetBuilder p, Provider n) { if (n.isEnabled()) { if (n.getAccounts() == null || n.getAccounts().isEmpty()) { p.addProblem(Problem.Severity.WARNING, "Provider " + n.getNodeName() + " is enabled, but no accounts have been configured."); } } } }
@Override public String getNodeName() { return providerType().getName(); }
public void setEnabled(String deploymentName, String providerName, boolean enabled) { Provider provider = getProvider(deploymentName, providerName); provider.setEnabled(enabled); }
public void addAccount(String deploymentName, String providerName, Account newAccount) { Provider provider = providerService.getProvider(deploymentName, providerName); provider.getAccounts().add(newAccount); }
@Override public void validate(ConfigProblemSetBuilder p, Providers n) { Set<String> accounts = new HashSet<>(); NodeIterator nodeIterator = n.getChildren(); Node child = nodeIterator.getNext(); while (child != null) { Provider provider = (Provider) child; for (Account account : (List<Account>) provider.getAccounts()) { if (accounts.contains(account.getName())) { p.addProblem(Severity.FATAL, "Account \"" + account.getName() + "\" appears more than once") .setRemediation("Change the name of the account in " + provider.getNodeName()); } else { accounts.add(account.getName()); } } child = nodeIterator.getNext(); } } }
@Override protected void setProfile(Profile profile, DeploymentConfiguration deploymentConfiguration, SpinnakerRuntimeSettings endpoints) { super.setProfile(profile, deploymentConfiguration, endpoints); Providers providers = deploymentConfiguration.getProviders(); Providers otherProviders = getImageProviders(profile.getVersion(), deploymentConfiguration.getName()); augmentProvidersBaseImages(providers, otherProviders); List<String> files = backupRequiredFiles(providers, deploymentConfiguration.getName()); Map imageProviders = new TreeMap(); NodeIterator iterator = providers.getChildren(); Provider child = (Provider) iterator.getNext(); while (child != null) { if (child instanceof HasImageProvider && child.isEnabled()) { imageProviders.put(child.getNodeName(), strictObjectMapper.convertValue(child, Map.class)); } child = (Provider) iterator.getNext(); } if (!imageProviders.isEmpty()) { profile.appendContents(yamlParser.dump(imageProviders)); } profile.appendContents(profile.getBaseContents()) .setRequiredFiles(files); }
@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); } } } }
private void augmentProvidersBaseImages(Providers providers, Providers otherProviders) { NodeIterator iterator = providers.getChildren(); Provider child = (Provider) iterator.getNext(); while (child != null) { if (child instanceof HasImageProvider) { NodeIterator otherIterator = otherProviders.getChildren(); NodeFilter providerFilter = new NodeFilter().setProvider(child.getNodeName()); HasImageProvider otherChild = (HasImageProvider) otherIterator.getNext(providerFilter); if (otherChild == null) { log.warn("images.yml has no images stored for " + child.getNodeName()); } else { log.info("Adding default images for " + child.getNodeName()); ((HasImageProvider) child).getBakeryDefaults().addDefaultImages(otherChild.getBakeryDefaults().getBaseImages()); } } child = (Provider) iterator.getNext(); } } }
disableAllProviders(modifiedProviders); bootstrapProvider.setEnabled(true); bootstrapProvider.setAccounts(Collections.singletonList(bootstrapAccount));
@Override public NodeIterator getChildren() { NodeIterator parent = super.getChildren(); final NodeIterator thisIterator = NodeIteratorFactory .makeListIterator(clusters.stream().map(a -> (Node) a).collect(Collectors.toList())); return NodeIteratorFactory.makeAppendNodeIterator(parent, thisIterator); } }
public String getPrimaryAccount() { if (accounts.size() == 0) { primaryAccount = null; } else if (primaryAccount == null || !hasAccount(primaryAccount)) { primaryAccount = accounts.get(0).getName(); } return primaryAccount; }
@Override protected void executeThis() { String providerName = getProviderName(); String currentDeployment = getCurrentDeployment(); Provider provider = new OperationHandler<Provider>() .setFailureMesssage("Failed to get provider " + providerName + ".") .setOperation(Daemon.getProvider(currentDeployment, providerName, false)) .get(); int originalHash = provider.hashCode(); provider = editProvider((P) provider); if (originalHash == provider.hashCode()) { AnsiUi.failure("No changes supplied."); return; } new OperationHandler<Void>() .setFailureMesssage("Failed to edit provider " + providerName + ".") .setSuccessMessage("Successfully edited provider " + providerName + ".") .setOperation(Daemon.setProvider(currentDeployment, providerName, !noValidate, provider)) .get(); }
public void addAccount(String deploymentName, String providerName, Account newAccount) { Provider provider = providerService.getProvider(deploymentName, providerName); provider.getAccounts().add(newAccount); }
@Override public void validate(ConfigProblemSetBuilder p, Providers n) { Set<String> accounts = new HashSet<>(); NodeIterator nodeIterator = n.getChildren(); Node child = nodeIterator.getNext(); while (child != null) { Provider provider = (Provider) child; for (Account account : (List<Account>) provider.getAccounts()) { if (accounts.contains(account.getName())) { p.addProblem(Severity.FATAL, "Account \"" + account.getName() + "\" appears more than once") .setRemediation("Change the name of the account in " + provider.getNodeName()); } else { accounts.add(account.getName()); } } child = nodeIterator.getNext(); } } }
@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); } } } }
private void augmentProvidersBaseImages(Providers providers, Providers otherProviders) { NodeIterator iterator = providers.getChildren(); Provider child = (Provider) iterator.getNext(); while (child != null) { if (child instanceof HasImageProvider) { NodeIterator otherIterator = otherProviders.getChildren(); NodeFilter providerFilter = new NodeFilter().setProvider(child.getNodeName()); HasImageProvider otherChild = (HasImageProvider) otherIterator.getNext(providerFilter); if (otherChild == null) { log.warn("images.yml has no images stored for " + child.getNodeName()); } else { log.info("Adding default images for " + child.getNodeName()); ((HasImageProvider) child).getBakeryDefaults().addDefaultImages(otherChild.getBakeryDefaults().getBaseImages()); } } child = (Provider) iterator.getNext(); } } }
disableAllProviders(modifiedProviders); bootstrapProvider.setEnabled(true); bootstrapProvider.setAccounts(Collections.singletonList(bootstrapAccount));
@Override public NodeIterator getChildren() { NodeIterator parent = super.getChildren(); final NodeIterator thisIterator = NodeIteratorFactory .makeListIterator(clusters.stream().map(a -> (Node) a).collect(Collectors.toList())); return NodeIteratorFactory.makeAppendNodeIterator(parent, thisIterator); } }
public String getPrimaryAccount() { if (accounts.size() == 0) { primaryAccount = null; } else if (primaryAccount == null || !hasAccount(primaryAccount)) { primaryAccount = accounts.get(0).getName(); } return primaryAccount; }
@Override protected void executeThis() { String providerName = getProviderName(); String currentDeployment = getCurrentDeployment(); Provider provider = new OperationHandler<Provider>() .setFailureMesssage("Failed to get provider " + providerName + ".") .setOperation(Daemon.getProvider(currentDeployment, providerName, false)) .get(); int originalHash = provider.hashCode(); provider = editProvider((P) provider); if (originalHash == provider.hashCode()) { AnsiUi.failure("No changes supplied."); return; } new OperationHandler<Void>() .setFailureMesssage("Failed to edit provider " + providerName + ".") .setSuccessMessage("Successfully edited provider " + providerName + ".") .setOperation(Daemon.setProvider(currentDeployment, providerName, !noValidate, provider)) .get(); }