use of com.netflix.spinnaker.halyard.deploy.spinnaker.v1.profile.Profile in project halyard by spinnaker.
the class ClouddriverService method getProfiles.
@Override
public List<Profile> getProfiles(DeploymentConfiguration deploymentConfiguration, SpinnakerRuntimeSettings endpoints) {
List<Profile> profiles = super.getProfiles(deploymentConfiguration, endpoints);
String filename = "clouddriver.yml";
String path = Paths.get(getConfigOutputPath(), filename).toString();
Profile profile = getClouddriverProfileFactory().getProfile(filename, path, deploymentConfiguration, endpoints);
profiles.add(profile);
return profiles;
}
use of com.netflix.spinnaker.halyard.deploy.spinnaker.v1.profile.Profile in project halyard by spinnaker.
the class ConsulClientService method getSidecarProfiles.
@Override
public List<Profile> getSidecarProfiles(GenerateService.ResolvedConfiguration resolvedConfiguration, SpinnakerService service) {
List<Profile> result = new ArrayList<>();
Map<String, Profile> profiles = resolvedConfiguration.getProfilesForService(getType());
Profile profile = profiles.get(consulClientService(service.getCanonicalName()));
result.add(profile);
profile = profiles.get(clientProfileName);
result.add(profile);
return result;
}
use of com.netflix.spinnaker.halyard.deploy.spinnaker.v1.profile.Profile in project halyard by spinnaker.
the class LocalGitService method stageProfilesCommand.
default String stageProfilesCommand(DeploymentDetails details, GenerateService.ResolvedConfiguration resolvedConfiguration) {
Map<String, Profile> profiles = resolvedConfiguration.getProfilesForService(getService().getType());
List<String> allCommands = new ArrayList<>();
for (Map.Entry<String, Profile> entry : profiles.entrySet()) {
Profile profile = entry.getValue();
String source = profile.getStagedFile(getSpinnakerStagingPath(details.getDeploymentName()));
String dest = profile.getOutputFile();
allCommands.add(String.format("mkdir -p $(dirname %s)", dest));
allCommands.add(String.format("cp -p %s %s", source, dest));
if (profile.isExecutable()) {
allCommands.add(String.format("chmod +x %s", dest));
}
}
return Strings.join(allCommands, "\n");
}
use of com.netflix.spinnaker.halyard.deploy.spinnaker.v1.profile.Profile in project halyard by spinnaker.
the class KubernetesV1DistributedService method stageProfiles.
default List<ConfigSource> stageProfiles(AccountDeploymentDetails<KubernetesAccount> details, GenerateService.ResolvedConfiguration resolvedConfiguration) {
SpinnakerService thisService = getService();
ServiceSettings thisServiceSettings = resolvedConfiguration.getServiceSettings(thisService);
SpinnakerRuntimeSettings runtimeSettings = resolvedConfiguration.getRuntimeSettings();
Integer version = getRunningServiceDetails(details, runtimeSettings).getLatestEnabledVersion();
if (version == null) {
version = 0;
} else {
version++;
}
String namespace = getNamespace(thisServiceSettings);
KubernetesV1ProviderUtils.createNamespace(details, namespace);
String name = getServiceName();
Map<String, String> env = new HashMap<>();
List<ConfigSource> configSources = new ArrayList<>();
Map<String, Profile> serviceProfiles = resolvedConfiguration.getProfilesForService(thisService.getType());
Set<String> requiredFiles = new HashSet<>();
for (SidecarService sidecarService : getSidecars(runtimeSettings)) {
for (Profile profile : sidecarService.getSidecarProfiles(resolvedConfiguration, thisService)) {
if (profile == null) {
throw new HalException(Problem.Severity.FATAL, "Service " + sidecarService.getService().getCanonicalName() + " is required but was not supplied for deployment.");
}
serviceProfiles.put(profile.getName(), profile);
requiredFiles.addAll(profile.getRequiredFiles());
}
}
Map<String, Set<Profile>> collapseByDirectory = new HashMap<>();
for (Map.Entry<String, Profile> entry : serviceProfiles.entrySet()) {
Profile profile = entry.getValue();
String mountPoint = Paths.get(profile.getOutputFile()).getParent().toString();
Set<Profile> profiles = collapseByDirectory.getOrDefault(mountPoint, new HashSet<>());
profiles.add(profile);
requiredFiles.addAll(profile.getRequiredFiles());
collapseByDirectory.put(mountPoint, profiles);
}
String stagingPath = getSpinnakerStagingPath(details.getDeploymentName());
if (!requiredFiles.isEmpty()) {
String secretName = KubernetesV1ProviderUtils.componentDependencies(name, version);
String mountPoint = null;
for (String file : requiredFiles) {
String nextMountPoint = Paths.get(file).getParent().toString();
if (mountPoint == null) {
mountPoint = nextMountPoint;
}
assert (mountPoint.equals(nextMountPoint));
}
Set<Pair<File, String>> pairs = requiredFiles.stream().map(f -> {
return new ImmutablePair<>(new File(f), new File(f).getName());
}).collect(Collectors.toSet());
KubernetesV1ProviderUtils.upsertSecret(details, pairs, secretName, namespace);
configSources.add(new ConfigSource().setId(secretName).setMountPath(mountPoint));
}
int ind = 0;
for (Map.Entry<String, Set<Profile>> entry : collapseByDirectory.entrySet()) {
env.clear();
String mountPoint = entry.getKey();
Set<Profile> profiles = entry.getValue();
env.putAll(profiles.stream().reduce(new HashMap<>(), (acc, profile) -> {
acc.putAll(profile.getEnv());
return acc;
}, (a, b) -> {
a.putAll(b);
return a;
}));
String secretName = KubernetesV1ProviderUtils.componentSecret(name + ind, version);
ind += 1;
Set<Pair<File, String>> pairs = profiles.stream().map(p -> {
return new ImmutablePair<>(new File(stagingPath, p.getName()), new File(p.getOutputFile()).getName());
}).collect(Collectors.toSet());
KubernetesV1ProviderUtils.upsertSecret(details, pairs, secretName, namespace);
configSources.add(new ConfigSource().setId(secretName).setMountPath(mountPoint).setEnv(env));
}
return configSources;
}
use of com.netflix.spinnaker.halyard.deploy.spinnaker.v1.profile.Profile in project halyard by spinnaker.
the class KubernetesV2Service method stageConfig.
default List<ConfigSource> stageConfig(AccountDeploymentDetails<KubernetesAccount> details, GenerateService.ResolvedConfiguration resolvedConfiguration) {
Map<String, Profile> profiles = resolvedConfiguration.getProfilesForService(getService().getType());
String stagingPath = getSpinnakerStagingPath(details.getDeploymentName());
Map<String, Set<Profile>> profilesByDirectory = new HashMap<>();
List<String> requiredFiles = new ArrayList<>();
List<ConfigSource> configSources = new ArrayList<>();
String secretNamePrefix = getServiceName() + "-files";
String namespace = getNamespace(resolvedConfiguration.getServiceSettings(getService()));
KubernetesAccount account = details.getAccount();
for (Entry<String, Profile> entry : profiles.entrySet()) {
Profile profile = entry.getValue();
String outputFile = profile.getOutputFile();
String mountPoint = Paths.get(outputFile).getParent().toString();
Set<Profile> profilesInDirectory = profilesByDirectory.getOrDefault(mountPoint, new HashSet<>());
profilesInDirectory.add(profile);
requiredFiles.addAll(profile.getRequiredFiles());
profilesByDirectory.put(mountPoint, profilesInDirectory);
}
for (Entry<String, Set<Profile>> entry : profilesByDirectory.entrySet()) {
Set<Profile> profilesInDirectory = entry.getValue();
String mountPath = entry.getKey();
List<SecretMountPair> files = profilesInDirectory.stream().map(p -> {
File input = new File(p.getStagedFile(stagingPath));
File output = new File(p.getOutputFile());
return new SecretMountPair(input, output);
}).collect(Collectors.toList());
Map<String, String> env = profilesInDirectory.stream().map(Profile::getEnv).map(Map::entrySet).flatMap(Collection::stream).collect(Collectors.toMap(Entry::getKey, Entry::getValue));
String name = KubernetesV2Utils.createSecret(account, namespace, secretNamePrefix, files);
configSources.add(new ConfigSource().setId(name).setMountPath(mountPath).setEnv(env));
}
if (!requiredFiles.isEmpty()) {
List<SecretMountPair> files = requiredFiles.stream().map(File::new).map(SecretMountPair::new).collect(Collectors.toList());
String name = KubernetesV2Utils.createSecret(account, namespace, secretNamePrefix, files);
configSources.add(new ConfigSource().setId(name).setMountPath(files.get(0).getContents().getParent()));
}
return configSources;
}
Aggregations