Public Access
initial-commit
This commit is contained in:
+297
@@ -0,0 +1,297 @@
|
||||
# Charybdis Demo
|
||||
|
||||
See the full flow in action: register a service via one gRPC call and watch DefectDojo auto-provision a product — no YAML files, no manual steps. Optionally, see how Backstage can consume entities from Charybdis in real-time via the YAML adapter.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Docker & Docker Compose
|
||||
- 8GB RAM recommended
|
||||
- Ports available: 5432, 8080, 8081, 50051 (and 3000 if using Backstage)
|
||||
|
||||
## Quick Start (5 minutes)
|
||||
|
||||
### 1. Start the demo stack
|
||||
|
||||
```bash
|
||||
./demo.sh
|
||||
```
|
||||
|
||||
This will start:
|
||||
- ✅ Charybdis (gRPC on :50051, YAML adapter on :8081)
|
||||
- ✅ DefectDojo (UI on :8080)
|
||||
- ✅ PostgreSQL instances for each service
|
||||
- ℹ️ Backstage (UI on :3000) — optional, see [Backstage Integration](#optional-backstage-integration) below
|
||||
|
||||
### 2. Create your first service
|
||||
|
||||
Using grpcurl (if installed):
|
||||
|
||||
```bash
|
||||
grpcurl -plaintext -d '{
|
||||
"entity": {
|
||||
"kind": "Component",
|
||||
"component_metadata": {
|
||||
"name": "payment-api",
|
||||
"description": "Payment processing service",
|
||||
"labels": {
|
||||
"team": "payments",
|
||||
"env": "production"
|
||||
},
|
||||
"tags": ["api", "critical"]
|
||||
},
|
||||
"component_spec": {
|
||||
"type": "service",
|
||||
"lifecycle": "production",
|
||||
"owner": "team-payments"
|
||||
}
|
||||
}
|
||||
}' localhost:50051 charybdis.entities.EntityService/CreateEntity
|
||||
```
|
||||
|
||||
Or using the included grpcurl container:
|
||||
|
||||
```bash
|
||||
docker-compose -f docker-compose.demo.yml run --rm grpcurl \
|
||||
-plaintext -d '{
|
||||
"entity": {
|
||||
"kind": "Component",
|
||||
"component_metadata": {
|
||||
"name": "payment-api",
|
||||
"description": "Payment processing service"
|
||||
},
|
||||
"component_spec": {
|
||||
"type": "service",
|
||||
"lifecycle": "production",
|
||||
"owner": "team-payments"
|
||||
}
|
||||
}
|
||||
}' charybdis:50051 charybdis.entities.EntityService/CreateEntity
|
||||
```
|
||||
|
||||
### 3. See the magic happen! ✨
|
||||
|
||||
**In DefectDojo** (http://localhost:8080):
|
||||
- Login: `admin` / `admin`
|
||||
- Go to "Products"
|
||||
- You'll see "payment-api" automatically created! 🎉
|
||||
|
||||
**In Charybdis** (via gRPC):
|
||||
- Query the entity back — it now has annotations:
|
||||
- `defectdojo.com/product-id`
|
||||
- `defectdojo.com/engagement-id` (if auto-create enabled)
|
||||
|
||||
**In the YAML adapter** (http://localhost:8081):
|
||||
- Visit `http://localhost:8081/yaml/locations` — entities are served in Backstage-compatible YAML format
|
||||
- Any Backstage instance pointed at this URL will pick up entities automatically
|
||||
|
||||
## What just happened?
|
||||
|
||||
```
|
||||
1. You created a Component entity in Charybdis (gRPC API)
|
||||
2. Charybdis stored it in PostgreSQL
|
||||
3. Event published: EntityCreated(Component)
|
||||
4. DefectDojo plugin received the event
|
||||
5. Plugin created a Product in DefectDojo via API
|
||||
6. Plugin stored the product_id in entity annotations
|
||||
7. Entity is now queryable via gRPC and available via YAML adapter
|
||||
```
|
||||
|
||||
**30 seconds instead of 30 minutes of manual provisioning — no YAML files, no manual tool setup.**
|
||||
|
||||
## Try more operations
|
||||
|
||||
### List all entities
|
||||
|
||||
```bash
|
||||
grpcurl -plaintext -d '{}' localhost:50051 \
|
||||
charybdis.entities.EntityService/ListEntities
|
||||
```
|
||||
|
||||
### Get a specific entity
|
||||
|
||||
```bash
|
||||
grpcurl -plaintext -d '{"id": "YOUR_ENTITY_ID"}' localhost:50051 \
|
||||
charybdis.entities.EntityService/GetEntity
|
||||
```
|
||||
|
||||
### Update an entity
|
||||
|
||||
```bash
|
||||
grpcurl -plaintext -d '{
|
||||
"id": "YOUR_ENTITY_ID",
|
||||
"entity": {
|
||||
"kind": "Component",
|
||||
"component_metadata": {
|
||||
"name": "payment-api",
|
||||
"description": "Updated description"
|
||||
}
|
||||
}
|
||||
}' localhost:50051 charybdis.entities.EntityService/UpdateEntity
|
||||
```
|
||||
|
||||
→ Check DefectDojo: Product description updated automatically!
|
||||
|
||||
### Delete an entity
|
||||
|
||||
```bash
|
||||
grpcurl -plaintext -d '{"id": "YOUR_ENTITY_ID"}' localhost:50051 \
|
||||
charybdis.entities.EntityService/DeleteEntity
|
||||
```
|
||||
|
||||
→ Check DefectDojo: Product deleted automatically!
|
||||
|
||||
## Explore the stack
|
||||
|
||||
### Check Charybdis logs
|
||||
|
||||
```bash
|
||||
docker-compose -f docker-compose.demo.yml logs -f charybdis
|
||||
```
|
||||
|
||||
You'll see:
|
||||
- Entity CRUD operations
|
||||
- Event dispatching
|
||||
- Plugin execution
|
||||
- DefectDojo API calls
|
||||
|
||||
### Check DefectDojo
|
||||
|
||||
Open http://localhost:8080
|
||||
- Login: `admin` / `admin`
|
||||
- Products: See auto-created products
|
||||
- Engagements: See auto-created CI/CD engagements
|
||||
|
||||
### Check the YAML Adapter
|
||||
|
||||
```bash
|
||||
# List all entity locations (Backstage-compatible format)
|
||||
curl http://localhost:8081/yaml/locations
|
||||
```
|
||||
|
||||
This endpoint serves entities as Backstage-compatible YAML — useful for Backstage integration or any tool that consumes this format.
|
||||
|
||||
### Access databases
|
||||
|
||||
**Charybdis database:**
|
||||
```bash
|
||||
docker-compose -f docker-compose.demo.yml exec postgres-charybdis \
|
||||
psql -U charybdis -d charybdis
|
||||
```
|
||||
|
||||
**Query entities:**
|
||||
```sql
|
||||
SELECT id, kind, annotations FROM entities;
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Services not starting
|
||||
|
||||
Check logs:
|
||||
```bash
|
||||
docker-compose -f docker-compose.demo.yml logs
|
||||
```
|
||||
|
||||
### DefectDojo API token issue
|
||||
|
||||
Manually get a token:
|
||||
1. Open http://localhost:8080
|
||||
2. Login: `admin` / `admin`
|
||||
3. Go to Settings → API Key
|
||||
4. Copy the token
|
||||
5. Update `.env`: `DEFECTDOJO_API_TOKEN=your-token`
|
||||
6. Restart: `docker-compose -f docker-compose.demo.yml restart charybdis`
|
||||
|
||||
### Port conflicts
|
||||
|
||||
If ports are already in use, edit `docker-compose.demo.yml` to change:
|
||||
- `3000:3000` → `3001:3000` (Backstage)
|
||||
- `8080:8080` → `8082:8080` (DefectDojo)
|
||||
- etc.
|
||||
|
||||
## Clean up
|
||||
|
||||
### Stop services
|
||||
|
||||
```bash
|
||||
docker-compose -f docker-compose.demo.yml down
|
||||
```
|
||||
|
||||
### Remove all data
|
||||
|
||||
```bash
|
||||
docker-compose -f docker-compose.demo.yml down -v
|
||||
```
|
||||
|
||||
## Optional: Backstage Integration
|
||||
|
||||
If you use Backstage, point it at the Charybdis YAML adapter to replace static `catalog-info.yaml` files:
|
||||
|
||||
```yaml
|
||||
# backstage app-config.yaml
|
||||
catalog:
|
||||
locations:
|
||||
- type: url
|
||||
target: http://charybdis:8081/yaml/locations
|
||||
rules:
|
||||
- allow: [Component, System, Service, API, User, Group]
|
||||
```
|
||||
|
||||
Backstage will discover all entities from Charybdis automatically. See the `docker-compose.demo.yml` file for the commented-out Backstage service if you want to run it as part of the demo stack.
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. **Read the docs**: [Getting Started](../docs/getting-started.md)
|
||||
2. **Understand the architecture**: [Architecture](../docs/architecture.md)
|
||||
3. **Create your own plugin**: [Plugin Guide](../plugins/README.md)
|
||||
|
||||
## Demo Architecture
|
||||
|
||||
```
|
||||
┌─────────────┐
|
||||
│ Client │ (grpcurl / CI/CD)
|
||||
│ (gRPC) │
|
||||
└──────┬──────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────┐
|
||||
│ Charybdis │
|
||||
│ ┌─────────────┐ ┌──────────────┐ │
|
||||
│ │ gRPC API │ │ YAML Adapter │ │
|
||||
│ │ :50051 │ │ :8081 │ │
|
||||
│ └──────┬──────┘ └──────┬───────┘ │
|
||||
│ │ │ │
|
||||
│ ┌──────▼────────────────▼───────┐ │
|
||||
│ │ Entity Repository │ │
|
||||
│ │ (PostgreSQL) │ │
|
||||
│ └──────┬────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ┌──────▼────────┐ │
|
||||
│ │ Event Bus │ │
|
||||
│ └──────┬────────┘ │
|
||||
│ │ │
|
||||
│ ┌──────▼────────────────┐ │
|
||||
│ │ Plugin Dispatcher │ │
|
||||
│ │ ┌─────────────────┐ │ │
|
||||
│ │ │ DefectDojo │ │ │
|
||||
│ │ │ Plugin │ │ │
|
||||
│ │ └─────────────────┘ │ │
|
||||
│ └───────────────────────┘ │
|
||||
└──────┬──────────────┬───────────────┘
|
||||
│ │
|
||||
▼ ▼ (YAML Adapter)
|
||||
┌──────────────┐ ┌────────────────────┐
|
||||
│ DefectDojo │ │ Backstage / Any │
|
||||
│ :8080 │ │ compatible UI │
|
||||
└──────────────┘ └────────────────────┘
|
||||
```
|
||||
|
||||
## Support
|
||||
|
||||
- GitHub Issues: [github.com/charybdis-catalog/charybdis/issues](https://github.com/charybdis-catalog/charybdis/issues)
|
||||
- Documentation: [docs/](docs/)
|
||||
- Discord: [Join our community](https://discord.gg/...)
|
||||
|
||||
---
|
||||
|
||||
**🎉 Welcome to automated DevSecOps orchestration with Charybdis!**
|
||||
Reference in New Issue
Block a user