On Wednesday, June 27, 2012 12:27:17 AM UTC-5, Yanis Guenane wrote:
>
> What I actually would like it to create a kind of dependency.
>
> I would like that a parameter X of any instance of type 'b' *depends* on
> the path param of the 'a' resource instance namely passed as a parameter.
>
> file {'test' :
>> ensure => present,
>> name => 'test.txt',
>> *within* => dir,
>> }
>>
>> file {'dir' :
>> ensure => directory,
>> name => 'dir',
>> path => '/tmp'
>> }
>>
>
> This is not the best example since file does not work this way but its the
> closest one to what I would like.
>
> Imagine file was a custom type, so I know in the *within *param I am
> expecting a File[] resource insance. I'd like to know if there is any way I
> can get the parameters of this resource instance (dir)? (Something like
> extrapolating it, or accessing it through catalog)
>
> In the previous case File['test'] will end up being located at
> '/tmp/text.txt', appending dir.path + test.name, without specifying the
> path in File['test'] but just the directory it depends on.
>
> I hope I could explain myself a bit better,
Yes, you did, and that's pretty much what I had supposed you were after.
Chances are good that you could force this to work, but I cannot advise you
about details, and I recommend you do not follow this path. Nothing else
in Puppet works the way you describe.
More generally, despite appearances, implementation language, and some of
the terminology used in the Puppet community, Puppet DSL is not an
object-oriented language in any conventional sense, but that's how you want
to make it behave (albeit only within the confines of your custom type).
The fact that you are trying to do something so non-idiomatic should give
you pause.
The usual ways to approach this sort of problem all involve making multiple
classes and / or resources pull data from the same source, typically one of
global or class variables, defined type parameters, an external data
repository, or class parameters. For example, if the two associated
resources are going to be declared together, then you could do this:
define my_module::file_and_directory($filename, $dir) {
file {$dir :
ensure => directory,
}
file {"${dir}/${filename}":
ensure => present,
}
}
my_module::file_and_directory { "foo":
filename => 'file',
dir => '/tmp'
}
John
--
You received this message because you are subscribed to the Google Groups
"Puppet Users" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/puppet-users/-/GMMVj0r6oiQJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/puppet-users?hl=en.