The Axon Ivy Engine has become highly configurable over time. A big driver for this was the containerization of the platform, which makes it necessary to fully automate the setup and configuration of an Axon Ivy Engine. In the following I would like to show you our way 🚗.
Axon Ivy 7.0 and earlier
Let's take a look back. We take a trip back in time to 2017 when we released Axon Ivy 7.0 on September 29.
The system configurations were mainly in the table IWA_SystemProperty
in the system database. The project configurations in your Axon Ivy projects like Global Variables, Databases, Web Service Clients and Rest Clients among others - mainly in XML format. During deployment these configurations are read and written to the system database. The configurations in the system database have been in charge at runtime.
Problems
- Automating the system configuration was a huge effort. Because you had to have already created the system database (how?), but you had to establish a runtime database connection and fill in the correct values.
- The configuration of the projects was deployed as part of the project - good. But if you update one, should we also update the one in the system database? Which of the values is correct?
Axon Ivy 8.0 solves the container use case
We've introduced the ivy.yaml
for system configuration and the app.yaml
for the configuration of the projects. The ivy.yaml
was the killer ☠for the IWA_SystemProperty
table. With this simple file approach this is all easily automatable. You only need to copy the ivy.yaml
to the correct place.
The app.yaml
follows the same approach. Whereas the deployment never impacts the app.yaml
on the engine. If you change the configuration at runtime, the configuration will never be changed by accident in a deployment. You need to remove this config manually.
But this adds more complexity to the system. A new source of truth has been introduced with the app.yaml
and also a new format for the same configs, which already exists in the project.
Axon Ivy 10.0 makes it all easy now
We've transformed the xml
files in your projects to yaml
files. The format is the same as in the app.yaml
. Easier for you, you can copy from one source to another source. We no longer deploy configurations to the system database. We read now at runtime the configuration directly out of the projects, and you can override the configurations in your app.yaml
. Therefore we do not have another state which may gets out of sync - the state in the system database. The app.yaml
will not be changed in any way during a deployment.
Environments
Keep in mind that you no longer should use environments for new projects: https://community.axonivy.com/d/142-environments-will-disappear-in-the-long-term
Conclusion
It has been a long way to make the engine highly configurable and keep everything as simple as possible for the end users. All things mentioned here are migrated automatically so your update pain should be as small as possible.