use harmony::{ data::Version, inventory::Inventory, maestro::Maestro, modules::lamp::{LAMPConfig, LAMPScore}, topology::{K8sAnywhereTopology, Url}, }; #[tokio::main] async fn main() { // This here is the whole configuration to // - setup a local K3D cluster // - Build a docker image with the PHP project builtin and production grade settings // - Deploy a mariadb database using a production grade helm chart // - Deploy the new container using a kubernetes deployment // - Configure networking between the PHP container and the database // - Provision a public route and an SSL certificate automatically on production environments // // Enjoy :) let lamp_stack = LAMPScore { name: "harmony-lamp-demo".to_string(), domain: Url::Url(url::Url::parse("https://lampdemo.harmony.nationtech.io").unwrap()), php_version: Version::from("8.4.4").unwrap(), // This config can be extended as needed for more complicated configurations config: LAMPConfig { project_root: "./php".into(), ..Default::default() }, db_size: "2Gi".to_string(), }; // You can choose the type of Topology you want, we suggest starting with the // K8sAnywhereTopology as it is the most automatic one that enables you to easily deploy // locally, to development environment from a CI, to staging, and to production with settings // that automatically adapt to each environment grade. let mut maestro = Maestro::::initialize( Inventory::autoload(), K8sAnywhereTopology::new(), ) .await .unwrap(); maestro.register_all(vec![Box::new(lamp_stack)]); // Here we bootstrap the CLI, this gives some nice features if you need them harmony_cli::init(maestro, None).await.unwrap(); } // That's it, end of the infra as code.