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
3 changes: 2 additions & 1 deletion docs/src/api-reference/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -364,8 +364,9 @@ redisctl api cloud put /subscriptions/123/databases/456 --data '{

### Success Response
```bash
# Pretty print JSON
# Pretty print JSON (jq for formatting, or use -o json which is already formatted)
redisctl api cloud get /subscriptions -o json | jq .
redisctl api cloud get /subscriptions -o json # Already pretty-printed

# Extract specific fields
redisctl api cloud get /subscriptions -q "[].{id: id, name: name}"
Expand Down
6 changes: 3 additions & 3 deletions docs/src/cloud/access-control/acl.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,12 +65,12 @@ redisctl cloud acl update-acl-user <subscription_id> <user_id> --data '{"passwor
redisctl cloud acl delete-acl-user <subscription_id> <user_id>
```

## JSON Output
## JMESPath Queries

All commands support `-o json` for structured output:
All commands support `-q` for filtering output:

```bash
redisctl cloud acl list-roles 12345 -o json | jq '.[] | {name, id}'
redisctl cloud acl list-roles 12345 -q '[].{name: name, id: id}'
```

## Common Patterns
Expand Down
13 changes: 8 additions & 5 deletions docs/src/cloud/access-control/users.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,16 +44,19 @@ redisctl cloud user update <user_id> --data '{"name": "New Name"}'
redisctl cloud user delete <user_id>
```

## JSON Output
## JMESPath Queries

All commands support structured output for scripting:
All commands support JMESPath queries for filtering and formatting:

```bash
# List all user emails
redisctl cloud user list -o json | jq '.[].email'
redisctl cloud user list -q '[].email'

# Find admin users
redisctl cloud user list -o json | jq '.[] | select(.role == "owner")'
# Find owner users
redisctl cloud user list -q "[?role=='owner']"

# Get specific fields
redisctl cloud user list -q '[].{email: email, role: role}' -o table
```

## User Roles
Expand Down
7 changes: 2 additions & 5 deletions docs/src/cloud/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,11 +138,8 @@ redisctl api cloud get /tasks/$TASK_ID -q 'response.resourceId'
### Bulk Operations

```bash
# Get all database IDs
DBS=$(redisctl api cloud get /subscriptions/123/databases -q '[].databaseId')

# Process each
for db in $(echo $DBS | jq -r '.[]'); do
# Get all database IDs and process each
for db in $(redisctl api cloud get /subscriptions/123/databases -q '[].databaseId' --raw); do
redisctl api cloud get /subscriptions/123/databases/$db
done
```
Expand Down
9 changes: 4 additions & 5 deletions docs/src/cloud/commands/databases.md
Original file line number Diff line number Diff line change
Expand Up @@ -204,9 +204,8 @@ redisctl cloud database import 123456:789 --data '{
### Get Connection String

```bash
DB=$(redisctl cloud database get 123456:789)
ENDPOINT=$(echo $DB | jq -r '.publicEndpoint')
PASSWORD=$(echo $DB | jq -r '.password')
ENDPOINT=$(redisctl cloud database get 123456:789 -q 'publicEndpoint')
PASSWORD=$(redisctl cloud database get 123456:789 -q 'password')
echo "redis://:$PASSWORD@$ENDPOINT"
```

Expand All @@ -222,8 +221,8 @@ redisctl cloud database list \
### Bulk Operations

```bash
# List all database IDs
for db in $(redisctl cloud database list -q "[].databaseId" | jq -r '.[]'); do
# Process all database IDs
for db in $(redisctl cloud database list -q '[].databaseId' --raw); do
echo "Processing $db"
done
```
Expand Down
2 changes: 1 addition & 1 deletion docs/src/cloud/commands/networking.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ PEERING=$(redisctl cloud vpc-peering create \
}' --wait)

echo "Accept peering request in AWS Console"
echo "Peering ID: $(echo $PEERING | jq -r '.vpcPeeringId')"
echo "Peering ID: $(redisctl cloud vpc-peering list --subscription 123456 -q '[0].vpcPeeringId')"
```

### List All Network Connections
Expand Down
9 changes: 3 additions & 6 deletions docs/src/cloud/commands/subscriptions.md
Original file line number Diff line number Diff line change
Expand Up @@ -217,11 +217,8 @@ redisctl cloud fixed-subscription create --data @fixed-subscription.json --wait
### List All Databases Across Subscriptions

```bash
# Get all subscription IDs
SUBS=$(redisctl cloud subscription list -q "[].id" | jq -r '.[]')

# List databases for each subscription
for sub in $SUBS; do
for sub in $(redisctl cloud subscription list -q '[].id' --raw); do
echo "Subscription $sub:"
redisctl cloud database list --subscription $sub
done
Expand All @@ -231,8 +228,8 @@ done

```bash
# Get memory usage across all databases
redisctl cloud subscription get 123456 -q "databases[].{name: name, memory: memoryLimitInGb}" | \
jq -r '.[] | "\(.name): \(.memory)GB"'
redisctl cloud subscription get 123456 \
-q "databases[].{name: name, memory: memoryLimitInGb}" -o table
```

## Troubleshooting
Expand Down
12 changes: 6 additions & 6 deletions docs/src/cloud/core-resources/databases.md
Original file line number Diff line number Diff line change
Expand Up @@ -295,25 +295,25 @@ redisctl cloud database create-active-active --subscription-id <ID> --data @crdb
### Get Database Connection String

```bash
# Get Redis URI
DB=$(redisctl cloud database get --subscription-id 123456 --database-id 789)
echo "redis://:$(echo $DB | jq -r .password)@$(echo $DB | jq -r .publicEndpoint)"
# Get Redis URI components
ENDPOINT=$(redisctl cloud database get --subscription-id 123456 --database-id 789 -q 'publicEndpoint')
PASSWORD=$(redisctl cloud database get --subscription-id 123456 --database-id 789 -q 'password')
echo "redis://:$PASSWORD@$ENDPOINT"
```

### Monitor Database Metrics

```bash
# Check memory usage
redisctl cloud database get --subscription-id 123456 --database-id 789 \
-q "{used: usedMemoryInMB, limit: memoryLimitInGB}" | \
jq -r '"Memory: \(.used)MB / \(.limit)GB"'
-q "{used: usedMemoryInMB, limit: memoryLimitInGB}" -o table
```

### Bulk Operations

```bash
# Update all databases in subscription
for db in $(redisctl cloud database list --subscription-id 123456 -q "[].databaseId" | jq -r '.[]'); do
for db in $(redisctl cloud database list --subscription-id 123456 -q '[].databaseId' --raw); do
echo "Updating database $db"
redisctl cloud database update \
--subscription-id 123456 \
Expand Down
4 changes: 2 additions & 2 deletions docs/src/cloud/core-resources/provider-accounts.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,9 @@ redisctl cloud connectivity vpc-peering create <subscription_id> --data '{...}'

Bring Your Own Key (BYOK) encryption requires a linked cloud provider account to access your KMS keys.

## JSON Output
## JMESPath Queries

```bash
# List all provider accounts with their providers
redisctl cloud provider-account list -o json | jq '.[] | {name, provider, id}'
redisctl cloud provider-account list -q '[].{name: name, provider: provider, id: id}'
```
9 changes: 3 additions & 6 deletions docs/src/cloud/core-resources/subscriptions.md
Original file line number Diff line number Diff line change
Expand Up @@ -217,11 +217,8 @@ redisctl cloud fixed-subscription create --data @fixed-subscription.json --wait
### List All Databases Across Subscriptions

```bash
# Get all subscription IDs
SUBS=$(redisctl cloud subscription list -q "[].id" | jq -r '.[]')

# List databases for each subscription
for sub in $SUBS; do
for sub in $(redisctl cloud subscription list -q '[].id' --raw); do
echo "Subscription $sub:"
redisctl cloud database list --subscription-id $sub
done
Expand All @@ -231,8 +228,8 @@ done

```bash
# Get memory usage across all databases
redisctl cloud subscription get 123456 -q "databases[].{name: name, memory: memoryLimitInGb}" | \
jq -r '.[] | "\(.name): \(.memory)GB"'
redisctl cloud subscription get 123456 \
-q "databases[].{name: name, memory: memoryLimitInGb}" -o table
```

## Troubleshooting
Expand Down
9 changes: 4 additions & 5 deletions docs/src/cloud/examples.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,9 +115,8 @@ while read sub_id; do
done > all-databases.json

# Create summary report
redisctl cloud subscription list | \
jq -r '.[] |
"\(.name): \(.numberOfDatabases) databases, \(.status)"'
redisctl cloud subscription list \
-q "[].{name: name, databases: numberOfDatabases, status: status}" -o table
```

### Bulk Operations
Expand Down Expand Up @@ -193,9 +192,9 @@ redisctl api cloud patch /subscriptions/12345/databases/67890 \
redisctl cloud subscription list -q "[].id" | while read sub_id; do
echo "Checking subscription $sub_id..."

# Check for non-active databases
redisctl cloud database list --subscription-id $sub_id \
-q "[?status!='active'].{name:name,status:status}" | \
jq -r '.[] | " WARNING: \(.name) is \(.status)"'
-q "[?status!='active'].{name:name,status:status}" -o table
done
```

Expand Down
6 changes: 3 additions & 3 deletions docs/src/cloud/operations/tasks.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,13 @@ Tasks progress through these states:

```bash
# Create a database and capture the task ID
TASK_ID=$(redisctl cloud database create 12345 --data '{...}' -o json | jq -r '.taskId')
TASK_ID=$(redisctl cloud database create 12345 --data '{...}' -q 'taskId')

# Wait for it
redisctl cloud task wait $TASK_ID

# Check the result
redisctl cloud task get $TASK_ID -o json | jq '.response'
redisctl cloud task get $TASK_ID -q 'response'
```

## Error Handling
Expand All @@ -89,5 +89,5 @@ When a task fails, you can inspect the error:

```bash
# Get task details including error info
redisctl cloud task get <task_id> -o json | jq '{status, description, response}'
redisctl cloud task get <task_id> -q '{status: status, description: description, response: response}'
```
5 changes: 2 additions & 3 deletions docs/src/cloud/workflows.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,9 +128,8 @@ redisctl cloud workflow subscription-setup \

**Manual equivalent:**
```bash
# 1. Create subscription
SUB=$(redisctl cloud subscription create --data '{...}' --wait)
SUB_ID=$(echo $SUB | jq -r '.id')
# 1. Create subscription and get ID
SUB_ID=$(redisctl cloud subscription create --data '{...}' --wait -q 'id')

# 2. Wait for active status
while [ "$(redisctl cloud subscription get $SUB_ID -q 'status')" != "active" ]; do
Expand Down
24 changes: 17 additions & 7 deletions docs/src/common-features/output-formats.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,19 +65,29 @@ redisctl cloud subscription list -o table -q "[].{id:id,name:name,status:status}

| Format | Best For |
|--------|----------|
| JSON | Scripting, piping to `jq`, CI/CD |
| JSON | Scripting, CI/CD pipelines |
| Table | Interactive use, quick overview |
| YAML | Config files, readable structured data |

## Piping to Other Tools
## Using JMESPath Queries

Use the built-in `-q/--query` flag for filtering and transforming output without external tools:

```bash
# Parse with jq
redisctl cloud database list | jq '.[0].name'
# Get first database name
redisctl cloud database list -q '[0].name'

# Count items
redisctl enterprise database list | jq 'length'
redisctl enterprise database list -q 'length(@)'

# Get specific fields from all items
redisctl cloud subscription list -q '[].{id: id, name: name}'

# Convert to CSV
redisctl cloud subscription list -o json | jq -r '.[] | [.id, .name] | @csv'
# Filter by condition
redisctl enterprise database list -q "[?status=='active'].name"

# Get raw values for shell scripts (no JSON quotes)
redisctl cloud database list -q '[0].name' --raw
```

> **Note**: JMESPath is built into redisctl, so you don't need external tools like `jq` for most operations.
6 changes: 3 additions & 3 deletions docs/src/common-features/raw-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,11 +107,11 @@ redisctl api cloud post /subscriptions/12345/databases \
### Save Response to File

```bash
# Save response
# Save response (already pretty-printed by default)
redisctl api cloud get /subscriptions > subscriptions.json

# Pretty print and save
redisctl api cloud get /subscriptions | jq '.' > subscriptions.json
# Filter before saving
redisctl api cloud get /subscriptions -q '[].{id: id, name: name}' > subscriptions.json
```

## Common Endpoints
Expand Down
13 changes: 7 additions & 6 deletions docs/src/cookbook/cloud/backup-restore.md
Original file line number Diff line number Diff line change
Expand Up @@ -184,12 +184,11 @@ redisctl cloud database create \
Use backups to create staging environments:

```bash
# Get latest production backup
# Get latest production backup using JMESPath
BACKUP_ID=$(redisctl cloud database backup-status \
--database-id 42:12345 \
-o json \
-q 'last_backup.backup_id' \
| jq -r '.')
--raw)

# Create staging database from production backup
redisctl cloud database create \
Expand Down Expand Up @@ -307,6 +306,7 @@ BACKUP_RESULT=$(redisctl cloud database backup \
--wait \
-o json)

# Extract backup_id using jq (result is JSON from redisctl)
BACKUP_ID=$(echo "$BACKUP_RESULT" | jq -r '.backup_id')

echo "Backup created: $BACKUP_ID"
Expand Down Expand Up @@ -374,17 +374,18 @@ BACKUP_STATUS=$(redisctl cloud database backup-status \
--database-id ${SUBSCRIPTION_ID}:${DATABASE_ID} \
-o json)

# Parse JSON output with jq
LAST_BACKUP_TIME=$(echo "$BACKUP_STATUS" | jq -r '.last_backup.timestamp')
BACKUP_STATUS=$(echo "$BACKUP_STATUS" | jq -r '.last_backup.status')
LAST_BACKUP_STATUS=$(echo "$BACKUP_STATUS" | jq -r '.last_backup.status')

# Calculate age in hours
CURRENT_TIME=$(date +%s)
BACKUP_TIME=$(date -d "$LAST_BACKUP_TIME" +%s)
AGE_HOURS=$(( ($CURRENT_TIME - $BACKUP_TIME) / 3600 ))

if [ "$BACKUP_STATUS" != "completed" ] || [ $AGE_HOURS -gt $MAX_AGE_HOURS ]; then
if [ "$LAST_BACKUP_STATUS" != "completed" ] || [ $AGE_HOURS -gt $MAX_AGE_HOURS ]; then
echo "ALERT: Backup health check failed!"
echo "Status: $BACKUP_STATUS"
echo "Status: $LAST_BACKUP_STATUS"
echo "Age: $AGE_HOURS hours"
# Send alert (email, Slack, PagerDuty, etc.)
exit 1
Expand Down
8 changes: 4 additions & 4 deletions docs/src/cookbook/cloud/configure-acls.md
Original file line number Diff line number Diff line change
Expand Up @@ -309,24 +309,24 @@ cat > acl-setup.json << 'EOF'
}
EOF

# Create rules
jq -r '.rules[] | @json' acl-setup.json | while read rule; do
# Create rules - using jq to extract JSON objects from array
for rule in $(jq -c '.rules[]' acl-setup.json); do
redisctl cloud acl create-redis-rule \
--subscription 42 \
--data "$rule" \
--wait
done

# Create roles
jq -r '.roles[] | @json' acl-setup.json | while read role; do
for role in $(jq -c '.roles[]' acl-setup.json); do
redisctl cloud acl create-role \
--subscription 42 \
--data "$role" \
--wait
done

# Create users
jq -r '.users[] | @json' acl-setup.json | while read user; do
for user in $(jq -c '.users[]' acl-setup.json); do
redisctl cloud acl create-acl-user \
--subscription 42 \
--data "$user" \
Expand Down
2 changes: 1 addition & 1 deletion docs/src/cookbook/cloud/create-first-database.md
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ DB_INFO=$(redisctl cloud database create \
--wait \
-o json)

DB_ID=$(echo "$DB_INFO" | jq -r '.database_id')
DB_ID=$(redisctl cloud database list --subscription $SUB_ID -q '[0].databaseId')
echo "Created database: $DB_ID"
```

Expand Down
Loading
Loading