Hook service - severalnines/ccx-admin-guide GitHub Wiki

CCX Hook Service

A service for third party hooks.

Spec

pre- hooks are called before the request is accepted. If the request involves creating resources, the hook can reject the request.

pre- hooks receive the session ID of the requesting user.

pre- hook response can include a workID which will be included in the corresponding post- hook.

post- hooks are informative, saying that the work is complete, either successfully or otherwise. There is not curarently a guarantee that post- hooks will be delivered.

The definitive source for each call is <./ccx-hook-service.proto>, the following is an approximate idea of how the service communicates with integrator, but it is variable.

pre-create-cluster

Request:

{
  // cluster details
  "cluster_id": "",
  "cluster_name": "",
  "datastore_type": "",
  "cloud": "",
  "node_count": "",
  "instance_type": "",
  // user details
  "auth_id": ""
}

Response:

{
  // whether to proceed
  "approved": true,
  // correlation
  "work_id": "",
  // user details
  "user_id": "",
  "project_id": "",
  "organisation_id": ""
}

post-create-cluster

Request:

{
  // cluster details
  "cluster_id": "",
  "cluster_name": "",
  "datastore_type": "",
  "cloud": "",
  "node_count": "",
  "instance_type": "",
  // cluster state
  "cluster_status": "ok",
  "node_ids": [""],
  // correlation
  "work_id": ""
}

Response:

{}

pre-add-node

Request:

{
  // cluster details
  "cluster_id": "",
  "cloud": "",
  "node_count": "",
  "instance_type": "",
  // user details
  "auth_id": ""
}

Response:

{
  // whether to proceed
  "approved": true,
  // correlation
  "work_id": ""
}

post-add-node

Request:

{
  // cluster details
  "cluster_id": "",
  "cloud": "",
  "node_count": "",
  "instance_type": "",
  // cluster state
  "node_ids": [""],
  // correlation
  "work_id": ""
}

Response:

{}

pre-remove-node

Request:

{
  // cluster details
  "cluster_id": "",
  "node_id": "",
  // user details
  "auth_id": ""
}

Response:

{
  // correlation
  "work_id": ""
}

post-remove-node

Request:

{
  // cluster details
  "cluster_id": "",
  "node_id": "",
  // correlation
  "work_id": ""
}

Response:

{}

pre-delete-cluster

Request:

{
  // cluster details
  "cluster_id": "",
  // user details
  "auth_id": ""
}

Response:

{
  // correlation
  "work_id": ""
}

post-delete-cluster

Request:

{
  // cluster details
  "cluster_id": "",
  "status": "",
  // correlation
  "work_id": ""
}

Response:

{}

Running

Run the service normally:

ccx-hook-service or ccx-hook-service serve

Run a service locally, hooking to a local HTTP server:

ccx-hook-service local-server myserver

Run the HTTP server which it will call:

ccx-hook-service mock-hooks

This will print the incoming hooks, and respond with 200 status.

Trigger a hook (the json is mapped to the protobuf types, not the public things):

ccx-hook-service test-client add_node '{"clusterId":"1","cloud":"c1","nodeCount":1,"instanceType":"i1","authId":"a1"}'