HostFactory Feature Mapping¶
This document maps IBM Spectrum Symphony Host Factory features to Open Host Factory Plugin capabilities, showing how each HostFactory requirement is implemented.
Core Feature Mapping¶
Template Management¶
| HostFactory Feature | Plugin Implementation | Status |
|---|---|---|
| Template Discovery | python src/run.py templates list |
[IMPLEMENTED] Implemented |
| Template Validation | python src/run.py templates validate |
[IMPLEMENTED] Implemented |
| Template Attributes | JSON-based attribute system | [IMPLEMENTED] Implemented |
| Template Limits | maxNumber field support |
[IMPLEMENTED] Implemented |
| Template Types | Multi-provider template support | [IMPLEMENTED] Implemented |
HostFactory Template Structure:
{
"templateId": "basic-template",
"maxNumber": 10,
"attributes": {
"type": ["String", "X86_64"],
"ncpus": ["Numeric", "2"],
"nram": ["Numeric", "4096"]
}
}
Plugin Template Implementation: - Storage: JSON-based template storage with validation - Discovery: Dynamic template discovery from configuration - Validation: Schema-based template validation - Extensibility: Support for custom attributes
Machine Provisioning¶
| HostFactory Feature | Plugin Implementation | Status |
|---|---|---|
| Machine Requests | python src/run.py machines create |
[IMPLEMENTED] Implemented |
| Batch Provisioning | Multi-machine request support | [IMPLEMENTED] Implemented |
| Async Provisioning | Request-based async model | [IMPLEMENTED] Implemented |
| Status Tracking | Request status monitoring | [IMPLEMENTED] Implemented |
| Resource Limits | Template-based limits | [IMPLEMENTED] Implemented |
HostFactory Request Flow:
1. requestMachines -> Create provisioning request
2. getRequestStatus -> Monitor provisioning progress
3. Machines become available when status = "completed"
4. requestReturnMachines -> Terminate machines
Plugin Request Implementation: - Request Management: Persistent request tracking - State Machine: Complete request lifecycle management - Provider Integration: AWS EC2Fleet, SpotFleet, ASG support - Error Handling: Comprehensive error recovery
Machine Lifecycle¶
| HostFactory Feature | Plugin Implementation | Status |
|---|---|---|
| Machine States | Complete state machine | [IMPLEMENTED] Implemented |
| State Transitions | Validated state changes | [IMPLEMENTED] Implemented |
| Machine Metadata | Rich machine information | [IMPLEMENTED] Implemented |
| IP Address Assignment | Network configuration | [IMPLEMENTED] Implemented |
| Machine Termination | Graceful shutdown | [IMPLEMENTED] Implemented |
Machine States Mapping:
| HostFactory State | Plugin State | AWS State | Description |
|---|---|---|---|
pending |
pending |
pending |
Machine being created |
running |
running |
running |
Machine is active |
terminating |
terminating |
shutting-down |
Machine being terminated |
terminated |
terminated |
terminated |
Machine is destroyed |
failed |
failed |
failed |
Provisioning failed |
Advanced Feature Mapping¶
Provider Strategy Integration¶
| HostFactory Concept | Plugin Implementation | Benefits |
|---|---|---|
| Single Provider | Provider Strategy Pattern | Multiple AWS handlers |
| Static Configuration | Dynamic Provider Selection | Runtime flexibility |
| Basic Error Handling | Circuit Breaker Pattern | Resilience |
| Simple Retry | Exponential Backoff | Reliability |
Provider Strategy Configuration:
{
"provider": {
"active_provider": "aws-default",
"selection_policy": "FIRST_AVAILABLE",
"providers": [
{
"name": "aws-default",
"type": "aws",
"enabled": true,
"config": {
"handlers": {
"types": {
"ec2_fleet": "EC2Fleet",
"spot_fleet": "SpotFleet",
"asg": "ASG"
}
}
}
}
]
}
}
Storage Strategy Integration¶
| HostFactory Requirement | Plugin Implementation | Advantages |
|---|---|---|
| Request Persistence | Storage Strategy Pattern | Multiple backends |
| Simple File Storage | JSON Strategy | Easy debugging |
| Database Support | SQL Strategy | Scalability |
| State Recovery | Repository Pattern | Data consistency |
Storage Strategy Options: - JSON Strategy: File-based storage for development - SQL Strategy: Database storage for production - Repository Pattern: Consistent data access interface
Authentication and Security¶
| HostFactory Security | Plugin Implementation | AWS Integration |
|---|---|---|
| User Authentication | AWS Profile/Role Support | IAM Integration |
| Resource Authorization | IAM Policy Enforcement | Fine-grained permissions |
| Audit Logging | Structured logging | CloudTrail integration |
| Secure Communication | HTTPS/TLS | AWS API security |
Field Mapping Details¶
Template Field Mapping¶
| HostFactory Field | Plugin Field | Type | Transformation |
|---|---|---|---|
templateId |
template_id |
String | Direct mapping |
maxNumber |
max_number |
Integer | Direct mapping |
type |
attributes.type |
Array | Format: ["String", "value"] |
ncpus |
attributes.ncpus |
Array | Format: ["Numeric", "value"] |
nram |
attributes.nram |
Array | Format: ["Numeric", "value"] |
Field Transformation Example:
# HostFactory format
{
"templateId": "basic-template",
"maxNumber": 10,
"attributes": {
"type": ["String", "X86_64"],
"ncpus": ["Numeric", "2"]
}
}
# Plugin internal format
{
"template_id": "basic-template",
"max_number": 10,
"attributes": {
"vm_type": "t3.medium",
"cpu_count": 2,
"memory_gb": 4
}
}
Machine Field Mapping¶
| HostFactory Field | Plugin Field | AWS Source | Notes |
|---|---|---|---|
machineId |
machine_id |
InstanceId |
Direct mapping |
status |
status |
State.Name |
State translation |
ipAddress |
ip_address |
PrivateIpAddress |
Primary IP |
publicIpAddress |
public_ip_address |
PublicIpAddress |
If available |
launchTime |
created_at |
LaunchTime |
ISO format |
Request Field Mapping¶
| HostFactory Field | Plugin Field | Storage | Description |
|---|---|---|---|
requestId |
request_id |
Generated UUID | Unique identifier |
templateId |
template_id |
From request | Template reference |
maxNumber |
max_number |
From request | Machine count |
status |
status |
State machine | Request state |
machines |
machines |
Related entities | Machine list |
Output Format Mapping¶
Legacy Compatibility Mode¶
The plugin supports HostFactory's expected camelCase format:
# Default format (internal)
python src/run.py templates list
{
"templates": [
{
"template_id": "basic-template",
"max_number": 10
}
]
}
# Legacy format (HostFactory compatible)
python src/run.py templates list --legacy
{
"templates": [
{
"templateId": "basic-template",
"maxNumber": 10
}
]
}
Output Format Options¶
| Format | HostFactory Usage | Plugin Command | Description |
|---|---|---|---|
| JSON | Default API format | --format json |
Standard JSON output |
| Table | Human readable | --format table |
Formatted table |
| YAML | Configuration | --format yaml |
YAML format |
| List | Simple listing | --format list |
Plain text list |
Error Mapping¶
Error Code Mapping¶
| HostFactory Error | Plugin Error | HTTP Status | Description |
|---|---|---|---|
| Template Not Found | TEMPLATE_NOT_FOUND |
404 | Invalid template ID |
| Invalid Request | INVALID_REQUEST |
400 | Malformed request |
| Provisioning Failed | PROVISIONING_FAILED |
500 | Cloud provider error |
| Quota Exceeded | QUOTA_EXCEEDED |
429 | Resource limits |
| Authentication Failed | AUTH_FAILED |
401 | Invalid credentials |
Error Response Format¶
{
"error": {
"code": "TEMPLATE_NOT_FOUND",
"message": "Template 'invalid-template' not found",
"details": {
"available_templates": ["basic-template", "advanced-template"],
"request_id": "req-12345",
"timestamp": "2024-01-15T10:30:00Z"
}
}
}
Performance Mapping¶
Response Time Mapping¶
| HostFactory Operation | Expected Time | Plugin Performance | Optimization |
|---|---|---|---|
getAvailableTemplates |
< 30s | < 5s | Template caching |
requestMachines |
< 60s | < 30s | Async provisioning |
getRequestStatus |
< 10s | < 3s | Status caching |
requestReturnMachines |
< 60s | < 30s | Batch termination |
Scalability Mapping¶
| HostFactory Limit | Plugin Support | Implementation |
|---|---|---|
| 1000 templates | [IMPLEMENTED] Supported | JSON/SQL storage |
| 100 concurrent requests | [IMPLEMENTED] Supported | Async processing |
| 10000 machines/request | [IMPLEMENTED] Supported | Batch operations |
| 30 days history | [IMPLEMENTED] Supported | Persistent storage |
Integration Patterns¶
Shell Script Integration¶
# HostFactory calls
./scripts/getAvailableTemplates.sh
# Plugin delegation
"$(dirname "$0")/invoke_provider.sh" templates list "$@"
# Core execution
python src/run.py templates list --legacy --format json
Configuration Integration¶
{
"hostfactory": {
"compatibility_mode": true,
"legacy_field_names": true,
"timeout_seconds": 300,
"retry_attempts": 3,
"output_format": "json"
}
}
Monitoring Integration¶
| HostFactory Metric | Plugin Metric | Collection Method |
|---|---|---|
| Request Success Rate | requests_success_rate |
Application metrics |
| Average Response Time | response_time_avg |
Request timing |
| Active Machines | machines_active_count |
State tracking |
| Error Rate | error_rate |
Error counting |
Extension Points¶
Intelligent Attribute Generation¶
The plugin automatically generates HostFactory attributes with intelligent CPU and RAM specifications based on AWS instance types:
{
"templateId": "custom-template",
"attributes": {
"type": ["String", "X86_64"],
"ncpus": ["Numeric", "4"],
"nram": ["Numeric", "16384"]
}
}
Instance Type Mapping: The plugin includes built-in CPU and RAM mappings for common AWS instance types:
| Instance Type | vCPUs | RAM (MB) | Generated Attributes |
|---|---|---|---|
t2.micro |
1 | 1024 | ncpus: ["Numeric", "1"], nram: ["Numeric", "1024"] |
t2.small |
1 | 2048 | ncpus: ["Numeric", "1"], nram: ["Numeric", "2048"] |
t2.medium |
2 | 4096 | ncpus: ["Numeric", "2"], nram: ["Numeric", "4096"] |
t3.medium |
2 | 4096 | ncpus: ["Numeric", "2"], nram: ["Numeric", "4096"] |
m5.large |
2 | 8192 | ncpus: ["Numeric", "2"], nram: ["Numeric", "8192"] |
m5.xlarge |
4 | 16384 | ncpus: ["Numeric", "4"], nram: ["Numeric", "16384"] |
c5.large |
2 | 4096 | ncpus: ["Numeric", "2"], nram: ["Numeric", "4096"] |
c5.xlarge |
4 | 8192 | ncpus: ["Numeric", "4"], nram: ["Numeric", "8192"] |
r5.large |
2 | 16384 | ncpus: ["Numeric", "2"], nram: ["Numeric", "16384"] |
r5.xlarge |
4 | 32768 | ncpus: ["Numeric", "4"], nram: ["Numeric", "32768"] |
Automatic Detection:
- Attributes are automatically generated based on the instance_type or instanceType field in templates
- Supports both snake_case (instance_type) and camelCase (instanceType) field names
- Falls back to t2.micro specifications (1 vCPU, 1024 MB RAM) for unknown instance types
- Always includes the standard type: ["String", "X86_64"] attribute
Custom Attributes¶
The plugin also supports additional HostFactory custom attributes:
{
"templateId": "custom-template",
"attributes": {
"type": ["String", "X86_64"],
"ncpus": ["Numeric", "4"],
"nram": ["Numeric", "8192"],
"custom_attribute": ["String", "custom_value"],
"environment": ["String", "production"]
}
}
Provider Extensions¶
New providers can be added while maintaining HostFactory compatibility:
{
"providers": [
{
"name": "aws-primary",
"type": "aws"
},
{
"name": "azure-secondary",
"type": "azure"
}
]
}
This comprehensive feature mapping ensures that all HostFactory capabilities are preserved and extended through the plugin's current architecture while maintaining full backward compatibility.