I''m probably being dense here, but.... Is if possible to include a class, onlyif a given file exists? If not, can I put an onlyif in all the file/cron/service/etc statements, so that they are only executed once that file is put in place (I.e. only run phase 2 of the configging once a file is in place to confirm that ALL of phase 1 is done)? A little confused on trying to find a way to order classes, if I can manage it.... i.e. make all the basic stuff happen, then make some other stuff happen, then make the most advanced stuff (that relies on everything else being done first) happen. --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Marcin Owsiany
2008-Oct-16 14:45 UTC
[Puppet Users] Re: language trouble with metaparameters
On Thu, Oct 16, 2008 at 07:16:39AM -0700, zoniguana wrote:> Is if possible to include a class, onlyif a given file exists?Currently not, this is bug http://projects.reductivelabs.com/issues/show/651 on which I''m going to start work Really Soon Now (tm). -- Marcin Owsiany <marcin@owsiany.pl> http://marcin.owsiany.pl/ GnuPG: 1024D/60F41216 FE67 DA2D 0ACA FC5E 3F75 D6F6 3A0D 8AA0 60F4 1216 "Every program in development at MIT expands until it can read mail." -- Unknown --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Hey Zoniguana, zoniguana wrote:> I''m probably being dense here, but.... > > Is if possible to include a class, onlyif a given file exists? > If not, can I put an onlyif in all the file/cron/service/etc > statements, so that they are only executed once that file is put in > place (I.e. only run phase 2 of the configging once a file is in place > to confirm that ALL of phase 1 is done)? > >You probably want to use the ''require'' or ''before'' metaparameters here. These Metaparameters establish ordering relationships between classes and resources i.e.: file {"foo": path => "/etc/foo", content => "the sets up the bar service" } service {"bar": ensure => running, enabled = true, require => File["foo"] } This sets up a relationship between the File["foo"] resource and the Service["bar"] resource such that the File[''foo''] must exist before the Service["bar"] is started. The same holds true for class relationships i.e.: class foo { file {"foo": path => "/etc/foo", content => "the sets up the bar service" } user {"foo": ensure => present } } service{"bar": ensure => running, enabled = true, require => Class["foo"] } In this case, all the conditions of resources defined in Class["foo"] must be satisfied before Service["bar"] is started. The before metaparameter just sets up the reverse relationship between classes and resources.> A little confused on trying to find a way to order classes, if I can > manage it.... > i.e. make all the basic stuff happen, then make some other stuff > happen, then make the most advanced stuff (that relies on everything > else being done first) happen. > > >-teyo -- Those who claim the dead never return to life haven''t ever been around here at quitting time. Teyo Tyree ::: http://reductivelabs.com ::: +1.615.275.5066 --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Justin Williams
2008-Oct-16 15:11 UTC
[Puppet Users] Re: language trouble with metaparameters
That is perfect! Thank you! So, if I have: Class A for basic stuff Class B for system specific stuff and Class C for other stuff that has to happen after classes A & B, then, if I have, say, file { "/foo/bar/snarfblatt": require => Class[" B"], etc; } in class C And then require File["/foo/bar/snarfblatt"] in the rest of the resouces in class C Then that will definitively set the order of B must happen before the file can be copied over, and the file must be copied over before anything else can be done in class C. Of course, that means I have to copy in umpteen bajillion "require File..." statements, to get everything else in order in Class C, but, doing that once versus continually having to go back and play clean up while rolling out a new box, it''s a whole lot mote time effective! Thanks again!! On Thu, Oct 16, 2008 at 10:47 AM, Teyo Tyree <teyo@reductivelabs.com> wrote:> Hey Zoniguana, > > zoniguana wrote: > > I''m probably being dense here, but.... > > Is if possible to include a class, onlyif a given file exists? > If not, can I put an onlyif in all the file/cron/service/etc > statements, so that they are only executed once that file is put in > place (I.e. only run phase 2 of the configging once a file is in place > to confirm that ALL of phase 1 is done)? > > > > You probably want to use the ''require'' or ''before'' metaparameters here. > These Metaparameters establish ordering relationships between classes and > resources i.e.: > > file {"foo": > path => "/etc/foo", > content => "the sets up the bar service" > } > service {"bar": > ensure => running, > enabled = true, > require => File["foo"] > } > > This sets up a relationship between the File["foo"] resource and the > Service["bar"] resource such that the File[''foo''] must exist before the > Service["bar"] is started. The same holds true for class relationships > i.e.: > > class foo { > file {"foo": > path => "/etc/foo", > content => "the sets up the bar service" > } > user {"foo": > ensure => present > } > } > > service{"bar": > ensure => running, > enabled = true, > require => Class["foo"] > } > > In this case, all the conditions of resources defined in Class["foo"] must > be satisfied before Service["bar"] is started. The before metaparameter > just sets up the reverse relationship between classes and resources. > > A little confused on trying to find a way to order classes, if I can > manage it.... > i.e. make all the basic stuff happen, then make some other stuff > happen, then make the most advanced stuff (that relies on everything > else being done first) happen. > > > > -teyo > > -- > > Those who claim the dead never return to life haven''t ever been around here at quitting time. > > Teyo Tyree ::: http://reductivelabs.com ::: +1.615.275.5066 > > > > >--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Justin Williams wrote:> That is perfect! Thank you! > > So, if I have: > Class A for basic stuff > Class B for system specific stuff > and Class C for other stuff that has to happen after classes A & B, > then, if I have, say, file { "/foo/bar/snarfblatt": require => Class[" > B"], etc; } in class C > And then require File["/foo/bar/snarfblatt"] in the rest of the > resouces in class C > > Then that will definitively set the order of B must happen before the > file can be copied over, and the file must be copied over before > anything else can be done in class C. > > Of course, that means I have to copy in umpteen bajillion "require > File..." statements, to get everything else in order in Class C, but, > doing that once versus continually having to go back and play clean up > while rolling out a new box, it''s a whole lot mote time effective! >You can also setup class to class or class to resource relationships but it is hackish. If you set a variable inside a class with the same name as a metaparameter, the metaparameter is applied to the class. For example: class bar { $require = File[''foo''] } You can could also set default attributes for a given resource type within a class or specify a list of files in an array to reduce the amount of repeated code you have in a class.> Thanks again!! > > On Thu, Oct 16, 2008 at 10:47 AM, Teyo Tyree <teyo@reductivelabs.com > <mailto:teyo@reductivelabs.com>> wrote: > > Hey Zoniguana, > > zoniguana wrote: >> I''m probably being dense here, but.... >> >> Is if possible to include a class, onlyif a given file exists? >> If not, can I put an onlyif in all the file/cron/service/etc >> statements, so that they are only executed once that file is put in >> place (I.e. only run phase 2 of the configging once a file is in place >> to confirm that ALL of phase 1 is done)? >> >> > You probably want to use the ''require'' or ''before'' metaparameters > here. These Metaparameters establish ordering relationships > between classes and resources i.e.: > > file {"foo": > path => "/etc/foo", > content => "the sets up the bar service" > } > service {"bar": > ensure => running, > enabled = true, > require => File["foo"] > } > > This sets up a relationship between the File["foo"] resource and > the Service["bar"] resource such that the File[''foo''] must exist > before the Service["bar"] is started. The same holds true for > class relationships i.e.: > > class foo { > file {"foo": > path => "/etc/foo", > content => "the sets up the bar service" > } > user {"foo": > ensure => present > } > } > > service{"bar": > ensure => running, > enabled = true, > require => Class["foo"] > } > > In this case, all the conditions of resources defined in > Class["foo"] must be satisfied before Service["bar"] is started. > The before metaparameter just sets up the reverse relationship > between classes and resources. > >> A little confused on trying to find a way to order classes, if I can >> manage it.... >> i.e. make all the basic stuff happen, then make some other stuff >> happen, then make the most advanced stuff (that relies on everything >> else being done first) happen. >> >> > -teyo > > -- > > Those who claim the dead never return to life haven''t ever been around here at quitting time. > > Teyo Tyree ::: http://reductivelabs.com ::: +1.615.275.5066 > > > > > > > >-- --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Justin Williams
2008-Oct-16 19:16 UTC
[Puppet Users] Re: language trouble with metaparameters
This is exactly the kind of info that I was once hunting for a month or two ago. The ability to have one class depend upon another, or to have one class depend upon an another type, is huge, and simplifies so much for me! Thank you!!! On Thu, Oct 16, 2008 at 11:36 AM, Teyo Tyree <teyo@reductivelabs.com> wrote:> Justin Williams wrote: > > That is perfect! Thank you! > > So, if I have: > Class A for basic stuff > Class B for system specific stuff > and Class C for other stuff that has to happen after classes A & B, > then, if I have, say, file { "/foo/bar/snarfblatt": require => Class[" B"], > etc; } in class C > And then require File["/foo/bar/snarfblatt"] in the rest of the resouces in > class C > > Then that will definitively set the order of B must happen before the file > can be copied over, and the file must be copied over before anything else > can be done in class C. > > Of course, that means I have to copy in umpteen bajillion "require File..." > statements, to get everything else in order in Class C, but, doing that once > versus continually having to go back and play clean up while rolling out a > new box, it''s a whole lot mote time effective! > > You can also setup class to class or class to resource relationships but > it is hackish. If you set a variable inside a class with the same name as a > metaparameter, the metaparameter is applied to the class. For example: > class bar { > $require = File[''foo''] > } > You can could also set default attributes for a given resource type within > a class or specify a list of files in an array to reduce the amount of > repeated code you have in a class. > > Thanks again!! > > On Thu, Oct 16, 2008 at 10:47 AM, Teyo Tyree <teyo@reductivelabs.com>wrote: > >> Hey Zoniguana, >> >> zoniguana wrote: >> >> I''m probably being dense here, but.... >> >> Is if possible to include a class, onlyif a given file exists? >> If not, can I put an onlyif in all the file/cron/service/etc >> statements, so that they are only executed once that file is put in >> place (I.e. only run phase 2 of the configging once a file is in place >> to confirm that ALL of phase 1 is done)? >> >> >> >> You probably want to use the ''require'' or ''before'' metaparameters here. >> These Metaparameters establish ordering relationships between classes and >> resources i.e.: >> >> file {"foo": >> path => "/etc/foo", >> content => "the sets up the bar service" >> } >> service {"bar": >> ensure => running, >> enabled = true, >> require => File["foo"] >> } >> >> This sets up a relationship between the File["foo"] resource and the >> Service["bar"] resource such that the File[''foo''] must exist before the >> Service["bar"] is started. The same holds true for class relationships >> i.e.: >> >> class foo { >> file {"foo": >> path => "/etc/foo", >> content => "the sets up the bar service" >> } >> user {"foo": >> ensure => present >> } >> } >> >> service{"bar": >> ensure => running, >> enabled = true, >> require => Class["foo"] >> } >> >> In this case, all the conditions of resources defined in Class["foo"] must >> be satisfied before Service["bar"] is started. The before metaparameter >> just sets up the reverse relationship between classes and resources. >> >> A little confused on trying to find a way to order classes, if I can >> manage it.... >> i.e. make all the basic stuff happen, then make some other stuff >> happen, then make the most advanced stuff (that relies on everything >> else being done first) happen. >> >> >> >> -teyo >> >> -- >> >> Those who claim the dead never return to life haven''t ever been around here at quitting time. >> >> Teyo Tyree ::: http://reductivelabs.com ::: +1.615.275.5066 >> >> >> >> >> > > > > > -- > > > >--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---