reactive_graph_tooling/tooling/instances/init/
mod.rs

1use 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    // Provisioning default repository
33    let repository_args = InitRepositoryArgs::default().chown(args.chown);
34    init_repository(instance_dir, repository_args)?;
35
36    // Provisioning config files
37    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    // Provisioning log files
46    create_log_files(instance_dir, &chown)?;
47
48    // Provisioning keys
49    let keys_dir = get_keys_dir(instance_dir);
50    generate_certificate(&keys_dir, args.certificate)?;
51
52    // Provisioning standard library plugins
53    execute_install(instance_dir, &args.repository, &args.release)?;
54
55    // exit(0);
56    Ok(())
57}