[openstack-dev] [tripleo] How To Review tripleo-validations
Tomas Sedovic
tsedovic at redhat.com
Mon Oct 10 16:30:25 UTC 2016
Hey everyone!
During the Newton cycle, we have added a new repository:
tripleo-validations. This is a little guide on how to review the patches
there.
All the validations are YAML files under the `validations` directory.
They can optionally add files in `validations/library` (for Ansible
modules) or `validations/files` for additional files or scripts to run.
Each validation is a self-contained check for something that could
potentially break the deployment. Some of them verify the undercloud
hardware, the introspected nodes for overcloud deployment, the heat
templates, and some post-deployment checks.
Here's a list of things to pay attention to. You can look at this sample
patch as you follow along:
https://review.openstack.org/#/c/353943/
* Check that the `hosts` section has a known value that fits the validation
This is currently: undercloud, overcloud, compute, controller or all. It
describes the nodes the validation should run on. We need to update this
to support the composable/custom roles[1].
You can see the source for these labels by running
`scripts/tripleo-ansible-inventory --list` from the repo on the
undercloud. You need to run `source stackrc` first.
* The `vars/metadata/name` section must exist and have a unique and
descriptive name -- it should make it clear what the validation is for.
This is displayed in the UI.
* The `vars/metadata/description` section must exist and describe what
the validation is going to check and why. Where possible, the name and
description should be enough to tell you where to look for when the
validation fails. This is displayed in the UI.
* The `vars/metadata/groups` section should exist and have a list of
stages throughout the deployment (pre-deployment, pre-introspection,
post-deployment, etc.). These can be brand-new but they should make
sense given what the validation is supposed to be doing.
* There may be additional `vars` after these -- those are variables that
are going to be used within the validation steps.[2]
* The `tasks` section is a list of steps that Ansible is going to
perform. They gather data, process it and verify what needs to happen.
Each task should have a name. It must also have a module name that's
either the official Ansible module[3] or a custom one from the
`validations/library` directory.
In addition, a task may also have a `failed_when` condition, possibly a
`fail` message explaining the error, or a `register` section which takes
the task's output and stores it in a variable available for late tasks.
* Ansible has three modules that seem to invoke a custom command, but
each works differently: `command`, `shell` and `script`:
`command` invokes a single command with arguments you pass in. It
doesn't do multiple commands, pipes or redirection. If you need any of
those, use the `shell` module.
The `script` module takes a script on the local compute (usually from
the `validations/files` directory) copies it to the host and executes
it there.
Oh and finally, if you need to run a shell builtin, you'll have to
execute the shell manually (e.g.: `command: sh -c "ulimit -n"`)
When reviewing, if you see any of those, make sure the correct module is
used.
* A task may rely on a custom module (i.e. one that doesn't come with
Ansible but we ship it directly ourselves). These modules live in
`validations/library` and the file name without the extension must be
the same as the module invocation.
Testing validations
-------------------
If you have set `enable_validations` in `undercloud.conf` before
installing the undercloud, all dependdencies, etc. should be ready.
Otherwise you need to do this on the undercloud:
1. install the Ansible package (yum install ansible)
2. sudo useradd validations
3. mistral execution-create tripleo.validations.v1.copy_ssh_key
After that, to test a validation:
1. clone the repo: git clone
https://git.openstack.org/openstack/tripleo-validations
2. apply the patch
3. source stackrc
4. run-validation /path/to/validations/some-validation.yaml ~/.ssh/id_rsa
run-validation is a script that takes the full path to a validation and
an SSH key to connect to the nodes being validated. This should all be
available under the stack user in the typical dev environment.
If you wish to run the validation via Mistral, create a context.json file:
{ "validation_name": "some-validation" }
and run:
$ mistral execution-create tripleo.validations.v1.run_validation
context.json
Note that for this to work, the validation must be under:
/usr/share/openstack-tripleo-validations/validations/some-validation.yaml
After that, call `mistral execution-get-output` to see the output of the
validation.
Additional notes
----------------
* Documentation:
We have http://docs.openstack.org/developer/tripleo-validations/ which
lists the existing validations. And the info on how to enable & run
validations is in the tripleo-common readme, but all of this should be
exposed in tripleo.org.
I'll try to get to that in the coming weeks.
* We do not test any of the validations in the CI. That needs to change.
* If possible, the deployers shouldn't have to run the validations
manually at the right time. They should be run as part of the tripleo
workflows.
* The validation bugs are stored in the tripleo launchpad[4] with the
`validations` tag.
If you have any questions or suggestions, don't hesitate to reply here
or talk to me (shadower) on IRC.
Cheers,
Tomas Sedovic
[1]: https://bugs.launchpad.net/tripleo/+bug/1620617
[2]: http://docs.ansible.com/ansible/playbooks_variables.html
[3]: http://docs.ansible.com/ansible/list_of_all_modules.html
[4]: https://bugs.launchpad.net/tripleo/
More information about the OpenStack-dev
mailing list