Search in sources :

Example 1 with DockerAuthConfig

use of org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfig in project che-server by eclipse-che.

the class ImagePullSecretProvisioner method provision.

@Override
@Traced
public void provision(KubernetesEnvironment k8sEnv, RuntimeIdentity identity) throws InfrastructureException {
    TracingTags.WORKSPACE_ID.set(identity::getWorkspaceId);
    DockerAuthConfigs credentials = credentialsProvider.getCredentials();
    if (credentials == null) {
        return;
    }
    Map<String, DockerAuthConfig> authConfigs = credentials.getConfigs();
    if (authConfigs == null || authConfigs.isEmpty()) {
        return;
    }
    String encodedConfig = Base64.getEncoder().encodeToString(generateDockerCfg(authConfigs).getBytes());
    Secret secret = new SecretBuilder().addToData(".dockercfg", encodedConfig).withType("kubernetes.io/dockercfg").withNewMetadata().withName(identity.getWorkspaceId() + SECRET_NAME_SUFFIX).endMetadata().build();
    k8sEnv.getSecrets().put(secret.getMetadata().getName(), secret);
    k8sEnv.getPodsData().values().forEach(p -> addImagePullSecret(secret.getMetadata().getName(), p.getSpec()));
}
Also used : Secret(io.fabric8.kubernetes.api.model.Secret) SecretBuilder(io.fabric8.kubernetes.api.model.SecretBuilder) DockerAuthConfig(org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfig) DockerAuthConfigs(org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfigs) Traced(org.eclipse.che.commons.annotation.Traced)

Example 2 with DockerAuthConfig

use of org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfig in project che-server by eclipse-che.

the class UserSpecificDockerRegistryCredentialsProviderTest method shouldParseCredentialsFromUserPreferences.

@Test
public void shouldParseCredentialsFromUserPreferences() throws ServerException {
    String base64encodedCredentials = "eyJyZWdpc3RyeS5jb206NTAwMCI6eyJ1c2VybmFtZSI6ImxvZ2luIiwicGFzc3dvcmQiOiJwYXNzIn19";
    setCredentialsIntoPreferences(base64encodedCredentials);
    String registry = "registry.com:5000";
    DockerAuthConfig dockerAuthConfig = DtoFactory.newDto(DockerAuthConfig.class).withUsername("login").withPassword("pass");
    DockerAuthConfigs parsedDockerAuthConfigs = dockerCredentials.getCredentials();
    DockerAuthConfig parsedDockerAuthConfig = parsedDockerAuthConfigs.getConfigs().get(registry);
    assertNotNull(parsedDockerAuthConfig);
    assertEquals(parsedDockerAuthConfig.getUsername(), dockerAuthConfig.getUsername());
    assertEquals(parsedDockerAuthConfig.getPassword(), dockerAuthConfig.getPassword());
}
Also used : DockerAuthConfig(org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfig) DockerAuthConfigs(org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfigs) Test(org.testng.annotations.Test)

Example 3 with DockerAuthConfig

use of org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfig in project che-server by eclipse-che.

the class ImagePullSecretProvisioner method generateDockerCfg.

/**
 * Generates a dockercfg file with the authentication information contained in the given {@code
 * authConfigs} parameter.
 *
 * <p>The syntax of the produced <code>dockercfg</code> file is as follow:
 *
 * <pre><code>
 *   {
 *     "private.repo.1" : {
 *        "username": "theUsername1",
 *        "password": "thePassword1",
 *        "email": "theEmail1",
 *        "auth": "<base64 encoding of username:password>",
 *      },
 *     "private.repo.2" : {
 *        "username": "theUsername2",
 *        "password": "thePassword2",
 *        "email": "theEmail2",
 *        "auth": "<base64 encoding of username:password>",
 *      }
 *   }
 * </code></pre>
 */
private String generateDockerCfg(Map<String, DockerAuthConfig> authConfigs) throws InfrastructureException {
    try (StringWriter strWriter = new StringWriter();
        JsonWriter jsonWriter = new Gson().newJsonWriter(strWriter)) {
        Base64.Encoder encoder = Base64.getEncoder();
        jsonWriter.beginObject();
        for (Map.Entry<String, DockerAuthConfig> entry : authConfigs.entrySet()) {
            String name = entry.getKey();
            DockerAuthConfig dockerAuthConfig = entry.getValue();
            try {
                if (!name.startsWith("https://") && !name.startsWith("http://")) {
                    name = "https://" + name;
                }
                jsonWriter.name(name);
                jsonWriter.beginObject();
                jsonWriter.name("username");
                jsonWriter.value(dockerAuthConfig.getUsername());
                jsonWriter.name("password");
                jsonWriter.value(dockerAuthConfig.getPassword());
                jsonWriter.name("email");
                jsonWriter.value("email@email");
                String auth = dockerAuthConfig.getUsername() + ':' + dockerAuthConfig.getPassword();
                jsonWriter.name("auth");
                jsonWriter.value(encoder.encodeToString(auth.getBytes()));
                jsonWriter.endObject();
            } catch (IOException e) {
                throw new InfrastructureException("Unexpected exception occurred while building the 'ImagePullSecret' from private docker registry user preferences", e);
            }
        }
        jsonWriter.endObject();
        jsonWriter.flush();
        return strWriter.toString();
    } catch (IOException e) {
        throw new InfrastructureException(e);
    }
}
Also used : Base64(java.util.Base64) DockerAuthConfig(org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfig) StringWriter(java.io.StringWriter) Gson(com.google.gson.Gson) IOException(java.io.IOException) JsonWriter(com.google.gson.stream.JsonWriter) Map(java.util.Map) InfrastructureException(org.eclipse.che.api.workspace.server.spi.InfrastructureException)

Example 4 with DockerAuthConfig

use of org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfig in project devspaces-images by redhat-developer.

the class UserSpecificDockerRegistryCredentialsProviderTest method shouldParseCredentialsFromUserPreferences.

@Test
public void shouldParseCredentialsFromUserPreferences() throws ServerException {
    String base64encodedCredentials = "eyJyZWdpc3RyeS5jb206NTAwMCI6eyJ1c2VybmFtZSI6ImxvZ2luIiwicGFzc3dvcmQiOiJwYXNzIn19";
    setCredentialsIntoPreferences(base64encodedCredentials);
    String registry = "registry.com:5000";
    DockerAuthConfig dockerAuthConfig = DtoFactory.newDto(DockerAuthConfig.class).withUsername("login").withPassword("pass");
    DockerAuthConfigs parsedDockerAuthConfigs = dockerCredentials.getCredentials();
    DockerAuthConfig parsedDockerAuthConfig = parsedDockerAuthConfigs.getConfigs().get(registry);
    assertNotNull(parsedDockerAuthConfig);
    assertEquals(parsedDockerAuthConfig.getUsername(), dockerAuthConfig.getUsername());
    assertEquals(parsedDockerAuthConfig.getPassword(), dockerAuthConfig.getPassword());
}
Also used : DockerAuthConfig(org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfig) DockerAuthConfigs(org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfigs) Test(org.testng.annotations.Test)

Example 5 with DockerAuthConfig

use of org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfig in project devspaces-images by redhat-developer.

the class ImagePullSecretProvisioner method provision.

@Override
@Traced
public void provision(KubernetesEnvironment k8sEnv, RuntimeIdentity identity) throws InfrastructureException {
    TracingTags.WORKSPACE_ID.set(identity::getWorkspaceId);
    DockerAuthConfigs credentials = credentialsProvider.getCredentials();
    if (credentials == null) {
        return;
    }
    Map<String, DockerAuthConfig> authConfigs = credentials.getConfigs();
    if (authConfigs == null || authConfigs.isEmpty()) {
        return;
    }
    String encodedConfig = Base64.getEncoder().encodeToString(generateDockerCfg(authConfigs).getBytes());
    Secret secret = new SecretBuilder().addToData(".dockercfg", encodedConfig).withType("kubernetes.io/dockercfg").withNewMetadata().withName(identity.getWorkspaceId() + SECRET_NAME_SUFFIX).endMetadata().build();
    k8sEnv.getSecrets().put(secret.getMetadata().getName(), secret);
    k8sEnv.getPodsData().values().forEach(p -> addImagePullSecret(secret.getMetadata().getName(), p.getSpec()));
}
Also used : Secret(io.fabric8.kubernetes.api.model.Secret) SecretBuilder(io.fabric8.kubernetes.api.model.SecretBuilder) DockerAuthConfig(org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfig) DockerAuthConfigs(org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfigs) Traced(org.eclipse.che.commons.annotation.Traced)

Aggregations

DockerAuthConfig (org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfig)6 DockerAuthConfigs (org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfigs)4 Gson (com.google.gson.Gson)2 JsonWriter (com.google.gson.stream.JsonWriter)2 Secret (io.fabric8.kubernetes.api.model.Secret)2 SecretBuilder (io.fabric8.kubernetes.api.model.SecretBuilder)2 IOException (java.io.IOException)2 StringWriter (java.io.StringWriter)2 Base64 (java.util.Base64)2 Map (java.util.Map)2 InfrastructureException (org.eclipse.che.api.workspace.server.spi.InfrastructureException)2 Traced (org.eclipse.che.commons.annotation.Traced)2 Test (org.testng.annotations.Test)2