Defined Type and Scoping ...

43 views
Skip to first unread message

Reginald Choudari

unread,
Dec 10, 2012, 4:36:55 PM12/10/12
to puppet...@googlegroups.com
Hello,

I've got a module with an 'init.pp' like so:

class test_backend {
...
exec {'reset':
refreshonly => true,
command => 'C:\blah.exe',
}
...  
}
 
And I declare a defined resource type 'cmd.pp' below:

define test_backend::cmd($var1, $var2) {
...
file {'$var1':
ensure => file,
content => $var2, 
notify => Test_backend::Exec['reset'], 
}
...  
}

And this is what I get:
Failed to apply catalog: Could not find dependent Test_backend::Exec[reset] for File[bobloblaw]

How should I go about doing this?

Thanks,
Reginald 
 

llowder

unread,
Dec 10, 2012, 4:39:57 PM12/10/12
to puppet...@googlegroups.com

Did you "include test_backend" or "class { 'test_backend': }" anywhere?

 

Reginald Choudari

unread,
Dec 10, 2012, 4:47:21 PM12/10/12
to puppet...@googlegroups.com
In the defined type, no I did not. Is that required for a defined typed declared as a child of the class's scope?

llowder

unread,
Dec 10, 2012, 5:14:34 PM12/10/12
to puppet...@googlegroups.com


On Monday, December 10, 2012 3:47:21 PM UTC-6, Reginald Choudari wrote:
In the defined type, no I did not. Is that required for a defined typed declared as a child of the class's scope?

If you want to notify some resource, it has to be included in that catalog somewhere. So either in that define, or your node def from the ENC, you will have to also include that class.

 

jcbollinger

unread,
Dec 11, 2012, 9:15:25 AM12/11/12
to puppet...@googlegroups.com


On Monday, December 10, 2012 4:14:34 PM UTC-6, llowder wrote:


On Monday, December 10, 2012 3:47:21 PM UTC-6, Reginald Choudari wrote:
In the defined type, no I did not. Is that required for a defined typed declared as a child of the class's scope?

If you want to notify some resource, it has to be included in that catalog somewhere. So either in that define, or your node def from the ENC, you will have to also include that class.

Yes.  That the type definition's name is in the namespace of class 'test_backend' does not automagically cause that class to be assigned to nodes for which instances of the defined type are declared.  There doesn't even have to be such a class.

Since there is a class 'test_backend' and it is not parametrized, it is safe and preferable to "include 'test_backend'" at the beginning of the body of every other class or type definition that refers to its variables or to any resource it declares.  That does assign the class to nodes.  It is safe for such an 'include' statement to be processed multiple times, but the same is not true of the "class { 'test_backend': ... }" form.


John

Reply all
Reply to author
Forward
0 new messages