Better formatting for CONTRIBUTING.rst

This commit is contained in:
Anders Ingemann 2015-04-19 17:04:50 +02:00
parent b46858d9fc
commit fe68d20829

View file

@ -52,19 +52,20 @@ these guidelines are not rules , they are advice on how to better add
value to the bootstrap-vz codebase. value to the bootstrap-vz codebase.
* **The manifest should always fully describe the resulting image. The The manifest should always fully describe the resulting image
outcome of a bootstrapping process should never depend on settings ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
specified elsewhere.** The outcome of a bootstrapping process should never depend on settings
specified elsewhere.
This allows others to easily reproduce any This allows others to easily reproduce any setup other people are running
setup other people are running and makes it possible to share and makes it possible to share manifests.
manifests. `The official debian EC2 images <https:/aws.amazon.com/marketplace/seller- `The official debian EC2 images`__ for example can be reproduced
profile?id=890be55d-32d8-4bc8-9042-2b4fd83064d5>`__ using the manifests available in the manifest directory of bootstrap-vz.
for example can be reproduced using the manifests available
in the manifest directory of bootstrap-vz.
* **The bootstrapper should always be able to run fully unattended.** __ https:/aws.amazon.com/marketplace/seller-profile?id=890be55d-32d8-4bc8-9042-2b4fd83064d5
The bootstrapper should always be able to run fully unattended
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
For end users, this guideline minimizes the risk of errors. Any For end users, this guideline minimizes the risk of errors. Any
required input would also be in direct conflict with the previous required input would also be in direct conflict with the previous
guideline that the manifest should always fully describe the resulting guideline that the manifest should always fully describe the resulting
@ -74,9 +75,9 @@ value to the bootstrap-vz codebase.
process multiple times though, any prompts in the middle of that process multiple times though, any prompts in the middle of that
process may significantly slow down the development speed. process may significantly slow down the development speed.
* **The bootstrapper should only need as much setup as the manifest
requires.**
The bootstrapper should only need as much setup as the manifest requires
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Having to shuffle specific paths on the host into place Having to shuffle specific paths on the host into place
(e.g. ``/target`` has to be created manually) to get the bootstrapper (e.g. ``/target`` has to be created manually) to get the bootstrapper
running is going to increase the rate of errors made by users. running is going to increase the rate of errors made by users.
@ -86,19 +87,22 @@ value to the bootstrap-vz codebase.
the VirtualBox Guest Additions ISO or tools like ``parted`` that the VirtualBox Guest Additions ISO or tools like ``parted`` that
need to be installed on the host. need to be installed on the host.
* **Roll complexity into which tasks are added to the tasklist.**
Roll complexity into which tasks are added to the tasklist
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If a ``run()`` function checks whether it should do any work or simply be If a ``run()`` function checks whether it should do any work or simply be
skipped, consider doing that check in ``resolve_tasks()`` instead and skipped, consider doing that check in ``resolve_tasks()`` instead and
avoid adding that task alltogether. This allows people looking at the avoid adding that task alltogether. This allows people looking at the
tasklist in the logfile to determine what work has been performed. If tasklist in the logfile to determine what work has been performed.
a task says it will modify a file but then bails , a developer may get
If a task says it will modify a file but then bails , a developer may get
confused when looking at that file after bootstrapping. He could confused when looking at that file after bootstrapping. He could
conclude that the file has either been overwritten or that the conclude that the file has either been overwritten or that the
search & replace does not work correctly. search & replace does not work correctly.
* **Control flow should be directed from the task graph.**
Control flow should be directed from the task graph
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Avoid creating complicated ``run()`` functions. If necessary, split up Avoid creating complicated ``run()`` functions. If necessary, split up
a function into two semantically separate tasks. a function into two semantically separate tasks.
@ -109,29 +113,34 @@ value to the bootstrap-vz codebase.
can replace the volume creation task with a task of its own that can replace the volume creation task with a task of its own that
creates a volume from a snapshot instead, but still reuse the mount task). creates a volume from a snapshot instead, but still reuse the mount task).
* **Task classes should be treated as decorated run() functions, they
should not have any state**
Thats what the BootstrapInformation object is for. Task classes should be treated as decorated run() functions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* **Only add stuff to the BootstrapInformation object when really necessary.** Tasks should not have any state, thats what the
BootstrapInformation object is for.
Only add stuff to the BootstrapInformation object when really necessary
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This is mainly to avoid clutter. This is mainly to avoid clutter.
* **Use a json-schema to check for allowed settings**
Use a json-schema to check for allowed settings
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The json-schema may be verbose but it keeps the bulk of check work outside the The json-schema may be verbose but it keeps the bulk of check work outside the
python code, which is a big plus when it comes to readability. This of python code, which is a big plus when it comes to readability.
course only applies bas long as the checks are simple. You can of This only applies bas long as the checks are simple.
course fall back to doing the check in python when that solution is You can of course fall back to doing the check in python when that solution is
considerably less complex. considerably less complex.
* **When invoking external programs, use long options whenever possible**
When invoking external programs, use long options whenever possible
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This makes the commands a lot easier to understand, since This makes the commands a lot easier to understand, since
the option names usually hint at what they do. the option names usually hint at what they do.
* **When invoking external programs, don't use full paths, rely on ``$PATH``**
When invoking external programs, don't use full paths, rely on ``$PATH``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This increases robustness when executable locations change. This increases robustness when executable locations change.
Example: Use ``log_call(['wget', ...])`` instead of ``log_call(['/usr/bin/wget', ...])``. Example: Use ``log_call(['wget', ...])`` instead of ``log_call(['/usr/bin/wget', ...])``.