You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
5.5 KiB
179 lines
5.5 KiB
============
|
|
Contributing
|
|
============
|
|
|
|
Adding roles into this project is easy and starts with a compatible skeleton.
|
|
|
|
|
|
Create a new role manually
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
From with the project root, creating a skeleton for the new role.
|
|
|
|
.. code-block:: console
|
|
|
|
$ ansible-galaxy init --role-skeleton=_skeleton_role_ --init-path=tripleo_ansible/roles ${NEWROLENAME}
|
|
|
|
When the role is ready for CI, add a **job** entry into the
|
|
`zuul.d/molecule.yaml`.
|
|
|
|
.. code-block:: yaml
|
|
|
|
- job:
|
|
files:
|
|
- ^tripleo_ansible/roles/${NEWROLENAME}/.*
|
|
name: tripleo-ansible-centos-8-molecule-${NEWROLENAME}
|
|
parent: tripleo-ansible-centos-8-base
|
|
vars:
|
|
tox_envlist: mol-${NEWROLENAME}
|
|
|
|
|
|
Make sure to add the **job** name into the check and gate section at the top
|
|
of the `molecule.yaml` file.
|
|
|
|
.. code-block:: yaml
|
|
|
|
- project:
|
|
check:
|
|
jobs:
|
|
- tripleo-ansible-centos-8-molecule-${NEWROLENAME}
|
|
gate:
|
|
jobs:
|
|
- tripleo-ansible-centos-8-molecule-${NEWROLENAME}
|
|
|
|
|
|
Finally add a role documentation file at
|
|
`doc/source/roles/role-${NEWROLENAME}.rst`. This file will need to contain
|
|
a title, a literal include of the defaults yaml and a literal include of
|
|
the molecule playbook, or playbooks, used to test the role, which is noted
|
|
as an "example" playbook.
|
|
|
|
|
|
Create a new role with automation
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
The role addition process is also automated using ansible. If ansible is
|
|
available on the development workstation change directory to the root of
|
|
the `tripleo-ansible` repository and run the the following command which
|
|
will perform the basic tasks noted above.
|
|
|
|
.. code-block:: console
|
|
|
|
$ ansible-playbook -i localhost, role-addition.yml -e role_name=${NEWROLENAME}
|
|
|
|
|
|
If this playbook is being executed from a virtual-environment be sure to
|
|
activate the virtual environment before running the playbook.
|
|
|
|
.. code-block:: console
|
|
|
|
$ . ~/bin/venvs/ansible/bin/activate
|
|
(ansible)$ ansible-playbook -i localhost, role-addition.yml -e role_name=${NEWROLENAME}
|
|
|
|
|
|
Local testing of new roles
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Local testing of new roles can be done in any number of ways, however,
|
|
the easiest way is via the script `run-local-test`. This script
|
|
will setup the local work environment to execute tests mimicking what
|
|
Zuul does.
|
|
|
|
.. warning::
|
|
|
|
This script makes the assumption the executing user has the
|
|
ability to escalate privileges and will modify the local system.
|
|
|
|
To use this script execute the following command.
|
|
|
|
.. code-block:: console
|
|
|
|
$ scripts/run-local-test ${NEWROLENAME}
|
|
|
|
Role based testing with molecule can be executed directly from within
|
|
the role directory.
|
|
|
|
.. note::
|
|
|
|
Most tests require docker for container based testing. If Docker
|
|
is not available on the local workstation it will need to be
|
|
installed prior to executing most molecule based tests.
|
|
|
|
|
|
.. note::
|
|
|
|
The script `bindep-install`, in the **scripts** path, is
|
|
available and will install all system dependencies.
|
|
|
|
|
|
Before running basic molecule tests, it is recommended to install all
|
|
of the python dependencies in a virtual environment.
|
|
|
|
.. code-block:: console
|
|
|
|
$ python -m virtualenv --system-site-packages "${HOME}/test-python"
|
|
$ ${HOME}/test-python/bin/pip install -r requirements.txt \
|
|
-r test-requirements.txt \
|
|
-r molecule-requirements.txt
|
|
$ source ${HOME}/test-python/bin/activate
|
|
|
|
|
|
To run a basic molecule test, simply source the `ansibe-test-env.rc`
|
|
file from the project root, and then execute the following commands.
|
|
|
|
.. code-block:: console
|
|
|
|
(test-python) $ cd tripleo_ansible/roles/${NEWROLENAME}/
|
|
(test-python) $ molecule test --all
|
|
|
|
|
|
If a role has more than one scenario, a specific scenario can be
|
|
specified on the command line. Running specific scenarios will
|
|
help provide developer feedback faster. To pass-in a scenario use
|
|
the `--scenario-name` flag with the name of the desired scenario.
|
|
|
|
.. code-block:: console
|
|
|
|
(test-python) $ cd tripleo_ansible/roles/${NEWROLENAME}/
|
|
(test-python) $ molecule test --scenario-name ${EXTRA_SCENARIO_NAME}
|
|
|
|
|
|
When debugging molecule tests its sometimes useful to use the
|
|
`--debug` flag. This flag will provide extra verbose output about
|
|
test being executed and running the environment.
|
|
|
|
.. code-block:: console
|
|
|
|
(test-python) $ molecule --debug test
|
|
|
|
|
|
Contributing plugins
|
|
~~~~~~~~~~~~~~~~~~~~
|
|
|
|
All plugins contributed to the TripleO-Ansible can be found in the
|
|
`tripleo_ansible/ansible_plugins` directory, from the root of this project.
|
|
When contributing a plugin, make sure to also add documentation in the
|
|
`doc/source/modules` folder. All documentation added to this folder will be
|
|
automatically indexed and rendered via `sphinx`.
|
|
|
|
If a contributed plugin is following the Ansible practice of placing
|
|
documentation within the plugin itself, the following snippet can be used in a
|
|
sphinx template to auto-render the in-code documentation.
|
|
|
|
.. code-block:: rst
|
|
|
|
.. ansibleautoplugin::
|
|
:module: tripleo_ansible/ansible_plugins/${DIRECTORY}/${PLUGINFILE}
|
|
:documentation: true
|
|
:examples: true
|
|
|
|
The snippet can take two options, `documentation` and `examples`. If a given
|
|
plugin does not have either of these in-code documentation objects,
|
|
documentation for either type can be disabled by omitting the option.
|
|
|
|
.. code-block:: rst
|
|
|
|
.. ansibleautoplugin::
|
|
:module: tripleo_ansible/ansible_plugins/${DIRECTORY}/${PLUGINFILE}
|
|
:documentation: true
|