##############################################################################
# Copyright (c) 2015 Ericsson AB and others.
# stefan.k.berg@ericsson.com
# jonas.bjurel@ericsson.com
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################

Abstract
========
The fuel/ci directory holds all Fuel@OPNFV programatic abstractions for
the OPNFV community release and continous integration pipeline.
There are two Fuel@OPNF autonomous scripts fo this, complying to the OPNFV CI pipeline guideline:
 - build.sh
 - deploy.sh

USAGE
=====
For usage information of the CI/CD scripts, please run:
./build.sh -h
./deploy.sh -h

Details on the CI/CD deployment framework
=========================================

Overview and purpose
--------------------
The CI/CD deployment script relies on a configuration structure, providing base
installer configuration (part of fuel repo: deploy/config), per POD specific
configuration (part of a separate classified POD configuration repo: securedlab
, plugin configuration (part of fuel repo: deploy/config/plugins), and
deployment scenario configuration (part of fuel repo: deploy/scenario).

- The base installer configuration resembles the least common denominator of all
  HW/POD environment and deployment scenarios (These configurations are
  normally carried by the the installer projects in this case (fuel@OPNFV).
- Per POD specific configuration specifies POD unique parameters, the POD
  parameter possible to alter is governed by the Fuel@OPNFV project.
- Plugin configuration - providing configuration of a specific plugin.
  these configurations maintain there own namespace and are normally maintained
  by collaborative projects building Fuel@OPNFV plugins
- Deployment scenario configuration - provides a high level, POD/HW environment
  independent scenario configuration for a specifiv deployment. It defines what
  features/plugins that shall be deployed - as well needed overrides of the base
  installer-, POD/HW environment- configurations. Objects allowed to override
  is governed by the Fuel@OPNFV project.

Executing a deployment
----------------------
deploy.sh must be executed locally at the target lab/pod/jumpserver
A configuration structure must be provided - see the section below.
It is straight forward to execute a deployment task - as an example:
sudo deploy.sh -b file:///home/jenkins/config -l LF-1 -p POD-2 -s
os_odl-l2_ha -i file:///home/jenkins/MyIso.iso

-b and -i arguments should be expressed in URI style (eg: file://...
or http://.... The resources can thus be local or remote.

Configuration repository structure
----------------------------------
The CI deployment engine relies on a configuration directory/file structure
pointed to by the -b option described above.
Normally this points to the secure classified OPNFV securedlab repo to which
only jenkins and andmins have access to, but you may point to any local or
remote strcture fullfilling the diectory/file structure below.
The reason that this configuration structure needs to be secure/hidden
is that there are security sensitive information in the various configuration
files.
A local stripped version of this configuration structure with virtual
deployment configurations also exist under build/config/.
Following configuration directory and file structure should be adheare to:

TOP
!
+---- labs
       !
       +---- lab-name-1
       !        !
       !        +---- pod-name-1
       !        !        !
       !        !        +---- fuel
       !        !               !
       !        !               +---- config
       !        !                       !
       !        !                       +---- dea-pod-override.yaml
       !        !                       !
       !        !                       +---- dha.yaml
       !        !
       !        +---- pod-name-2
       !                 !
       !
       +---- lab-name-2
       !        !


Creating a deployment scenario
------------------------------
Please find deploy/scenario/README for instructions on how to create a new
deployment scenario.