Issue #14399 has been updated by Andrew  Parker.

Status changed from Investigating to Accepted
Target version set to 3.X

I've instrumented the code to log when it was evaluated various resources and 
came up with

Showing the bug (oracle from site.pp, oracle_db::hugepages from enc):
<pre>
  debug: Evaluating AST node default
  debug: Evaluating class oracle
  debug: Evaluating class oracle_db
  debug: Evaluating class common
  debug: Evaluating kernel.shmall that was left unevaluated earlier
  debug: Evaluating Oracle_db::Hugepages that was left unevaluated earlier
  debug: Evaluating vm.nr_hugepages that was left unevaluated earlier
</pre>

Not showing the bug (only oracle_db::hugepages from enc):
<pre>
  debug: Evaluating AST node default
  debug: Evaluating class common
  debug: Evaluating Oracle_db that was left unevaluated earlier
  debug: Evaluating Oracle_db::Hugepages that was left unevaluated earlier
  debug: Evaluating kernel.shmall that was left unevaluated earlier
  debug: Evaluating vm.nr_hugepages that was left unevaluated earlier
</pre>

Not showing the bug (oracle and oracle_db::hugepages from enc):
<pre>
  debug: Evaluating AST node default
  debug: Evaluating class common
  debug: Evaluating Oracle that was left unevaluated earlier
  debug: Evaluating class oracle_db
  debug: Evaluating Oracle_db that was left unevaluated earlier
  debug: Evaluating Oracle_db::Hugepages that was left unevaluated earlier
  debug: Evaluating kernel.shmall that was left unevaluated earlier
  debug: Evaluating vm.nr_hugepages that was left unevaluated earlier
</pre>

Not showing the bug (oracle and oracle_db::hugepages from site.pp):
<pre>
  debug: Evaluating AST node default
  debug: Evaluating class oracle
  debug: Evaluating class oracle_db
  debug: Evaluating class oracle_db::hugepages
  debug: Evaluating class common
  debug: Evaluating kernel.shmall that was left unevaluated earlier
  debug: Evaluating vm.nr_hugepages that was left unevaluated earlier
</pre>

>From these traces we can see that the problem is coming from the order in 
>which the classes are getting evaluated to compile the catalog.

My initial reaction was that this is a case where the confusing evaluation of 
`inherits` was causing a problem, but I don't think that is the real issue. The 
problem comes down to we are inconsistent about what order things will 
evaluated for compilation. I think this is coming from the fact that in 
Puppet::Parser::Compiler we first evaluate the classes from the AST nodes and 
then we evaluate the classes from the ENC, which causes a splitting of 
information that we don't get when everything is on one side or the other of 
that split of evaluation in the compiler.

I think what we need to do is ensure that no matter the source of the classes 
(nodes or ENC) and no matter how the classes are split between those sources 
the order of evaluation is always the same.
----------------------------------------
Bug #14399: Can not override define parameter
https://projects.puppetlabs.com/issues/14399#change-62935

Author: Jacob  McCann
Status: Accepted
Priority: Normal
Assignee: Andrew  Parker
Category: 
Target version: 3.X
Affected Puppet version: 2.7.14
Keywords: 
Branch: 


When inheriting another class and trying to override a parameter for a define, 
the new value does not get set.

What I am doing:

oracle_db/manifests/init.pp
<pre>
class oracle_db {
      etc_sysctl_conf { 'kernel.shmall':
        value => '1',
      }
}
</pre>

oracle_db/manifests/etc_sysctl_conf.pp
<pre>
define oracle_db::etc_sysctl_conf ( $attr = $name, $value ) {
  notify{"${attr}:${value}": }
}
</pre>

oracle_db/manifests/hugepages.pp
<pre>
class oracle_db::hugepages inherits oracle_db { 
  Oracle_db::Etc_sysctl_conf['kernel.shmall'] { 
    value => '2', 
  } 
  oracle_db::etc_sysctl_conf { "vm.nr_hugepages": 
    value => '3'; 
  } 
}
</pre>

So I am trying to override oracle_db::etc_sysctl_conf['kernel.shmall'] resource 
in oracle_db::hugepages to change value parameter from 1 (set in oracle_db) to 
2.

I then have oracle_db and oracle_db::hugepages assigned to the system via an 
ENC.  I've also tested with just having oracle_db::hugepages assigned via ENC.

The results I get are:
<pre>
notice: kernel.shmall:1
notice: 
/Stage[main]/Oracle_db/Oracle_db::Etc_sysctl_conf[kernel.shmall]/Notify[kernel.shmall:1]/message:
 defined 'message' as 'kernel.shmall:1'
notice: vm.nr_hugepages:3
notice: 
/Stage[main]/Oracle_db::Hugepages/Oracle_db::Etc_sysctl_conf[vm.nr_hugepages]/Notify[vm.nr_hugepages:3]/message:
 defined 'message' as 'vm.nr_hugepages:3'
</pre>

And what I would expect is for kernel.shmall to have a value of 2 instead (the 
following is hand-edited to show what I would expect):
<pre>
notice: kernel.shmall:2
notice: 
/Stage[main]/Oracle_db/Oracle_db::Etc_sysctl_conf[kernel.shmall]/Notify[kernel.shmall:2]/message:
 defined 'message' as 'kernel.shmall:2'
notice: vm.nr_hugepages:3
notice: 
/Stage[main]/Oracle_db::Hugepages/Oracle_db::Etc_sysctl_conf[vm.nr_hugepages]/Notify[vm.nr_hugepages:3]/message:
 defined 'message' as 'vm.nr_hugepages:3'
</pre>

Complete output from a run:
<pre>
hostA:~ # puppet agent --test 
info: Retrieving plugin
info: Loading facts in usps_bu_eth
info: Loading facts in usps_puppet_db_server
info: Loading facts in usps_syslog_client_ip
info: Loading facts in usps_puppet_master_host
info: Loading facts in hcs_service
info: Loading facts in packages
info: Loading facts in usps_patch_bundle
info: Loading facts in usps_bu_net_zone
info: Loading facts in memorysize
info: Loading facts in usps_puppet_basedir
info: Loading facts in usps_os_dist
info: Loading facts in usps_is_dmz
info: Loading facts in network
info: Loading facts in usps_os_version
info: Loading facts in jumpver_facts
info: Loading facts in usps_bu_macaddress
info: Loading facts in usps_patch_repo
info: Loading facts in usps_public_int
info: Loading facts in usps_patch_status
info: Loading facts in concat_basedir
info: Loading facts in usps_bu_int
info: Loading facts in usps_is_ctm_server
info: Loading facts in usps_is_puppet_master
info: Loading facts in usps_puppet_env
info: Loading facts in usps_puppet_ca_server
info: Loading facts in usps_puppet_report_server
info: Loading facts in usps_bu_net
info: Loading facts in usps_puppet_is_ca
info: Loading facts in usps_bu_ip
info: Loading facts in usps_patch_env
info: Loading facts in usps_bootloader
info: Loading facts in usps_patch_date
info: Loading facts in usps_bu_eth
info: Loading facts in usps_puppet_db_server
info: Loading facts in usps_syslog_client_ip
info: Loading facts in usps_puppet_master_host
info: Loading facts in hcs_service
info: Loading facts in packages
info: Loading facts in usps_patch_bundle
info: Loading facts in usps_bu_net_zone
info: Loading facts in memorysize
info: Loading facts in usps_puppet_basedir
info: Loading facts in usps_os_dist
info: Loading facts in usps_is_dmz
info: Loading facts in network
info: Loading facts in usps_os_version
info: Loading facts in jumpver_facts
info: Loading facts in usps_bu_macaddress
info: Loading facts in usps_patch_repo
info: Loading facts in usps_public_int
info: Loading facts in usps_patch_status
info: Loading facts in concat_basedir
info: Loading facts in usps_bu_int
info: Loading facts in usps_is_ctm_server
info: Loading facts in usps_is_puppet_master
info: Loading facts in usps_puppet_env
info: Loading facts in usps_puppet_ca_server
info: Loading facts in usps_puppet_report_server
info: Loading facts in usps_bu_net
info: Loading facts in usps_puppet_is_ca
info: Loading facts in usps_bu_ip
info: Loading facts in usps_patch_env
info: Loading facts in usps_bootloader
info: Loading facts in usps_patch_date
Could not retrieve macaddress_eth2: undefined method `[]' for nil:NilClass
Could not retrieve macaddress_eth3: undefined method `[]' for nil:NilClass
Could not retrieve macaddress_eth8: undefined method `[]' for nil:NilClass
Could not retrieve macaddress_eth9: undefined method `[]' for nil:NilClass
Could not retrieve macaddress_eth12: undefined method `[]' for nil:NilClass
Could not retrieve macaddress_eth13: undefined method `[]' for nil:NilClass
Could not retrieve macaddress_eth14: undefined method `[]' for nil:NilClass
Could not retrieve macaddress_eth15: undefined method `[]' for nil:NilClass
info: Caching catalog for hostA
info: Applying configuration version '1336591539'
notice: kernel.shmall:1
notice: 
/Stage[main]/Oracle_db/Oracle_db::Etc_sysctl_conf[kernel.shmall]/Notify[kernel.shmall:1]/message:
 defined 'message' as 'kernel.shmall:1'
notice: vm.nr_hugepages:3
notice: 
/Stage[main]/Oracle_db::Hugepages/Oracle_db::Etc_sysctl_conf[vm.nr_hugepages]/Notify[vm.nr_hugepages:3]/message:
 defined 'message' as 'vm.nr_hugepages:3'
notice: Finished catalog run in 17.88 seconds
</pre>

This has been tested using 2.7.9 and 2.7.14.

Some discussion on this in @ <a 
href='https://groups.google.com/forum/?fromgroups#!topic/puppet-users/buQxiN6Hlj4'>https://groups.google.com/forum/?fromgroups#!topic/puppet-users/buQxiN6Hlj4</a>


-- 
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.

Reply via email to