use of io.dekorate.kubernetes.config.KubernetesConfig in project quarkus by quarkusio.
the class MinikubeManifestGenerator method generate.
public void generate(KubernetesConfig config) {
ImageConfiguration imageConfig = getImageConfiguration(getProject(), config, configurationRegistry);
Optional<Deployment> existingDeployment = resourceRegistry.groups().getOrDefault(MINIKUBE, new KubernetesListBuilder()).buildItems().stream().filter(i -> i instanceof Deployment).map(i -> (Deployment) i).filter(i -> i.getMetadata().getName().equals(config.getName())).findAny();
if (!existingDeployment.isPresent()) {
resourceRegistry.add(MINIKUBE, createDeployment(config, imageConfig));
}
addDecorators(MINIKUBE, config);
if (config.isHeadless()) {
resourceRegistry.decorate(MINIKUBE, new ApplyHeadlessDecorator(config.getName()));
}
if (config.getReplicas() != 1) {
resourceRegistry.decorate(MINIKUBE, new ApplyReplicasToDeploymentDecorator(config.getName(), config.getReplicas()));
resourceRegistry.decorate(MINIKUBE, new ApplyReplicasToStatefulSetDecorator(config.getName(), config.getReplicas()));
}
String image = Strings.isNotNullOrEmpty(imageConfig.getImage()) ? imageConfig.getImage() : Images.getImage(imageConfig.isAutoPushEnabled() ? (Strings.isNullOrEmpty(imageConfig.getRegistry()) ? DEFAULT_REGISTRY : imageConfig.getRegistry()) : imageConfig.getRegistry(), imageConfig.getGroup(), imageConfig.getName(), imageConfig.getVersion());
resourceRegistry.decorate(MINIKUBE, new ApplyImageDecorator(config.getName(), image));
}
use of io.dekorate.kubernetes.config.KubernetesConfig 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.kubernetes.config.KubernetesConfig in project dekorate by dekorateio.
the class KubernetesManifestGenerator method generate.
public void generate(KubernetesConfig config) {
LOGGER.info("Processing kubernetes configuration.");
ImageConfiguration imageConfig = getImageConfiguration(getProject(), config, configurationRegistry);
Optional<Deployment> existingDeployment = resourceRegistry.groups().getOrDefault(KUBERNETES, new KubernetesListBuilder()).buildItems().stream().filter(i -> i instanceof Deployment).map(i -> (Deployment) i).filter(i -> i.getMetadata().getName().equals(config.getName())).findAny();
if (!existingDeployment.isPresent()) {
resourceRegistry.add(KUBERNETES, createDeployment(config, imageConfig));
}
addDecorators(KUBERNETES, config);
}
use of io.dekorate.kubernetes.config.KubernetesConfig in project dekorate by dekorateio.
the class KubernetesConfigAdapterTest method testKubernetesAppWithPorts.
@Test
public void testKubernetesAppWithPorts() {
final Map<String, Object>[] ports = new Map[1];
ports[0] = new HashMap<String, Object>() {
{
put("name", "http");
put("containerPort", 8080);
put("protocol", Protocol.TCP);
}
};
Map<String, Object> map = new HashMap<String, Object>() {
{
put("name", "generator-test");
put("group", "generator-test-group");
put("version", "latest");
put("replicas", 2);
put("ports", ports);
}
};
KubernetesConfig config = KubernetesConfigAdapter.adapt(map);
assertNotNull(config);
assertEquals(1, config.getPorts().length);
assertEquals(8080, config.getPorts()[0].getContainerPort());
}
Aggregations