Deploying Your First Virtual Network Function
This guide walks you through creating and deploying a Virtual Network Function instance using the Virtual Network Edge API.
Prerequisites
Before you begin, ensure you have:
-
Valid Authentication
- Bearer token or API key for API access
- Proper authentication headers configured
-
Valid Authorization
- Check for required permissions to be verified before accessing apis
- If you dont have required authorization , please contact support
-
Active Project
- Project ID where you'll deploy the VNF
- Access permissions to the project
-
Available Resources
- Selected VNF model (from catalog)
- Available zone/POP for deployment
- Appropriate flavor for your workload
-
Model Information
- Virtual Network Function Model ID
- Image version compatible with your requirements
- Deployment mode preference (single/dual/cluster)
Step 1: Browse Available VNF Models
First, discover available VNF models and their specifications.
Request:
curl -X GET 'https://api.orange.com/evolutionplatform/proxy/vnfaaservice/api/v1/virtualnetworkfunctionmodels' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Accept-Language: en'
Response:
{
"content": [
{
"id": "model-uuid-1",
"name": "Firewall VNF",
"description": "Enterprise firewall solution",
"type": "firewall",
"category": "standalone",
"imageVendor": "Fortinet",
"imageModel": "FortiGate",
"imageVersions": ["7.0.0", "7.2.0", "8.0.0"],
"deploymentModes": ["single", "dual", "cluster"],
"flavors": [
{
"id": "flavor-small",
"name": "Small",
"cpu": 4,
"ram": 8,
"disk": 100,
"dpdk": false
}
],
"zones": [
{
"id": "zone-1",
"name": "Paris POP",
"region": "EU-WEST"
}
]
}
]
}
Step 2: Get Detailed Model Information
Retrieve detailed specifications for your chosen model.
Request:
curl -X GET 'https://api.orange.com/evolutionplatform/proxy/vnfaaservice/api/v1/virtualnetworkfunctionmodels/model-uuid-1' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Accept-Language: en'
This returns complete model details including:
- Available image versions
- Supported deployment modes
- Required technical characteristics
- Available zones and flavors
- Contract durations
Step 3: Create VNF Instance
Create a new VNF instance with your desired configuration.
Request:
curl -X POST 'https://api.orange.com/evolutionplatform/proxy/vnfaaservice/api/v1/projects/project-uuid/virtualnetworkfunctions' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"name": "prod-firewall-01",
"description": "Production firewall for branch office",
"virtualNetworkFunctionModelId": "model-uuid-1",
"imageVersion": "7.2.0",
"deploymentMode": "single",
"deploymentCharacteristics": {
"virtualMachineName": "fw-prod-01",
"zoneId": "zone-1",
"flavorId": "flavor-small",
"publicIpAddresses": ["ipv4"],
"customUserData": "optional configuration data"
},
"technicalCharacteristics": [
{
"id": "char-license-key",
"value": "your-license-key-here"
}
],
"predefinedSecurityGroupIds": ["sg-uuid-1"],
"contractDurationId": "duration-uuid-1"
}'
Response (201 Created):
{
"id": "vnf-uuid-1",
"name": "prod-firewall-01",
"description": "Production firewall for branch office",
"projectId": "project-uuid",
"state": "draft",
"virtualNetworkFunctionModelId": "model-uuid-1",
"imageVersion": "7.2.0",
"deploymentMode": "single",
"deploymentCharacteristic": {
"virtualMachineName": "fw-prod-01",
"zoneId": "zone-1",
"flavorId": "flavor-small",
"publicIpAddresses": [
{
"publicIpAddress": "192.0.2.1",
"family": "ipv4"
}
],
"state": "down"
},
"createdDate": "2024-06-24T10:30:00.000Z",
"createdRequester": "siu_12345",
"lastModifiedDate": "2024-06-24T10:30:00.000Z",
"href": "/api/v1/projects/project-uuid/virtualnetworkfunctions/vnf-uuid-1"
}
Step 4: Verify VNF Configuration
Check your newly created VNF details.
Request:
curl -X GET 'https://api.orange.com/evolutionplatform/proxy/vnfaaservice/api/v1/projects/project-uuid/virtualnetworkfunctions/vnf-uuid-1' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN'
The VNF starts in DRAFT state. Review all configuration before deployment.
Steps before Deploying virtualNetworkFunction
Request:
curl -L -X POST 'https://api.orange.com/evolutionplatform/vnfaaservice/api/v1/projects/:projectId/vnfs/:vnfId/actions/allocateipaddresses' \
-H 'Authorization: Bearer <token>'
Please make sure IP address allocation to the VNE for the required models.
Step 5: Deploy VNF to Infrastructure
Once satisfied with the configuration, deploy the VNF.
Request:
curl -X POST 'https://api.orange.com/evolutionplatform/proxy/vnfaaservice/api/v1/projects/project-uuid/virtualnetworkfunctions/vnf-uuid-1/actions/deploy' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Content-Type: application/json'
Response (202 Accepted):
{
"id": "job-uuid-1",
"projectId": "project-uuid",
"type": "deploy",
"startDate": "2024-06-24T10:31:00.000Z",
"state": "processing",
"resourceType": "virtualNetworkFunction",
"resourceId": "vnf-uuid-1",
"messages": [
{
"id": "msg-1",
"type": "informational",
"date": "2024-06-24T10:31:00.000Z",
"message": "VNF deployment initiated"
}
]
}
The API returns a Job ID for tracking asynchronous deployment progress.
Status : ACTIVE
Step 6: Monitor Deployment Status
Track the deployment progress using the Job ID.
Request:
curl -X GET 'https://api.orange.com/evolutionplatform/proxy/vnfaaservice/api/v1/jobs/job-uuid-1' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN'
Response:
{
"id": "job-uuid-1",
"state": "processing",
"type": "deploy",
"startDate": "2024-06-24T10:31:00.000Z",
"messages": [
{
"type": "informational",
"message": "Creating virtual machine..."
},
{
"type": "informational",
"message": "Configuring network interfaces..."
},
{
"type": "informational",
"message": "Starting VNF services..."
}
]
}
Job States:
processing- Deployment in progresssucceeded- Deployment completed successfullyfailed- Deployment encountered an error
Step 7: Access Deployed VNF
Once deployment completes, check the VNF status.
Request:
curl -X GET 'https://api.orange.com/evolutionplatform/proxy/vnfaaservice/api/v1/projects/project-uuid/virtualnetworkfunctions/vnf-uuid-1' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN'
Response:
{
"id": "vnf-uuid-1",
"state": "active",
"deploymentCharacteristic": {
"state": "up",
"publicIpAddresses": [
{
"publicIpAddress": "192.0.2.1",
"family": "ipv4"
}
]
}
}
Your VNF is now:
- State:
active - VM State:
up - Accessible: Via the assigned public IP address
- Ready: For configuration and use
Step 8: Deprovision the VNF
Deprovisioning removes the technical resources from the infrastructure while keeping the VNF record with your Public Ip addresses. The VNF must be in ACTIVE state before deprovisioning.
Request:
curl -X POST 'https://api.orange.com/evolutionplatform/proxy/vnfaaservice/api/v1/projects/project-uuid/vnfs/vnf-uuid-1/actions/deprovision' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'X-API-KEY: YOUR_API_KEY'
Response (202 Accepted):
The response includes headers to track the async workflow execution:
| Header | Description |
|---|---|
X-Workflow-Execution-Href | URI to poll for deprovision progress |
X-Retry-After | Recommended polling interval in seconds |
Track the deprovision workflow using the returned href:
curl -X GET 'https://api.orange.com/evolutionplatform/proxy/vnfaaservice/api/v1/projects/project-uuid/vnfs/vnf-uuid-1/workflowexecutions/workflow-uuid-1' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'X-API-KEY: YOUR_API_KEY'
Response:
{
"id": "workflow-uuid-1",
"operation": "DEPROVISION_VNF",
"status": "SUCCESS",
"startDate": "2024-06-24T11:00:00",
"endDate": "2024-06-24T11:05:00",
"resourceId": "vnf-uuid-1",
"resourceName": "prod-firewall-01",
"resourceType": "VNF",
"stepExecutions": [
{
"id": "step-1",
"operation": "DEPROVISION_VM",
"status": "SUCCESS",
"startDate": "2024-06-24T11:00:05",
"endDate": "2024-06-24T11:04:50"
}
]
}
VNF state after deprovision: DESIGNED
After deprovisioning, the VNF record remains and can be re-provisioned using the provision action.
Step 9: Delete the VNF
Permanently deletes the VNF and all its associated infrastructure resources (if any exist).
Request:
curl -X DELETE 'https://api.orange.com/evolutionplatform/proxy/vnfaaservice/api/v1/projects/project-uuid/vnfs/vnf-uuid-1' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'X-API-KEY: YOUR_API_KEY'
Response (202 Accepted) — when infrastructure resources exist and must be cleaned up asynchronously:
| Header | Description |
|---|---|
X-Workflow-Execution-Href | URI to track the deletion workflow |
X-Retry-After | Recommended polling interval in seconds |
Response (204 No Content) — when no infrastructure resources were provisioned (VNF was in DRAFT or DESIGNED state).
Deletion is irreversible.
Error Codes:
| Code | Description |
|---|---|
409 | A workflow execution is already processing on this VNF — wait for it to complete |
404 | VNF not found |
403 | Access denied |
Step 10: Monitor VNF Resources
Once your VNF is provisioned, you can retrieve real-time and historical metrics for each virtual device. You need the virtualDeviceId from the VNF response (found in the virtualDevices array).
All monitoring endpoints share the same query parameters:
| Parameter | Required | Description | Example |
|---|---|---|---|
start | ✅ | Start of the time range (ISO 8601) | 2024-06-24T10:00:00Z |
end | ❌ | End of the time range (defaults to now) | 2024-06-24T11:00:00Z |
step | ❌ | Aggregation interval (m, h, d, w) | 5m, 1h |
The minimum step depends on the period: 1m (≤6h), 5m (≤24h), 15m (≤7d), 1h (≤30d), 1d (longer).
CPU Usage
curl -X GET 'https://api.orange.com/evolutionplatform/proxy/vnfaaservice/api/v1/projects/project-uuid/vnfs/vnf-uuid-1/virtualdevices/device-uuid-1/monitoring/cpu?start=2024-06-24T10:00:00Z&end=2024-06-24T11:00:00Z&step=5m' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'X-API-KEY: YOUR_API_KEY'
Memory Usage
curl -X GET 'https://api.orange.com/evolutionplatform/proxy/vnfaaservice/api/v1/projects/project-uuid/vnfs/vnf-uuid-1/virtualdevices/device-uuid-1/monitoring/memory?start=2024-06-24T10:00:00Z&end=2024-06-24T11:00:00Z&step=5m' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'X-API-KEY: YOUR_API_KEY'
Disk Usage
curl -X GET 'https://api.orange.com/evolutionplatform/proxy/vnfaaservice/api/v1/projects/project-uuid/vnfs/vnf-uuid-1/virtualdevices/device-uuid-1/monitoring/disk?start=2024-06-24T10:00:00Z&end=2024-06-24T11:00:00Z&step=5m' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'X-API-KEY: YOUR_API_KEY'
Disk usage reports bytes/s written to disk per step.
Network Usage
curl -X GET 'https://api.orange.com/evolutionplatform/proxy/vnfaaservice/api/v1/projects/project-uuid/vnfs/vnf-uuid-1/virtualdevices/device-uuid-1/monitoring/network?start=2024-06-24T10:00:00Z&end=2024-06-24T11:00:00Z&step=5m' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'X-API-KEY: YOUR_API_KEY'
Network usage reports traffic exchanged (received + transmitted) in kilobytes per step.
Device Status
curl -X GET 'https://api.orange.com/evolutionplatform/proxy/vnfaaservice/api/v1/projects/project-uuid/vnfs/vnf-uuid-1/virtualdevices/device-uuid-1/monitoring/status?start=2024-06-24T10:00:00Z&end=2024-06-24T11:00:00Z&step=5m' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'X-API-KEY: YOUR_API_KEY'
All monitoring endpoints return a PrometheusResult response:
{
"status": "success",
"data": {
"resultType": "matrix",
"result": [
{
"metric": {
"instance": "device-uuid-1",
"__name__": "cpu_usage_percent"
},
"values": [
["1719223200", "12.5"],
["1719223500", "14.2"],
["1719223800", "11.8"]
]
}
]
}
}
Each entry in values is a pair of [unix_timestamp, sample_value].
List All Workflow Executions for a VNF
Track the full history of operations (provision, deprovision, delete, etc.) performed on a VNF:
curl -X GET 'https://api.orange.com/evolutionplatform/proxy/vnfaaservice/api/v1/projects/project-uuid/vnfs/vnf-uuid-1/workflowexecutions?sort=-endDate&limit=10' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'X-API-KEY: YOUR_API_KEY'
Response (200 OK):
[
{
"id": "workflow-uuid-1",
"operation": "PROVISION_VNF",
"status": "SUCCESS",
"startDate": "2024-06-24T10:31:00",
"endDate": "2024-06-24T10:45:00",
"resourceId": "vnf-uuid-1",
"resourceName": "prod-firewall-01"
}
]
Response headers include X-Total-Count (total items) and X-Result-Count (returned items) for pagination.
Common Configuration Patterns
High Availability Deployment
For production workloads requiring redundancy:
{
"name": "prod-firewall-ha",
"deploymentMode": "dual",
"deploymentCharacteristics": {
"virtualMachineName": "fw-prod",
"zoneId": "zone-1",
"flavorId": "flavor-medium",
"publicIpAddresses": ["ipv4", "ipv6"]
}
}
Multi-Zone Deployment
For geographic distribution:
{
"name": "distributed-vnf",
"deploymentMode": "cluster",
"deploymentCharacteristics": {
"virtualMachineName": "vnf-cluster",
"zoneId": "zone-1",
"flavorId": "flavor-large",
"publicIpAddresses": ["ipv4"]
}
}
Development/Test Deployment
For non-production use:
{
"name": "test-vnf",
"deploymentMode": "single",
"deploymentCharacteristics": {
"virtualMachineName": "test-vnf",
"zoneId": "zone-dev",
"flavorId": "flavor-small"
}
}
Troubleshooting
Deployment Fails
Check the Job messages for specific error details:
Common Use Cases
List recent workflow executions for a tenant
Request:
curl -X GET 'https://api.orange.com/evolutionplatform/vnfaaservice/api/v1/tenants/{tenantId}/workflowexecutions?sort=-endDate&limit=10' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN'
Filter by resource
Request:
curl -X GET 'https://api.orange.com/evolutionplatform/vnfaaservice/api/v1/tenants/{tenantId}/workflowexecutions?resourceId={vnfId}' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN'
Get a specific workflow execution
Request:
curl -X GET 'https://api.orange.com/evolutionplatform/vnfaaservice/api/v1/tenants/{tenantId}/workflowexecutions/{workflowExecutionId}' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN'
API Reference For complete endpoint documentation, see the API Reference.
Tags:ConsoleAPIWorkflowExecution Overview Workflow Execution Attributes Common Use Cases List recent workflow executions for a tenant Filter by resource Get a specific workflow execution
Request:
curl -L 'https://api.orange.com/evolutionplatform/vnfaaservice/api/v1/tenants/:tenantId/workflowexecutions' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <token>'
Response:
[
{
"id": "string",
"projectId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"requestId": "string",
"requesterId": "string",
"operation": "string",
"startDate": "2024-07-29T15:51:28.071Z",
"endDate": "2024-07-29T15:51:28.071Z",
"status": "string",
"messages": [
{
"type": "string",
"date": "2024-07-29T15:51:28.071Z",
"source": "string",
"code": 0,
"message": "string",
"description": "string"
}
],
"stepExecutions": [
{
"id": "string",
"operation": "string",
"startDate": "2024-07-29T15:51:28.071Z",
"endDate": "2024-07-29T15:51:28.071Z",
"status": "string",
"resourceId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"source": "string",
"tries": 0,
"messages": [
{
"type": "string",
"date": "2024-07-29T15:51:28.071Z",
"source": "string",
"code": 0,
"message": "string",
"description": "string"
}
]
}
]
}
]
Common issues:
- Insufficient zone capacity: Try alternative zone
- Invalid flavor: Verify flavor availability in zone
- License issues: Check technical characteristics
- Network configuration: Validate security groups
VNF Not Accessible
Verify network configuration:
- Check public IP assignment
- Verify security group rules (egress/ingress)
- Confirm zone connectivity
- Test network connectivity from client
Next Steps
After successful deployment:
- Configure Security Groups - Set network access policies
- Scale Deployments - Expand to multiple zones
- Monitor Operations - Track jobs and resources
- Manage Lifecycle - Update, undeploy, or delete VNF