57 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| use harmony::{
 | |
|     data::Version,
 | |
|     inventory::Inventory,
 | |
|     maestro::Maestro,
 | |
|     modules::{
 | |
|         k8s::{self, ingress::K8sIngressScore, resource::K8sResourceScore},
 | |
|         {
 | |
|         lamp::{LAMPConfig, LAMPScore},
 | |
|     },
 | |
|         monitoring::monitoring_alerting::MonitoringAlertingStackScore,
 | |
|     },
 | |
|     topology::{K8sAnywhereTopology, Url, k8s::K8sClient},
 | |
| };
 | |
| 
 | |
| #[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::<K8sAnywhereTopology>::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.
 |