Issue #19315 has been updated by R.I. Pienaar.
wouldnt this be better?
<pre>
$x = [{'source' => 'dmz', 'address' => '192.168.101.200'}, {'source' => 'dmz',
'address' => '192.168.100.200'}]
foreach($x, $item) {
network::route{$item[address]:
source => $item[dmz]
}
}
</pre>
Today even if these name vars worked you' then have to pass them into a
specific define that exist only to replace the foreach here, that define then
would access the bits in $name[source] etc to create further resources.
This - though not this syntax - is what I mean by iteration in the language
which would yield better code. There is work underway already on such
iteration in the Puppet Language, name vars should always be simple strings as
resource should always be referencable by name.
Lets say you had:
<pre>
your_define{{'source' => 'dmz', 'address' => '192.168.101.200'}: ....}
</pre>
which is what you're proposing in effect, how do you require that define,
notify it, etc. Even if you wanted to type it out as in your suggestion, it's
doesn't make sense the whole point of data is that it's dynamic and possibly
external, suggesting people type it out in their code isn't right. Suggesting
you save it in a variable? I am not following this suggestion, where? In the
define? How does another class access that variable?
The best way to evaluate this is to see if a few full examples that would show
how this proposal would still retain overall usability wrt:
* Creating the resources from your structure
* From another class notify/require/subscribe the created resources
* State what considerations non string name vars have in reports and logs and
how that might affect the user experience
----------------------------------------
Bug #19315: puppet is buggy when using a hash as a $name
https://projects.puppetlabs.com/issues/19315#change-83400
Author: James Shubin
Status: Unreviewed
Priority: Normal
Assignee:
Category:
Target version:
Affected Puppet version:
Keywords:
Branch:
<pre>
It turns out if you're doing some fancy puppet work, it is sometimes useful to
use a hash as a $name var.
In my particular case, I'm actually passing an array of hashes to a define
(which ultimately causes the define to be called once for each hash).
This actually works perfectly when run locally with puppet apply, however when
running with puppet agent --test, it sometimes works and sometimes fails with:
Error: Could not retrieve catalog from remote server: Could not intern from
pson: Could not convert from pson: Could not find relationship source
"Foo::Bar::My_define[sourcedmzaddress192.168.101.200]"
The hash I used was:
{'source' => 'dmz', 'address' => '192.168.101.200'}
A few comments:
1. It's strange that the execution is not deterministic. Why does it sometimes
work and sometimes not?
2. It's odd that it *always* works locally, but not always when through the
puppet master.
3. The error message is confusing, not sure what it is trying to tell me.
Thanks,
James
</pre>
--
You have received this notification because you have either subscribed to it,
or are involved in it.
To change your notification preferences, please click here:
http://projects.puppetlabs.com/my/account
--
You received this message because you are subscribed to the Google Groups
"Puppet Bugs" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/puppet-bugs?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.