Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 7 additions & 34 deletions src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -312,9 +312,6 @@ pub enum EnvCommands {
Update {
/// Environment ID
env_id: String,
/// New environment name
#[arg(long)]
name: Option<String>,
/// Custom domain
#[arg(long, conflicts_with = "clear_custom_domain")]
custom_domain: Option<String>,
Expand All @@ -340,6 +337,13 @@ pub enum EnvCommands {
#[command(subcommand)]
command: EnvSecretCommands,
},
/// Check domain change status
DomainChangeStatus {
/// Environment ID
env_id: String,
/// Domain change ID
domain_change_id: String,
},
/// Manage environment database
Db {
#[command(subcommand)]
Expand Down Expand Up @@ -420,37 +424,6 @@ pub enum EnvDbCommands {
/// Promote ID
promote_id: String,
},
/// Manage domain changes
DomainChange {
#[command(subcommand)]
command: EnvDomainChangeCommands,
},
}

#[derive(Subcommand)]
pub enum EnvDomainChangeCommands {
/// Create a domain change
Create {
/// Environment ID
env_id: String,
/// New custom domain
#[arg(
long,
required_unless_present = "clear_custom_domain",
conflicts_with = "clear_custom_domain"
)]
custom_domain: Option<String>,
/// Remove custom domain and revert to platform domain
#[arg(long, conflicts_with = "custom_domain")]
clear_custom_domain: bool,
},
/// Check domain change status
Status {
/// Environment ID
env_id: String,
/// Domain change ID
domain_change_id: String,
},
}

#[derive(Subcommand)]
Expand Down
48 changes: 10 additions & 38 deletions src/commands/env.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,19 +33,12 @@ struct CreateEnvRequest {

#[derive(Debug, Serialize)]
struct UpdateEnvRequest {
#[serde(skip_serializing_if = "Option::is_none")]
name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
custom_domain: Option<Option<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
tags: Option<Vec<String>>,
}

#[derive(Debug, Serialize)]
struct DomainChangeRequest {
custom_domain: Option<String>,
}

#[derive(Debug, Serialize)]
struct CreateSecretRequest {
key: String,
Expand Down Expand Up @@ -223,13 +216,11 @@ pub fn create(
pub fn update(
client: &ApiClient,
env_id: &str,
name: Option<String>,
custom_domain: Option<Option<String>>,
tags: Option<Vec<String>>,
format: OutputFormat,
) -> Result<(), ApiError> {
let body = UpdateEnvRequest {
name,
custom_domain,
tags,
};
Expand All @@ -241,7 +232,16 @@ pub fn update(
return Ok(());
}

print_message("Environment updated successfully.");
let pending = &response["data"]["pending_domain_change"];
if pending.is_object() {
print_message(&format!(
"Domain change started: {} ({})",
pending["id"].as_str().unwrap_or("-"),
pending["status"].as_str().unwrap_or("-")
));
} else {
print_message("Environment updated successfully.");
}
Ok(())
}

Expand Down Expand Up @@ -525,34 +525,6 @@ pub fn db_promote_status(

// Domain change commands

pub fn domain_change_create(
client: &ApiClient,
env_id: &str,
custom_domain: Option<String>,
format: OutputFormat,
) -> Result<(), ApiError> {
let body = DomainChangeRequest { custom_domain };

let response: Value = client.post(
&format!("/api/v1/vector/environments/{}/domain-change", env_id),
&body,
)?;

if format == OutputFormat::Json {
print_json(&response);
return Ok(());
}

let data = &response["data"];
print_message(&format!(
"Domain change started: {} ({})",
data["id"].as_str().unwrap_or("-"),
data["status"].as_str().unwrap_or("-")
));

Ok(())
}

pub fn domain_change_status(
client: &ApiClient,
env_id: &str,
Expand Down
40 changes: 8 additions & 32 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,9 @@ use cli::{
AccountApiKeyCommands, AccountCommands, AccountSecretCommands, AccountSshKeyCommands,
ArchiveCommands, AuthCommands, BackupCommands, BackupDownloadCommands, Cli, Commands,
DbCommands, DbExportCommands, DbImportSessionCommands, DeployCommands, EnvCommands,
EnvDbCommands, EnvDomainChangeCommands, EnvSecretCommands, EventCommands, McpCommands,
RestoreCommands, SiteCommands, SiteSshKeyCommands, SslCommands, WafAllowedReferrerCommands,
WafBlockedIpCommands, WafBlockedReferrerCommands, WafCommands, WafRateLimitCommands,
WebhookCommands,
EnvDbCommands, EnvSecretCommands, EventCommands, McpCommands, RestoreCommands, SiteCommands,
SiteSshKeyCommands, SslCommands, WafAllowedReferrerCommands, WafBlockedIpCommands,
WafBlockedReferrerCommands, WafCommands, WafRateLimitCommands, WebhookCommands,
};
use commands::{
account, archive, auth, backup, db, deploy, env, event, mcp, restore, site, ssl, waf, webhook,
Expand Down Expand Up @@ -187,7 +186,6 @@ fn run_env(command: EnvCommands, format: OutputFormat) -> Result<(), ApiError> {
),
EnvCommands::Update {
env_id,
name,
custom_domain,
clear_custom_domain,
tags,
Expand All @@ -197,10 +195,14 @@ fn run_env(command: EnvCommands, format: OutputFormat) -> Result<(), ApiError> {
} else {
custom_domain.map(Some)
};
env::update(&client, &env_id, name, custom_domain, tags, format)
env::update(&client, &env_id, custom_domain, tags, format)
}
EnvCommands::Delete { env_id } => env::delete(&client, &env_id, format),
EnvCommands::ResetDbPassword { env_id } => env::reset_db_password(&client, &env_id, format),
EnvCommands::DomainChangeStatus {
env_id,
domain_change_id,
} => env::domain_change_status(&client, &env_id, &domain_change_id, format),
EnvCommands::Secret { command } => run_env_secret(&client, command, format),
EnvCommands::Db { command } => run_env_db(&client, command, format),
}
Expand Down Expand Up @@ -248,32 +250,6 @@ fn run_env_db(
EnvDbCommands::PromoteStatus { env_id, promote_id } => {
env::db_promote_status(client, &env_id, &promote_id, format)
}
EnvDbCommands::DomainChange { command } => run_env_domain_change(client, command, format),
}
}

fn run_env_domain_change(
client: &ApiClient,
command: EnvDomainChangeCommands,
format: OutputFormat,
) -> Result<(), ApiError> {
match command {
EnvDomainChangeCommands::Create {
env_id,
custom_domain,
clear_custom_domain,
} => {
let custom_domain = if clear_custom_domain {
None
} else {
custom_domain
};
env::domain_change_create(client, &env_id, custom_domain, format)
}
EnvDomainChangeCommands::Status {
env_id,
domain_change_id,
} => env::domain_change_status(client, &env_id, &domain_change_id, format),
}
}

Expand Down
Loading