| .. ============LICENSE_START========================================== |
| .. =================================================================== |
| .. Copyright © 2017 AT&T Intellectual Property. All rights reserved. |
| .. =================================================================== |
| .. Licensed under the Creative Commons License, Attribution 4.0 Intl. (the "License"); |
| .. you may not use this documentation except in compliance with the License. |
| .. You may obtain a copy of the License at |
| .. |
| .. https://creativecommons.org/licenses/by/4.0/ |
| .. |
| .. Unless required by applicable law or agreed to in writing, software |
| .. distributed under the License is distributed on an "AS IS" BASIS, |
| .. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| .. See the License for the specific language governing permissions and |
| .. limitations under the License. |
| .. ============LICENSE_END============================================ |
| .. ECOMP is a trademark and service mark of AT&T Intellectual Property. |
| |
| ========================== |
| APPC Deployment Guidelines |
| ========================== |
| |
| Introduction |
| ============ |
| |
| The Application Controller (APPC) is one of the components in the ONAP |
| Platform. Its main function is to perform functions to control the |
| lifecycle of Virtual Functions (VNFs) as well as the components that |
| make up these functions. Therefore, this allows the cloud to be |
| abstracted from Virtual Functions in order to enable repeatable actions, |
| as well as enabling automation and a dynamic configuration approach. |
| |
| ONAP APPC is delivered with **3 Docker Containers**, which are deployed |
| using Docker Images already containing the APPC Framework Suite. NOTE: |
| All three containers are hosted on Ubuntu 14.04 LTS OS. |
| |
| Deployment Mode for APPC |
| ======================== |
| |
| The docker containers described above are set up to be deployed on the |
| same Virtual Machine. **Docker Compose** is Docker's deployment tool |
| that allows to configure and deploy multiple containers at once. |
| |
| Compiling and Building APPC |
| =========================== |
| |
| APPC (structured as a Maven project) uses the Maven tool to help |
| compile, build, and deploy APPC Artifacts (usually made up of Java |
| packages) into a Maven Repository. In order to compile and build APPC, a |
| ``mvn clean install`` is executed, which checks for any errors and Java |
| exceptions during compilation process. |
| |
| Deploying APPC |
| ============== |
| |
| In order to deploy APPC, a Docker-ready machine needs to be available in |
| order to deploy the APPC Docker Containers. The following will help |
| explain the requirements in order to run Docker to deploy these |
| containers. |
| |
| APPC Docker Containers |
| ---------------------- |
| |
| ONAP APPC docker images are currently stored on the Rackspace Nexus |
| Docker Registry (Maven Repository). The deployment code can be found in |
| the Maven Project that builds and deploys the Docker Images to be |
| deployed in the Nexus Repository (current approach is by using Jenkins). |
| These Docker Images are composed of the APPC Artifacts |
| (org.openecomp.appc.\*) compiled and packaged in the "appc" git |
| repository. |
| |
| The following Docker images are the actual deployment images used for |
| running APPC: |
| |
| - **APPC Container**: This Docker container carries the APPC Core |
| Framework (OpenDaylight, Karaf, OSGI Bundles, ODL Functions/APIs, and |
| APPC specific features). This image is built on top of the SDN-C |
| Docker Image, which contains core features (such as dblib as the |
| Database Connector, SLI - the Service Logic Interpreter, and the |
| Active & Available Inventory (A&AI) Listener). Some of these |
| inherited SDN-C features/artifacts are necessary dependencies to |
| build and compile APPC features/artifacts. |
| - **MySQL DB Container (Version 5.6)**: This is the database for APPC. |
| It is currently using MySQL Community Version (Open-Source version). |
| - **Node Red / DGBuilder**: This container has the visual tool used to |
| assemble DGs in order to put together flows or services used to serve |
| Virtual Functions. NOTE: This container is deployed using a Docker |
| Image that is managed and supported by the SDN-C component. |
| |
| Starting APPC |
| ============= |
| |
| Ther following steps are needed to deploy and start ONAP APPC: |
| |
| Requirement to Pre-Define properties before compiling APPC: |
| ----------------------------------------------------------- |
| |
| - The following maven properties are not defined by default, since they |
| change based on where the platform is being deployed: |
| |
| - ${openecomp.nexus.url}: URL of the Nexus Repository where APPC |
| Code is at. |
| - ${openecomp.nexus.port}: Port number of the Nexus Repository where |
| APPC Code is at. |
| - ${openecomp.nexus.user}: Username ID of the Nexus Repository where |
| APPC Code is at. |
| - ${openecomp.nexus.password}: Password of the Nexus Repository |
| where APPC Code is at. |
| |
| Using Jenkins Jobs to set up APPC Package |
| ----------------------------------------- |
| |
| - A Jenkins instance for ONAP is required, in which Jenkins Jobs for |
| both the APPC core code and deployment code are maintained. |
| |
| - Jenkins Job for APPC Core git project: The Jenkins Job for the APPC |
| git repository (Core Component) is in charge of compiling and |
| uploading/deploying successfully compiled maven APPC artifacts into a |
| Nexus/Maven Repository. |
| |
| - Jenkins Job for APPC Deployment git project: The Jenkins Job is used |
| to run the APPC Deployment code which ultimately builds and deploy |
| the APPC Docker Image. Once the Jenkins job runs successfully, the |
| newly compiled images are uploaded to the Nexus Repository. The APPC |
| Docker image contains all the SDN-C and APPC artifacts needed to |
| deploy a successful APPC Component. |
| |
| - With this job, all required and newly compiled and uploaded (to |
| Nexus Repository) APPC features from the Jenkins job are pulled |
| into the images and installed in an automated fashion. |
| |
| - As explained in the "APPC Docker Containers" section, the |
| configuration and set up of the other two docker containers are not |
| maintained by APPC. MySQL Docker Image is maintained by the Open |
| Source MySQL Community and the Node Red / DGBuilder Docker Image is |
| maintained by SDN-C. |
| |
| Using Docker to start APPC Package |
| ---------------------------------- |
| |
| - The VM where APPC will be started needs to have Docker Engine and |
| Docker-Compose installed (instructions on how to set Docker Engine |
| can be found |
| `here <https://docs.docker.com/engine/installation/>`__). The stable |
| version of Docker Engine where APPC has been tested to work is v1.12. |
| An important requirement in order to access the Docker Image |
| Repository on Nexus Repository (where docker images are currently |
| stored) need to include the Nexus repository certificate imported in |
| the host VM. This is needed for Docker to be able to access the |
| Docker Images required (NOTE: MySQL Docker Image is obtained from the |
| public Docker Hub). |
| |
| - NOTE ON "docker-compose" COMMANDS: The only work if there is a |
| provided docker-compose YAML script in the cmd path |
| |
| - In order to deploy containers, the following steps need to be taken |
| in your host VM (Assuming instructions on how to set up Docker Engine |
| have already been done): |
| |
| .. code:: bash |
| |
| # Install Docker-Compose |
| apt-get install python-pip |
| pip install docker-compose |
| |
| # Login to Nexus Repo to pull Docker Images (this assumes that Nexus Certificate is already imported in the Host VM on /usr/local/share/ca-certificates/ path): |
| docker login <DOCKER_REGISTRY_REPO> # prompts for user credentials as a way to authenticate |
| |
| # Pull latest version of Docker Images (separately) |
| docker pull <APPC_DOCKER_IMAGE_URL> |
| docker pull mysql/mysql-server:5.6 # Default Open-Source MySQL Docker Image |
| docker pull <SDNC_DOCKER_IMAGE_URL> |
| |
| # Pull latest version of Docker Images |
| docker-compose pull |
| |
| # Deploy Containers |
| docker-compose up # add -d argument to start process as a daemon (background process) |
| |
| Using Docker to stop APPC Package |
| --------------------------------- |
| |
| - The following steps are required to stop the APPC package: |
| |
| .. code:: bash |
| |
| # Stop and Destroy Docker Containers (with docker-compose YAML script) |
| docker-compose down |
| |
| # Stop Docker Containers (without docker-compose YAML script) |
| docker stop <APPC_DOCKER_CONTAINER> |
| docker stop <MYSQL_DOCKER_CONTAINER> |
| docker stop <DGBUILDER_DOCKER_CONTAINER> |
| |
| # Destroy Docker Containers (without docker-compose YAML script) |
| docker rm <APPC_DOCKER_CONTAINER> |
| docker rm <MYSQL_DOCKER_CONTAINER> |
| docker rm <DGBUILDER_DOCKER_CONTAINER> |
| |
| - NOTE: To get a feel of how the deployment is actually performed, it |
| is best to review the Docker Strategy of APPC and look at the actual |
| Jenkins Jobs. |
| |
| Other Useful Docker Commands |
| ---------------------------- |
| |
| - The commands below are useful to test or troubleshoot in case a |
| change in the gitlab code breaks a clean APPC deployment: |
| |
| .. code:: bash |
| |
| # Check current docker-compose logs generated during 'docker-compose up' process: |
| docker-compose logs # add -f to display logs in real time |
| |
| # Check out docker container's current details |
| docker inspect <DOCKER_CONTAINER> |
| |
| # Verbose output during docker-compose commands |
| docker-compose --verbose <DOCKER_COMPOSE_CMD_ARG> |
| |
| # Check previous docker volumes |
| docker volume ls |
| |
| # Delete previous docker volume(s) |
| docker volume rm <DOCKER_VOL_ID_1> <DOCKER_VOL_ID_2> ... <DOCKER_VOL_ID_N> |
| |
| ONAP Heat Template |
| ------------------ |
| |
| A Heat template that can be used on RackSpace to spin up the APPC Host |
| VM as well as the other ONAP Components is available in gitlab. This |
| template would orchestrate the deployment of all ONAP components, which |
| will trigger docker instantiation techniques to start up the containers |
| (either standard docker or docker-compose - depending on how the |
| component's containers get spun up). |
| |
| Validating APPC Installation |
| ============================ |
| |
| First of all, APPC Features come in the form of Karaf Features (an |
| ODL-OpenDaylight package) which can be composed of one or more OSGI |
| bundles. These features get installed in the ODL framework in order to |
| be used and installed in the APPC Docker Container (NOTE: SDN-C Core |
| Features also get installed since APPC docker image uses the SDN-C Core |
| docker image as a base image). |
| |
| Accessing docker containers |
| --------------------------- |
| |
| The following command is used to log in / access the docker containers: |
| |
| .. code:: bash |
| |
| docker exec -it <DOCKER_CONTAINER> bash |
| |
| Checking if APPC Features are installed successfully |
| ---------------------------------------------------- |
| |
| The following commands are used to check if the APPC (and SDN-C) Bundles |
| and Features have been installed correctly in ODL (make sure to enter |
| the APPC Docker Container shell session): |
| |
| .. code:: bash |
| |
| # All commands are done inside the appc docker container |
| |
| # Enter the ODL Karaf Console |
| cd /opt/opendaylight/current/bin |
| ./client -u karaf |
| |
| # Check if features have been installed or not (the ones with an 'X' in the "Installed" column have been successfully installed) |
| feature:list | grep appc # filter appc features only |
| feature:list | grep sdnc # filter sdn-c features only |
| |
| # Check if bundles have been loaded successfully (the ones with 'Active' in the "State" column have been successfully loaded) |
| bundle:list | grep appc # filter appc bundles only |
| bundle:list | grep sdnc # grep sdn-c bundles only |
| |
| # Check reason why bundle failed to load |
| bundle:diag | grep <BUNDLE_NAME> |
| |
| Accessing the API Explorer |
| -------------------------- |
| |
| The API Explorer is a GUI provided by OpenDaylight Open Source |
| Framework. This GUI is very useful to send API calls from APIs that are |
| either developed by APPC or SDN-C frameworks. In order to make these |
| REST calls, some APIs use the |
| `RESTCONF <http://sdntutorials.com/what-is-restconf/>`__ protocol to |
| make such calls. |
| |
| Currently, the APIs that have a Directed Graph (DG) mapped to it are the |
| ones that can be tested which are the SDN-C APIs and APPC |
| "appc-provider" APIs (LCM APIs will be available to test in later |
| releases). |
| |
| In order to access this GUI, you need to go to the following website |
| which will prompt for ODL user credentials in order to authenticate |
| (more details on generic API Explorer |
| `here <https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:Restconf_API_Explorer>`__): |
| |
| - http://localhost:8282/apidoc/explorer/index.html (change localhost to |
| your VM's public IP). |
| |
| APPC Configuration Model |
| ======================== |
| |
| APPC Configuration model involves using "default.properties" files |
| (which are usually located in each of the APPC Features - |
| ..//src//resources/org/openecomp/appc/default.properties) for APPC |
| Feature that have default (or null) property values inside the core APPC |
| code. These default (or null) properties should be overwritten in the |
| properties file called "appc.properties" located in the APPC Deployment |
| code (../installation/src/main/appc-properties/appc.properties). |
| |
| Each APPC component depends on the property values that are defined for |
| them in order to function properly. For example, the APPC Feature |
| "appc-rest-adapter" located in the APPC Core repo is used to listen to |
| events that are being sent and received in the form of DMaaP Messages |
| through a DMaaP Server Instance (which is usually defined as a RESTful |
| API Layer over the Apache Kafka Framework). The properties for this |
| feature need to be defined to point to the right DMaaP set of events to |
| make sure that we are sending and receiving the proper messages on |
| DMaaP. |
| |
| Currently, there are two ways to change properties for APPC Features: |
| |
| - **Permanent Change**: In appc.properties, change property values as |
| needed and commit changes in your current git repo where your APPC |
| Deployment code repo is at. Then, run your Jenkins job that deploys |
| the APPC Docker Image (make sure the Jenkins Job configuration points |
| to the branch where you just commited the properties change) to make |
| sure that APPC Docker Image contains latest changes of |
| appc.properties from the beginning (of course, the Host VM where the |
| docker containers will be deployed at needs to update images with |
| "docker-compose pull" to pick up the changes you just committed and |
| compiled). |
| - **Temporary Change (for quick testing/debugging)**: In the APPC |
| Docker Container, find the appc.properties file in |
| /opt/openecomp/appc/properties/appc.properties and make changes as |
| needed. Then, restart the APPC Docker Container by running "docker |
| stop " then "docker start ") (NOTE: This approach will lose all |
| changes done in appc.properties if the docker container is destroyed |
| instead of stopped). |
| |
| Additional Notes |
| ================ |
| |
| - For more information on a current list of available properties for |
| APPC Features, please go to README.md located in the installation |
| directory path of the APPC Deployment Code. |
| - More documentation can be found on the ONAP Wiki's `APPC |
| Documentation Page <https://wiki.onap.org/display/DW/Controllers>`__ |
| and in ONAP's `Read the |
| docs <http://onap.readthedocs.io/en/latest/release/index.html#projects>`__ |
| documentation site. |