63 lines
2.5 KiB
Rust
63 lines
2.5 KiB
Rust
use harmony::{
|
|
data::Version,
|
|
inventory::Inventory,
|
|
maestro::Maestro,
|
|
modules::{
|
|
lamp::{LAMPConfig, LAMPScore},
|
|
monitoring::monitoring_alerting::{
|
|
AlertChannel, MonitoringAlertingStackScore, WebhookServiceType,
|
|
},
|
|
},
|
|
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 url = url::Url::parse("https://discord.com/api/webhooks/dummy_channel/dummy_token")
|
|
.expect("invalid URL");
|
|
|
|
let mut monitoring_stack_score = MonitoringAlertingStackScore::new();
|
|
monitoring_stack_score.namespace = Some(lamp_stack.config.namespace.clone());
|
|
monitoring_stack_score.alert_channel = Some(AlertChannel::WebHookUrl {
|
|
url: url,
|
|
webhook_service_type: WebhookServiceType::Discord,
|
|
});
|
|
|
|
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.
|