All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.arquillian.cube.openshift.impl.feedback.OpenshiftFeedbackProvider Maven / Gradle / Ivy

There is a newer version: 1.18.2
Show newest version
package org.arquillian.cube.openshift.impl.feedback;

import io.fabric8.kubernetes.api.model.v2_5.Endpoints;
import io.fabric8.kubernetes.api.model.v2_5.HasMetadata;
import io.fabric8.kubernetes.api.model.v2_5.Pod;
import io.fabric8.kubernetes.api.model.v2_5.PodList;
import io.fabric8.kubernetes.api.model.v2_5.PodListBuilder;
import io.fabric8.kubernetes.api.model.v2_5.ReplicationController;
import io.fabric8.kubernetes.api.model.v2_5.Service;
import io.fabric8.kubernetes.api.model.v2_5.extensions.Deployment;
import io.fabric8.kubernetes.api.model.v2_5.extensions.ReplicaSet;
import io.fabric8.kubernetes.clnt.v2_5.KubernetesClient;
import io.fabric8.openshift.api.model.v2_5.DeploymentConfig;
import org.arquillian.cube.kubernetes.api.FeedbackProvider;
import org.arquillian.cube.kubernetes.api.Logger;
import org.arquillian.cube.kubernetes.api.WithToImmutable;
import org.arquillian.cube.kubernetes.impl.feedback.DefaultFeedbackProvider;
import org.jboss.arquillian.core.api.Instance;
import org.jboss.arquillian.core.api.annotation.Inject;

public class OpenshiftFeedbackProvider implements FeedbackProvider {

    protected FeedbackProvider delegate;

    @Inject
    protected Instance client;

    @Inject
    protected Instance logger;

    @Override
    public  void onResourceNotReady(T resource) {

    }

    @Override
    public FeedbackProvider toImmutable() {
        if (delegate != null) {
            return delegate;
        }
        synchronized (this) {
            if (delegate == null) {
                delegate = new ImmutableFeedbackProvider(client.get(),
                    logger.get().toImmutable());
            }
        }
        return delegate;
    }

    public static class ImmutableFeedbackProvider extends DefaultFeedbackProvider.ImmutableFeedbackProvider
        implements FeedbackProvider, WithToImmutable {

        public ImmutableFeedbackProvider(KubernetesClient client, Logger logger) {
            super(client, logger);
        }

        public  PodList podsOf(T resource) {
            if (resource instanceof Pod) {
                return new PodListBuilder().withItems((Pod) resource).build();
            } else if (resource instanceof Endpoints) {
                return podsOf(client.services()
                    .inNamespace(resource.getMetadata().getNamespace())
                    .withName(resource.getMetadata().getName())
                    .get());
            } else if (resource instanceof Service) {
                return client.pods()
                    .inNamespace(resource.getMetadata().getNamespace())
                    .withLabels(((Service) resource).getSpec().getSelector())
                    .list();
            } else if (resource instanceof ReplicationController) {
                return client.pods()
                    .inNamespace(resource.getMetadata().getNamespace())
                    .withLabels(((ReplicationController) resource).getSpec().getSelector())
                    .list();
            } else if (resource instanceof ReplicaSet) {
                return findMatching((ReplicaSet) resource);
            } else if (resource instanceof Deployment) {
                return findMatching((Deployment) resource);
            } else if (resource instanceof DeploymentConfig) {
                return client.pods().inNamespace(resource.getMetadata().getName()).withLabel("deploymentconfig",
                    resource.getMetadata().getName()).list();
            } else {
                return new PodListBuilder().build();
            }
        }

        @Override
        public FeedbackProvider toImmutable() {
            return this;
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy