110 lines
3.5 KiB
Markdown
110 lines
3.5 KiB
Markdown
# Nailgun API Extension with External Git Server
|
|
### About
|
|
Nailgun extension that generates deployment data based on configuration files published in external
|
|
git repository
|
|
### Requirements
|
|
Operational Fuel 9.x (Mitaka) Master Node
|
|
|
|
### Installation
|
|
Execute following commands on Fuel Master node
|
|
```
|
|
# yum install git python-pip
|
|
# git clone https://github.com/openstack/fuel-nailgun-extension-iac
|
|
# cd fuel-nailgun-extension-iac
|
|
# pip install -r requirements.txt
|
|
# python setup.py install
|
|
# nailgun_syncdb
|
|
# systemctl restart nailgun.service
|
|
```
|
|
Since the 9.<x> version of Fuel extension should be enabled.
|
|
To list all available extensions execute following command
|
|
```
|
|
# fuel2 extension list
|
|
```
|
|
Than enable extension for a particular environment
|
|
```
|
|
# fuel2 env extension enable <env_id> -E fuel_external_git
|
|
```
|
|
|
|
### How to Use
|
|
|
|
This extension introduces set of additional Fuel CLI commands which allows the operator to
|
|
associate a git repo with a particular environment and preform CRUD operations on this repo.
|
|
See details [here](./doc/cli.md).
|
|
```
|
|
gitrepo create
|
|
gitrepo delete
|
|
gitrepo get configs
|
|
gitrepo init
|
|
gitrepo list
|
|
gitrepo update
|
|
```
|
|
Create repository and configure nailgun to use it.
|
|
```
|
|
fuel2 gitrepo create --env 1 --name oscnf1 --url git@github.com:dukov/oscnf.git --ref master \
|
|
--key .ssh/id_rsa
|
|
```
|
|
Next create repository structure. This can be done manually
|
|
(see Repo structure description below) or extension can automatically generate basic structure.
|
|
```
|
|
fuel2 gitrepo init --repo 11
|
|
```
|
|
In order to track configuration evolution it is possible to download all configuration files from
|
|
the environment into **separate** branch of configured Git repository. User which has been
|
|
configured to access repository must have write permissions to it
|
|
```
|
|
fuel2 gitrepo get configs --env 1
|
|
```
|
|
#### Git Repo structure
|
|
Here is the example repo structure
|
|
```
|
|
.
|
|
|-- controller_configs
|
|
| `-- glance-api.conf
|
|
|-- node_1_configs
|
|
| `-- nova.conf
|
|
|-- nova.conf
|
|
|-- overrides.yaml
|
|
`-- tools
|
|
`-- show-config-for.py
|
|
```
|
|
There are three levels of configuration: Global, Role, Node. Each level has higher priority in terms
|
|
of configuration parameters.
|
|
* Global - configuration parameters from all configs from this level will be applied to all nodes
|
|
in environment.
|
|
* Role - configuration parameters from all configs from this level will be applied to nodes with a
|
|
particular role. Parameters from this level will override parameters from Global level
|
|
* Node - configuration parameters from all configs from this level will be applied to node with a
|
|
particular id. Parameters from this level will override parameters from Global and Role levels
|
|
|
|
For example we have ```nova.conf``` file with ```debug = True``` in Global level and ```nova.conf```
|
|
with ```debug = False``` in Role level. Resulting configuration will be:
|
|
```
|
|
[DEFAULT]
|
|
debug = False
|
|
```
|
|
Configuration files for Global level should be placed in repo root. Role and Node levels should be
|
|
described in overrides.yaml placed in repo root directory using following format
|
|
```
|
|
nodes:
|
|
'<node_id>': '<directory_name>'
|
|
roles:
|
|
'<role_name>': '<directory_name>'
|
|
```
|
|
Example overrides.yaml
|
|
```
|
|
nodes:
|
|
'1': node_1_configs
|
|
'2': node_2_configs
|
|
roles:
|
|
'cinder': 'cinder_configs'
|
|
'compute': 'compute_configs'
|
|
'controller': 'controller_configs'
|
|
'primary-controller': 'controller_configs'
|
|
```
|
|
Configuration files for Role and Node levels should be placed in corresponding directory described
|
|
in overrides.yaml
|
|
|
|
### REST API
|
|
API documentation can be found [here](./doc/api.md)
|