Skip to content

Conversation

@joshrotenberg
Copy link
Collaborator

Summary

Adds typed CLI commands for AWS PrivateLink connectivity operations, completing 100% CLI coverage for the Cloud API.

Background

PR #406 added the to the redis-cloud library with 10 methods. This PR adds the corresponding human-friendly CLI commands so users don't have to use raw API access.

Commands Added

# Get PrivateLink configuration
redisctl cloud connectivity privatelink get --subscription <id>

# Create PrivateLink
redisctl cloud connectivity privatelink create --subscription <id> <json-data>

# Add principals (AWS accounts, IAM roles, etc.)
redisctl cloud connectivity privatelink add-principal --subscription <id> <json-data>

# Remove principals
redisctl cloud connectivity privatelink remove-principal --subscription <id> <json-data>

# Get VPC endpoint creation script
redisctl cloud connectivity privatelink get-script --subscription <id>

Active-Active (CRDB) Support

All commands support Active-Active databases via optional --region flag:

redisctl cloud connectivity privatelink get --subscription 123 --region 1

Examples

# Get PrivateLink configuration
redisctl cloud connectivity privatelink get --subscription 123 -o json

# Create PrivateLink with JSON data
redisctl cloud connectivity privatelink create --subscription 123 \
  '{"shareName":"my-share","principal":"123456789012","type":"aws_account"}' \
  --wait

# Add IAM role principal
redisctl cloud connectivity privatelink add-principal --subscription 123 \
  '{"principal":"arn:aws:iam::123456789012:role/MyRole","type":"iam_role"}'

# Get endpoint creation script
redisctl cloud connectivity privatelink get-script --subscription 123

Architecture

Follows the established pattern from VPC Peering, PSC, and Transit Gateway:

  • Commands defined in cli.rs as PrivateLinkCommands enum
  • Handler implementation in commands/cloud/connectivity/private_link.rs
  • Integrated into CloudConnectivityCommands
  • Supports all standard features: --wait, --output, --query, etc.

CLI Coverage Status

Cloud API vs CLI: 100% complete

All Cloud API handlers now have human-friendly CLI commands:

  • ✅ Account (8/8)
  • ✅ ACL (13/13)
  • ✅ Provider Accounts (5/5)
  • ✅ Subscriptions (13/13)
  • ✅ Fixed Subscriptions (8/8)
  • ✅ Databases (18/18)
  • ✅ Fixed Databases (11/11)
  • ✅ VPC Peering (4/4)
  • ✅ Private Service Connect (6/6)
  • ✅ Transit Gateway (6/6)
  • PrivateLink (5/5) ← NEW
  • ✅ Tasks (2/2)
  • ✅ Users (4/4)

Quality Checks

  • ✅ Compiles cleanly
  • ✅ Clippy passes with no warnings
  • ✅ Formatted with cargo fmt
  • ✅ Help output verified for all commands
  • ✅ Follows established CLI patterns

Related

Add typed CLI commands for AWS PrivateLink connectivity operations,
completing 100% CLI coverage for Cloud API.

Commands added:
- redisctl cloud connectivity privatelink get
- redisctl cloud connectivity privatelink create
- redisctl cloud connectivity privatelink add-principal
- redisctl cloud connectivity privatelink remove-principal
- redisctl cloud connectivity privatelink get-script

All commands support both standard and Active-Active (CRDB) configurations
via optional --region flag.

Examples:
  # Get PrivateLink configuration
  redisctl cloud connectivity privatelink get --subscription 123

  # Create PrivateLink
  redisctl cloud connectivity privatelink create --subscription 123 \
    '{"shareName":"my-share","principal":"123456789012","type":"aws_account"}'

  # Active-Active variant
  redisctl cloud connectivity privatelink get --subscription 123 --region 1

All tests passing, clippy clean, formatted.
@joshrotenberg joshrotenberg merged commit 9eff233 into main Oct 15, 2025
16 checks passed
@joshrotenberg joshrotenberg deleted the feat/cloud-privatelink-cli branch October 15, 2025 16:40
@joshrotenberg joshrotenberg mentioned this pull request Oct 15, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants