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