A configuration management service with support for secrets.
Go to file
Felipe Monteiro 8aec0390f8 DECKHAND-80: Validations API Implementation
The Validations API has been introduced to Deckhand, allowing users
to register new validation results in Deckhand, as well as query
the API for validation results for a revision. The validation results
include a list of errors that occurred during document validation.

All functional tests related to the API are now passing.

The following endpoints have been implemented:

   * /api/v1.0/revisions/{revision_id}/validations
   * /api/v1.0/revisions/{revision_id}/validations/{validation_name}
   * /api/v1.0/revisions/{revision_id}/validations/{validation_name}/entries
   * /api/v1.0/revisions/{revision_id}/validations/{validation_name}/entries/{entry_id}

Some back-end refactoring was needed to implement this API. In
particular:

  - Added a new Validation sqlalchemy DB model
  - Introduced DataSchema handling to the engine.document_validation
    module so that registered schema validations can be used
  - Changed the way the result of the 'deckhand-schema-validation' internal
    validation is generated: it is now the amalgamation of all the
    internal and registered schema validations executed
  - Introduced rawquery generation so that raw SQL queries can be used to
    get results from DB

Fixed following bug:

  - UniqueConstraint is now used to correctly generate unique constraints
    for sqlalchemy models that are supposed to be combinations of columns

Change-Id: I53c79a6544f44ef8beab2600ddc8a3ea91ada903
2017-10-21 23:09:16 -04:00
charts/deckhand Move Deckhand Chart 2017-10-20 11:20:01 -04:00
deckhand DECKHAND-80: Validations API Implementation 2017-10-21 23:09:16 -04:00
doc/source Revamp Deckhand documentation 2017-10-16 20:11:56 +01:00
etc/deckhand DECKHAND-80: Validations API Implementation 2017-10-21 23:09:16 -04:00
releasenotes DECKHAND-80: Validations API Implementation 2017-10-21 23:09:16 -04:00
tools Integrate Deckhand with keystone auth 2017-10-16 19:54:46 +01:00
.coveragerc Add Deckhand coverage job 2017-08-15 16:11:35 -04:00
.gitignore Add Deckhand coverage job 2017-08-15 16:11:35 -04:00
.gitreview Add gitreview file 2017-08-11 01:22:26 -05:00
.testr.conf [feat] DECKHAND-28: Document pre-validation logic and API integration 2017-08-08 18:52:44 +01:00
AUTHORS DECKHAND-66: Document substitution implementation 2017-10-13 15:16:27 -04:00
Dockerfile DeckHand Dockerfile 2017-09-14 16:50:06 +00:00
HACKING.rst Add sphinx job for auto-generating docs 2017-09-21 16:16:23 +01:00
LICENSE Initial commit 2017-06-16 08:29:03 -07:00
README.rst Revamp Deckhand documentation 2017-10-16 20:11:56 +01:00
entrypoint.sh DeckHand Dockerfile 2017-09-14 16:50:06 +00:00
requirements.txt Integrate Deckhand with keystone auth 2017-10-16 19:54:46 +01:00
setup.cfg Integrate Deckhand with keystone auth 2017-10-16 19:54:46 +01:00
setup.py Oslo config integration (#1) 2017-06-26 16:57:50 -07:00
test-requirements.txt Add releasenote management 2017-10-03 20:58:12 +01:00
tox.ini DECKHAND-61: oslo.policy integration 2017-10-07 18:43:28 +01:00

README.rst

Deckhand

Deckhand is a document-based configuration storage service built with auditability and validation in mind.

Core Responsibilities

  • layering - helps reduce duplication in configuration while maintaining auditability across many sites
  • substitution - provides separation between secret data and other configuration data, while allowing a simple interface for clients
  • revision history - improves auditability and enables services to provide functional validation of a well-defined collection of documents that are meant to operate together
  • validation - allows services to implement and register different kinds of validations and report errors

Getting Started

To generate a configuration file automatically:

$ tox -e genconfig

Resulting deckhand.conf.sample file is output to :path:etc/deckhand/deckhand.conf.sample

Copy the config file to a directory discoverably by oslo.conf:

$ cp etc/deckhand/deckhand.conf.sample ~/deckhand.conf

To setup an in-memory database for testing:

[database]

#
# From oslo.db
#

# The SQLAlchemy connection string to use to connect to the database.
# (string value)
connection = sqlite:///:memory:

To run locally in a development environment:

$ sudo pip install uwsgi
$ virtualenv -p python3 /var/tmp/deckhand
$ . /var/tmp/deckhand/bin/activate
$ sudo pip install .
$ sudo python setup.py install
$ uwsgi --http :9000 -w deckhand.cmd --callable deckhand_callable --enable-threads -L

Testing

Automated Testing

To run unit tests using sqlite, execute:

$ tox -epy27
$ tox -epy35

against a py27- or py35-backed environment, respectively. To run individual unit tests, run:

$ tox -e py27 -- deckhand.tests.unit.db.test_revisions

for example.

To run unit tests using postgresql, execute:

$ tox -epy27-postgresql
$ tox -epy35-postgresql

To run functional tests:

$ tox -e functional

You can also run a subset of tests via a regex:

$ tox -e functional -- gabbi.suitemaker.test_gabbi_document-crud-success-multi-bucket

Manual Testing

Document creation can be tested locally using (from root deckhand directory):

$ curl -i -X PUT localhost:9000/api/v1.0/bucket/{bucket_name}/documents \
     -H "Content-Type: application/x-yaml" \
     --data-binary "@deckhand/tests/unit/resources/sample_document.yaml"

# revision_id copy/pasted from previous response.
$ curl -i -X GET localhost:9000/api/v1.0/revisions/1