Declare the same resource with different parameters

2,228 views
Skip to first unread message

Rost

unread,
Aug 16, 2012, 11:41:12 AM8/16/12
to puppet...@googlegroups.com
Hi all,

I'm developing  my own module, and i want to declare same resources in different class like this :

This resource is used to configure my Jboss server by copying conf files in /myappbase/applis/conf
class srhjboss::config::applis {
file { "/myappbase/applis/conf":
ensure => directory,
notify => Class['srhjboss::service'],
recurse => true,
source => 'puppet:///modules/srhjboss/communs',
}
}

The second class and resource is used to deploy the conf file of my war application like this :

class srhdeployit::war {
file { "/myappbase/applis/conf"':
ensure => present,
source => "puppet://puppet/srnrepo/myappname",
recurse => true,
}
}

then i include the class in the node

node default {
   include srhjboss::config::applis
   include srhdeployit::war

I got the exact failure : 

err: Failed to apply catalog: Cannot alias File[ ' ' ] to ["/sirhen/applis/conf"] at /etc/puppet/modules/srhjboss/manifests/config/applis.pp:47; resource ["File", "/sirhen/applis/conf"] already declared at /etc/puppet/modules/srhdeployit/manifests/war.pp:44

Do you have suggestions on how to do it?

Thanks

Christopher Wood

unread,
Aug 16, 2012, 11:50:03 AM8/16/12
to puppet...@googlegroups.com
Short version: use a define.

http://docs.puppetlabs.com/guides/language_guide.html#defined-resource-types


But did you mean to have unbalanced quotes here? There's an extra single quote.

file { "/myappbase/applis/conf"':


Regardless of whether you use a define or a class, you can't define the same file resource twice.

In the first resource, this:

/myappbase/applis/conf

Will end up with the contents of:

puppet:///modules/srhjboss/communs

And in the second one, it will end up with these contents:

puppet://puppet/srnrepo/myappname

You'll have to pick one per node.
> --
> You received this message because you are subscribed to the Google Groups
> "Puppet Users" group.
> To view this discussion on the web visit
> [1]https://groups.google.com/d/msg/puppet-users/-/70voc_9UPecJ.
> To post to this group, send email to puppet...@googlegroups.com.
> To unsubscribe from this group, send email to
> puppet-users...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/puppet-users?hl=en.
>
> References
>
> Visible links
> 1. https://groups.google.com/d/msg/puppet-users/-/70voc_9UPecJ

Rost

unread,
Aug 16, 2012, 12:00:34 PM8/16/12
to puppet...@googlegroups.com
Yes I want to fill  /myappbase/applis/conf with the content of twice sources, but in different class.

jcbollinger

unread,
Aug 17, 2012, 9:29:00 AM8/17/12
to puppet...@googlegroups.com


As Christopher explained, you cannot declare the same resource twice on the same node, as it is internally inconsistent.  You give Puppet conflicting information about the properties of the resource, so which is it supposed to apply?

Supposing that none of the files provided by class 'srhdeployit::war' replace files provided by class 'srhjboss::config::applis', you should be able to solve the problem by using separate File resources for each file or directory that the former wants to manage.  Note also that it looks like you probably need a 'requires' parameter on the 'srhdeployit::war' file(s).


John

Reply all
Reply to author
Forward
0 new messages