This directory contains end-to-end deployment scenarios for the Open Operator Platform (OOP). Each scenario serves a specific use case and is organized into its own subdirectory with standardized playbook names.
## Directory Structure
```
scenarios/
├── README.md
├── full_oop/ # Complete single operator platform (production)
│ ├── deploy.yml
│ ├── graceful_undeploy.yml
│ └── quick_undeploy.yml
│
├── all_in_one/ # Federation testing on single cluster (development)
│ ├── deploy.yml
│ ├── graceful_undeploy.yml
│ └── quick_undeploy.yml
│
└── dual_oop/ # Real multi-operator federation (production)
├── deploy.yml
├── graceful_undeploy.yml
└── quick_undeploy.yml
```
## Scenarios Overview
### 1. Full OOP (Production Single Operator)
**Purpose**: Deploy a complete, production-ready Operator Platform for a single operator.
-erecreate_cluster=yes# Force recreate Kind cluster
-ekind_cluster_name=custom-name # Custom cluster name
-eworker_nodes=2 # Number of worker nodes
# Storage
-eprepare_oop_storage=true# Enable OOP storage (required for OEG/SRM)
# Federation Manager (for full_oop scenario)
-efederation_manager_ecp_client_name=lite2edge # ECP client to use
-efederation_manager_ecp_port=30100 # ECP client port
# Deployment mode
-edeployment_mode=remote # Run in remote mode
```
## Federation Manager Configuration
### Full OOP (Single FM)
-**Namespace**: `federation-manager`
-**Keycloak**: Single instance
-**MongoDB**: Single instance
-**Purpose**: Production single-operator platform
### All-in-One (Dual FM)
-**Primary FM**:
- Namespace: `federation-manager`
- Keycloak realm: Primary
- MongoDB: Primary instance
-**Remote FM**:
- Namespace: `federation-manager-remote`
- Keycloak realm: Secondary
- MongoDB: Secondary instance
- Different NodePorts to avoid conflicts
-**Purpose**: Simulate federation for testing
### Dual OOP (Real Federation)
-**OP1**: Single FM on first host
-**OP2**: Single FM on second host
-**Purpose**: Real production federation across hosts
## Troubleshooting
### Playbook Not Found
If you see `ERROR! the playbook: ... could not be found`:
- Ensure you're running from the `ansible/` directory
- Check the path is correct (now includes subdirectories)
### Variables Not Loading
If variables seem missing:
- Group variables auto-load from `group_vars/all/`
- Ensure `secrets.yml` is passed with `-e @secrets.yml`
- Check `ansible.cfg` points to correct `inventory/` and `group_vars/`
### Kind Cluster Already Exists
If Kind cluster already exists and you want to recreate:
```bash
ansible-playbook ... -erecreate_cluster=yes
```
### Port Conflicts (All-in-One Scenario)
The all_in_one scenario handles port conflicts automatically by using different NodePorts for the remote FM. If you encounter conflicts, check the variables in `group_vars/all/federation_manager.yml`.
### Federation Manager Not Connecting
For all_in_one scenario, ensure both FMs can reach lite2edge on the shared NodePort. Check:
```bash
kubectl get svc -n lite2edge
kubectl get pods -n federation-manager
kubectl get pods -n federation-manager-remote
```
## Migration Notes
This directory was reorganized to reflect three distinct use cases:
| Old Path | New Path | Notes |
|----------|----------|-------|
| `single_full_oop/` | `all_in_one/` | Renamed to clarify dual FM purpose |
| N/A | `full_oop/` | **NEW** - single FM production scenario |