CRUD Microservice (Gizmo)
Overview
The CRUD microservice implements a set of RESTful APIs which allow a client to perform CREATE, UPDATE, GET, and DELETE operations on verticies and edges within the A&AI graph database.
Getting Started
Building The Microservice
After cloning the project, execute the following Maven command from the project's top level directory to build the project:
> mvn clean install
Now, you can build your Docker image:
> docker build -t onap/crud-service target
Deploying The Microservice
Push the Docker image that you have built to your Docker repository and pull it down to the location from which you will be running the service.
Create the following directories on the host machine:
../logs
../appconfig
../appconfig/auth
You will be mounting these as data volumes when you start the Docker container.
Configuring the Microservice
Create configuration file ../appconfig/crud-api.properties
# List of hostnames/addresses of the graph database
crud.graph.host=graphhost1.onap.com,graphhost2.onap.com
# Port on which to connect to the graph database
crud.graph.port=2181
# Name of the graph on which this service will operate
crud.graph.name=aaigraphautomation
# Backend storage type for the graph. Types currently supported:
# - cassandra
# - hbase
crud.storage.backend.db=cassandra
# List of hostnames/addresses of the DMaaP/Kafka cluster on which to post notification events
event.stream.hosts=kafkahost1.onap.com,kafkahost2.onap.com
# Number of events to bath up before posting to DMaaP/Kafka
event.stream.batch-size=100
# Amount of time (in ms) to wait before sending batch of events (when batch does not reach batch-size)
event.stream.batch-timeout=60000
Create configuration file ../appconfig/auth/crud-policy.json
This policy file defines which client certificates are authorized to use the service's APIs. An example policy file follows:
{
"roles": [
{
"name": "admin",
"functions": [
{
"name": "search", "methods": [ { "name": "GET" },{ "name": "DELETE" }, { "name": "PUT" }, { "name": "POST" } ]
}
],
"users": [
{
"username": "CN=admin, OU=My Organization Unit, O=, L=Sometown, ST=SomeProvince, C=CA"
}
]
}
]
}
Create keystore file ../appconfig/auth/tomcat_keystore tomcat_keystore
Create a keystore with this name containing whatever CA certificates that you want your instance of the CRUD service to accept for HTTPS traffic.
Start the service
You can now start the Docker container in the following manner:
docker run -d \
-p 9520:9520 \
-e CONFIG_HOME=/opt/app/crud-service/config/ \
-e KEY_STORE_PASSWORD={{obfuscated password}} \
-e KEY_MANAGER_PASSWORD=OBF:{{obfuscated password}} \
-v /<path>/logs:/opt/aai/logroot/AAI-CRUD \
-v /<path>/appconfig:/opt/app/crud-service/config \
--name crud-service \
{{your docker repo}}/crud-service
Where,
{{your docker repo}} = The Docker repository you have published your CRUD Service image to.
{{obfuscated password}} = The password for your key store/key manager after running it through the Jetty obfuscation tool.
API Definitions
Echo API
URL: https://<host>:9520/services/crud-api/v1/echo-service/echo/<input>
Method: GET
Success Response: 200
Vertex APIs
Gizmo exposes a set of APIs to operate on verticies within the graph. Vertex APIs
Edge APIs
Gizmo exposes a set of APIs to operate on edges within the graph. Edge APIs
Bulk API
Gizmo exposes a bulk API to operate on multiple graph entities within a single request. Bulk API
ASYNC PIPELINE
Gizmo is capable of working Synchronously and Asynchronously. Asynchronous Pipeline is explained here: Async Pipeline