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.
