use of io.dekorate.ResourceRegistry in project dekorate by dekorateio.
the class KubernetesSessionListener method onClosed.
@Override
public void onClosed() {
Session session = getSession();
Project project = getProject();
Optional<KubernetesConfig> optionalAppConfig = session.getConfigurationRegistry().get(KubernetesConfig.class);
Optional<ImageConfiguration> optionalImageConfig = session.getConfigurationRegistry().getImageConfig(BuildServiceFactories.supplierMatches(project));
if (!optionalAppConfig.isPresent() || !optionalImageConfig.isPresent()) {
return;
}
KubernetesConfig kubernetesConfig = optionalAppConfig.get();
ResourceRegistry resources = session.getResourceRegistry();
KubernetesList generated = session.getGeneratedResources().getOrDefault(KUBERNETES, new KubernetesList());
BuildService buildService = null;
ImageConfiguration imageConfig = optionalImageConfig.get();
if (imageConfig.isAutoBuildEnabled() || imageConfig.isAutoPushEnabled() || kubernetesConfig.isAutoDeployEnabled()) {
try {
buildService = optionalImageConfig.map(BuildServiceFactories.create(getProject(), generated.getItems())).orElseThrow(() -> new IllegalStateException("No applicable BuildServiceFactory found."));
} catch (Exception e) {
BuildServiceFactories.log(project, session.getConfigurationRegistry().getAll(ImageConfiguration.class));
throw DekorateException.launderThrowable("Failed to lookup BuildService.", e);
}
}
List<ProjectHook> hooks = new ArrayList<>();
if (kubernetesConfig.isAutoDeployEnabled()) {
hooks.add(new ResourcesApplyHook(getProject(), KUBERNETES, "kubectl"));
hooks.add(new ScaleDeploymentHook(getProject(), kubernetesConfig.getName(), 0));
}
if (imageConfig.isAutoPushEnabled()) {
// When deploy is enabled, we scale the Deployment down before push
// then scale it back up once the image has been successfully pushed
// This ensure that the pod runs the proper image
hooks.add(new ImageBuildHook(getProject(), buildService));
hooks.add(new ImagePushHook(getProject(), buildService));
} else if (imageConfig.isAutoBuildEnabled() || kubernetesConfig.isAutoDeployEnabled()) {
hooks.add(new ImageBuildHook(getProject(), buildService));
}
if (kubernetesConfig.isAutoDeployEnabled()) {
hooks.add(new ScaleDeploymentHook(getProject(), kubernetesConfig.getName(), kubernetesConfig.getReplicas()));
}
if (!hooks.isEmpty()) {
OrderedHook hook = OrderedHook.create(hooks.toArray(new ProjectHook[hooks.size()]));
hook.register();
}
}
use of io.dekorate.ResourceRegistry in project dekorate by dekorateio.
the class KubernetesManifestGeneratorTest method shouldAcceptKubernetesConfig.
@Test
public void shouldAcceptKubernetesConfig() {
KubernetesManifestGenerator generator = new KubernetesManifestGenerator(new ResourceRegistry(), new ConfigurationRegistry());
assertTrue(generator.accepts(KubernetesConfig.class));
}
use of io.dekorate.ResourceRegistry in project dekorate by dekorateio.
the class KubernetesManifestGeneratorTest method shouldNotAcceptKubernetesConfigSubclasses.
@Test
public void shouldNotAcceptKubernetesConfigSubclasses() {
KubernetesManifestGenerator generator = new KubernetesManifestGenerator(new ResourceRegistry(), new ConfigurationRegistry());
assertFalse(generator.accepts(KubernetesConfigSubclass.class));
}
use of io.dekorate.ResourceRegistry in project dekorate by dekorateio.
the class KubernetesManifestGeneratorTest method shouldAcceptEditableKubernetesConfig.
@Test
public void shouldAcceptEditableKubernetesConfig() {
KubernetesManifestGenerator generator = new KubernetesManifestGenerator(new ResourceRegistry(), new ConfigurationRegistry());
assertTrue(generator.accepts(EditableKubernetesConfig.class));
}
Aggregations