Hi,
I''m trying to generate apache virtual host configs and I have run  
into what I think is a bug.  Here is my setup:
CentOS 5.3
puppet 0.24.8
puppetmaster 0.24.8
Here is my template for the vhost configuration:
-- vhost2.erb --
NameVirtualHost <%= name %>:<%= port %>
<VirtualHost <%= name %>:<%= port %>>
<% if has_variable?("server_admin") and server_admin !=
"undef" then %>
         ServerAdmin <%= server_admin %>
<% else %>
         ServerAdmin root@<%= name %>
<% end %>
         ServerName <%= name %>
         CustomLog /var/log/httpd/<%= name %>-access_log combined
         ErrorLog /var/log/httpd/<%= name %>-error_log
         DocumentRoot /var/www/html-<%= name %>
         <%= vhost_config %>
</VirtualHost>
-- end vhost2.erb --
Here is the define for calling the template:
-- apache.pp --
class apache {
         define vhost2 ( $vhost_config, $port = 80, $server_admin =  
undef ) {
                 file { "$name.conf":
                         name => $operatingsystem ? {
                                 FreeBSD => "/usr/local/etc/apache22/ 
Includes/$name.conf",
                                 Solaris =>
"/etc/apache/$name.conf",
                                 default => "/etc/httpd/conf.d/ 
$name.conf",
                         },
                         ensure => present,
                         mode => 644,
                         content => template(''vhost2.erb''),
                         notify => [ Service[''httpd''], ],
                 }
         }
...
}
-- end apache.pp --
and here is how I call it:
         apache::vhost2 { "repo.$domain":
                 vhost_config => "
         <Directory \"/var/www/html-repo.$domain\">
                 Options FollowSymLinks Indexes
                 AllowOverride None
                 Order allow,deny
                 Allow from all
         </Directory>",
         }
This is what I get:
-- repo.home.pirzyk.org.conf --
NameVirtualHost repo.home.pirzyk.org:80
<VirtualHost repo.home.pirzyk.org:80>
       ServerAdmin undef
       ServerName repo.home.pirzyk.org
       CustomLog /var/log/httpd/repo.home.pirzyk.org-access_log combined
       ErrorLog /var/log/httpd/repo.home.pirzyk.org-error_log
       DocumentRoot /var/www/html-repo.home.pirzyk.org
       <Directory "/var/www/html-repo.home.pirzyk.org">
               Options FollowSymLinks Indexes
               AllowOverride None
               Order allow,deny
               Allow from all
       </Directory>
</VirtualHost>
-- end repo.home.pirzyk.org.conf --
If I set server_admin in the apache::vhost2 call, it does work  
correctly, just not if it is set to ''undef''
- JimP
--- @(#) $Id: dot.signature,v 1.15 2007/12/27 15:06:13 pirzyk Exp $
     __o  jim@pirzyk.org -------------------------------------------
  _''\<,_
(*)/ (*) I''d rather be out biking.
Answering my own question, I think I''ve found the source of the  
problem.  In the templatewrapper.rb file, there is a missing_method  
definition.  The notes above this definition talk about having  
lookupvar fixing methods that are defined as "" to  
return :undefined.  I though what if it is the same issue here with  
variables.  When I changed this line in the template:
<% if has_variable?("server_admin") and server_admin !=
"undef" then %>
to this:
<% if has_variable?("server_admin") and server_admin.to_s !=
"undef"
then %>
Then the templates started working as expected.  It did NOT work when  
I did this:
<% if has_variable?("server_admin") and server_admin !=
"" then %>
So the comparison operator is slightly different after converting to  
a string.
- JimP
On Aug 20, 2009, at 12:27 PM, Jim Pirzyk wrote:
> Hi,
>
> I''m trying to generate apache virtual host configs and I have run
> into what I think is a bug.  Here is my setup:
>
> CentOS 5.3
> puppet 0.24.8
> puppetmaster 0.24.8
>
> Here is my template for the vhost configuration:
> -- vhost2.erb --
> NameVirtualHost <%= name %>:<%= port %>
>
> <VirtualHost <%= name %>:<%= port %>>
> <% if has_variable?("server_admin") and server_admin !=
"undef"
> then %>
>         ServerAdmin <%= server_admin %>
> <% else %>
>         ServerAdmin root@<%= name %>
> <% end %>
>         ServerName <%= name %>
>
>         CustomLog /var/log/httpd/<%= name %>-access_log combined
>         ErrorLog /var/log/httpd/<%= name %>-error_log
>
>         DocumentRoot /var/www/html-<%= name %>
>
>         <%= vhost_config %>
> </VirtualHost>
> -- end vhost2.erb --
>
> Here is the define for calling the template:
> -- apache.pp --
> class apache {
>         define vhost2 ( $vhost_config, $port = 80, $server_admin =  
> undef ) {
>                 file { "$name.conf":
>                         name => $operatingsystem ? {
>                                 FreeBSD =>
"/usr/local/etc/apache22/
> Includes/$name.conf",
>                                 Solaris =>
"/etc/apache/$name.conf",
>                                 default => "/etc/httpd/conf.d/ 
> $name.conf",
>                         },
>                         ensure => present,
>                         mode => 644,
>                         content =>
template(''vhost2.erb''),
>                         notify => [ Service[''httpd''],
],
>                 }
>         }
> ...
> }
> -- end apache.pp --
>
> and here is how I call it:
>
>         apache::vhost2 { "repo.$domain":
>                 vhost_config => "
>         <Directory \"/var/www/html-repo.$domain\">
>                 Options FollowSymLinks Indexes
>                 AllowOverride None
>                 Order allow,deny
>                 Allow from all
>         </Directory>",
>         }
>
> This is what I get:
>
> -- repo.home.pirzyk.org.conf --
> NameVirtualHost repo.home.pirzyk.org:80
>
> <VirtualHost repo.home.pirzyk.org:80>
>
>       ServerAdmin undef
>
>       ServerName repo.home.pirzyk.org
>
>       CustomLog /var/log/httpd/repo.home.pirzyk.org-access_log  
> combined
>       ErrorLog /var/log/httpd/repo.home.pirzyk.org-error_log
>
>       DocumentRoot /var/www/html-repo.home.pirzyk.org
>
>
>       <Directory "/var/www/html-repo.home.pirzyk.org">
>               Options FollowSymLinks Indexes
>               AllowOverride None
>               Order allow,deny
>               Allow from all
>       </Directory>
> </VirtualHost>
> -- end repo.home.pirzyk.org.conf --
>
> If I set server_admin in the apache::vhost2 call, it does work  
> correctly, just not if it is set to ''undef''
>
> - JimP
>
> --- @(#) $Id: dot.signature,v 1.15 2007/12/27 15:06:13 pirzyk Exp $
>     __o  jim@pirzyk.org -------------------------------------------
>  _''\<,_
> (*)/ (*) I''d rather be out biking.
>
--- @(#) $Id: dot.signature,v 1.15 2007/12/27 15:06:13 pirzyk Exp $
     __o  jim@pirzyk.org -------------------------------------------
  _''\<,_
(*)/ (*) I''d rather be out biking.