update link to upper-constraints.txt
[aai/sparky-be.git] / docs / platform / installation.rst
1 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
2
3 Installation and Developer Setup
4 ================================
5
6 Project Structure
7 -----------------
8
9 Sparky is structured with a top level project that contains two sub-projects (application and service projects). The application project contains the configuration and spring application code that customizes and runs sparky as an application. The service project contains the core sparky code that provides functionality for sparky-fe requests and synchronization.
10
11 In regards to the front-end (sparky-fe), sparky-be serves up the sparky-fe web content and sparky-be deals with all inter-microservice communications.
12
13 Clone, Build, & Configure
14 =========================
15
16 Clone & Build
17 -------------
18
19 Clone the sparky-be repository into a directory of your choice.
20
21 .. code-block:: bash
22
23     git clone ssh://<username>@gerrit.onap.org:29418/aai/sparky-be
24
25 After cloning the project (sparky-be), build the project by executing the following Maven command from the project's top level directory:
26
27 .. code-block:: bash
28
29    mvn clean install
30
31 Configuration
32 -------------
33
34 All configuration for running sparky is found in ``<working directory>/sparkybe-onap-application/config``.
35
36 Profiles
37 --------
38
39 *application.properties* is the main configuration point for the sparky application. Within this file the *spring.profiles* are set. Each spring profile has configuration that will be loaded into an associated spring bean. The currently available profiles:
40
41   * camel
42   * http | ssl
43   * fe-dev | fe-prod
44   * oxm-default | oxm-override
45   * resources
46   * oxm-schema-dev | oxm-schema-prod
47   * aai-proxy
48   * gizmo (retired)
49   * sync (retired)
50   * portal (partially retired, only use if needing aaf auth and portal integration)
51
52 Profile descriptions:
53
54   * camel - Enables spring-boot camel routing rules
55   * http - Sets Sparky's communication protocol to HTTP
56   * ssl - Sets Sparky's communication protocol to HTTPS
57   * portal - Adds ONAP portal processing to Sparky's flow (currently removed from oom)
58   * fe-dev - Exposes the static folder for UI development when running Sparky locally (target/static)
59   * fe-prod - Exposes the standard path for the UI in the docker container
60   * oxm-default - Sets the default version and version list of OXM files to be used
61   * oxm-override - Sets a custom version and version list of OXM files to be used
62   * resources - Sparky will use aai-resources (microservice) as the primary source of inventory information
63   * gizmo - Sparky will use gizmo (microservice) as the primary source of inventory information (retired)
64   * sync - Will cause Sparky to run any configured synchronizers to populate index data in a single large transaction (retired)
65   * oxm-schema-dev - Sets the location to find the OXM files within a development environment
66   * oxm-schema-prod - Sets the location to find the OXM files within a deployed environment
67   * aai-proxy - Proxies call made from the UI to resources or traversal microservices
68
69 The idea behind the profiles is to create a simple approach to adjusting runtime behavior without needing to edit large xml files (see **Spring Beans** below). Ahead of running Sparky, some of the profiles will need to be edited to work within your environment (e.g. set where your custom OXM files need to be loaded from).
70
71 Spring Beans
72 ------------
73
74 The *spring-beans* directory contains all the .xml bean representations that will be auto-wired at runtime. Some of the beans are associated with a single profile (see "profile=" in header of bean declaration), and others will be loaded with differing values depending the profile used.
75
76 Scanning through the beans and cross-referencing with their associated Java classes is a good way of getting familiar with the startup and runtime of Sparky.
77
78 Authorization
79 -------------
80
81 Within the "auth" directory are any certs needed to communicate within the environment you are currently working in (remember Sparky can be configured to run using HTTP).
82
83 Filters
84 -------
85
86 The "filters" directory contains the JSON descriptor files that describe the filters used in the VNFs view.
87
88 Logging
89 -------
90
91 Sparky uses the Logback framework to generate logs. The logback.xml is contained in the "logging" directory.
92
93 Running Locally
94 ===============
95
96 The configuration described in this section will be in reference to running Sparky through Eclipse. The same steps can be applied to running via bash/cmd with minor tweaks.
97
98 Sparky should be built ahead of running (``mvn clean install``). It's useful to add a build configuration to Eclipse to build Sparky.
99
100 The run configuration should contain the following:
101
102 * The configuration should be created based off of the "Maven Build" template
103 * "Main" tab
104     * Build directory - ${workspace_loc:/sparky-be/sparkybe-onap-application}
105     * Goals - spring-boot:run
106     * Parameter table
107         * name: CONFIG_HOME value: ${workspace_loc:/sparky-be/sparkybe-onap-application}/config
108         * name: APP_HOME value: ${workspace_loc:/sparky-be/sparkybe-onap-application}
109
110 Deploying Sparky
111 ================
112
113 At time of writing (Oct 2018) Sparky is primarily deployed into a Kubernetes environment or a "pure" docker environment using custom chef parametrization. How you want to deploy Sparky is up to you. At a high level, the cleanest approach is ensuring your configured property (profiles) files are copied into the docker container so the Spring context has access to the values which will in turn start Sparky using your configured values.
114
115 See ``sparky-be/sparkybe-onap-application/src/main/docker`` -> Dockerfile for details on how Sparky runs within a Docker container.
116
117 Front-End (sparky-fe) Details
118 =============================
119
120 Clone, Build, & Configure
121 -------------------------
122
123 Clone the sparky-fe repository into a directory of your choice.
124
125 Dependencies
126 ------------
127 You will need to install the following tools:
128
129 * node.js, including the Node Package Manager (NPM) (if there issues installing the latest version, try 6.10.1)
130 * Python 2.7.13
131
132 After installing node.js and NPM, you need to install the required node.js packages by navigating to the top level sparky-fe directory and executing:
133
134 .. code-block:: bash
135
136  npm install
137
138 Build
139 -----
140
141 To build sparky-fe (generate a .war file):
142
143 Execute:
144
145 .. code-block:: bash
146
147  gulp build
148
149 The build will create a directory called ``dist`` and add the ``aai.war`` file to it.
150
151 If changes to the build flow are required, updating ``webpack.config.js`` and ``gulpfile.js`` will likely provide any build tuning that is required.
152
153 Running sparky-fe Locally
154 =========================
155
156 Execute:
157
158 .. code-block:: bash
159
160  npm start
161
162 By default the local instance of the UI will be served to ``http(s)://localhost:8001/#/browse``.
163
164 If deploying through OOM use {host}:30220/services/aai/webapp/index.html#/browse
165
166 Deploy sparky-fe
167 ================
168
169 If you have access to a container repository (e.g. Nexus), push the .war image that you have built to your repository and configure your sparky-be ``sparkybe-onap-application/pom.xml`` to pull your sparky-fe image.