Issue #3910 has been updated by Marcello de Sousa.
Btw, my node classifier is configured to tell "myhost" it should belong to
"mycustomenv" environment. Then on the server I've noticed this :
**> grep environment /var/lib/puppet/yaml/facts/myhost.yaml**
<pre>
environment: production
</pre>
**> grep environment /var/lib/puppet/yaml/node/myhost.yaml**
<pre>
environment: mycustomenv
environment: production
</pre>
Which just doesn't seem quite ok to me (although I can't really judge the
impact of having 2 environment entries in the node yaml file).
----------------------------------------
Bug #3910: Class/File source mismatch when client/node classifier disagree on
environment.
https://projects.puppetlabs.com/issues/3910
Author: Nigel Kersten
Status: Needs Decision
Priority: High
Assignee: Nigel Kersten
Category: plumbing
Target version: Statler
Affected Puppet version: 0.25.4
Keywords:
Branch:
See:
http://groups.google.com/group/puppet-dev/browse_thread/thread/b609965e377392ec
To summarize, when the client specifies one environment and the classifier
specifies another, classes are evaluated from the server-specified environment,
and yet files are retrieved from the client-specified environment.
3 environments defined, each with a single class "base".
*/etc/puppet/puppet.conf*
<pre>
<...snip...>
[one]
modulepath = /etc/puppet/environments/one/modules
[two]
modulepath = /etc/puppet/environments/two/modules
[three]
modulepath = /etc/puppet/environments/three/modules
</pre>
*/etc/puppet/environments/one/modules/base/manifests/init.pp*
<pre>
class base {
notify { "hardwired one": }
notify { "variable $environment": }
file { "/tmp/environment_test":
source => "puppet:///base/tester",
}
}
</pre>
*/etc/puppet/environments/two/modules/base/manifests/init.pp*
<pre>
class base {
notify { "hardwired two": }
notify { "variable $environment": }
file { "/tmp/environment_test":
source => "puppet:///base/tester",
}
}
</pre>
*/etc/puppet/environments/three/modules/base/manifests/init.pp*
<pre>
class base {
notify { "hardwired three": }
notify { "variable $environment": }
file { "/tmp/environment_test":
source => "puppet:///base/tester",
}
}
</pre>
<pre>
$ cat /etc/puppet/environments/{one,two,three}/modules/base/files/tester
one
two
three
</pre>
Right? So we have two notify resources and a file resource.
- The "hardwired" notify is to illustrate which class is being loaded.
- The "variable" notify is to illustrate what $environment evaluates to
in the manifests.
- The file source is to illustrate which file is being sourced.
I also have an external node classifier that always returns this:
<pre>
---
classes:
- base
environment: one
</pre>
So our classifier always includes base, and always sets the environment.
I then invoke a puppet run on a client, specifying the environment to be
*different* to the classifier.
Between all of these runs I delete cached client yaml info on the server.
(find /var/puppet/yaml -type f -delete)
<pre>
# puppetd -t --environment two
notice: hardwired one
notice: //base/Notify[hardwired one]/message: defined 'message' as
'hardwired one'
notice: variable two
notice: //base/Notify[variable two]/message: defined 'message' as 'variable
two'
notice: Finished catalog run in 0.18 seconds
# cat /tmp/environment_test
two
</pre>
*So we have the class being evaluated in environment "one", but the file
being sourced coming from environment "two" ! *And less importantly,
$environment evaluates to "two".
*
*
Now, to throw the big spanner in the works.... we try not specifying an
environment at all.
<pre>
# puppetd -t
notice: hardwired one
notice: //base/Notify[hardwired one]/message: defined 'message' as
'hardwired one'
notice: variable production
notice: //base/Notify[variable production]/message: defined 'message' as
'variable production'
err: //base/File[/tmp/environment_test]: Failed to retrieve current state of
resource: Error 400 on SERVER: Not authorized to call find on
/file_metadata/base/tester Could not retrieve file metadata for
puppet:///base/tester: Error 400 on SERVER: Not authorized to call find on
/file_metadata/base/tester at
/etc/puppet/environments/one/modules/base/manifests/init.pp:6
notice: Finished catalog run in 0.08 seconds
</pre>
As we don't have an environment "production" defined at all, the server
tries to read the metadata from a non-existent environment and fails.
--
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.