Eggmonster Change Notes
* `monster_run` now accepts "ENVIRONMENT" or "ENVIRONMENT:<var name>" to
indicate the configuration path, allowing an environment variable to
dictate the location of the config.
* Python 2.5 support removed.
* Removed dependencies on httplib2, jaraco.compat, simplejson.
* Removed `eggmonster.environment.Environment._locals`, which was just a
reference to self.
* Removed `eggmonster.EggmonsterLogHandler`.
* Clients older than 4.1.18 are no longer supported.
Eggmonster clients should update their code to replace calls to
`config.load_config` to use `config.ClusterConfig.from_file` and calls to
`config.load_config_from_yaml` with `config.ClusterConfig.from_yaml`.
Eggmonster clients should also replace references to _locals (if any) to
invoke the Environment object directly.
Eggmonster clients should also replace references to
Eggmonster server will now monitor the file system for config changes and
update the config in memory accordingly.
Added support for overriding or suppressing the easy_install parameters
used by eggmonster when installing packages.
`emget` now uses argparse for argument parsing.
The `em` command now does proper argument parsing.
`eggmonster.packages.load_dependencies` refactored for
improved reliability and readability. The `just_install` parameter was
Updated monster_launchd docs.
More use of stdlib APIs instead of local re-implementations (URL parsing,
Stricter YAML support.
Improvements to test runners.
Added support for grabbing a revision from the config.
Added an XHTML-based browser in /browser for browsing and diffing config
versions as served by the eggmonster server.
Added config date/time support for served config files.
Eggmonster runner now allows initializing the environment without actually
running any application (if not entry point application name is provided).
Eggmonster internal logging now will log to the host `eggmonster-log` if that
name resolves in DNS and no environment variable is present.
Added the `env.as_obscured_dict` method for obscuring sensitive information
before logging or other output of the configuration.
Fixed error when parsing namespace package names in RunningState._pkg_info.
The eggmonster environment `eggmonster.env` is now also a valid dict so one
can do things like iterate over the keys/values.
Added Python 3 build support.
If monster_launchd has problems spawning emi processes, eggmonster will log
some debug information to help diagnose it.
Fixed issue in eggmonster.concurrency where file locks would not be
released if the process was terminated unexpectedly.
Added support for namespace packages.
A new entry point is supported. Third-party libraries may supply an
entry point `eggmonster_config_updates` which will be called with two
parameters (the old and new config yaml as strings) when the config
is updated by "em edit".
A new parameter 'host-id' may be provided to monster_launchd to
override the default identity of platform.name.
Previously to 4.1.27, the eggmonster launchd clients would by default
attempt to setuid to the user by the name "monster" and would always
require being started as root.
Beginning with 4.1.27, the eggmonster launchd clients no longer require
that the process be started by root. Instead, the process will run
in the user context under which it was started unless the `--user`
option is supplied. If `--user` is supplied and is not the same user
as the user that started the process, the process must have been started
When upgrading to 4.1.27, add `-u monster` or `--user monster` when
starting monster_launchd to maintain compatibility.
Beginning with 4.1.26, the eggmonster install lock mechanism (which
prevents other eggmonster instances on the same system from upgrading
packages simultaneously) was changed to be more platform friendly and
work as a context manager.
This change also tweaked the semantic meaning of the lockfile
(`/tmp/eggmonster-install-lock`). In previous versions, the lock file
was kept around, and locks were acquired by setting the EXCLUSIVE flag
on the file. Beginning with 4.1.26, the file is removed after the lock
is released. Thus when upgrading to 4.1.26, one must be careful to
remove the lockfile or subsequent package install operations will fail.