61 lines
2.3 KiB
Rust
61 lines
2.3 KiB
Rust
use harmony::{
|
|
data::Version,
|
|
inventory::Inventory,
|
|
maestro::Maestro,
|
|
modules::{
|
|
lamp::{LAMPConfig, LAMPScore},
|
|
monitoring::alert_channel::discord_alert_channel::DiscordWebhook,
|
|
},
|
|
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()
|
|
},
|
|
};
|
|
|
|
//let monitoring = MonitoringAlertingScore {
|
|
// alert_receivers: vec![Box::new(DiscordWebhook {
|
|
// url: Url::Url(url::Url::parse("https://discord.idonotexist.com").unwrap()),
|
|
// // TODO write url macro
|
|
// // url: url!("https://discord.idonotexist.com"),
|
|
// })],
|
|
// alert_rules: vec![],
|
|
// scrape_targets: vec![],
|
|
//};
|
|
|
|
// 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::from_env(),
|
|
)
|
|
.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.
|