Discovery Date: 2025-10-10
Source: cluster-control Laravel application analysis
API Version: v1
Base URL: https://api.maxcluster.de/v1
Analyzed the cluster-control Laravel CLI application to identify all available API endpoints for MySQL, Redis, RabbitMQ, Elasticsearch, and OpenSearch services. All endpoints follow the pattern:
/v1/clusters/{cluster_id}/servers/{server_id}/managed/{service}/{resource|actions}
GET /v1/clusters/{cluster_id}/servers/{server_id}/managed/mysql
Returns:
- Version (MySQL vs MariaDB auto-detected)
- Service state (running, stopped)
- Ports
- List of databases with usernames
Command: mysql:status
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/mysql/actions/restart
Action: Restart MySQL service
Command: mysql:restart
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/mysql/databases
Parameters:
description(optional): Database description
Returns:
name: Database name (auto-generated)username: Database user (auto-generated)password: User password (auto-generated)description: Database description
Command: mysql:new
DELETE /v1/clusters/{cluster_id}/servers/{server_id}/managed/mysql/databases/{database_id}
Action: Delete database
Command: mysql:delete
- Database creation automatically generates random database name, username, and password
- MySQL vs MariaDB is auto-detected by version (10.x = MariaDB)
- Each database gets its own dedicated user with full permissions
GET /v1/clusters/{cluster_id}/servers/{server_id}/managed/redis
Returns:
- Installation status
- Current version
- Instance limit (max 24 instances)
- Per-instance details:
- Description
- State (running, stopped)
- Port
- Optimization type (cache, session, fullpagecache, custom)
- Memory size
Command: redis:status
GET /v1/clusters/{cluster_id}/servers/{server_id}/managed/redis/versions
Returns: List of available Redis versions
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/redis/install
Action: Install Redis on server
Command: redis:install
DELETE /v1/clusters/{cluster_id}/servers/{server_id}/managed/redis/uninstall
Action: Uninstall Redis from server
Command: redis:uninstall
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/redis/upgrade
Action: Upgrade Redis version
Command: redis:upgrade
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/redis/instances
Parameters (varies by optimization type):
- For cache: Optimized for cache workload
- For session: Optimized for session storage
- For fullpagecache: Optimized for full-page caching
- For custom: Custom configuration
Commands:
redis:new:cacheredis:new:sessionredis:new:fullpagecacheredis:new:custom
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/redis/instances/{port}/actions/start
Action: Start Redis instance
Command: redis:start
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/redis/instances/{port}/actions/stop
Action: Stop Redis instance
Command: redis:stop
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/redis/instances/{port}/actions/clear_data
Action: Flush all data from Redis instance (FLUSHALL)
Command: redis:flush
DELETE /v1/clusters/{cluster_id}/servers/{server_id}/managed/redis/instances/{port}
Action: Delete Redis instance
Command: redis:delete
- Redis supports up to 24 instances per server
- Each instance runs on a different port
- Instances can be optimized for different workloads (cache, session, FPC)
- Instances are identified by port number
GET /v1/clusters/{cluster_id}/servers/{server_id}/managed/rabbitmq
Returns:
- Instance state (running, stopped)
- Ports (filters out internal ports: 4369, 25672, 5671, 61613, 61614, 1883, 8883)
- Virtual hosts list
- Users list with tags
Command: rabbitmq:status
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/rabbitmq/install
Action: Install RabbitMQ on server
Command: rabbitmq:install
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/rabbitmq/actions/start
Action: Start RabbitMQ service
Command: rabbitmq:start
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/rabbitmq/actions/stop
Action: Stop RabbitMQ service
Command: rabbitmq:stop
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/rabbitmq/vhosts
Parameters:
name(required): Vhost name (regex:/^\/? ([a-z0-9_\-\/\.])+$/i)users(optional): Array of usernames to grant full access
Action: Create virtual host
Command: rabbitmq:vhost:new
DELETE /v1/clusters/{cluster_id}/servers/{server_id}/managed/rabbitmq/vhosts/{vhost_name}
Action: Delete virtual host
Command: rabbitmq:vhost:delete
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/rabbitmq/users
Parameters: (Need to analyze NewUserCommand.php for exact parameters)
Action: Create RabbitMQ user
Command: rabbitmq:user:new
DELETE /v1/clusters/{cluster_id}/servers/{server_id}/managed/rabbitmq/users/{username}
Action: Delete RabbitMQ user
Command: rabbitmq:user:delete
- Vhost creation can automatically grant permissions to specified users
- Users have tags (e.g., administrator, monitoring)
- Vhost names support slashes and special characters
GET /v1/clusters/{cluster_id}/servers/{server_id}/managed/elasticsearch
Returns:
- Current version
- Available versions
- Upgradeable versions
- Instance limit and current count
- Per-instance details:
- Description
- State
- Port
- API state
- Heap size
- Auto snapshots (enabled/disabled)
Command: elasticsearch:status
GET /v1/clusters/{cluster_id}/servers/{server_id}/managed/elasticsearch/versions
Returns: Available and upgradeable Elasticsearch versions
GET /v1/clusters/{cluster_id}/servers/{server_id}/managed/elasticsearch/plugins
Returns: List of plugins with installation status (pre-installed, installed, not installed)
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/elasticsearch/install
Action: Install Elasticsearch on server
Command: elasticsearch:install
DELETE /v1/clusters/{cluster_id}/servers/{server_id}/managed/elasticsearch/uninstall
Action: Uninstall Elasticsearch from server
Command: elasticsearch:uninstall
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/elasticsearch/upgrade
Action: Upgrade Elasticsearch version
Command: elasticsearch:upgrade
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/elasticsearch/instances
Action: Create new Elasticsearch instance
Command: elasticsearch:new
DELETE /v1/clusters/{cluster_id}/servers/{server_id}/managed/elasticsearch/instances/{instance_id}
Action: Delete Elasticsearch instance
Command: elasticsearch:delete
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/elasticsearch/instances/{instance_id}/actions/start
Action: Start Elasticsearch instance
Command: elasticsearch:start
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/elasticsearch/instances/{instance_id}/actions/stop
Action: Stop Elasticsearch instance
Command: elasticsearch:stop
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/elasticsearch/instances/{instance_id}/actions/restart
Action: Restart Elasticsearch instance
Command: elasticsearch:restart
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/elasticsearch/instances/{instance_id}/actions/heapsize
Action: Set maximum heap size for instance
Command: elasticsearch:heapsize
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/elasticsearch/plugins/{plugin_name}/install
Action: Install Elasticsearch plugin
Command: elasticsearch:plugin:install
DELETE /v1/clusters/{cluster_id}/servers/{server_id}/managed/elasticsearch/plugins/{plugin_name}
Action: Uninstall Elasticsearch plugin
Command: elasticsearch:plugin:uninstall
GET /v1/clusters/{cluster_id}/servers/{server_id}/managed/elasticsearch/snapshots
Action: List existing snapshots
Command: elasticsearch:snapshot:list
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/elasticsearch/snapshots
Action: Create snapshot
Command: elasticsearch:snapshot:new
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/elasticsearch/snapshots/{snapshot_id}/restore
Action: Restore snapshot
Command: elasticsearch:snapshot:restore
OpenSearch endpoints follow the same pattern as Elasticsearch, replacing elasticsearch with opensearch:
GET /v1/clusters/{cluster_id}/servers/{server_id}/managed/opensearch
GET /v1/clusters/{cluster_id}/servers/{server_id}/managed/opensearch/versions
GET /v1/clusters/{cluster_id}/servers/{server_id}/managed/opensearch/plugins
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/opensearch/install
DELETE /v1/clusters/{cluster_id}/servers/{server_id}/managed/opensearch/uninstall
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/opensearch/upgrade
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/opensearch/instances
DELETE /v1/clusters/{cluster_id}/servers/{server_id}/managed/opensearch/instances/{instance_id}
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/opensearch/instances/{instance_id}/actions/start
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/opensearch/instances/{instance_id}/actions/stop
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/opensearch/instances/{instance_id}/actions/restart
POST /v1/clusters/{cluster_id}/servers/{server_id}/managed/opensearch/instances/{instance_id}/actions/heapsize
Same as Elasticsearch, with opensearch replacing elasticsearch in paths.
Commands: Same as Elasticsearch with opensearch: prefix
- β Status check
- β Restart service
- β Create database (auto-generates credentials)
- β Delete database
- β Import SQL dump (NOT FOUND - will need workaround)
- β Manual user creation (handled automatically)
- β Status check
- β Install/uninstall Redis
- β Create optimized instances (cache, session, FPC)
- β Start/stop instances
- β Flush all data (clear_data action)
- β Delete instance
- β Get INFO output (need to use status endpoint)
- β Direct configuration (instances are pre-optimized)
- β Status check
- β Install RabbitMQ
- β Start/stop service
- β Create/delete virtual hosts
- β Create/delete users
- β Grant permissions (via vhost users parameter)
- β List/purge queues (NOT FOUND in CLI)
- β List exchanges (NOT FOUND in CLI)
- β Status check
- β Install/uninstall
- β Create/delete instances
- β Start/stop/restart instances
- β Plugin management
- β Snapshot/restore
- β Heap size configuration
- β Direct index management (via HTTP API)
- β Cluster health (via status endpoint)
Implement status and restart for all services as these are critical for health checks and troubleshooting.
Implement database, Redis instance, RabbitMQ vhost/user creation for Magento setup.
Implement Redis flush, database delete for demo reset workflows.
Implement Elasticsearch/OpenSearch instance management, snapshots, plugins.
-
MySQL Import Dump: No direct API endpoint
- Workaround: Provide connection details, let user import manually or via SSH
- Alternative: Document manual import process
-
RabbitMQ Queue Management: No list/purge queue endpoints
- Workaround: Use RabbitMQ Management HTTP API directly
- Alternative: Access via RabbitMQ web UI
-
Elasticsearch Index Management: No direct index CRUD
- Workaround: Use Elasticsearch HTTP API directly after instance creation
- Alternative: Let Magento manage indices
-
Redis Direct Configuration: Instances are pre-optimized
- Workaround: Use instance types (cache, session, FPC)
- Alternative: Accept MaxCluster's optimizations
Based on discovered endpoints, implement these tools:
mysql_status- GET /managed/mysqlmysql_restart- POST /managed/mysql/actions/restartmysql_create_database- POST /managed/mysql/databasesmysql_delete_database- DELETE /managed/mysql/databases/{id}mysql_list_databases- Extracted from status endpoint
redis_status- GET /managed/redisredis_create_cache_instance- POST /managed/redis/instances (cache)redis_create_session_instance- POST /managed/redis/instances (session)redis_create_fpc_instance- POST /managed/redis/instances (fullpagecache)redis_start_instance- POST /managed/redis/instances/{port}/actions/startredis_stop_instance- POST /managed/redis/instances/{port}/actions/stopredis_flush_instance- POST /managed/redis/instances/{port}/actions/clear_data
rabbitmq_status- GET /managed/rabbitmqrabbitmq_start- POST /managed/rabbitmq/actions/startrabbitmq_stop- POST /managed/rabbitmq/actions/stoprabbitmq_create_vhost- POST /managed/rabbitmq/vhostsrabbitmq_create_user- POST /managed/rabbitmq/users
elasticsearch_status- GET /managed/elasticsearchelasticsearch_create_instance- POST /managed/elasticsearch/instanceselasticsearch_start- POST /managed/elasticsearch/instances/{id}/actions/startelasticsearch_stop- POST /managed/elasticsearch/instances/{id}/actions/stopelasticsearch_restart- POST /managed/elasticsearch/instances/{id}/actions/restart
Same as Elasticsearch, with opensearch prefix
- β Stage 1 Complete: API endpoints discovered and documented
- βοΈ Stage 2: Implement MySQL management tools
- βοΈ Stage 3: Implement Redis management tools
- βοΈ Stage 4: Implement RabbitMQ management tools
- βοΈ Stage 5: Implement Elasticsearch/OpenSearch tools
- βοΈ Stage 6: Create Magento 2 orchestration workflows
Status: β Discovery Complete Ready for Implementation: YES Blocker Issues: None - all critical endpoints available