I have a similar issue with Hiera when decisions depend on more than facts alone... thus exluded from the hierarchy. In example, the hostname can tell a node is a database server (fact: role) but only a custom group will tell it should run Oracle 10g or 11g (product) and the proper sysctl to apply specifically. I can't build a fact about something that ain't installed yet and I don't want a local file to define group membership (giving up control). The node to group membership has to be in a CMDB somewhere. So far I think using an ENC with Hiera at the same time is the solution to cover all cases.... unless you guys know of a better way. jean
On Friday, 11 May 2012 13:19:33 UTC-4, Gary Larizza wrote: > I see (and I saw your post on create_resources - I tested it out and also > noticed that inheritance didn't work as expected for me either). My > initial thought would be to try and break down the individual sysctl > entries as individual resources that could be declared with a defined type > (as Aaron mentioned) - then you can use hiera to declare them with > create_resources() AS WELL as individually declaring additional resources. > > > > On Fri, May 11, 2012 at 9:47 AM, Luke Bigum <luke.bi...@lmax.com> wrote: > >> Hi Gary, >> >> Not quite... Let me go into more detail. >> >> I'm trying to handle sysctl "perfectly" which is probably my real >> problem. Hiera's ability to merge hashes together makes it perfect for >> arriving at one set of sysctl options for a server based on "business >> logic" (my hierarchy). For Hiera data on 'someserver' below which has >> 'some_role', calling hiera_hash in a Puppet manifest will give me IP >> forwarding set and rp_filter set, which is what I want: >> >> --------- some_role.json ------------ >> { >> "sysctl" : { >> "net.ipv4.ip_forward" : { >> "comment" : "Controls IP packet forwarding", >> "value" : "1" >> } >> } >> -------------------------------------------- >> --------- common.json ---------- >> { >> "sysctl" : { >> "net.ipv4.ip_forward" : { >> "comment" : "Controls IP packet forwarding", >> "value" : "0" >> }, >> "net.ipv4.conf.default.rp_filter" : { >> "comment" : "Controls source route verification", >> "value" : "1" >> } >> ... >> ... >> } >> ------------------------------------- >> >> Where it becomes difficult is trying to then incorporate pure Fact data >> to influence or modify these decisions. >> >> Lets say that I actually get back 20 keys of sysctl data, one of those is >> 'vm.swappiness'. Most of my nodes have a value of '10', but lets say >> hypothetically that I have a small set of nodes that require a different >> value because of the amount of RAM available in the machine (a decision >> needs to be made based on hardware, not business logic). This is purely a >> Fact. Introducing another level of hierarchy for Fact 'memorytotal' is a >> bit silly in this case. >> >> The sysctl class looks roughly like this: >> >> ------- sysctl.pp ---------- >> class sysctl { >> $sysctl_hash = hiera_hash('sysctl') >> create_resources('sysctl', $sysctl_hash) >> } >> ------------------------------ >> >> I love that simplicity, however it's difficult to introduce edge cases >> that modify the data retrieved from Hiera based on Facts. Class inheritance >> won't work because create_resources() seems to insert into the catalog in >> an uninheritable way - bug report or fixable with Ruby DSL perhaps? Filling >> this class full of "if ($fact) modify hash" to munge the data pulled from >> Hiera seems dirty too. >> >> There may be no elegant solution and as you say, 80-90% may have to do. >> >> -Luke >> >> >> On 11/05/12 16:53, Gary Larizza wrote: >> >> I see this with people looking to move to the hierarchical system that >> Hiera brings. It essentially boils down to "How do I do this without >> having a ton of hierarchy levels?". Usually we tend to recommend using the >> hierarchy to hit the 80% mark for the data you need in your modules. >> Anything that's module-specific-data should then be broken out to a >> data.pp or params.pp file with conditional logic there. I tend to ask >> people: "Is this something others are going to hit when they try to use the >> module too?", as in - "Are there path differences between operating >> systems?", or "Are there important changes to the data between RHEL 5 and >> 6?". If the answer to these is yes, then I tend to favor putting that data >> into a module's data class so that it's exposed for ANYONE who wants to use >> the module. Why would you want to hide these differences in the hierarchy >> - especially if others might run into them? >> >> Does this sound similar to the problems you're facing? Or is this a >> case where you have custom facts that are specific to your organization >> that determine how you manage sysctl? >> >> >> On Fri, May 11, 2012 at 8:42 AM, Luke Bigum <luke.bi...@lmax.com> wrote: >> >>> Hi all, >>> >>> I've been improving our sysctl module and come across an interesting >>> design problem I'd like feedback on. >>> >>> I approached the re-factor with Hiera in mind - I would put all our >>> sysctl data in Hiera hash and pull that into a hiera_hash, merging the >>> hierarchy of data and allowing higher priority sysctl settings to override >>> the baseline defaults. I then use create_resources to write sysctl.conf. >>> Works great to start with, but now I come across more and more cases where >>> the sysctl data is dependent on machine logic (virtual vs physical, types >>> of hardware, etc) that doesn't seem right to put into Hiera as I'd have a >>> complex hierarchy for a bunch of edge case Facts. >>> >>> I seem to need to make decisions on two sources: business logic in Hiera >>> hierarchy (that's easy with merging hashes) as well as considering what >>> Facts or Classes applies to a node (machine logic). That's not trivial to >>> do, especially with a potentially large set of data like sysctl.conf keys. >>> >>> Does anyone have any thoughts or tips on how they might be managing a >>> similar situation? >>> >>> Thanks, >>> >>> -Luke >>> >>> -- >>> Luke Bigum >>> >>> Information Systems >>> Ph: +44 (0) 20 3192 2520 >>> luke.bi...@lmax.com | http://www.lmax.com >>> LMAX, Yellow Building, 1A Nicholas Road, London W11 4AN >>> >>> >>> FX and CFDs are leveraged products that can result in losses exceeding >>> your deposit. They are not suitable for everyone so please ensure you >>> fully understand the risks involved. The information in this email is >>> not >>> directed at residents of the United States of America or any other >>> jurisdiction where trading in CFDs and/or FX is restricted or prohibited >>> by local laws or regulations. >>> >>> The information in this email and any attachment is confidential and is >>> intended only for the named recipient(s). The email may not be disclosed >>> or used by any person other than the addressee, nor may it be copied in >>> any way. If you are not the intended recipient please notify the sender >>> immediately and delete any copies of this message. Any unauthorised >>> copying, disclosure or distribution of the material in this e-mail is >>> strictly forbidden. >>> >>> LMAX operates a multilateral trading facility. Authorised and regulated >>> by the Financial Services Authority (firm registration number 509778) and >>> is registered in England and Wales (number 06505809). Our registered >>> address is Yellow Building, 1A Nicholas Road, London, W11 >>> 4AN. >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Puppet Users" group. >>> To post to this group, send email to puppet-users@googlegroups.com. >>> To unsubscribe from this group, send email to >>> puppet-users+unsubscr...@googlegroups.com. >>> For more options, visit this group at >>> http://groups.google.com/group/puppet-users?hl=en. >>> >>> >> >> >> -- >> >> Gary Larizza >> Professional Services Engineer >> Puppet Labs >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Puppet Users" group. >> To post to this group, send email to puppet-users@googlegroups.com. >> To unsubscribe from this group, send email to >> puppet-users+unsubscr...@googlegroups.com. >> For more options, visit this group at >> http://groups.google.com/group/puppet-users?hl=en. >> >> >> >> -- >> Luke Bigum >> >> Information Systems >> Ph: +44 (0) 20 3192 2520luke.bi...@lmax.com | http://www.lmax.com >> LMAX, Yellow Building, 1A Nicholas Road, London W11 4AN >> >> >> FX and CFDs are leveraged products that can result in losses exceeding >> your deposit. They are not suitable for everyone so please ensure you >> fully understand the risks involved. The information in this email is not >> directed at residents of the United States of America or any other >> jurisdiction where trading in CFDs and/or FX is restricted or prohibited >> by local laws or regulations. >> >> The information in this email and any attachment is confidential and is >> intended only for the named recipient(s). The email may not be disclosed >> or used by any person other than the addressee, nor may it be copied in >> any way. If you are not the intended recipient please notify the sender >> immediately and delete any copies of this message. Any unauthorised >> copying, disclosure or distribution of the material in this e-mail is >> strictly forbidden. >> >> LMAX operates a multilateral trading facility. Authorised and regulated >> by the Financial Services Authority (firm registration number 509778) and >> is registered in England and Wales (number 06505809). >> Our registered address is Yellow Building, 1A Nicholas Road, London, W11 >> 4AN. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Puppet Users" group. >> To post to this group, send email to puppet-users@googlegroups.com. >> To unsubscribe from this group, send email to >> puppet-users+unsubscr...@googlegroups.com. >> For more options, visit this group at >> http://groups.google.com/group/puppet-users?hl=en. >> > > > > -- > > Gary Larizza > Professional Services Engineer > Puppet Labs > > -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To view this discussion on the web visit https://groups.google.com/d/msg/puppet-users/-/0NSu9kWGZggJ. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.