Published parameters as simple storage for generated passwords and NEO cluster name
authorSaurabh Bansod <saurabh.bansod@nexedi.com>
Mon, 13 Jul 2015 12:25:00 +0000 (12:25 +0000)
committerJulien Muchembled <jm@nexedi.com>
Fri, 17 Jul 2015 17:33:35 +0000 (19:33 +0200)
commit836309f4c7cd85cc378cc18878aac0da4ef0639a
tree7d406ebb489d8ef2661decdc5b58a4929c58ac07
parentc475889a7389b5afb058b4bd8ee9bffeabe8d129
Published parameters as simple storage for generated passwords and NEO cluster name

For performance reasons, the root partition requests subpartitions during
initialization of sections, whereas such processing should normally be done
during the update/install phase.

The consequence is that partitions may be requested whereas they depend on
sections that fail (usually just temporarily, because of missing returned
parameters in the first runs).

For example, the request of zope partitions depends on the generation of
passwords:

1. password generated (__init__)
2. zope partitions requested (__init__)
3. password saved (install)

As long as a failure happens between 2 and 3, zope parameters are always
updated with a different password.

In the case of NEO, the instanciation of zope partitions currently succeeds even
if the list of master nodes is missing (note that there is a minor bug to fix
here: whenever a NEO storage is not the main one, zope processes may start too
early, and the user may have to restart zopes manually). The 'inituser_done'
file is created but zope processes fail to start if NEO is used as main storage,
and all this happens before the password was saved in the root partition
([neo-0-final] failing to install because 'admins' parameter returned yet).

This was never an issue with ZEO because zopes start successfully at the same
time the 'inituser_done' file is created.

One way to solve this could have been to introduce a dummy dependency between
[neo-0-final] and any other section generating a password. Quite ugly and we
also found non-optimal to use a non-backuped file in the root partition to save
such information, whereas we need anyway to publish them for the user.

Therefore, we introduce a new 'publish-early' recipe for accessing and
publishing desired parameters before any request of partitions. Of course,
these must not be dropped by the usual [publish] section, and to avoid having
to repeating them all manually, we have also added a '-extends' option to the
'publish' recipe.

We use the same technique to autogenerate and configure cluster name for NEO,
which helps us in minimizing the number of params one has to pass for
requesting NEO.

In the 'generate.password' recipe, the 'storage-path' can now be empty, when
there's no need to save the generated password in a file.
setup.py
slapos/recipe/generatepassword.py
slapos/recipe/publish.py
slapos/recipe/publish_early.py [new file with mode: 0644]
software/neoppod/root-common.cfg.in
software/neoppod/software-common.cfg
stack/erp5/buildout.cfg
stack/erp5/instance-erp5.cfg.in
stack/erp5/instance-zope.cfg.in