.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.
.. Copyright (C) 2019 IBM.

Blueprints Processor
====================

.. toctree::
   :maxdepth: 1
   :titlesonly:
   
Micro service to Manage Controller Blueprint Models, such as Resource Dictionary, Service Models, Velocity Templates etc,  which will serve service for Controller Design Studio and Controller runtimes.

This microservice is used to deploy Controller Blueprint Archive file in Run time database. This also helps to test the Valid Blueprint.

Architecture:
==============

|image0|

.. |image0| image:: images/blueprintprocessor.jpg
   :height: 600px
   :width: 800px
   
Running Blueprints Processor Microservice Locally:
==================================================

The purpose of this page is to show how to run the Blueprints Processor microservice locally, using the docker-compose.yaml file provided in the project.

Check out the CDS' code:

Check out the latest code from Gerrit: https://gerrit.onap.org/r/#/admin/projects/ccsdk/cds

Build CDS locally:
In the checked out directory, type

    mvn clean install -DskipTests=true -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Dadditionalparam=-Xdoclint:none
	
Create the needed Docker images:

The Blueprints Processor microservice project has a module, called distribution, that provides a docker-compose.yaml file that can be used to spin up Docker containers to run this microservice.

The first step is to create any custom image needed, by building the distribution module.  From the CDS home directory (where the code was checked out), navigate to the module:

    cd ms/blueprintsprocessor/distribution/
Build it using the Maven profile called Docker:

    mvn clean install -Pdocker
	
Start Docker containers using docker-composer:
==============================================

Navigate to the docker-compose file in the distribution module:

    cd src/main/dc/
	
From there, start the containers:

    docker-compose up -d
This will spin the Docker containers declared inside the docker-compose.yaml file in the background.


To verify the logs generated by docker-composer, type:

    docker-compose logs -f
	
	
Testing the environment:
========================

Point your browser to http://localhost:8000/api/v1/execution-service/ping (please note that the port is 8000, not 8080)

To authenticate, use ccsdkapps / ccsdkapps as login / password.