package org.arquillian.cube.kubernetes.impl;
import io.fabric8.kubernetes.clnt.v2_2.KubernetesClient;
import java.util.concurrent.atomic.AtomicReference;
import org.arquillian.cube.kubernetes.api.AnnotationProvider;
import org.arquillian.cube.kubernetes.api.Configuration;
import org.arquillian.cube.kubernetes.api.DependencyResolver;
import org.arquillian.cube.kubernetes.api.FeedbackProvider;
import org.arquillian.cube.kubernetes.api.KubernetesResourceLocator;
import org.arquillian.cube.kubernetes.api.NamespaceService;
import org.arquillian.cube.kubernetes.api.ResourceInstaller;
import org.arquillian.cube.kubernetes.api.Session;
import org.arquillian.cube.kubernetes.impl.event.AfterStart;
import org.arquillian.cube.kubernetes.impl.event.Start;
import org.arquillian.cube.kubernetes.impl.event.Stop;
import org.jboss.arquillian.core.api.Event;
import org.jboss.arquillian.core.api.Instance;
import org.jboss.arquillian.core.api.annotation.Inject;
import org.jboss.arquillian.core.api.annotation.Observes;
public class SessionManagerLifecycle {
@Inject
Instance<KubernetesClient> kubernetesClient;
@Inject
Instance<Configuration> configuration;
@Inject
Instance<AnnotationProvider> annotationProvider;
@Inject
Instance<NamespaceService> namespaceService;
@Inject
Instance<KubernetesResourceLocator> kubernetesResourceLocator;
@Inject
Instance<DependencyResolver> dependencyResolver;
@Inject
Instance<ResourceInstaller> resourceInstaller;
@Inject
Instance<FeedbackProvider> feedbackProvider;
@Inject
Event<AfterStart> afterStartEvent;
AtomicReference<SessionManager> sessionManagerRef = new AtomicReference<>();
public void start(final @Observes Start event) throws Exception {
Session session = event.getSession();
SessionManager sessionManager = new SessionManager(session, kubernetesClient.get(), configuration.get(),
annotationProvider.get(),
namespaceService.get().toImmutable(),
kubernetesResourceLocator.get().toImmutable(),
dependencyResolver.get().toImmutable(), resourceInstaller.get().toImmutable(),
feedbackProvider.get().toImmutable());
sessionManagerRef.set(sessionManager);
sessionManager.start();
afterStartEvent.fire(new AfterStart(session));
}
public void stop(@Observes Stop event, Configuration configuration) throws Exception {
SessionManager sessionManager = sessionManagerRef.get();
if (sessionManager != null) {
sessionManager.stop();
}
}
}