Skip to main content

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:

  1. Valid Authentication

    • Bearer token or API key for API access
    • Proper authentication headers configured
  2. Valid Authorization

    • Check for required permissions to be verified before accessing apis
    • If you dont have required authorization , please contact support
  3. Active Project

    • Project ID where you'll deploy the VNF
    • Access permissions to the project
  4. Available Resources

    • Selected VNF model (from catalog)
    • Available zone/POP for deployment
    • Appropriate flavor for your workload
  5. 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 progress
  • succeeded - Deployment completed successfully
  • failed - 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:

HeaderDescription
X-Workflow-Execution-HrefURI to poll for deprovision progress
X-Retry-AfterRecommended 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

note

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:

HeaderDescription
X-Workflow-Execution-HrefURI to track the deletion workflow
X-Retry-AfterRecommended polling interval in seconds

Response (204 No Content) — when no infrastructure resources were provisioned (VNF was in DRAFT or DESIGNED state).

warning

Deletion is irreversible.

Error Codes:

CodeDescription
409A workflow execution is already processing on this VNF — wait for it to complete
404VNF not found
403Access 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:

ParameterRequiredDescriptionExample
startStart of the time range (ISO 8601)2024-06-24T10:00:00Z
endEnd of the time range (defaults to now)2024-06-24T11:00:00Z
stepAggregation 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:

  1. Check public IP assignment
  2. Verify security group rules (egress/ingress)
  3. Confirm zone connectivity
  4. Test network connectivity from client

Next Steps

After successful deployment: