Software configuration and procedures, practices, and tools for (first time) installation, patching, or updating are at the heart of software lifecycle management.
Generally, lifecycle management
involves the parametrization and adaptation of a generic (installation) procedure.
There are plenty of popular practices, tools, and environments, like Terraform, Chef, Ansible,
package managers like APT, Crossplane or even Kubernetes (we will see later why
this appears in this list).
Configuration is then used to adapt the installation procedure to the needs of particular applications or their installations.
There are several approaches to simplifying the description of controlling the installation procedure.
From templating that leverages patterns and rules to avoid
duplicate information, to complete general or product-specific Domain Specific Languages (DSL) that express complex configuration descriptions tighter to the problem domain than
simple value structures. Those DSLs can be generalized by frameworks
to shift the installer development from a general-purpose language to
the composition of DSL elements.
In the following, we will systematically describe what configurations look like and how they work together with installation and update procedures.
While complex initial installations may be covered by the approach, we conclude with the argument that the optimization of configurations and configuration DSLs will not solve the automation problem for complex updates. Instead, the crucial aspect is the abstraction level between the configuration elements focusing on the problem domain and the finally maintained elements in their target environment. Complex updates require problem domain-specific flexible coding.