forked from NationTech/harmony
Co-authored-by: tahahawa <tahahawa@gmail.com> Reviewed-on: https://git.nationtech.io/NationTech/harmony/pulls/13 Co-authored-by: Taha Hawa <taha@taha.dev> Co-committed-by: Taha Hawa <taha@taha.dev>
54 lines
2.1 KiB
Rust
54 lines
2.1 KiB
Rust
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::<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.
|