Skip to content

Commit 56cd49b

Browse files
Merge pull request #201 from joshrotenberg/feat/acl-wait-flag
feat(redisctl): add --wait flag support for Cloud ACL commands
2 parents d86dca4 + 1d652e8 commit 56cd49b

File tree

3 files changed

+287
-141
lines changed

3 files changed

+287
-141
lines changed

crates/redisctl/src/cli.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1352,6 +1352,9 @@ pub enum CloudAclCommands {
13521352
/// Redis ACL rule (e.g., "+@read")
13531353
#[arg(long)]
13541354
rule: String,
1355+
/// Async operation options
1356+
#[command(flatten)]
1357+
async_ops: crate::commands::cloud::async_utils::AsyncOperationArgs,
13551358
},
13561359

13571360
/// Update an existing Redis ACL rule
@@ -1365,6 +1368,9 @@ pub enum CloudAclCommands {
13651368
/// New Redis ACL rule
13661369
#[arg(long)]
13671370
rule: Option<String>,
1371+
/// Async operation options
1372+
#[command(flatten)]
1373+
async_ops: crate::commands::cloud::async_utils::AsyncOperationArgs,
13681374
},
13691375

13701376
/// Delete a Redis ACL rule
@@ -1375,6 +1381,9 @@ pub enum CloudAclCommands {
13751381
/// Skip confirmation prompt
13761382
#[arg(long)]
13771383
force: bool,
1384+
/// Async operation options
1385+
#[command(flatten)]
1386+
async_ops: crate::commands::cloud::async_utils::AsyncOperationArgs,
13781387
},
13791388

13801389
// ACL Roles
@@ -1391,6 +1400,9 @@ pub enum CloudAclCommands {
13911400
/// Redis rules (JSON array or single rule ID)
13921401
#[arg(long, value_name = "JSON|ID")]
13931402
redis_rules: String,
1403+
/// Async operation options
1404+
#[command(flatten)]
1405+
async_ops: crate::commands::cloud::async_utils::AsyncOperationArgs,
13941406
},
13951407

13961408
/// Update an existing ACL role
@@ -1404,6 +1416,9 @@ pub enum CloudAclCommands {
14041416
/// New Redis rules (JSON array or single rule ID)
14051417
#[arg(long, value_name = "JSON|ID")]
14061418
redis_rules: Option<String>,
1419+
/// Async operation options
1420+
#[command(flatten)]
1421+
async_ops: crate::commands::cloud::async_utils::AsyncOperationArgs,
14071422
},
14081423

14091424
/// Delete an ACL role
@@ -1414,6 +1429,9 @@ pub enum CloudAclCommands {
14141429
/// Skip confirmation prompt
14151430
#[arg(long)]
14161431
force: bool,
1432+
/// Async operation options
1433+
#[command(flatten)]
1434+
async_ops: crate::commands::cloud::async_utils::AsyncOperationArgs,
14171435
},
14181436

14191437
// ACL Users
@@ -1440,6 +1458,9 @@ pub enum CloudAclCommands {
14401458
/// Password
14411459
#[arg(long)]
14421460
password: String,
1461+
/// Async operation options
1462+
#[command(flatten)]
1463+
async_ops: crate::commands::cloud::async_utils::AsyncOperationArgs,
14431464
},
14441465

14451466
/// Update an ACL user
@@ -1456,6 +1477,9 @@ pub enum CloudAclCommands {
14561477
/// New password
14571478
#[arg(long)]
14581479
password: Option<String>,
1480+
/// Async operation options
1481+
#[command(flatten)]
1482+
async_ops: crate::commands::cloud::async_utils::AsyncOperationArgs,
14591483
},
14601484

14611485
/// Delete an ACL user
@@ -1466,6 +1490,9 @@ pub enum CloudAclCommands {
14661490
/// Skip confirmation prompt
14671491
#[arg(long)]
14681492
force: bool,
1493+
/// Async operation options
1494+
#[command(flatten)]
1495+
async_ops: crate::commands::cloud::async_utils::AsyncOperationArgs,
14691496
},
14701497
}
14711498

crates/redisctl/src/commands/cloud/acl.rs

Lines changed: 90 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use crate::cli::{CloudAclCommands, OutputFormat};
44
use crate::connection::ConnectionManager;
55
use crate::error::Result as CliResult;
66

7-
use super::acl_impl;
7+
use super::acl_impl::{self, AclOperationParams};
88

99
pub async fn handle_acl_command(
1010
conn_mgr: &ConnectionManager,
@@ -18,60 +18,96 @@ pub async fn handle_acl_command(
1818
CloudAclCommands::ListRedisRules => {
1919
acl_impl::list_redis_rules(conn_mgr, profile_name, output_format, query).await
2020
}
21-
CloudAclCommands::CreateRedisRule { name, rule } => {
22-
acl_impl::create_redis_rule(conn_mgr, profile_name, name, rule, output_format, query)
23-
.await
21+
CloudAclCommands::CreateRedisRule {
22+
name,
23+
rule,
24+
async_ops,
25+
} => {
26+
let params = AclOperationParams {
27+
conn_mgr,
28+
profile_name,
29+
async_ops,
30+
output_format,
31+
query,
32+
};
33+
acl_impl::create_redis_rule(&params, name, rule).await
2434
}
25-
CloudAclCommands::UpdateRedisRule { id, name, rule } => {
26-
acl_impl::update_redis_rule(
35+
CloudAclCommands::UpdateRedisRule {
36+
id,
37+
name,
38+
rule,
39+
async_ops,
40+
} => {
41+
let params = AclOperationParams {
2742
conn_mgr,
2843
profile_name,
29-
*id,
30-
name.as_deref(),
31-
rule.as_deref(),
44+
async_ops,
3245
output_format,
3346
query,
34-
)
35-
.await
47+
};
48+
acl_impl::update_redis_rule(&params, *id, name.as_deref(), rule.as_deref()).await
3649
}
37-
CloudAclCommands::DeleteRedisRule { id, force } => {
38-
acl_impl::delete_redis_rule(conn_mgr, profile_name, *id, *force, output_format, query)
39-
.await
50+
CloudAclCommands::DeleteRedisRule {
51+
id,
52+
force,
53+
async_ops,
54+
} => {
55+
let params = AclOperationParams {
56+
conn_mgr,
57+
profile_name,
58+
async_ops,
59+
output_format,
60+
query,
61+
};
62+
acl_impl::delete_redis_rule(&params, *id, *force).await
4063
}
4164

4265
// ACL Roles
4366
CloudAclCommands::ListRoles => {
4467
acl_impl::list_roles(conn_mgr, profile_name, output_format, query).await
4568
}
46-
CloudAclCommands::CreateRole { name, redis_rules } => {
47-
acl_impl::create_role(
69+
CloudAclCommands::CreateRole {
70+
name,
71+
redis_rules,
72+
async_ops,
73+
} => {
74+
let params = AclOperationParams {
4875
conn_mgr,
4976
profile_name,
50-
name,
51-
redis_rules,
77+
async_ops,
5278
output_format,
5379
query,
54-
)
55-
.await
80+
};
81+
acl_impl::create_role(&params, name, redis_rules).await
5682
}
5783
CloudAclCommands::UpdateRole {
5884
id,
5985
name,
6086
redis_rules,
87+
async_ops,
6188
} => {
62-
acl_impl::update_role(
89+
let params = AclOperationParams {
6390
conn_mgr,
6491
profile_name,
65-
*id,
66-
name.as_deref(),
67-
redis_rules.as_deref(),
92+
async_ops,
6893
output_format,
6994
query,
70-
)
71-
.await
95+
};
96+
acl_impl::update_role(&params, *id, name.as_deref(), redis_rules.as_deref()).await
7297
}
73-
CloudAclCommands::DeleteRole { id, force } => {
74-
acl_impl::delete_role(conn_mgr, profile_name, *id, *force, output_format, query).await
98+
CloudAclCommands::DeleteRole {
99+
id,
100+
force,
101+
async_ops,
102+
} => {
103+
let params = AclOperationParams {
104+
conn_mgr,
105+
profile_name,
106+
async_ops,
107+
output_format,
108+
query,
109+
};
110+
acl_impl::delete_role(&params, *id, *force).await
75111
}
76112

77113
// ACL Users
@@ -85,39 +121,53 @@ pub async fn handle_acl_command(
85121
name,
86122
role,
87123
password,
124+
async_ops,
88125
} => {
89-
acl_impl::create_acl_user(
126+
let params = AclOperationParams {
90127
conn_mgr,
91128
profile_name,
92-
name,
93-
role,
94-
password,
129+
async_ops,
95130
output_format,
96131
query,
97-
)
98-
.await
132+
};
133+
acl_impl::create_acl_user(&params, name, role, password).await
99134
}
100135
CloudAclCommands::UpdateAclUser {
101136
id,
102137
name,
103138
role,
104139
password,
140+
async_ops,
105141
} => {
106-
acl_impl::update_acl_user(
142+
let params = AclOperationParams {
107143
conn_mgr,
108144
profile_name,
145+
async_ops,
146+
output_format,
147+
query,
148+
};
149+
acl_impl::update_acl_user(
150+
&params,
109151
*id,
110152
name.as_deref(),
111153
role.as_deref(),
112154
password.as_deref(),
113-
output_format,
114-
query,
115155
)
116156
.await
117157
}
118-
CloudAclCommands::DeleteAclUser { id, force } => {
119-
acl_impl::delete_acl_user(conn_mgr, profile_name, *id, *force, output_format, query)
120-
.await
158+
CloudAclCommands::DeleteAclUser {
159+
id,
160+
force,
161+
async_ops,
162+
} => {
163+
let params = AclOperationParams {
164+
conn_mgr,
165+
profile_name,
166+
async_ops,
167+
output_format,
168+
query,
169+
};
170+
acl_impl::delete_acl_user(&params, *id, *force).await
121171
}
122172
}
123173
}

0 commit comments

Comments
 (0)