reactive_graph_tooling/tooling/instances/init/
mod.rs1use crate::tooling::instances::certificates::KEYS_DIR_NAME;
2use crate::tooling::instances::certificates::generate_certificate;
3use crate::tooling::instances::certificates::get_keys_dir;
4use crate::tooling::instances::config::CONFIG_DIR_NAME;
5use crate::tooling::instances::config::get_config_dir;
6use crate::tooling::instances::init::args::InitInstanceArgs;
7use crate::tooling::instances::logging::LOG_DIR_NAME;
8use crate::tooling::instances::logging::create_log_files;
9use crate::tooling::instances::provisioning::create_dir;
10use crate::tooling::instances::provisioning::write_file;
11use crate::tooling::instances::repositories::args::InitRepositoryArgs;
12use crate::tooling::instances::repositories::init::init_repository;
13use anyhow::Result;
14use include_dir::Dir;
15use include_dir::include_dir;
16use std::path::PathBuf;
17
18pub mod args;
19
20static CONFIG_DIR: Dir<'_> = include_dir!("$CARGO_MANIFEST_DIR/../../config");
21
22pub fn init_instance(instance_dir: &PathBuf, args: InitInstanceArgs) -> Result<()> {
23 let chown = args.chown.get_chown();
24 create_dir(instance_dir, CONFIG_DIR_NAME, &chown)?;
25 create_dir(instance_dir, LOG_DIR_NAME, &chown)?;
26 create_dir(instance_dir, KEYS_DIR_NAME, &chown)?;
27 create_dir(instance_dir, "plugins/deploy", &chown)?;
28 create_dir(instance_dir, "plugins/installed", &chown)?;
29 create_dir(instance_dir, "repositories", &chown)?;
30
31 let repository_args = InitRepositoryArgs::default().chown(args.chown);
33 init_repository(instance_dir, repository_args)?;
34
35 let config_dir = get_config_dir(instance_dir);
37 for config_file in CONFIG_DIR.files() {
38 let path = config_file.path();
39 if let (Some(filename), Some(contents)) = (path.file_name(), config_file.contents_utf8()) {
40 write_file(&config_dir, filename, contents, &chown)?;
41 }
42 }
43
44 create_log_files(instance_dir, &chown)?;
46
47 let keys_dir = get_keys_dir(instance_dir);
49 generate_certificate(&keys_dir, args.certificate)?;
50
51 Ok(())
55}