TL;DR; We are proposing here a new WildFly s2i architecture in order to remove existing pain points we are encountering today when building WildFly application for the cloud.
Uncoupling the WildFly S2i image from WildFly server installations
Today, we are relying on the WildFly s2i builder image to build a WildFly application image. There is a strong coupling inside this image that implies releasing a new image for each new WildFly release. This approach is not flexible. We should be able to build an application image for any WildFly release (even for a locally built SNAPSHOT) without having to wait for the WildFly s2i builder image to be deployed.
In addition, the WildFly server located inside the builder image, enforces a set of configuration API (a set of environment variables) and bash launch scripts. At startup time, a complex CLI script generation that impacts the server startup time is mandatorily executed. Having this level of configurability should be a user choice and not be enforced by the WildFly s2i image.
To solve these pain points, we should remove the server and its configuration aspects from the image. The WildFly s2i image should become a generic image allowing to properly install and execute any provisioned WildFly server. As a developer one should be able in max 2 steps to deploy to the cloud an app. Same for WildFly developers that should deploy a locally built WildFly SNAPSHOT in one step (as done with WildFly Bootable JAR today).
The role of a WildFly s2i builder image should be limited to:
The steps that have been removed from the WildFly s2i build processing are now aggregated inside a single point of configuration inside a new WildFly Maven plugin. This plugin is very similar to the bootable JAR maven plugin. Such a plugin handles Galleon provisioning, user CLI scripts execution, ability to enrich server content and application(s) deployment.
This plugin used in conjunction with the new WildFly s2i image is all what is needed to offer a flexible experience. We gain the flexibility to provision/configure a WildFly instance to answer specific requirements instead of relying on a fixed set of features packaged inside a WildFly s2i builder image.
Adding back existing WildFly s2i configurabilityTo retrieve the WildFly s2i built-in server configurability, we are introducing a WildFly Legacy Cloud Galleon feature-pack to provision a “legacy” server, offering all the capabilities found today in WildFly s2i. This becomes a user choice. By provisioning a vanilla WildFly, you will get a vanilla WildFly behaving properly in the cloud. By provisioning this legacy Galleon pack, one will get the fully featured server found in current S2i image.
NB: In the future we could define a non legacy WildFly cloud galleon feature-pack with some new WildFly cloud specific features.
Unified experience for application “Builder” Cloud images