One other try: <% if classes.index('httpd') ....
I forgot that tags weren't exposed in the ERB. Trevor On Thu, Jun 11, 2009 at 05:42, Dick Davies<rasput...@hellooperator.net> wrote: > > Hi Trevor, thanks for the idea. > > On Thu, Jun 11, 2009 at 4:28 AM, Trevor Vaughan<peiriann...@gmail.com> wrote: > >> Someone might give you a better answer, but try: >> >> <% if tags.index('httpd') && has_variable?('httpd::open_firewall') %> >> >> This *may not* work due to file parsing order, but I *think* that it will. > > I did too, but it doesn't :( > > The only reason I tried variables is because tags aren't visible > (due to scoping?). > > It seems you can't see tags (autotags or tags set explicitly with > tag('httpd') defined in > classes your class includes. > > This is a real problem from where I'm sat; it does make me wonder what > tags are actually > useful for. > > I suppose I could define the tag in the node, but that seems pretty > redundant since I'm > also including the 'httpd' class. > > > > > >> Trevor >> >> Dick Davies wrote: >>> I'm using a primitive template to build my iptables rulesets. >>> It's all in a branch on my github repo at >>> >>> http://github.com/rasputnik/babysteps-puppet/tree/templated-iptables >>> >>> template that looks like: >>> >>> <% if has_variable?('httpd::open_firewall') %> >>> -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j >>> ACCEPT >>> <% end -%> >>> >>> (see >>> http://github.com/rasputnik/babysteps-puppet/blob/templated-iptables/modules/iptables/templates/iptables.erb >>> ) >>> >>> i then set a variable in the httpd module like this: >>> >>> class httpd { >>> $open_firewall = 'on' >>> #.... rest of httpd class def. >>> } >>> >>> [ >>> http://github.com/rasputnik/babysteps-puppet/blob/templated-iptables/modules/httpd/manifests/init.pp >>> ] >>> >>> The idea being that if a node has 'include httpd', then when it runs >>> 'include iptables' >>> it'll open the right port. >>> >>> This works fine for classes that include httpd. The trouble is that i >>> get this error on >>> nodes that don't : >>> >>> [r...@node03 ~]# puppetd -tv >>> info: Retrieving plugins >>> err: Could not retrieve catalog: Failed to parse template >>> iptables/iptables.erb: Class httpd has not been evaluated so its >>> variables cannot be referenced at >>> /etc/puppet/modules/iptables/manifests/init.pp:11 on node node03.pixie >>> warning: Not using cache on failed catalog >>> >>> >>> To my mind, that should be a warning, not an error. >>> >>> Is there any 'guard' I can put in my template to stop this blowing up? >>> >>> I did try: >>> >>> <% if has_variable?('httpd') && has_variable?('httpd::open_firewall') %> >>> >>> but the first clause is always false, even on nodes that 'include httpd'. >>> >>> >>> Sorry this has been a bit longwinded, but I'm a bit stumped here. >>> Thanks in advance for >>> any tips. >>> >>> > >> -----BEGIN PGP SIGNATURE----- >> Version: GnuPG v1.4.9 (GNU/Linux) >> >> iEYEARECAAYFAkowedoACgkQyjMdFR1108Dh0gCfWz7tn6/5+K2w9LZK2P+ajsab >> hy4An1ogD2dP3yj9wuGpn4v/Q1dKmoEa >> =7UvV >> -----END PGP SIGNATURE----- >> >> > >> > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---