Skip to content

Local Service Management

Issue local service operation command

POST /apis/v1/localservices/operations

Request

curl --location 'http://drove.local:7000/apis/v1/localservices/operations' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic YWRtaW46YWRtaW4=' \
--data '{
    "type": "CREATE",
    "spec": {
        "name": "NODE_EXPORTER",
        "version": "1",
        "type": "SERVICE",
        "executable": {
            "type": "DOCKER",
            "url": "ghcr.io/appform-io/perf-test-server-httplib",
            "dockerPullTimeout": "100 seconds"
        },
        "exposedPorts": [
            {
                "name": "main",
                "port": 8000,
                "type": "HTTP"
            }
        ],
        "resources": [
            {
                "type": "CPU",
                "count": 1
            },
            {
                "type": "MEMORY",
                "sizeInMB": 128
            }
        ],
        "placementPolicy": {
            "type": "LOCAL",
            "hostLevel": true
        },
        "healthcheck": {
            "mode": {
                "type": "HTTP",
                "protocol": "HTTP",
                "portName": "main",
                "path": "/",
                "verb": "GET",
                "successCodes": [200],
                "payload": "",
                "connectionTimeout": "1 second"
            },
            "timeout": "1 second",
            "interval": "5 seconds",
            "attempts": 3,
            "initialDelay": "0 seconds"
        },
        "readiness": {
            "mode": {
                "type": "HTTP",
                "protocol": "HTTP",
                "portName": "main",
                "path": "/",
                "verb": "GET",
                "successCodes": [200],
                "payload": "",
                "connectionTimeout": "1 second"
            },
            "timeout": "1 second",
            "interval": "3 seconds",
            "attempts": 3,
            "initialDelay": "0 seconds"
        }
    },
    "instancesPerHost": 1
}'

Response

{
    "status": "SUCCESS",
    "data": {
        "serviceId": "NODE_EXPORTER-1"
    },
    "message": "success"
}

Tip

Relevant payloads for local service commands can be found in local service operations section.

Note

Operation payloads use opSpec for timeout/parallelism/failure strategy.

Tip

Recommended rollout sequence is CREATE -> DEPLOY_TEST_INSTANCE -> ACTIVATE so spec/config/check validation happens before full activation.

Cancel currently running operation

POST /apis/v1/localservices/operations/{serviceId}/cancel

Request

curl --location --request POST 'http://drove.local:7000/apis/v1/localservices/operations/NODE_EXPORTER-1/cancel' \
--header 'Authorization: Basic YWRtaW46YWRtaW4=' \
--data ''

Get list of local services

GET /apis/v1/localservices

Request

curl --location 'http://drove.local:7000/apis/v1/localservices' \
--header 'Authorization: Basic YWRtaW46YWRtaW4='

Response

{
    "status": "SUCCESS",
    "data": {
        "NODE_EXPORTER-1": {
            "id": "NODE_EXPORTER-1",
            "name": "NODE_EXPORTER",
            "instancesPerHost": 1,
            "healthyInstances": 3,
            "totalCPUs": 3,
            "totalMemory": 384,
            "tags": {
                "owner": "platform"
            },
            "activationState": "ACTIVE",
            "state": "ACTIVE",
            "created": 1719826995764,
            "updated": 1719892126096
        }
    },
    "message": "success"
}

Get local service summary

GET /apis/v1/localservices/{serviceId}

Validate local service spec

POST /apis/v1/localservices/validate/spec

Note

Validation enforces local-service specific rules, including LOCAL-only placement policy.

Get local service spec

GET /apis/v1/localservices/{serviceId}/spec

Get active local service instances

GET /apis/v1/localservices/{serviceId}/instances

Optionally filter by state:

GET /apis/v1/localservices/{serviceId}/instances?state=HEALTHY&state=UNREADY

Get local service instance details

GET /apis/v1/localservices/{serviceId}/instances/{instanceId}

Get old local service instances

GET /apis/v1/localservices/{serviceId}/instances/old

Note

configs section payloads are masked in spec responses.

Note

exposedPorts are required in local service specs because check definitions (healthcheck and readiness) refer to portName values from this section.

Warning

For host-level services (placementPolicy.hostLevel=true), use stopFirst=true in restart/replace operations to avoid fixed host-port conflicts.

Note

If a local service enters EMERGENCY_DEACTIVATION_REQUESTED, controller safety logic issues a deactivation path. In this state, only DEACTIVATE is accepted by operation validation.