Skip to content

Commit

Permalink
Add support for default project for registered clusters
Browse files Browse the repository at this point in the history
  • Loading branch information
Westwooo committed Sep 3, 2024
1 parent bbdeb96 commit 6f604ab
Show file tree
Hide file tree
Showing 17 changed files with 74 additions and 84 deletions.
8 changes: 2 additions & 6 deletions src/cli/buckets.rs
Original file line number Diff line number Diff line change
Expand Up @@ -87,17 +87,13 @@ fn buckets_get_all(
let cluster = get_active_cluster(identifier.clone(), &guard, span)?;

let (buckets, is_cloud) = if cluster.cluster_type() == Provisioned {
let org = if let Some(cluster_org) = cluster.capella_org() {
guard.get_capella_org(cluster_org)
} else {
guard.active_capella_org()
}?;
let org = guard.named_or_active_org(cluster.capella_org())?;

(
get_capella_buckets(
identifier.clone(),
org,
guard.active_project()?,
guard.named_or_active_project(cluster.project())?,
cluster,
ctrl_c.clone(),
span,
Expand Down
9 changes: 2 additions & 7 deletions src/cli/buckets_create.rs
Original file line number Diff line number Diff line change
Expand Up @@ -162,17 +162,12 @@ fn buckets_create(
.map_err(|e| generic_error("Invalid argument", e.to_string(), span))?;

if active_cluster.cluster_type() == Provisioned {
let org = if let Some(cluster_org) = active_cluster.capella_org() {
guard.get_capella_org(cluster_org)
} else {
guard.active_capella_org()
}?;

let org = guard.named_or_active_org(active_cluster.capella_org())?;
let json = settings.as_json();

create_capella_bucket(
org,
guard.active_project()?,
guard.named_or_active_project(active_cluster.project())?,
active_cluster,
identifier.clone(),
serde_json::to_string(&json).unwrap(),
Expand Down
8 changes: 2 additions & 6 deletions src/cli/buckets_drop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,15 +81,11 @@ fn buckets_drop(
let cluster = get_active_cluster(identifier.clone(), &guard, span)?;

if cluster.cluster_type() == Provisioned {
let org = if let Some(cluster_org) = cluster.capella_org() {
guard.get_capella_org(cluster_org)
} else {
guard.active_capella_org()
}?;
let org = guard.named_or_active_org(cluster.capella_org())?;

drop_capella_bucket(
org,
guard.active_project()?,
guard.named_or_active_project(cluster.project())?,
cluster,
name.clone(),
identifier.clone(),
Expand Down
8 changes: 2 additions & 6 deletions src/cli/buckets_get.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,15 +91,11 @@ fn buckets_get(
let cluster = get_active_cluster(identifier.clone(), &guard, span)?;

let content = if cluster.cluster_type() == Provisioned {
let org = if let Some(cluster_org) = cluster.capella_org() {
guard.get_capella_org(cluster_org)
} else {
guard.active_capella_org()
}?;
let org = guard.named_or_active_org(cluster.capella_org())?;

get_capella_bucket(
org,
guard.active_project()?,
guard.named_or_active_project(cluster.project())?,
cluster,
bucket.clone(),
identifier.clone(),
Expand Down
8 changes: 2 additions & 6 deletions src/cli/buckets_sample.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,15 +84,11 @@ fn load_sample_bucket(
let cluster = get_active_cluster(identifier.clone(), &guard, span)?;

let result = if cluster.cluster_type() == Provisioned {
let org = if let Some(cluster_org) = cluster.capella_org() {
guard.get_capella_org(cluster_org)
} else {
guard.active_capella_org()
}?;
let org = guard.named_or_active_org(cluster.capella_org())?;

load_capella_sample(
org,
guard.active_project()?,
guard.named_or_active_project(cluster.project())?,
cluster,
identifier.clone(),
bucket_name.clone(),
Expand Down
16 changes: 4 additions & 12 deletions src/cli/buckets_update.rs
Original file line number Diff line number Diff line change
Expand Up @@ -120,15 +120,11 @@ fn buckets_update(
let active_cluster = get_active_cluster(identifier.clone(), &guard, span)?;

let mut settings = if active_cluster.cluster_type() == Provisioned {
let org = if let Some(cluster_org) = active_cluster.capella_org() {
guard.get_capella_org(cluster_org)
} else {
guard.active_capella_org()
}?;
let org = guard.named_or_active_org(active_cluster.capella_org())?;

get_capella_bucket(
org,
guard.active_project()?,
guard.named_or_active_project(active_cluster.project())?,
active_cluster,
name.clone(),
identifier.clone(),
Expand All @@ -150,15 +146,11 @@ fn buckets_update(
)?;

if active_cluster.cluster_type() == Provisioned {
let org = if let Some(cluster_org) = active_cluster.capella_org() {
guard.get_capella_org(cluster_org)
} else {
guard.active_capella_org()
}?;
let org = guard.named_or_active_org(active_cluster.capella_org())?;

update_capella_bucket(
org,
guard.active_project()?,
guard.named_or_active_project(active_cluster.project())?,
active_cluster,
identifier.clone(),
settings,
Expand Down
1 change: 1 addition & 0 deletions src/cli/cbenv_managed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ fn clusters(
v.capella_org().unwrap_or_default(),
span,
);
collected.add_string("project", v.project().unwrap_or_default(), span);
collected.into_value(span)
})
.collect::<Vec<_>>();
Expand Down
8 changes: 8 additions & 0 deletions src/cli/cbenv_register.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,12 @@ impl Command for CbEnvRegister {
"capella organization that this cluster belongs to",
None,
)
.named(
"project",
SyntaxShape::String,
"project that this cluster belongs to",
None,
)
.category(Category::Custom("couchbase".to_string()))
}

Expand Down Expand Up @@ -147,6 +153,7 @@ fn clusters_register(
let cert_path = call.get_flag(engine_state, stack, "tls-cert-path")?;
let save = call.get_flag(engine_state, stack, "save")?.unwrap_or(false);
let capella = call.get_flag(engine_state, stack, "capella-organization")?;
let project = call.get_flag(engine_state, stack, "project")?;
let display_name = call.get_flag(engine_state, stack, "display-name")?;

let hostnames = conn_string
Expand Down Expand Up @@ -180,6 +187,7 @@ fn clusters_register(
tls_config,
ClusterTimeouts::default(),
capella,
project,
DEFAULT_KV_BATCH_SIZE,
RemoteClusterType::from(hostnames),
);
Expand Down
11 changes: 3 additions & 8 deletions src/cli/clusters.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,15 +71,10 @@ fn clusters(
let capella = call.get_flag(engine_state, stack, "capella")?;

let guard = state.lock().unwrap();
let control = if let Some(c) = capella {
guard.get_capella_org(c)
} else {
guard.active_capella_org()
}?;
let control = guard.named_or_active_org(capella)?;

let project = call
.get_flag(engine_state, stack, "project")?
.map_or_else(|| guard.active_project(), Ok)?;
let project =
guard.named_or_active_project(call.get_flag(engine_state, stack, "project")?)?;

let client = control.client();
let deadline = Instant::now().add(control.timeout());
Expand Down
11 changes: 3 additions & 8 deletions src/cli/clusters_create.rs
Original file line number Diff line number Diff line change
Expand Up @@ -142,17 +142,12 @@ fn clusters_create(
debug!("Running clusters create for {:?}", definition);

let guard = state.lock().unwrap();
let control = if let Some(c) = capella {
guard.get_capella_org(c)
} else {
guard.active_capella_org()
}?;
let control = guard.named_or_active_org(capella)?;
let client = control.client();
let deadline = Instant::now().add(control.timeout());

let project = call
.get_flag(engine_state, stack, "project")?
.map_or_else(|| guard.active_project(), Ok)?;
let project =
guard.named_or_active_project(call.get_flag(engine_state, stack, "project")?)?;

let org_id = find_org_id(ctrl_c.clone(), &client, deadline, span)?;
let project_id = find_project_id(
Expand Down
13 changes: 4 additions & 9 deletions src/cli/clusters_drop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,15 +76,10 @@ fn clusters_drop(
debug!("Running clusters drop for {}", &name);

let mut guard = state.lock().unwrap();
let control = if let Some(c) = capella {
guard.get_capella_org(c)
} else {
guard.active_capella_org()
}?;

let project = call
.get_flag(engine_state, stack, "project")?
.map_or_else(|| guard.active_project(), Ok)?;
let control = guard.named_or_active_org(capella)?;

let project =
guard.named_or_active_project(call.get_flag(engine_state, stack, "project")?)?;

let client = control.client();
let deadline = Instant::now().add(control.timeout());
Expand Down
13 changes: 4 additions & 9 deletions src/cli/clusters_get.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,15 +76,10 @@ fn clusters_get(
debug!("Running clusters get for {}", &name);

let guard = state.lock().unwrap();
let control = if let Some(c) = capella {
guard.get_capella_org(c)
} else {
guard.active_capella_org()
}?;

let project = call
.get_flag(engine_state, stack, "project")?
.map_or_else(|| guard.active_project(), Ok)?;
let control = guard.named_or_active_org(capella)?;

let project =
guard.named_or_active_project(call.get_flag(engine_state, stack, "project")?)?;

let client = control.client();
let deadline = Instant::now().add(control.timeout());
Expand Down
8 changes: 2 additions & 6 deletions src/cli/credentials_create.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,7 @@ fn credentials_create(
}
};

let org = if let Some(cluster_org) = active_cluster.capella_org() {
guard.get_capella_org(cluster_org)
} else {
guard.active_capella_org()
}?;
let org = guard.named_or_active_org(active_cluster.capella_org())?;

let client = org.client();
let deadline = Instant::now().add(org.timeout());
Expand All @@ -113,7 +109,7 @@ fn credentials_create(

let project_id = find_project_id(
ctrl_c.clone(),
guard.active_project().unwrap(),
guard.named_or_active_project(active_cluster.project())?,
&client,
deadline,
span,
Expand Down
8 changes: 7 additions & 1 deletion src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,7 @@ impl ClusterConfigBuilder {
tls: self.tls.unwrap_or_default(),
kv_batch_size: None,
capella_org: None,
project: None,
cluster_type: None,
}
}
Expand Down Expand Up @@ -414,13 +415,14 @@ pub struct ClusterConfig {
#[serde(rename(deserialize = "kv-batch-size", serialize = "kv-batch-size"))]
kv_batch_size: Option<u32>,

#[serde(default)]
#[serde(rename(
deserialize = "capella-organization",
serialize = "capella-organization"
))]
capella_org: Option<String>,

project: Option<String>,

#[serde(rename(deserialize = "type"))]
cluster_type: Option<RemoteClusterType>,
}
Expand Down Expand Up @@ -474,6 +476,9 @@ impl ClusterConfig {
pub fn cloud_org(&self) -> Option<String> {
self.capella_org.clone()
}
pub fn project(&self) -> Option<String> {
self.project.clone()
}
pub fn kv_batch_size(&self) -> Option<u32> {
self.kv_batch_size
}
Expand Down Expand Up @@ -523,6 +528,7 @@ impl From<(String, &RemoteCluster)> for ClusterConfig {
password: Some(cluster.1.password().to_string()),
},
capella_org: cloud,
project: cluster.1.project(),
kv_batch_size: Some(cluster.1.kv_batch_size()),
display_name: cluster.1.display_name(),
// This is a config option for dev ony so we won't want to write to file
Expand Down
2 changes: 2 additions & 0 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,7 @@ fn remote_cluster_from_opts(opt: CliOptions, password: Option<String>) -> Remote
tls_config,
ClusterTimeouts::default(),
None,
None,
DEFAULT_KV_BATCH_SIZE,
cluster_type,
)
Expand Down Expand Up @@ -639,6 +640,7 @@ fn make_state(
transaction_timeout,
),
v.cloud_org(),
v.project(),
kv_batch_size,
v.cluster_type().unwrap_or(cluster_type),
);
Expand Down
7 changes: 7 additions & 0 deletions src/remote_cluster.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ pub struct RemoteCluster {
tls_config: Option<RustTlsConfig>,
timeouts: Mutex<ClusterTimeouts>,
capella_org: Option<String>,
project: Option<String>,
kv_batch_size: u32,
cluster_type: RemoteClusterType,
display_name: Option<String>,
Expand All @@ -77,6 +78,7 @@ impl RemoteCluster {
tls_config: Option<RustTlsConfig>,
timeouts: ClusterTimeouts,
capella_org: Option<String>,
project: Option<String>,
kv_batch_size: u32,
cluster_type: RemoteClusterType,
) -> Self {
Expand All @@ -91,6 +93,7 @@ impl RemoteCluster {
tls_config,
timeouts: Mutex::new(timeouts),
capella_org,
project,
kv_batch_size,
cluster_type,
display_name: resources.display_name,
Expand Down Expand Up @@ -174,6 +177,10 @@ impl RemoteCluster {
self.capella_org.clone()
}

pub fn project(&self) -> Option<String> {
self.project.clone()
}

pub fn kv_batch_size(&self) -> u32 {
self.kv_batch_size
}
Expand Down
19 changes: 19 additions & 0 deletions src/state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,17 @@ impl State {
&self.capella_orgs
}

pub fn named_or_active_org(
&self,
organization: Option<String>,
) -> Result<&RemoteCapellaOrganization, ShellError> {
if let Some(org) = organization {
self.get_capella_org(org)
} else {
self.active_capella_org()
}
}

pub fn active_capella_org(&self) -> Result<&RemoteCapellaOrganization, ShellError> {
let active = match self.active_capella_org_name() {
Some(a) => a,
Expand Down Expand Up @@ -244,6 +255,14 @@ impl State {
}
}

pub fn named_or_active_project(&self, project: Option<String>) -> Result<String, ShellError> {
if let Some(proj) = project {
Ok(proj)
} else {
self.active_project()
}
}

pub fn active_project(&self) -> Result<String, ShellError> {
if let Some(active) = self.active_project.lock().unwrap().clone() {
return Ok(active);
Expand Down

0 comments on commit 6f604ab

Please sign in to comment.