Mark Christian
2009-Sep-15 18:58 UTC
[Puppet Users] is it possible to pass a node variable to file source in a class?
say I have a couple nodes: node ''uk-host'' inherits basenode { $site = "UK" } node ''ap-host'' inherits basenode { $site = "AP" } Is it possible to pass the $site variable to the file resource source parameter?: class ntp { package { ntp: ensure => installed } file { "/etc/ntp.conf": owner => root, group => root, mode => 0644, source => "puppet:///ntp/$site/ntp.conf", # $modulepath/ntp/ files/{AP,UK}/ntp.conf source => "puppet:///ntp/ntp.conf", notify => Service[ntpd], require => Package["ntp"], } service { ntpd: name => "ntpd", enable => true, hasstatus => true, hasrestart => true, ensure => running, require => Package["ntp"], } } The above does not appear to work. Am I simply misguided and should I be trying something else? Thank you. Mark --~--~---------~--~----~------------~-------~--~----~ 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+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en -~----------~----~----~----~------~----~------~--~---
Silviu Paragina
2009-Sep-15 19:45 UTC
[Puppet Users] Re: is it possible to pass a node variable to file source in a class?
I thinks you are in the case explained here http://reductivelabs.com/trac/puppet/wiki/CommonMisconceptions Silviu Mark Christian wrote:> say I have a couple nodes: > > node ''uk-host'' inherits basenode { > $site = "UK" > } > node ''ap-host'' inherits basenode { > $site = "AP" > } > > Is it possible to pass the $site variable to the file resource source > parameter?: > > class ntp { > > package { ntp: ensure => installed } > > file { "/etc/ntp.conf": > owner => root, > group => root, > mode => 0644, > source => "puppet:///ntp/$site/ntp.conf", # $modulepath/ntp/ > files/{AP,UK}/ntp.conf > source => "puppet:///ntp/ntp.conf", > notify => Service[ntpd], > require => Package["ntp"], > } > > service { ntpd: > name => "ntpd", > enable => true, > hasstatus => true, > hasrestart => true, > ensure => running, > require => Package["ntp"], > } > } > > The above does not appear to work. Am I simply misguided and should I > be trying something else? Thank you. > > Mark > > > >--~--~---------~--~----~------------~-------~--~----~ 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+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en -~----------~----~----~----~------~----~------~--~---
Mark Christian
2009-Sep-15 21:54 UTC
[Puppet Users] Re: is it possible to pass a node variable to file source in a class?
Following the example in the CommonMisconceptions I''ve done away with the inherits "base_node" and have instead included the class base_node and can now successfully pass my $site variable. However I can''t seem to include the variable in the "source" parameter for "file" type. For now I''m using this: file { "/etc/ntp.conf": owner => root, group => root, mode => 0644, source => $site ? { "sj" => "puppet:///ntp/SJ/ntp.conf", "to" => "puppet:///ntp/TO/ntp.conf", "uk" => "puppet:///ntp/UK/ntp.conf", "pg" => "puppet:///ntp/PG/ntp.conf", default => "puppet:///ntp/ntp.conf", }, notify => Service[ntpd], require => Package["ntp"], } I was just hoping I could use this instead: source => "puppet:///ntp/$site/ntp.conf" On Sep 15, 12:45 pm, Silviu Paragina <sil...@paragina.ro> wrote:> I thinks you are in the case explained herehttp://reductivelabs.com/trac/puppet/wiki/CommonMisconceptions > > Silviu > > Mark Christian wrote: > > say I have a couple nodes: > > > node ''uk-host'' inherits basenode { > > $site = "UK" > > } > > node ''ap-host'' inherits basenode { > > $site = "AP" > > } > > > Is it possible to pass the $site variable to the file resource source > > parameter?: > > > class ntp { > > > package { ntp: ensure => installed } > > > file { "/etc/ntp.conf": > > owner => root, > > group => root, > > mode => 0644, > > source => "puppet:///ntp/$site/ntp.conf", # $modulepath/ntp/ > > files/{AP,UK}/ntp.conf > > source => "puppet:///ntp/ntp.conf", > > notify => Service[ntpd], > > require => Package["ntp"], > > } > > > service { ntpd: > > name => "ntpd", > > enable => true, > > hasstatus => true, > > hasrestart => true, > > ensure => running, > > require => Package["ntp"], > > } > > } > > > The above does not appear to work. Am I simply misguided and should I > > be trying something else? Thank you. > > > Mark--~--~---------~--~----~------------~-------~--~----~ 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+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en -~----------~----~----~----~------~----~------~--~---
Eric Heydrick
2009-Sep-15 22:28 UTC
[Puppet Users] Re: is it possible to pass a node variable to file source in a class?
That should work. However, a more puppetish way of doing it is using a template to generate ntp.conf. I''m guessing the only difference between your ntp.conf''s is the server setting. Here''s how you could do it with a template: in site.pp specify ntp servers for each site, e.g.: case $site { sj: { $ntpServerList = [ ''ntp1.sj'', ''ntp2.sj'' ] } to: { $ntpServerList = [ ''ntp1.to'', ''ntp2.to'' ] } } then make an ntp.conf.erb in the templates directory that contains this: <% ntpServerList.each do |ntpServer| -%> server <%= ntpServer %> <% end -%> then in your manifest: file { "/etc/ntp.conf": content => template("ntp/ntp.conf.erb"), } This way you have only one file to edit to change site-specific setings. In our environment we have a function in site.pp that determines $site based on fqdn. -Eric On Tue, 15 Sep 2009, Mark Christian wrote:> > Following the example in the CommonMisconceptions I''ve done away with > the inherits "base_node" and have instead included the class base_node > and can now successfully pass my $site variable. However I can''t seem > to include the variable in the "source" parameter for "file" type. > > For now I''m using this: > > file { "/etc/ntp.conf": > owner => root, > group => root, > mode => 0644, > source => $site ? { > "sj" => "puppet:///ntp/SJ/ntp.conf", > "to" => "puppet:///ntp/TO/ntp.conf", > "uk" => "puppet:///ntp/UK/ntp.conf", > "pg" => "puppet:///ntp/PG/ntp.conf", > default => "puppet:///ntp/ntp.conf", > }, > notify => Service[ntpd], > require => Package["ntp"], > } > > I was just hoping I could use this instead: > > source => "puppet:///ntp/$site/ntp.conf" > > > > On Sep 15, 12:45 pm, Silviu Paragina <sil...@paragina.ro> wrote: > > I thinks you are in the case explained herehttp://reductivelabs.com/trac/puppet/wiki/CommonMisconceptions > > > > Silviu > > > > Mark Christian wrote: > > > say I have a couple nodes: > > > > > node ''uk-host'' inherits basenode { > > > $site = "UK" > > > } > > > node ''ap-host'' inherits basenode { > > > $site = "AP" > > > } > > > > > Is it possible to pass the $site variable to the file resource source > > > parameter?: > > > > > class ntp { > > > > > package { ntp: ensure => installed } > > > > > file { "/etc/ntp.conf": > > > owner => root, > > > group => root, > > > mode => 0644, > > > source => "puppet:///ntp/$site/ntp.conf", # $modulepath/ntp/ > > > files/{AP,UK}/ntp.conf > > > source => "puppet:///ntp/ntp.conf", > > > notify => Service[ntpd], > > > require => Package["ntp"], > > > } > > > > > service { ntpd: > > > name => "ntpd", > > > enable => true, > > > hasstatus => true, > > > hasrestart => true, > > > ensure => running, > > > require => Package["ntp"], > > > } > > > } > > > > > The above does not appear to work. Am I simply misguided and should I > > > be trying something else? Thank you. > > > > > Mark > > >--~--~---------~--~----~------------~-------~--~----~ 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+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en -~----------~----~----~----~------~----~------~--~---
Mark Christian
2009-Sep-15 23:21 UTC
[Puppet Users] Re: is it possible to pass a node variable to file source in a class?
Thank you for taking the time to demonstrate how to implement a template. This is exactly what I needed. On Sep 15, 3:28 pm, Eric Heydrick <eric...@speakeasy.net> wrote:> That should work. However, a more puppetish way of doing it is using a > template to generate ntp.conf. I''m guessing the only difference between > your ntp.conf''s is the server setting. Here''s how you could do it with a > template: > > in site.pp specify ntp servers for each site, e.g.: > > case $site { > sj: { > $ntpServerList = [ ''ntp1.sj'', ''ntp2.sj'' ] > } > to: { > $ntpServerList = [ ''ntp1.to'', ''ntp2.to'' ] > } > > } > > then make an ntp.conf.erb in the templates directory that contains this: > > <% ntpServerList.each do |ntpServer| -%> > server <%= ntpServer %> > <% end -%> > > then in your manifest: > > file { "/etc/ntp.conf": > content => template("ntp/ntp.conf.erb"), > > } > > This way you have only one file to edit to change site-specific setings. > > In our environment we have a function in site.pp that determines $site > based on fqdn. > > -Eric > > On Tue, 15 Sep 2009, Mark Christian wrote: > > > Following the example in the CommonMisconceptions I''ve done away with > > the inherits "base_node" and have instead included the class base_node > > and can now successfully pass my $site variable. However I can''t seem > > to include the variable in the "source" parameter for "file" type. > > > For now I''m using this: > > > file { "/etc/ntp.conf": > > owner => root, > > group => root, > > mode => 0644, > > source => $site ? { > > "sj" => "puppet:///ntp/SJ/ntp.conf", > > "to" => "puppet:///ntp/TO/ntp.conf", > > "uk" => "puppet:///ntp/UK/ntp.conf", > > "pg" => "puppet:///ntp/PG/ntp.conf", > > default => "puppet:///ntp/ntp.conf", > > }, > > notify => Service[ntpd], > > require => Package["ntp"], > > } > > > I was just hoping I could use this instead: > > > source => "puppet:///ntp/$site/ntp.conf" > > > On Sep 15, 12:45 pm, Silviu Paragina <sil...@paragina.ro> wrote: > > > I thinks you are in the case explained herehttp://reductivelabs.com/trac/puppet/wiki/CommonMisconceptions > > > > Silviu > > > > Mark Christian wrote: > > > > say I have a couple nodes: > > > > > node ''uk-host'' inherits basenode { > > > > $site = "UK" > > > > } > > > > node ''ap-host'' inherits basenode { > > > > $site = "AP" > > > > } > > > > > Is it possible to pass the $site variable to the file resource source > > > > parameter?: > > > > > class ntp { > > > > > package { ntp: ensure => installed } > > > > > file { "/etc/ntp.conf": > > > > owner => root, > > > > group => root, > > > > mode => 0644, > > > > source => "puppet:///ntp/$site/ntp.conf", # $modulepath/ntp/ > > > > files/{AP,UK}/ntp.conf > > > > source => "puppet:///ntp/ntp.conf", > > > > notify => Service[ntpd], > > > > require => Package["ntp"], > > > > } > > > > > service { ntpd: > > > > name => "ntpd", > > > > enable => true, > > > > hasstatus => true, > > > > hasrestart => true, > > > > ensure => running, > > > > require => Package["ntp"], > > > > } > > > > } > > > > > The above does not appear to work. Am I simply misguided and should I > > > > be trying something else? Thank you. > > > > > Mark--~--~---------~--~----~------------~-------~--~----~ 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+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en -~----------~----~----~----~------~----~------~--~---