reactive_graph/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::plugins::install::execute_install;
10use crate::tooling::instances::provisioning::create_dir;
11use crate::tooling::instances::provisioning::write_file;
12use crate::tooling::instances::repositories::args::InitRepositoryArgs;
13use crate::tooling::instances::repositories::init::init_repository;
14use anyhow::Result;
15use include_dir::Dir;
16use include_dir::include_dir;
17use std::path::PathBuf;
18
19pub mod args;
20
21static CONFIG_DIR: Dir<'_> = include_dir!("$CARGO_MANIFEST_DIR/../../config");
22
23pub fn init_instance(instance_dir: &PathBuf, args: InitInstanceArgs) -> Result<()> {
24 let chown = args.chown.get_chown();
25 create_dir(instance_dir, CONFIG_DIR_NAME, &chown)?;
26 create_dir(instance_dir, LOG_DIR_NAME, &chown)?;
27 create_dir(instance_dir, KEYS_DIR_NAME, &chown)?;
28 create_dir(instance_dir, "plugins/deploy", &chown)?;
29 create_dir(instance_dir, "plugins/installed", &chown)?;
30 create_dir(instance_dir, "repositories", &chown)?;
31
32 let repository_args = InitRepositoryArgs::default().chown(args.chown);
34 init_repository(instance_dir, repository_args)?;
35
36 let config_dir = get_config_dir(instance_dir);
38 for config_file in CONFIG_DIR.files() {
39 let path = config_file.path();
40 if let (Some(filename), Some(contents)) = (path.file_name(), config_file.contents_utf8()) {
41 write_file(&config_dir, filename, contents, &chown)?;
42 }
43 }
44
45 create_log_files(instance_dir, &chown)?;
47
48 let keys_dir = get_keys_dir(instance_dir);
50 generate_certificate(&keys_dir, args.certificate)?;
51
52 execute_install(instance_dir, &args.repository, &args.release)?;
54
55 Ok(())
57}