Harbor Container Registry Plugin for Waldur Site Agent
This plugin provides production-ready integration between Waldur Mastermind and Harbor container registry, enabling automated management of Harbor projects, storage quotas, and OIDC-based access control.
Features
- ✅ Automated Project Management: Creates Harbor projects for each Waldur resource
- ✅ Storage Quota Management: Configurable storage limits with usage tracking
- ✅ OIDC Integration: Automatic OIDC group creation and assignment for access control
- ✅ Usage Reporting: Reports container storage usage back to Waldur for billing
- ✅ Robot Account Authentication: Uses Harbor robot accounts for API operations
- ✅ Production Ready: All operations tested and working with Harbor API v2.0
Architecture & Mapping
Waldur ↔ Harbor Resource Mapping
graph TB
subgraph "Waldur Mastermind"
WC[Waldur Customer<br/>customer-slug]
WP[Waldur Project<br/>project-slug]
WR1[Waldur Resource 1<br/>resource-slug-1]
WR2[Waldur Resource 2<br/>resource-slug-2]
WU1[Waldur User 1]
WU2[Waldur User 2]
WU3[Waldur User 3]
end
subgraph "Harbor Registry"
HG[OIDC Group<br/>waldur-project-slug]
HP1[Harbor Project 1<br/>waldur-resource-slug-1]
HP2[Harbor Project 2<br/>waldur-resource-slug-2]
HQ1[Storage Quota 1<br/>e.g., 10GB]
HQ2[Storage Quota 2<br/>e.g., 20GB]
HR1[Container Repos 1]
HR2[Container Repos 2]
end
subgraph "OIDC Provider"
OG[OIDC Group<br/>waldur-project-slug]
OU1[OIDC User 1]
OU2[OIDC User 2]
OU3[OIDC User 3]
end
%% Relationships
WC --> WP
WP --> WR1
WP --> WR2
WP --> WU1
WP --> WU2
WP --> WU3
%% Waldur to Harbor mapping
WR1 -.->|"1:1 mapping"| HP1
WR2 -.->|"1:1 mapping"| HP2
WP -.->|"1:1 mapping"| HG
%% Harbor internal relationships
HG -->|"Developer role"| HP1
HG -->|"Developer role"| HP2
HP1 --> HQ1
HP2 --> HQ2
HP1 --> HR1
HP2 --> HR2
%% OIDC relationships
WU1 -.->|"SSO identity"| OU1
WU2 -.->|"SSO identity"| OU2
WU3 -.->|"SSO identity"| OU3
OU1 --> OG
OU2 --> OG
OU3 --> OG
HG -.->|"Same group"| OG
%% Styling
classDef waldur fill:#e1f5fe
classDef harbor fill:#fff3e0
classDef oidc fill:#f3e5f5
class WC,WP,WR1,WR2,WU1,WU2,WU3 waldur
class HG,HP1,HP2,HQ1,HQ2,HR1,HR2 harbor
class OG,OU1,OU2,OU3 oidc
Key Mapping Rules
- Waldur Resource → Harbor Project (1:1)
- Each Waldur resource creates a separate Harbor project
- Provides complete isolation between different registry resources
-
Project names:
{allocation_prefix}{resource_slug} -
Waldur Project → OIDC Group (1:1)
- One OIDC group per Waldur project for access control
- All project team members get access to ALL Harbor projects within the Waldur project
-
Group names:
{oidc_group_prefix}{project_slug} -
Storage Management
- Each Harbor project gets individual storage quota
- Quotas set based on Waldur resource limits
- Usage reported back to Waldur for billing
Installation
- Install the plugin alongside waldur-site-agent:
1 2 | |
- Configure the plugin in your waldur-site-agent configuration file
Configuration
Add the Harbor backend configuration to your waldur-site-agent-config.yaml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | |
Robot Account Permissions
Critical: The Harbor robot account must have the following permissions:
- ✅ Project creation (
POST /api/v2.0/projects) - ✅ Project deletion (
DELETE /api/v2.0/projects/{id}) - REQUIRED for proper resource lifecycle - ✅ Quota management (
GET/PUT /api/v2.0/quotas) - ✅ User group management (
GET/POST /api/v2.0/usergroups) - ✅ Project member management (
GET/POST/DELETE /api/v2.0/projects/{id}/members)
✅ Verified: All operations including project deletion are working with proper system-level robot account permissions.
Harbor Setup
1. Create Robot Account
- Login to Harbor as admin
- Navigate to Administration → Robot Accounts
- Create a new robot account with system-level permissions:
- Level: System (not project-specific)
- Permissions:
- Project: Create, Read, Update, Delete
- Resource: Create, Read, Update
- Member: Create, Read, Update, Delete
- Quota: Read, Update
- Save the credentials for configuration
Note: The robot account needs system-level permissions to delete projects. Project-level robot accounts cannot delete their own projects.
2. Configure OIDC Authentication
- Navigate to Administration → Configuration → Authentication
- Set Auth Mode to "OIDC"
- Configure OIDC provider settings:
- OIDC Endpoint: Your identity provider URL
- OIDC Client ID: Harbor client ID in your IdP
- OIDC Client Secret: Harbor client secret
- OIDC Scope:
openid,email,profile,groups - Group Claim Name:
groups(or your IdP's group claim)
3. Configure Storage Quotas
- Navigate to Administration → Configuration → System Settings
- Set appropriate global storage quota limits
- Individual project quotas will be managed by the agent
Usage
Running the Agent
1 2 3 4 5 6 7 8 | |
Systemd Service
Create a systemd service for automated operation:
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
API Operations
The plugin implements the following Harbor API operations:
✅ Project Management (Fully Working)
- ✅ Create project with minimal payload
- ✅ Get project details and metadata
- ✅ List all projects
- ✅ Delete project (complete resource lifecycle)
✅ Storage Quota Management (Fully Working)
- ✅ Set project storage quotas
- ✅ Update project storage quotas
- ✅ Query current quota usage
- ✅ Report storage consumption for billing
✅ OIDC Group Management (Fully Working)
- ✅ Create OIDC groups
- ✅ Assign groups to projects with specified roles (Admin/Developer/Guest/Maintainer)
- ✅ List existing user groups
- ✅ Search for specific groups
✅ Usage Reporting (Fully Working)
- ✅ Query project storage usage via quota API
- ✅ Report repository counts
- ✅ Track storage consumption for Waldur billing
- ✅ Get project metadata and statistics
🔄 Supported Waldur Operations
- ✅ order_process: Create/update Harbor projects and quotas
- ✅ report: Report storage usage back to Waldur
- ✅ membership_sync: Manage OIDC group memberships
- ✅ diagnostics: Health checks and connectivity testing
Testing
Run the test suite:
1 2 3 4 5 | |
Troubleshooting
✅ Known Issues & Solutions
1. CSRF Token Errors (SOLVED)
Symptom: 403 Forbidden - CSRF token not found in request
Root Cause: Harbor's session-based authentication requires CSRF tokens for persistent sessions.
✅ Solution: The plugin now uses direct HTTP requests with authentication tuples instead of persistent sessions, which bypasses CSRF requirements entirely.
Technical Details:
1 2 3 4 5 6 7 8 | |
2. Robot Account Permissions
Symptoms:
- Can list projects but cannot create them
- Can create projects but cannot set quotas
- Cannot create OIDC groups
✅ Solution: Ensure robot account has system-level permissions:
- Login to Harbor as admin
- Go to Administration → Robot Accounts
- Edit your robot account
- Grant these system-level permissions:
- Project: Create, Read, Update, Delete
- Resource: Create, Read, Update
- Member: Create, Read, Update, Delete
- Quota: Read, Update
Critical: Without project deletion permissions, Harbor projects will accumulate when Waldur resources are terminated, leading to storage waste and potential quota issues.
Common Issues
- Authentication Failures
- ✅ Verify robot account credentials in configuration
- ✅ Test connectivity:
curl -u "robot\$user:pass" https://harbor.example.com/api/v2.0/health -
✅ Ensure Harbor API v2.0 is enabled
-
OIDC Group Issues
- ✅ Verify OIDC configuration in Harbor (Administration → Configuration → Authentication)
- ✅ Check group claim configuration (
groupsis common) -
✅ Ensure OIDC provider is properly configured
-
Storage Quota Problems
- ✅ Check global quota settings in Harbor (Administration → Configuration → System Settings)
- ✅ Verify project-specific quotas:
curl -u "robot\$user:pass" https://harbor.example.com/api/v2.0/quotas - ✅ Monitor Harbor system storage availability
Debugging
Enable Debug Logging
1 2 3 4 | |
Test Harbor Client Directly
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Check Logs
1 2 3 4 5 | |
Verification Commands
Test robot account permissions manually:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
Expected Results
- ✅ 200/201 for creation operations
- ✅ 200 for read operations
- ✅ 200/204 for update operations
- ✅ 200/204 for deletion operations
- ❌ 403 Forbidden indicates insufficient permissions
Development
Project Structure
1 2 3 4 5 6 7 8 9 10 11 | |
Adding New Features
- Extend the
HarborClientclass for new API operations - Update
HarborBackendto utilize new client methods - Add corresponding tests
- Update documentation
License
This plugin is part of the Waldur Site Agent project and follows the same licensing terms.
Related Plugins
Compute & HPC Plugins
- SLURM Plugin - SLURM cluster management
- MOAB Plugin - MOAB cluster management
- MUP Plugin - MUP portal integration
Container & Cloud Plugins
- OpenShift/OKD Plugin - OpenShift and OKD container platform management
Storage Plugins
- Croit S3 Plugin - Croit S3 storage management
- CSCS HPC Storage Plugin - CSCS HPC storage management
Accounting Plugins
- CSCS DWDI Plugin - CSCS DWDI accounting integration
Utility Plugins
- Basic Username Management Plugin - Username generation and management
Support
For issues and questions:
- Create an issue in the Waldur Site Agent repository
- Contact the OpenNode team