use harmony::{ data::Version, inventory::Inventory, maestro::Maestro, modules::{ { lamp::{LAMPConfig, LAMPScore}, }, monitoring::monitoring_alerting::MonitoringAlertingStackScore, }, 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(), database_size: format!("4Gi").into(), ..Default::default() }, }; // 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(); let monitoring_stack_score = MonitoringAlertingStackScore::new_with_ns(&lamp_stack.config.namespace); maestro.register_all(vec![Box::new(lamp_stack), Box::new(monitoring_stack_score)]); // 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.