Adding new validations or consuming the latest ones is inconvenient and error-prone in the current setup. Co-Authored-By: Ana Krivokapic <akrivoka@redhat.com> Change-Id: I7f0c951ec5207d1c8f2a2c871983512cf3c0fee5
4.9 KiB
Add Support for Custom TripleO Validations
https://blueprints.launchpad.net/tripleo/+spec/custom-validations
All validations are currently stored in a single directory. This makes it inconvenient to try and write new validations, update from a remote repository or to add an entirely new (perhaps private) source.
Problem Description
- The deployer wants to develop and test their own validations in a personal checkout without risking changes to the default ones.
- The deployer wants to use a stable release of TripleO but consume the latest validations because they are non-disruptive and check for more stuff.
- A third party has developed validations specific to their product that they don't want to or can't include in the tripleo-validations repository.
Proposed Change
Overview
We will store a default set of TripleO validations in a Swift
container called tripleo-validations
. These will be shared
across all plans and are not expected to be updated by the deployer.
This container should be created on initial undercloud deployment.
We will provide a mechanism for deployers to add a custom set of
validations per deployment plan. These plan-specific validations will be
stored in a custom-validations
subdirectory in the plan's
Swift container. Storing them together with the plan makes sense as
these validations can be specific to particular deployment plan
configuration, as well as makes the import/export easier.
Since custom validation will be stored as part of the plan, no additional workflows/actions to perform CRUD operations for them will be necessary; we can simply use the existing plan create/update for this purpose.
The validation Mistral actions (e.g. list
and
run_validation
) will need to be updated to take into
account this new structure of validations. They will need to look for
validations in the tripleo-validations
Swift container (for
default validations) and the plan's custom-validations
subdirectory (for custom validations), instead of sourcing them from a
directory on disk, as they are doing now.
If a validation with the same name is found both in default in custom validations, we will always pick the one stored in custom validations.
Note
As a further iteration, we can implement validations as per-service tasks in standalone service Ansible roles. They can then be consumed by tripleo-heat-templates service templates.
Alternatives
- Do nothing. The deployers can already bring in additional validations, it's just less convenient and potentially error-prone.
- We could provide a know directory structure conceptually similar to
run-parts
where the deployers could add their own validation directories.
Security Impact
None
Other End User Impact
In order to add their own validations, the deployer will need to
update the deployment plan by adding a custom-validations
directory to it, and making sure this directory contains the desired
custom validations. The plan update operation is already supported in
the CLI and the UI.
Performance Impact
Since the validation sources will now be Swift containers, downloading validations will potentially be necessary on each run. We will have to keep an eye on this an potentially introduce caching if this turns out to be a problem.
Other Deployer Impact
None
Developer Impact
Testing and developing new validations in both development and production environments will be easier with this change.
Implementation
Assignee(s)
- Primary assignees:
-
- akrivoka
- Other contributors:
-
- florianf
Work Items
- Move to using Swift as default storage for tripleo-validations (1).
- Update
load_validations
andfind_validation
functions to read validations from all the sources specified in this document.
Dependencies
In order to be able to implement this new functionality, we first need to have the validations use Swift as the default storage. In other words, this spec depends on the blueprint2.
Testing
The changes will be unit-tested in all the tripleo repos that related changes land in (tripleo-common, instack-undercloud, tripleo-heat-templates, etc).
We could also add a new CI scenario that would have a custom-validations directory within a plan set up.
Documentation Impact
We will need to document the format of the new custom-validations plan subdirectory and the new behaviour this will introduce.