Search in sources :

Example 1 with ImageName

use of org.eclipse.jkube.kit.config.image.ImageName in project jkube by eclipse.

the class RegistryService method pullImageWithPolicy.

/**
 * Check an image, and, if <code>autoPull</code> is set to true, fetch it. Otherwise if the image
 * is not existent, throw an error
 *
 * @param image image
 * @param pullManager image pull manager
 * @param registryConfig registry configuration
 * @param buildConfiguration build configuration
 * @throws IOException exception
 */
public void pullImageWithPolicy(String image, ImagePullManager pullManager, RegistryConfig registryConfig, BuildConfiguration buildConfiguration) throws IOException {
    // Already pulled, so we don't need to take care
    if (pullManager.hasAlreadyPulled(image)) {
        return;
    }
    // Check if a pull is required
    if (!imageRequiresPull(queryService.hasImage(image), pullManager.getImagePullPolicy(), image)) {
        return;
    }
    final ImageName imageName = new ImageName(image);
    final long pullStartTime = System.currentTimeMillis();
    final String actualRegistry = EnvUtil.firstRegistryOf(imageName.getRegistry(), registryConfig.getRegistry());
    final CreateImageOptions createImageOptions = new CreateImageOptions(buildConfiguration.getCreateImageOptions()).fromImage(imageName.getNameWithoutTag(actualRegistry)).tag(imageName.getDigest() != null ? imageName.getDigest() : imageName.getTag());
    docker.pullImage(imageName.getFullName(), createAuthConfig(false, null, actualRegistry, registryConfig), actualRegistry, createImageOptions);
    log.info("Pulled %s in %s", imageName.getFullName(), EnvUtil.formatDurationTill(pullStartTime));
    pullManager.pulled(image);
    if (actualRegistry != null && !imageName.hasRegistry()) {
        // If coming from a registry which was not contained in the original name, add a tag from the
        // full name with the registry to the short name with no-registry.
        docker.tag(imageName.getFullName(actualRegistry), image, false);
    }
}
Also used : ImageName(org.eclipse.jkube.kit.config.image.ImageName) CreateImageOptions(org.eclipse.jkube.kit.build.service.docker.access.CreateImageOptions)

Example 2 with ImageName

use of org.eclipse.jkube.kit.config.image.ImageName in project jkube by eclipse.

the class JibBuildService method prependRegistry.

static ImageConfiguration prependRegistry(ImageConfiguration imageConfiguration, String registry) {
    ImageName imageName = new ImageName(imageConfiguration.getName());
    if (!imageName.hasRegistry() && registry != null) {
        imageConfiguration.setName(registry + "/" + imageConfiguration.getName());
        imageConfiguration.setRegistry(registry);
    }
    return imageConfiguration;
}
Also used : ImageName(org.eclipse.jkube.kit.config.image.ImageName)

Example 3 with ImageName

use of org.eclipse.jkube.kit.config.image.ImageName in project jkube by eclipse.

the class JibBuildService method getRegistryCredentials.

static Credential getRegistryCredentials(RegistryConfig registryConfig, boolean isPush, ImageConfiguration imageConfiguration, KitLogger log) throws IOException {
    String registry;
    if (isPush) {
        registry = EnvUtil.firstRegistryOf(new ImageName(imageConfiguration.getName()).getRegistry(), imageConfiguration.getRegistry(), registryConfig.getRegistry());
    } else {
        registry = EnvUtil.firstRegistryOf(new ImageName(getBaseImage(imageConfiguration)).getRegistry(), registryConfig.getRegistry());
    }
    if (registry == null || DEFAULT_DOCKER_REGISTRIES.contains(registry)) {
        // Let's assume docker is default registry.
        registry = DOCKER_LOGIN_DEFAULT_REGISTRY;
    }
    AuthConfigFactory authConfigFactory = new AuthConfigFactory(log);
    AuthConfig standardAuthConfig = authConfigFactory.createAuthConfig(isPush, registryConfig.isSkipExtendedAuth(), registryConfig.getAuthConfig(), registryConfig.getSettings(), null, registry, registryConfig.getPasswordDecryptionMethod());
    Credential credentials = null;
    if (standardAuthConfig != null) {
        credentials = Credential.from(standardAuthConfig.getUsername(), standardAuthConfig.getPassword());
    }
    return credentials;
}
Also used : ImageName(org.eclipse.jkube.kit.config.image.ImageName) Credential(com.google.cloud.tools.jib.api.Credential) AuthConfigFactory(org.eclipse.jkube.kit.build.service.docker.auth.AuthConfigFactory) AuthConfig(org.eclipse.jkube.kit.build.api.auth.AuthConfig)

Example 4 with ImageName

use of org.eclipse.jkube.kit.config.image.ImageName in project jkube by eclipse.

the class OpenshiftBuildService method checkOrCreatePullSecret.

private boolean checkOrCreatePullSecret(OpenShiftClient client, KubernetesListBuilder builder, String pullSecretName, ImageConfiguration imageConfig) throws Exception {
    BuildConfiguration buildConfig = imageConfig.getBuildConfiguration();
    String fromImage;
    if (buildConfig.isDockerFileMode()) {
        fromImage = extractBaseFromDockerfile(jKubeConfiguration, buildConfig);
    } else {
        fromImage = extractBaseFromConfiguration(buildConfig);
    }
    String pullRegistry = EnvUtil.firstRegistryOf(new ImageName(fromImage).getRegistry(), jKubeConfiguration.getRegistryConfig().getRegistry(), jKubeConfiguration.getRegistryConfig().getRegistry());
    if (pullRegistry != null) {
        RegistryConfig registryConfig = jKubeConfiguration.getRegistryConfig();
        final AuthConfig authConfig = new AuthConfigFactory(log).createAuthConfig(false, registryConfig.isSkipExtendedAuth(), registryConfig.getAuthConfig(), registryConfig.getSettings(), null, pullRegistry, registryConfig.getPasswordDecryptionMethod());
        final Secret secret = Optional.ofNullable(pullSecretName).map(psn -> client.secrets().inNamespace(applicableOpenShiftNamespace).withName(psn).get()).orElse(null);
        if (secret != null) {
            log.info("Adding to Secret %s", pullSecretName);
            return updateSecret(client, pullSecretName, secret.getData());
        }
        if (authConfig != null) {
            JsonObject auths = new JsonObject();
            JsonObject auth = new JsonObject();
            JsonObject item = new JsonObject();
            String authString = authConfig.getUsername() + ":" + authConfig.getPassword();
            item.add("auth", new JsonPrimitive(Base64.encodeBase64String(authString.getBytes(StandardCharsets.UTF_8))));
            auth.add(pullRegistry, item);
            auths.add("auths", auth);
            String credentials = Base64.encodeBase64String(auths.toString().getBytes(StandardCharsets.UTF_8));
            Map<String, String> data = new HashMap<>();
            data.put(".dockerconfigjson", credentials);
            log.info("Creating Secret");
            builder.addNewSecretItem().withNewMetadata().withName(pullSecretName).endMetadata().withData(data).withType("kubernetes.io/dockerconfigjson").endSecretItem();
            return true;
        }
    }
    return false;
}
Also used : BuildConfiguration(org.eclipse.jkube.kit.config.image.build.BuildConfiguration) RegistryConfig(org.eclipse.jkube.kit.common.RegistryConfig) Secret(io.fabric8.kubernetes.api.model.Secret) BuildServiceConfig(org.eclipse.jkube.kit.config.service.BuildServiceConfig) Quantity(io.fabric8.kubernetes.api.model.Quantity) JsonObject(com.google.gson.JsonObject) ImageConfiguration(org.eclipse.jkube.kit.config.image.ImageConfiguration) OpenShiftBuildServiceUtils.createBuildArchive(org.eclipse.jkube.kit.config.service.openshift.OpenShiftBuildServiceUtils.createBuildArchive) Watcher(io.fabric8.kubernetes.client.Watcher) BuildConfigSpec(io.fabric8.openshift.api.model.BuildConfigSpec) AuthConfig(org.eclipse.jkube.kit.build.api.auth.AuthConfig) LogWatch(io.fabric8.kubernetes.client.dsl.LogWatch) Base64(org.apache.commons.codec.binary.Base64) ImageName(org.eclipse.jkube.kit.config.image.ImageName) EnvUtil(org.eclipse.jkube.kit.common.util.EnvUtil) Map(java.util.Map) Status(io.fabric8.kubernetes.api.model.Status) Build(io.fabric8.openshift.api.model.Build) KubernetesClientException(io.fabric8.kubernetes.client.KubernetesClientException) AbstractImageBuildService(org.eclipse.jkube.kit.config.service.AbstractImageBuildService) RegistryConfig(org.eclipse.jkube.kit.common.RegistryConfig) RuntimeMode(org.eclipse.jkube.kit.config.resource.RuntimeMode) ResourceFileType(org.eclipse.jkube.kit.common.ResourceFileType) BuildUtil.extractBaseFromConfiguration(org.eclipse.jkube.kit.build.api.helper.BuildUtil.extractBaseFromConfiguration) BuildStrategy(io.fabric8.openshift.api.model.BuildStrategy) StandardCharsets(java.nio.charset.StandardCharsets) BuildConfigSpecBuilder(io.fabric8.openshift.api.model.BuildConfigSpecBuilder) Objects(java.util.Objects) CountDownLatch(java.util.concurrent.CountDownLatch) List(java.util.List) JKubeServiceHub(org.eclipse.jkube.kit.config.service.JKubeServiceHub) Optional(java.util.Optional) Secret(io.fabric8.kubernetes.api.model.Secret) ClusterConfiguration(org.eclipse.jkube.kit.config.access.ClusterConfiguration) JKubeServiceException(org.eclipse.jkube.kit.config.service.JKubeServiceException) OpenShiftBuildServiceUtils.createBuildOutput(org.eclipse.jkube.kit.config.service.openshift.OpenShiftBuildServiceUtils.createBuildOutput) BuildUtil.extractBaseFromDockerfile(org.eclipse.jkube.kit.build.api.helper.BuildUtil.extractBaseFromDockerfile) OpenShiftBuildServiceUtils.computeS2IBuildName(org.eclipse.jkube.kit.config.service.openshift.OpenShiftBuildServiceUtils.computeS2IBuildName) OpenshiftHelper(org.eclipse.jkube.kit.common.util.OpenshiftHelper) ClusterAccess(org.eclipse.jkube.kit.config.access.ClusterAccess) BuildConfiguration(org.eclipse.jkube.kit.config.image.build.BuildConfiguration) BuildSource(io.fabric8.openshift.api.model.BuildSource) HashMap(java.util.HashMap) Watch(io.fabric8.kubernetes.client.Watch) AtomicReference(java.util.concurrent.atomic.AtomicReference) OpenshiftHelper.isOpenShift(org.eclipse.jkube.kit.common.util.OpenshiftHelper.isOpenShift) WatcherException(io.fabric8.kubernetes.client.WatcherException) JKubeConfiguration(org.eclipse.jkube.kit.common.JKubeConfiguration) AuthConfigFactory(org.eclipse.jkube.kit.build.service.docker.auth.AuthConfigFactory) JsonPrimitive(com.google.gson.JsonPrimitive) KubernetesList(io.fabric8.kubernetes.api.model.KubernetesList) BuildOutput(io.fabric8.openshift.api.model.BuildOutput) KubernetesListBuilder(io.fabric8.kubernetes.api.model.KubernetesListBuilder) ObjectReference(io.fabric8.kubernetes.api.model.ObjectReference) Pod(io.fabric8.kubernetes.api.model.Pod) IOException(java.io.IOException) KubernetesHelper(org.eclipse.jkube.kit.common.util.KubernetesHelper) OpenShiftClient(io.fabric8.openshift.client.OpenShiftClient) File(java.io.File) ImageStreamService.resolveImageStreamName(org.eclipse.jkube.kit.config.service.openshift.ImageStreamService.resolveImageStreamName) TimeUnit(java.util.concurrent.TimeUnit) BuildConfig(io.fabric8.openshift.api.model.BuildConfig) KitLogger(org.eclipse.jkube.kit.common.KitLogger) KubernetesClient(io.fabric8.kubernetes.client.KubernetesClient) ImageStreamBuilder(io.fabric8.openshift.api.model.ImageStreamBuilder) SecretBuilder(io.fabric8.kubernetes.api.model.SecretBuilder) BuildConfigBuilder(io.fabric8.openshift.api.model.BuildConfigBuilder) OpenShiftBuildServiceUtils.createBuildStrategy(org.eclipse.jkube.kit.config.service.openshift.OpenShiftBuildServiceUtils.createBuildStrategy) ImageName(org.eclipse.jkube.kit.config.image.ImageName) JsonPrimitive(com.google.gson.JsonPrimitive) HashMap(java.util.HashMap) AuthConfigFactory(org.eclipse.jkube.kit.build.service.docker.auth.AuthConfigFactory) JsonObject(com.google.gson.JsonObject) AuthConfig(org.eclipse.jkube.kit.build.api.auth.AuthConfig)

Example 5 with ImageName

use of org.eclipse.jkube.kit.config.image.ImageName in project jkube by eclipse.

the class OpenshiftBuildService method updateOrCreateBuildConfig.

protected String updateOrCreateBuildConfig(BuildServiceConfig config, OpenShiftClient client, KubernetesListBuilder builder, ImageConfiguration imageConfig, String openshiftPullSecret) {
    ImageName imageName = new ImageName(imageConfig.getName());
    String buildName = computeS2IBuildName(config, imageName);
    BuildStrategy buildStrategyResource = createBuildStrategy(jKubeServiceHub, imageConfig, openshiftPullSecret);
    BuildOutput buildOutput = createBuildOutput(config, imageName);
    // Fetch existing build config
    BuildConfig buildConfig = client.buildConfigs().inNamespace(applicableOpenShiftNamespace).withName(buildName).get();
    if (buildConfig != null) {
        // lets verify the BC
        BuildConfigSpec spec = OpenShiftBuildServiceUtils.getBuildConfigSpec(buildConfig);
        validateSourceType(buildName, spec);
        if (config.getBuildRecreateMode().isBuildConfig()) {
            // Delete and recreate afresh
            client.buildConfigs().inNamespace(applicableOpenShiftNamespace).withName(buildName).delete();
            return createBuildConfig(builder, buildName, buildStrategyResource, buildOutput);
        } else {
            // Update & return
            return updateBuildConfig(client, buildName, buildStrategyResource, buildOutput, spec);
        }
    } else {
        // Create afresh
        return createBuildConfig(builder, buildName, buildStrategyResource, buildOutput);
    }
}
Also used : ImageName(org.eclipse.jkube.kit.config.image.ImageName) OpenShiftBuildServiceUtils.createBuildOutput(org.eclipse.jkube.kit.config.service.openshift.OpenShiftBuildServiceUtils.createBuildOutput) BuildOutput(io.fabric8.openshift.api.model.BuildOutput) BuildStrategy(io.fabric8.openshift.api.model.BuildStrategy) OpenShiftBuildServiceUtils.createBuildStrategy(org.eclipse.jkube.kit.config.service.openshift.OpenShiftBuildServiceUtils.createBuildStrategy) BuildConfig(io.fabric8.openshift.api.model.BuildConfig) BuildConfigSpec(io.fabric8.openshift.api.model.BuildConfigSpec)

Aggregations

ImageName (org.eclipse.jkube.kit.config.image.ImageName)22 BuildServiceConfig (org.eclipse.jkube.kit.config.service.BuildServiceConfig)6 Test (org.junit.Test)6 IOException (java.io.IOException)5 BuildOutput (io.fabric8.openshift.api.model.BuildOutput)4 OpenShiftBuildServiceUtils.createBuildOutput (org.eclipse.jkube.kit.config.service.openshift.OpenShiftBuildServiceUtils.createBuildOutput)4 AuthConfig (org.eclipse.jkube.kit.build.api.auth.AuthConfig)3 KubernetesListBuilder (io.fabric8.kubernetes.api.model.KubernetesListBuilder)2 KubernetesClientException (io.fabric8.kubernetes.client.KubernetesClientException)2 WatcherException (io.fabric8.kubernetes.client.WatcherException)2 BuildConfig (io.fabric8.openshift.api.model.BuildConfig)2 BuildConfigSpec (io.fabric8.openshift.api.model.BuildConfigSpec)2 BuildStrategy (io.fabric8.openshift.api.model.BuildStrategy)2 OpenShiftClient (io.fabric8.openshift.client.OpenShiftClient)2 File (java.io.File)2 Map (java.util.Map)2 DockerAccessException (org.eclipse.jkube.kit.build.service.docker.access.DockerAccessException)2 AuthConfigFactory (org.eclipse.jkube.kit.build.service.docker.auth.AuthConfigFactory)2 OpenShiftBuildServiceUtils.createBuildStrategy (org.eclipse.jkube.kit.config.service.openshift.OpenShiftBuildServiceUtils.createBuildStrategy)2 JsonProcessingException (com.fasterxml.jackson.core.JsonProcessingException)1