use super::get_custom_inventory;
use clap::Subcommand;
use color_eyre::{eyre::eyre, Result};
use sn_testnet_deploy::{inventory::DeploymentInventoryService, TestnetDeployBuilder};
#[derive(Subcommand, Debug)]
pub enum NginxCommands {
UpgradeConfig {
#[clap(name = "custom-inventory", long, use_value_delimiter = true)]
custom_inventory: Option<Vec<String>>,
#[clap(long, default_value_t = 50)]
forks: usize,
#[arg(short = 'n', long)]
name: String,
#[clap(long, default_value_t = sn_testnet_deploy::CloudProvider::DigitalOcean, value_parser = super::parse_provider, verbatim_doc_comment)]
provider: sn_testnet_deploy::CloudProvider,
},
}
pub async fn handle_upgrade_nginx_config(
custom_inventory: Option<Vec<String>>,
forks: usize,
name: String,
provider: sn_testnet_deploy::CloudProvider,
) -> Result<()> {
let testnet_deployer = TestnetDeployBuilder::default()
.ansible_forks(50)
.environment_name(&name)
.provider(provider)
.build()?;
let inventory_service = DeploymentInventoryService::from(&testnet_deployer);
let inventory = inventory_service
.generate_or_retrieve_inventory(&name, true, None)
.await?;
if inventory.is_empty() {
return Err(eyre!("The {name} environment does not exist"));
}
let custom_inventory = if let Some(custom_inventory) = custom_inventory {
let custom_vms = get_custom_inventory(&inventory, &custom_inventory)?;
Some(custom_vms)
} else {
None
};
let testnet_deployer = TestnetDeployBuilder::default()
.ansible_forks(forks)
.environment_name(&name)
.provider(provider)
.build()?;
let provisioner = testnet_deployer.ansible_provisioner;
provisioner.upgrade_nginx_config(&name, custom_inventory)?;
Ok(())
}