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