Issue #11900 has been updated by Jerome Loyet.
eric sorenson wrote:
> An update:
>
> it turns out that $environment can be a slash-separated directory structure,
> and the puppet.conf variable interpolation just expands it in-place.
>
> So given a directory structure like:
>
> environments/group1/test/{modules,manifests}
> environments/group1/release/{modules,manifest}
> environments/group2/test/{modules,manifests}
> environments/group2/release/{modules,manifests}
> environments/common/test/modules
> environments/common/release/modules
>
> a puppet.conf like:
>
> manifestdir=/etc/puppet/environments/$environment/manifests/site.pp
>
> modulepath=/etc/puppet/environments/$environment/modules:/etc/puppet/environments/common/release
>
> and a client run with `puppet agent --environment group1/test`
>
> The right thing happens and the modules and manifests from
> `/etc/puppet/environments/group1/test` are loaded. So that's exactly what I
> needed. Just please don't start enforcing an alphanum-only character set on
> $environment at some point down the line :)
well it should work on a standalone configuration but it's not working when the
agent is connected to a master:
- file auth.conf (http://docs.puppetlabs.com/guides/rest_auth_conf.html)
doesn't like it
- slashed in environment will be confused with the URL dash separator
- in lib/network/http/api/v1.rb (line 28), environments are restricted to be
/^\w+$/
We have the same kind of needs in our compagny. Dealing with a lots of
environments and sub-environments, from a bunch of teams, with different
acccess rights, ... We are using dynamically determine environments in
puppet.conf to have a generic configuration but we have a lots of environments
and it becomes to be hard to have all environments in one directory, we need to
"hash" $environment somehow to split environments between sub directories
(split, splice, ...).
Here's a refected pull request to see the spirit:
https://github.com/puppetlabs/puppet/pull/1028
----------------------------------------
Feature #11900: Dynamic environment interpolation in puppet master configuration
https://projects.puppetlabs.com/issues/11900#change-69034
Author: Mike McLane
Status: Needs More Information
Priority: Normal
Assignee: Daniel Pittman
Category: server
Target version:
Affected Puppet version: development
Keywords: dynamic environment, puppet master configuration, interopolated
configuration, environment parameter
Branch:
In providing a single Puppet master to multiple teams, where each team has
their own test/release cadence, we maintain that each team would like to
include their own dynamic module path based on the environment passed from the
agent. We have a re-usability case where an enterprise level of common modules
is provided at the lowest path inclusion priority, the local team has a set of
common modules at the next highest level of include priority, and then the
dynamic environment has the highest level of inclusion priority. This allows
for development and testing cases to be carried out through dynamic pulls of
environment-labeled branches in git.
Some form of regex matching of the environment to the configuration section,
might help in this regard.
In such a setup it would be nice to configure a puppet master as:
<pre>
[teama*]
manifest = $confdir/environments/manifests/teamb/$environment/site.pp
modulepath =
$confdir/environments/modules/teamb/$environment/:$confdir/common/modules/teamb/:$confdir/common/modules/enterprise/
[teamb*]
manifest = $confdir/environments/manifests/teama/$environment/site.pp
modulepath =
$confdir/environments/modules/teama/$environment/:$confdir/common/modules/teama/:$confdir/common/modules/enterprise/
</pre>
...or, alternatively.. such a case where the environment passed in is parsed
within the configuration, allowing config-file variables to be set as such:
<pre>
[production]
# passed in $environment = "team-production-product"
$group = $environment.split("-")[0]
# $releasecycle = $environment.split("-")[1]
# $product = $environment.split("-")[2]
manifest = $confdir/environments/manifests/$group/$environment/site.pp
modulepath =
$confdir/environments/modules/$group/$environment/:$confdir/common/modules/$group/:$confdir/common/modules/enterprise/
</pre>
Within the base environments path, I would initialize the directory as a git
repository and keep a post-receive wrapper script to dynamically fetch
environments based on the $environment path.
--
You have received this notification because you have either subscribed to it,
or are involved in it.
To change your notification preferences, please click here:
http://projects.puppetlabs.com/my/account
--
You received this message because you are subscribed to the Google Groups
"Puppet Bugs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/puppet-bugs?hl=en.