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