Scott
2009-Jan-17 06:31 UTC
[Puppet Users] Making a variable visible in parent class (scoping)
So I need a variable in a child class to be visible to the parent class and I''m wondering how I can do that? The docs say "You will almost always find that you can avoid resetting variable values using the built in conditionals:" but I guess this is one of those cases where it just isn''t possible: node default {} node testserver inherits default { include testclasses <- (this is where I need $var to be visible) } node test1.example.com inherits testserver { $var = "host server name" } As far as I can tell, there''s no way to include another node, otherwise I could have "test1.example.com" include "testserver" instead of inheriting. I can''t set a variable in the parent class from the child class because variables in puppet can only be set once. And, the way it is right now, exactly as it is above, $var evaluates to nil because the $var declaration is out of the scope of the parent class. I don''t want to include "testclasses" in "test1.example.com" because then I''m going to have to include it for every individual "testserver" node defeating the whole purpose of inheritance, cluttering up the config files and making it easier to make mistakes. So far, this is the only way I''ve been able to get it to work but it''s a kludge and I''d prefer to avoid it. I tried something like this as well: node default {} node testserver inherits default { $var = ["text1", "text2"] } node test1.example.com inherits testserver { $var += ["text3"] } but the parameter of the puppet type I''m trying to set with $var (nagios_host: hostgroups) doesn''t accept arrays. So if a child class can append to an array in a parent class, is there a way to get the string version of an array with all the elements concatenated together with a "," in between each element? Either that or is there a way I can get the "hostgroups" parameter in the "nagios_host" type to accept arrays? I feel like I''ve got to be missing something here. Thanks. Scott --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Luke Kanies
2009-Jan-19 20:44 UTC
[Puppet Users] Re: Making a variable visible in parent class (scoping)
On Jan 17, 2009, at 12:31 AM, Scott wrote:> > So I need a variable in a child class to be visible to the parent > class and I''m wondering how I can do that? The docs say "You will > almost always find that you can avoid resetting variable values using > the built in conditionals:" but I guess this is one of those cases > where it just isn''t possible: > > node default {} > > node testserver inherits default { > include testclasses <- (this is where I need > $var to be visible) > } > > node test1.example.com inherits testserver { > $var = "host server name" > } > > As far as I can tell, there''s no way to include another node, > otherwise I could have "test1.example.com" include "testserver" > instead of inheriting. I can''t set a variable in the parent class > from the child class because variables in puppet can only be set > once. And, the way it is right now, exactly as it is above, $var > evaluates to nil because the $var declaration is out of the scope of > the parent class. > > I don''t want to include "testclasses" in "test1.example.com" because > then I''m going to have to include it for every individual "testserver" > node defeating the whole purpose of inheritance, cluttering up the > config files and making it easier to make mistakes. So far, this is > the only way I''ve been able to get it to work but it''s a kludge and > I''d prefer to avoid it. > > I tried something like this as well: > > node default {} > > node testserver inherits default { > $var = ["text1", "text2"] > } > > node test1.example.com inherits testserver { > $var += ["text3"] > } > > but the parameter of the puppet type I''m trying to set with $var > (nagios_host: hostgroups) doesn''t accept arrays. So if a child class > can append to an array in a parent class, is there a way to get the > string version of an array with all the elements concatenated together > with a "," in between each element? Either that or is there a way I > can get the "hostgroups" parameter in the "nagios_host" type to accept > arrays? > > I feel like I''ve got to be missing something here. Thanks.The only real way to do this is to use an external nodes tool. I''ve attached a simple script that serves node infromation out of YAML files; it isn''t awesome but it''ll do what you want, anyway. -- All power corrupts, but we need the electricity. -- Unknown --------------------------------------------------------------------- Luke Kanies | http://reductivelabs.com | http://madstop.com --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Scott
2009-Jan-22 05:21 UTC
[Puppet Users] Re: Making a variable visible in parent class (scoping)
Luke, thanks for the reply. So just to clarify, you can''t even have a child class append to an array declared in the parent class and have it visible in the parent class? Scott On Jan 19, 9:44 pm, Luke Kanies <l...@madstop.com> wrote:> On Jan 17, 2009, at 12:31 AM, Scott wrote: > > > > > > > So I need a variable in a child class to be visible to the parent > > class and I''m wondering how I can do that? The docs say "You will > > almost always find that you can avoid resetting variable values using > > the built in conditionals:" but I guess this is one of those cases > > where it just isn''t possible: > > > node default {} > > > node testserver inherits default { > > include testclasses <- (this is where I need > > $var to be visible) > > } > > > node test1.example.com inherits testserver { > > $var = "host server name" > > } > > > As far as I can tell, there''s no way to include another node, > > otherwise I could have "test1.example.com" include "testserver" > > instead of inheriting. I can''t set a variable in the parent class > > from the child class because variables in puppet can only be set > > once. And, the way it is right now, exactly as it is above, $var > > evaluates to nil because the $var declaration is out of the scope of > > the parent class. > > > I don''t want to include "testclasses" in "test1.example.com" because > > then I''m going to have to include it for every individual "testserver" > > node defeating the whole purpose of inheritance, cluttering up the > > config files and making it easier to make mistakes. So far, this is > > the only way I''ve been able to get it to work but it''s a kludge and > > I''d prefer to avoid it. > > > I tried something like this as well: > > > node default {} > > > node testserver inherits default { > > $var = ["text1", "text2"] > > } > > > node test1.example.com inherits testserver { > > $var += ["text3"] > > } > > > but the parameter of the puppet type I''m trying to set with $var > > (nagios_host: hostgroups) doesn''t accept arrays. So if a child class > > can append to an array in a parent class, is there a way to get the > > string version of an array with all the elements concatenated together > > with a "," in between each element? Either that or is there a way I > > can get the "hostgroups" parameter in the "nagios_host" type to accept > > arrays? > > > I feel like I''ve got to be missing something here. Thanks. > > The only real way to do this is to use an external nodes tool. I''ve > attached a simple script that serves node infromation out of YAML > files; it isn''t awesome but it''ll do what you want, anyway. > > -- > All power corrupts, but we need the electricity. > -- Unknown > --------------------------------------------------------------------- > Luke Kanies |http://reductivelabs.com|http://madstop.com > > external_nodes.rb > 1KViewDownload--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Luke Kanies
2009-Jan-23 06:05 UTC
[Puppet Users] Re: Making a variable visible in parent class (scoping)
On Jan 21, 2009, at 11:21 PM, Scott wrote:> Luke, thanks for the reply. So just to clarify, you can''t even have a > child class append to an array declared in the parent class and have > it visible in the parent class?It''s a question of ordering - by the time the child class has an opportunity to extend an array, that array has already been used by an included class. So sure, you can extend the array, it just won''t do any good. :/ -- A government big enough to give you everything you want is big enough to take from you everything you have. --Gerald R. Ford --------------------------------------------------------------------- Luke Kanies | http://reductivelabs.com | http://madstop.com --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---