use of io.fabric8.utils.Pair in project fabric8-maven-plugin by fabric8io.
the class ImportMojo method ensureExternalGitSecretsAreSetupFor.
protected void ensureExternalGitSecretsAreSetupFor(KubernetesClient kubernetes, String namespace, String gitRemoteURL) throws MojoExecutionException {
String secretNamespace = getSecretNamespace();
ensureNamespaceExists(kubernetes, secretNamespace);
ConfigMap configMap = getSecretGitConfigMap(kubernetes, namespace, secretNamespace);
String host = GitUtils.getGitHostName(gitRemoteURL);
if (host == null) {
host = "default";
}
String protocol = GitUtils.getGitProtocol(gitRemoteURL);
boolean isSsh = Objects.equal("ssh", protocol);
String currentSecretName = configMap.getData().get(host);
if (currentSecretName == null) {
currentSecretName = createGitSecretName(namespace, host);
}
Secret secret = findOrCreateGitSecret(kubernetes, currentSecretName, host);
if (isSsh) {
// lets see if we need to import ssh keys
Map<String, String> secretData = secret.getData();
if (secretData == null) {
secretData = new HashMap<>();
}
if (!secretData.containsKey(PROPERTY_PRIVATE_KEY) || !secretData.containsKey(PROPERTY_PUBLIC_KEY)) {
String answer = null;
try {
answer = prompter.prompt("Would you like to import your local SSH public/private key pair from your ~/.ssh folder? (Y/n)");
} catch (PrompterException e) {
log.warn("Failed to get prompt: %s", e);
}
if (answer != null && answer.trim().isEmpty() || answer.trim().toUpperCase().startsWith("Y")) {
chooseSshKeyPairs(secretData, host);
secret.setData(secretData);
}
}
} else {
// if empty or retrying lets re-enter the user/pwd
getGogsSecretField(kubernetes, secret, host, "username");
getGogsSecretField(kubernetes, secret, host, "password");
}
createOrUpdateSecret(kubernetes, secret);
updateSecretGitConfigMap(kubernetes, secretNamespace, configMap, host, currentSecretName);
}
use of io.fabric8.utils.Pair 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 io.fabric8.utils.Pair in project halyard by spinnaker.
the class KubernetesV1ProviderUtils method upsertSecret.
static void upsertSecret(AccountDeploymentDetails<KubernetesAccount> details, Set<Pair<File, String>> files, String secretName, String namespace) {
KubernetesClient client = getClient(details);
if (client.secrets().inNamespace(namespace).withName(secretName).get() != null) {
client.secrets().inNamespace(namespace).withName(secretName).delete();
}
Map<String, String> secretContents = new HashMap<>();
files.forEach(pair -> {
try {
File file = pair.getLeft();
String name = pair.getRight();
String data = new String(Base64.getEncoder().encode(IOUtils.toByteArray(new FileInputStream(file))));
secretContents.putIfAbsent(name, data);
} catch (IOException e) {
throw new HalException(Severity.ERROR, "Unable to read contents of \"" + pair.getLeft() + "\": " + e);
}
});
SecretBuilder secretBuilder = new SecretBuilder();
secretBuilder = secretBuilder.withNewMetadata().withName(secretName).withNamespace(namespace).endMetadata().withData(secretContents);
client.secrets().inNamespace(namespace).create(secretBuilder.build());
}
use of io.fabric8.utils.Pair in project ephemerals by LivePersonInc.
the class DefaultKubernetesDeploymentStrategy method pod.
@Override
public PodSpec pod(Deployment deployment) {
PodSpecBuilder podSpec = new PodSpecBuilder();
ContainerizedDeploymentUnit deploymentUnit = (ContainerizedDeploymentUnit) deployment.getDeploymentUnit();
List<ContainerPort> containerPortList = deployment.getDeploymentUnit().getPorts().stream().map(port -> new ContainerPortBuilder().withContainerPort(port.getPort()).withName(port.getName()).build()).collect(Collectors.toList());
Probe healthProbe = null;
Probe readinessProbe = null;
if (deploymentUnit.getHealthProbe() != null) {
healthProbe = DefaultKubernetesDeploymentStrategy.probe(deploymentUnit.getHealthProbe());
}
if (deploymentUnit.getReadinessProbe() != null) {
readinessProbe = DefaultKubernetesDeploymentStrategy.probe(deploymentUnit.getReadinessProbe());
}
ContainerBuilder containerBuilder = new ContainerBuilder();
if (healthProbe != null) {
containerBuilder.withLivenessProbe(healthProbe);
}
if (readinessProbe != null) {
containerBuilder.withReadinessProbe(readinessProbe);
}
Container container = containerBuilder.withName(deployment.getId()).withPorts(containerPortList).withImage(deploymentUnit.getImage()).withEnv(envVars(deploymentUnit.getEnvVars())).withResources(new ResourceRequirementsBuilder().addToLimits("cpu", new QuantityBuilder().withAmount(String.valueOf(deploymentUnit.getCpu() * 1000) + "m").build()).addToLimits("memory", new QuantityBuilder().withAmount(String.valueOf(deploymentUnit.getMem()) + "Mi").build()).build()).build();
container.setVolumeMounts(deploymentUnit.getVolumes().entrySet().stream().map(pair -> new VolumeMountBuilder().withName(pair.getKey().getName()).withMountPath(pair.getKey().getMountPath()).build()).collect(Collectors.toList()));
podSpec.addToContainers(container);
podSpec.withVolumes(deploymentUnit.getVolumes().entrySet().stream().filter(pair -> pair != null).map(pair -> {
Volume volume = volume(pair.getValue());
volume.setName(pair.getKey().getName());
return volume;
}).collect(Collectors.toList()));
return podSpec.build();
}
use of io.fabric8.utils.Pair in project mudmap2 by Neop.
the class EditWorldDialog method save.
/**
* Saves the changes
*/
private void save() throws Exception {
String name = textfield_name.getText();
// if textfield is not empty
if (!name.isEmpty()) {
world.setName(name);
}
// modify risk levels
for (Map.Entry<RiskLevel, Pair<JTextField, ColorChooserButton>> rl_color : risklevel_colors.entrySet()) {
String description = rl_color.getValue().first.getText();
if (description.isEmpty())
world.removeRiskLevel(rl_color.getKey());
else {
rl_color.getKey().setDescription(description);
rl_color.getKey().setColor(rl_color.getValue().second.getColor());
}
}
world.setTileCenterColor(tile_center_color.getColor());
// add new risk level, if name not empty
String name_new = risklevel_new_name.getText();
if (!name_new.isEmpty()) {
world.addRiskLevel(new RiskLevel(name_new, risklevel_new_color.getColor()));
}
ButtonModel selection = buttongroup_place_id.getSelection();
if (selection == radiobutton_place_id_none.getModel())
world.setShowPlaceID(World.ShowPlaceID.NONE);
else if (selection == radiobutton_place_id_all.getModel())
world.setShowPlaceID(World.ShowPlaceID.ALL);
else
world.setShowPlaceID(World.ShowPlaceID.UNIQUE);
getParent().repaint();
}
Aggregations