Search in sources :

Example 6 with Pair

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);
}
Also used : Secret(io.fabric8.kubernetes.api.model.Secret) PrompterException(org.codehaus.plexus.components.interactivity.PrompterException) ConfigMap(io.fabric8.kubernetes.api.model.ConfigMap)

Example 7 with Pair

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;
}
Also used : KubernetesResourceDescription(com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.servergroup.KubernetesResourceDescription) KubernetesUtil(com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.KubernetesUtil) SpinnakerMonitoringDaemonService(com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService) KubernetesAccount(com.netflix.spinnaker.halyard.config.model.v1.providers.kubernetes.KubernetesAccount) LogCollector(com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.LogCollector) HalException(com.netflix.spinnaker.halyard.core.error.v1.HalException) DaemonTaskHandler(com.netflix.spinnaker.halyard.core.tasks.v1.DaemonTaskHandler) SidecarService(com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.SidecarService) Pair(org.apache.commons.lang3.tuple.Pair) Names(com.netflix.frigga.Names) Map(java.util.Map) ContainerStatus(io.fabric8.kubernetes.api.model.ContainerStatus) Provider(com.netflix.spinnaker.halyard.config.model.v1.node.Provider) TypeReference(com.fasterxml.jackson.core.type.TypeReference) SpinnakerService(com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerService) ServiceBuilder(io.fabric8.kubernetes.api.model.ServiceBuilder) Strings(io.fabric8.utils.Strings) DeploymentEnvironment(com.netflix.spinnaker.halyard.config.model.v1.node.DeploymentEnvironment) SecretVolumeSourceBuilder(io.fabric8.kubernetes.api.model.SecretVolumeSourceBuilder) ServiceInterfaceFactory(com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.ServiceInterfaceFactory) KubernetesVolumeMount(com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.servergroup.KubernetesVolumeMount) Set(java.util.Set) KubernetesProbe(com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.servergroup.KubernetesProbe) GenerateService(com.netflix.spinnaker.halyard.deploy.services.v1.GenerateService) VolumeBuilder(io.fabric8.kubernetes.api.model.VolumeBuilder) Collectors(java.util.stream.Collectors) List(java.util.List) KubernetesVolumeSource(com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.servergroup.KubernetesVolumeSource) SocketUtils(org.springframework.util.SocketUtils) Problem(com.netflix.spinnaker.halyard.core.problem.v1.Problem) KubernetesContainerDescription(com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.servergroup.KubernetesContainerDescription) ServiceSettings(com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.ServiceSettings) JobStatus(com.netflix.spinnaker.halyard.core.job.v1.JobStatus) Container(io.fabric8.kubernetes.api.model.Container) DeployKubernetesAtomicOperationDescription(com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.servergroup.DeployKubernetesAtomicOperationDescription) CustomSizing(com.netflix.spinnaker.halyard.config.model.v1.node.CustomSizing) ServicePortBuilder(io.fabric8.kubernetes.api.model.ServicePortBuilder) HashMap(java.util.HashMap) ArtifactService(com.netflix.spinnaker.halyard.deploy.services.v1.ArtifactService) LocalObjectReference(io.fabric8.kubernetes.api.model.LocalObjectReference) RunningServiceDetails(com.netflix.spinnaker.halyard.deploy.spinnaker.v1.RunningServiceDetails) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) KubernetesHandler(com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.servergroup.KubernetesHandler) AccountDeploymentDetails(com.netflix.spinnaker.halyard.deploy.deployment.v1.AccountDeploymentDetails) ReplicaSet(io.fabric8.kubernetes.api.model.extensions.ReplicaSet) JobExecutor(com.netflix.spinnaker.halyard.core.job.v1.JobExecutor) KubernetesImageDescription(com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.servergroup.KubernetesImageDescription) KubernetesContainerPort(com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.servergroup.KubernetesContainerPort) Instance(com.netflix.spinnaker.halyard.deploy.spinnaker.v1.RunningServiceDetails.Instance) KubernetesNamedServicePort(com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.loadbalancer.KubernetesNamedServicePort) Volume(io.fabric8.kubernetes.api.model.Volume) ReplicaSetBuilder(io.fabric8.kubernetes.api.model.extensions.ReplicaSetBuilder) KubernetesLoadBalancerDescription(com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.loadbalancer.KubernetesLoadBalancerDescription) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) KubernetesEnvVar(com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.servergroup.KubernetesEnvVar) KubernetesSecretVolumeSource(com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.servergroup.KubernetesSecretVolumeSource) JobRequest(com.netflix.spinnaker.halyard.core.job.v1.JobRequest) Pod(io.fabric8.kubernetes.api.model.Pod) SpinnakerRuntimeSettings(com.netflix.spinnaker.halyard.deploy.spinnaker.v1.SpinnakerRuntimeSettings) ImmutablePair(org.apache.commons.lang3.tuple.ImmutablePair) File(java.io.File) TimeUnit(java.util.concurrent.TimeUnit) Profile(com.netflix.spinnaker.halyard.deploy.spinnaker.v1.profile.Profile) Paths(java.nio.file.Paths) KubernetesHttpGetAction(com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.servergroup.KubernetesHttpGetAction) KubernetesVolumeSourceType(com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.servergroup.KubernetesVolumeSourceType) KubernetesTcpSocketAction(com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.servergroup.KubernetesTcpSocketAction) DistributedService(com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.DistributedService) KubernetesClient(io.fabric8.kubernetes.client.KubernetesClient) ConfigSource(com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.ConfigSource) Collections(java.util.Collections) KubernetesHandlerType(com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.description.servergroup.KubernetesHandlerType) Set(java.util.Set) HashSet(java.util.HashSet) ReplicaSet(io.fabric8.kubernetes.api.model.extensions.ReplicaSet) HashMap(java.util.HashMap) HalException(com.netflix.spinnaker.halyard.core.error.v1.HalException) ArrayList(java.util.ArrayList) SpinnakerRuntimeSettings(com.netflix.spinnaker.halyard.deploy.spinnaker.v1.SpinnakerRuntimeSettings) Profile(com.netflix.spinnaker.halyard.deploy.spinnaker.v1.profile.Profile) HashSet(java.util.HashSet) Pair(org.apache.commons.lang3.tuple.Pair) ImmutablePair(org.apache.commons.lang3.tuple.ImmutablePair) SidecarService(com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.SidecarService) ServiceSettings(com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.ServiceSettings) SpinnakerService(com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerService) ConfigSource(com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.ConfigSource) Map(java.util.Map) HashMap(java.util.HashMap) File(java.io.File)

Example 8 with Pair

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());
}
Also used : SecretBuilder(io.fabric8.kubernetes.api.model.SecretBuilder) DefaultKubernetesClient(io.fabric8.kubernetes.client.DefaultKubernetesClient) KubernetesClient(io.fabric8.kubernetes.client.KubernetesClient) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HalException(com.netflix.spinnaker.halyard.core.error.v1.HalException) IOException(java.io.IOException) File(java.io.File) FileInputStream(java.io.FileInputStream)

Example 9 with Pair

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();
}
Also used : Probe(io.fabric8.kubernetes.api.model.Probe) Objects(java.util.Objects) List(java.util.List) com.liveperson.ephemerals.deploy.probe(com.liveperson.ephemerals.deploy.probe) Map(java.util.Map) io.fabric8.kubernetes.api.model(io.fabric8.kubernetes.api.model) DEPLOYMENT_LABEL_KEY(com.liveperson.ephemerals.provider.kubernetes.KubernetesDeploymentHandler.DEPLOYMENT_LABEL_KEY) Deployment(com.liveperson.ephemerals.deploy.Deployment) com.liveperson.ephemerals.deploy.volume(com.liveperson.ephemerals.deploy.volume) Collectors(java.util.stream.Collectors) ContainerizedDeploymentUnit(com.liveperson.ephemerals.deploy.unit.ContainerizedDeploymentUnit) Volume(io.fabric8.kubernetes.api.model.Volume) ContainerizedDeploymentUnit(com.liveperson.ephemerals.deploy.unit.ContainerizedDeploymentUnit) Probe(io.fabric8.kubernetes.api.model.Probe) Volume(io.fabric8.kubernetes.api.model.Volume)

Example 10 with Pair

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();
}
Also used : ButtonModel(javax.swing.ButtonModel) HashMap(java.util.HashMap) Map(java.util.Map) RiskLevel(mudmap2.backend.RiskLevel) Pair(mudmap2.utils.Pair)

Aggregations

Pair (mudmap2.utils.Pair)7 Map (java.util.Map)5 Place (mudmap2.backend.Place)4 File (java.io.File)3 HashMap (java.util.HashMap)3 HalException (com.netflix.spinnaker.halyard.core.error.v1.HalException)2 Volume (io.fabric8.kubernetes.api.model.Volume)2 KubernetesClient (io.fabric8.kubernetes.client.KubernetesClient)2 GradientPaint (java.awt.GradientPaint)2 List (java.util.List)2 Collectors (java.util.stream.Collectors)2 Test (org.junit.Test)2 TypeReference (com.fasterxml.jackson.core.type.TypeReference)1 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 Deployment (com.liveperson.ephemerals.deploy.Deployment)1 com.liveperson.ephemerals.deploy.probe (com.liveperson.ephemerals.deploy.probe)1 ContainerizedDeploymentUnit (com.liveperson.ephemerals.deploy.unit.ContainerizedDeploymentUnit)1 com.liveperson.ephemerals.deploy.volume (com.liveperson.ephemerals.deploy.volume)1 DEPLOYMENT_LABEL_KEY (com.liveperson.ephemerals.provider.kubernetes.KubernetesDeploymentHandler.DEPLOYMENT_LABEL_KEY)1 Names (com.netflix.frigga.Names)1