
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
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
Description
Languages
Python
97.5%
Shell
1.9%
Makefile
0.5%