Issue #4780 has been updated by Peter Meier.

what I meant is:

<pre>
# cat test.pp

define deftest_4780::via_undef($ensure=present, $source=undef, $content=undef)
{
   $config_file="/tmp/$name"

   file { $config_file:
     owner => "root",
     group => "root",
     mode => 0644,
     ensure => $ensure,
     source => $source,
     content => $content,
   }

}

deftest_4780::via_undef{'aa': }
# puppet --trace --debug test.pp
info: Loading facts in configured_ntp_servers
info: Loading facts in acpi_available
info: Loading facts in mountpoints
info: Loading facts in interfaces
info: Loading facts in selinux
info: Loading facts in mysql
info: Loading facts in sshkeys
info: Loading facts in vserver
info: Loading facts in xen
debug: Failed to load library 'rubygems' for feature 'rubygems'
debug: Puppet::Type::File::ProviderMicrosoft_windows: feature microsoft_windows 
is missing
debug: Creating default schedules
debug: Puppet::Type::User::ProviderUser_role_add: file rolemod does not exist
debug: Failed to load library 'ldap' for feature 'ldap'
debug: Puppet::Type::User::ProviderLdap: feature ldap is missing
debug: Puppet::Type::User::ProviderPw: file pw does not exist
debug: Puppet::Type::User::ProviderDirectoryservice: file /usr/bin/dscl does 
not exist
debug: /File[/var/lib/puppet/ssl/public_keys/foo.bar.ch.pem]: Autorequiring 
File[/var/lib/puppet/ssl/public_keys]
debug: /File[/var/lib/puppet/ssl/public_keys]: Autorequiring 
File[/var/lib/puppet/ssl]
debug: /File[/var/lib/puppet/ssl/certs/ca.pem]: Autorequiring 
File[/var/lib/puppet/ssl/certs]
debug: /File[/var/lib/puppet/state/graphs]: Autorequiring 
File[/var/lib/puppet/state]
debug: /File[/var/lib/puppet/client_yaml]: Autorequiring File[/var/lib/puppet]
debug: /File[/var/lib/puppet/state]: Autorequiring File[/var/lib/puppet]
debug: /File[/var/lib/puppet/ssl/certs/foo.bar.ch.pem]: Autorequiring 
File[/var/lib/puppet/ssl/certs]
debug: /File[/var/lib/puppet/ssl/private_keys/foo.bar.ch.pem]: Autorequiring 
File[/var/lib/puppet/ssl/private_keys]
debug: /File[/var/lib/puppet/ssl/certificate_requests]: Autorequiring 
File[/var/lib/puppet/ssl]
debug: /File[/var/lib/puppet/ssl/private]: Autorequiring 
File[/var/lib/puppet/ssl]
debug: /File[/var/lib/puppet/ssl]: Autorequiring File[/var/lib/puppet]
debug: /File[/var/lib/puppet/state/classes.txt]: Autorequiring 
File[/var/lib/puppet/state]
debug: /File[/var/lib/puppet/clientbucket]: Autorequiring File[/var/lib/puppet]
debug: /File[/var/lib/puppet/lib]: Autorequiring File[/var/lib/puppet]
debug: /File[/var/lib/puppet/client_data]: Autorequiring File[/var/lib/puppet]
debug: /File[/var/lib/puppet/facts]: Autorequiring File[/var/lib/puppet]
debug: /File[/var/lib/puppet/ssl/private_keys]: Autorequiring 
File[/var/lib/puppet/ssl]
debug: /File[/var/lib/puppet/state/state.yaml]: Autorequiring 
File[/var/lib/puppet/state]
debug: /File[/var/lib/puppet/ssl/crl.pem]: Autorequiring 
File[/var/lib/puppet/ssl]
debug: /File[/var/lib/puppet/ssl/certs]: Autorequiring File[/var/lib/puppet/ssl]
debug: Finishing transaction 23566149157380
debug: Loaded state in 0.05 seconds
info: Applying configuration version '1284577384'
notice: /Stage[main]//Deftest_4780::Via_undef[aa]/File[/tmp/aa]/ensure: created
debug: Finishing transaction 23566147792940
debug: Storing state
debug: Stored state in 0.42 seconds
</pre>

so this works imho on 2.6.1, or did I get your test wrong?
----------------------------------------
Feature #4780: Allow $var=undef in define as parameter
http://projects.puppetlabs.com/issues/4780

Author: Nico Schottelius
Status: Needs more information
Priority: Normal
Assignee: 
Category: 
Target version: 
Affected version: 
Keywords: 
Branch: 


Hello!

When we encapsulate a simple type like file with a define, we would like to let 
the simple type take care of errors and thus pass direct input to it. This does 
not work however:

Current code:

define nginx::site($ensure=present, $source=false, $content=false) {

   include nginx

   $config_file="/etc/nginx/sites-enabled/$name"
   
   file { $config_file:
      owner => "root",
      group => "root",
      mode => 0644,
      ensure => $ensure,
      source => $source ? {
         false => undef,
         default => $source,
      },
      content => $content ? {
         false => undef,
         default => $content,
      },
      notify => Service['nginx'],
   }  

}

Expected code:

define site($ensure=present, $source=undef, $content=undef) {
   include nginx
   
   $config_file="/etc/nginx/sites-enabled/$name"
   
   file { $config_file:
      owner => "root",
      group => "root",
      mode => 0644,
      ensure => $ensure,
      source => $source,
      content => $content,
      notify => Service['nginx'],
   }  
   
}  

If you allow specifying arguments for defined types, an optimised version would 
look even smaller:

define site(__args_used=[file]) {
   include nginx
   
   $config_file="/etc/nginx/sites-enabled/$name"
   
   file { $config_file:
      owner => "root",
      group => "root",
      mode => 0644,
      notify => Service['nginx'],
   }  
      
}     

Whether the second or the third version or a complete different syntax would 
fit best is one question. Clear is that the first version is code redundancy 
and it should be possible to avoid it.


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