mirror of
https://github.com/moghtech/komodo.git
synced 2026-01-27 06:59:41 -06:00
start mongo cli
This commit is contained in:
1
Cargo.lock
generated
1
Cargo.lock
generated
@@ -1265,6 +1265,7 @@ dependencies = [
|
||||
"clap",
|
||||
"monitor_types",
|
||||
"rand",
|
||||
"run_command",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"toml",
|
||||
|
||||
@@ -14,4 +14,5 @@ async_timing_util = "0.1.12"
|
||||
rand = "0.8"
|
||||
serde = "1.0"
|
||||
serde_json = "1.0"
|
||||
toml = "0.5"
|
||||
toml = "0.5"
|
||||
run_command = "0.0.5"
|
||||
@@ -1,12 +1,13 @@
|
||||
use std::{
|
||||
fs::{self, File},
|
||||
io::Write,
|
||||
io::{Write, Read},
|
||||
};
|
||||
|
||||
use async_timing_util::Timelength;
|
||||
use clap::ArgMatches;
|
||||
use monitor_types::{CoreConfig, MongoConfig, PeripheryConfig};
|
||||
use rand::{distributions::Alphanumeric, Rng};
|
||||
use run_command::run_command_pipe_to_terminal;
|
||||
use serde::Serialize;
|
||||
|
||||
pub fn gen_core_config(sub_matches: &ArgMatches) {
|
||||
@@ -61,25 +62,71 @@ pub fn gen_core_config(sub_matches: &ArgMatches) {
|
||||
}
|
||||
|
||||
pub fn start_mongo(sub_matches: &ArgMatches) {
|
||||
let username = sub_matches
|
||||
.get_one::<String>("username")
|
||||
.map(|p| p.to_string());
|
||||
let password = sub_matches
|
||||
.get_one::<String>("password")
|
||||
.map(|p| p.to_string());
|
||||
let username = sub_matches.get_one::<String>("username");
|
||||
let password = sub_matches.get_one::<String>("password");
|
||||
|
||||
if (username.is_some() && password.is_none()) {
|
||||
println!("must provide --password if username is provided ❌");
|
||||
println!("❌ must provide --password if username is provided ❌");
|
||||
return;
|
||||
}
|
||||
if (username.is_none() && password.is_some()) {
|
||||
println!("must provide --username if password is provided ❌");
|
||||
println!("❌ must provide --username if password is provided ❌");
|
||||
return;
|
||||
}
|
||||
|
||||
// start mongo here
|
||||
let name = sub_matches
|
||||
.get_one::<String>("name")
|
||||
.map(|p| p.as_str())
|
||||
.unwrap_or("monitor-mongo");
|
||||
|
||||
println!("\n✅ monitor mongo has been started up ✅\n")
|
||||
let port = sub_matches
|
||||
.get_one::<String>("port")
|
||||
.map(|p| p.as_str())
|
||||
.unwrap_or("27017")
|
||||
.parse::<u16>()
|
||||
.expect("invalid port");
|
||||
|
||||
let network = sub_matches
|
||||
.get_one::<String>("network")
|
||||
.map(|p| p.as_str())
|
||||
.unwrap_or("bridge");
|
||||
|
||||
let mount = sub_matches
|
||||
.get_one::<String>("mount")
|
||||
.map(|p| p.as_str())
|
||||
.unwrap_or("~/.monitor/db");
|
||||
|
||||
let env = if username.is_some() && password.is_some() {
|
||||
let (username, password) = (username.unwrap(), password.unwrap());
|
||||
format!(" --env MONGO_INITDB_ROOT_USERNAME={username} --env MONGO_INITDB_ROOT_PASSWORD={password}")
|
||||
} else {
|
||||
String::new()
|
||||
};
|
||||
|
||||
let command = format!("docker run -d --name {name} -p {port}:27017 --network {network} -v {mount}:/data/db{env} mongo --quiet");
|
||||
|
||||
println!("\n==============\n mongo config \n==============\n");
|
||||
println!("name: {name}");
|
||||
println!("port: {port}");
|
||||
println!("mount: {mount}");
|
||||
println!("network: {network}");
|
||||
|
||||
println!("\npress ENTER to start mongo");
|
||||
|
||||
let buffer = &mut [0u8];
|
||||
let res = std::io::stdin().read_exact(buffer);
|
||||
|
||||
if res.is_err() {
|
||||
println!("pressed another button, exiting");
|
||||
}
|
||||
|
||||
let output = run_command_pipe_to_terminal(&command);
|
||||
|
||||
if output.success() {
|
||||
println!("\n✅ monitor mongo has been started up ✅\n")
|
||||
} else {
|
||||
eprintln!("\n❌ there was some error on startup ❌\n")
|
||||
}
|
||||
}
|
||||
|
||||
pub fn start_core(sub_matches: &ArgMatches) {
|
||||
|
||||
@@ -50,11 +50,27 @@ fn cli() -> Command {
|
||||
Command::new("start_mongo")
|
||||
.about("start up a local mongo container for monitor")
|
||||
.arg(
|
||||
arg!(--username <USERNAME> "specify the default (root) username for mongo. default is mongo with no auth")
|
||||
arg!(--name <NAME> "specify the name of the mongo container. default is monitor-mongo")
|
||||
.required(false)
|
||||
)
|
||||
.arg(
|
||||
arg!(--password <PASSWORD> "specify the default (root) password for mongo. default is mongo with no auth")
|
||||
arg!(--username <USERNAME> "specify the admin username for mongo. default is mongo with no auth")
|
||||
.required(false)
|
||||
)
|
||||
.arg(
|
||||
arg!(--password <PASSWORD> "specify the admin password for mongo. default is mongo with no auth")
|
||||
.required(false)
|
||||
)
|
||||
.arg(
|
||||
arg!(--port <PORT> "sets port mongo will run on. default is 27017")
|
||||
.required(false)
|
||||
)
|
||||
.arg(
|
||||
arg!(--mount <PATH> "sets the path the mongo data is mounted into. default is ~/.monitor/db")
|
||||
.required(false)
|
||||
)
|
||||
.arg(
|
||||
arg!(--network <NETWORK> "sets docker network of mongo container. default is bridge")
|
||||
.required(false)
|
||||
)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user