In the last decade, there has been a surge in tools designed to simplify the provisioning of cloud infrastructures, on-premise, and dedicated servers. While these tools offer significant benefits, setting them up and configuring them can be challenging, requiring considerable expertise in cloud systems, Infrastructure as Code (IaC), Linux, cybersecurity, and more. Many of these tools fall short of fully abstracting system-specific configurations, often necessitating detailed and complex setups.
For users who only need an environment to run a few server-side applications—like a VPN, blogs, email servers, or file managers—maintaining best practices and ensuring security can be daunting and time-consuming. Amadla aims to streamline this process by automating the setup of a basic environment suitable for personal use and businesses of all sizes. It simplifies the configuration of applications, servers, and cloud infrastructures by providing a solid abstraction layer.
Amadla uses a custom storage methodology called HERY, which combines YAML, JSON-Schema, and Git. This methodology provides a familiar yet innovative approach to configuration management. HERY extends YAML by grouping content into entities, similar to how an RDBMS (Relational Database Management System) organizes data. These entities can refer to other entities, with all content stored in text form, benefiting from Git's version control capabilities.
The system also includes a caching layer based on SQLite, enabling fast queries of configuration content. The Amadla CLI (Command Line Interface) queries HERY configurations and uses Jinja2 templates to generate configuration files.
Each entity represents a block of mutable configuration standards. Users can create their own entities for any purpose or use the predefined ones provided by Amadla. Predefined entities ensure better integration with other tools and templates. For example, a "Net" entity attached to an application can specify the networking requirements for a website, inform the HTTP server, and configure the firewall to open the necessary ports. Configurations can be overridden in a cascading manner, allowing for flexible and hierarchical setups.