On Tuesday, June 27, 2017 at 3:37:04 PM UTC+2, jcbollinger wrote:
>
>
>
> On Monday, June 26, 2017 at 7:57:06 AM UTC-5, Prunk Dump wrote:
>>
>> Hello puppet Team !
>>
>> I have trouble upgrading some code from puppet-3.7 to puppet-4.8.
>>
>> I have a class, a defined type, and a sub-defined type like this :
>>
>>
> [...]
>  
>  
>
>> So there is two "mainclass::myress" declaration. Each one have a 
>> different value of $myressvar inside the ressource. And each one declare 
>> one "mainclass::myress::sub" ressource. In puppet 3.7 everything works just 
>> like this. And
>>
>> -> In the "mainclass::myress::sub" déclared by "myressv1" I can access 
>> the value of the "$myressvar" variable of the "myressv1" ressource just by 
>> "$myressvar". So using the "$myressvar" variable inside 
>> "mainclass::myress::sub" I get the value of the parent ressource.
>>
>>
>
> That's doubtful.  What you describe should not work in Puppet 3.7 at all, 
> neither with nor without the future parser.  I did not even find a bug 
> report that would explain why it might have seemed to work for you.  Puppet 
> 3.7's scoping rules are documented at 
> https://docs.puppet.com/puppet/3.7/lang_scope.html.  Those docs are 
> substantially unchanged for all v4 releases so far, and as a matter of 
> semantic versioning, I expect them to remain substantially unchanged for 
> all remaining v4 releases.
>
> Note in particular that
>
>    - "Code inside a class definition or defined type exists in a local 
>    scope."
>    - "Variables and defaults declared in a local scope are only available 
>    in that scope and its children."
>    - "Node scope and the local scopes created by defined resources are 
>    anonymous and cannot be directly referenced."
>    - Although not a direct quote, the parent scope of every defined 
>    type's local scope is *node scope*, regardless of where that instance 
>    is declared.
>
> I could believe that the behavior you describe was exhibited by Puppet *2*.7, 
> which had very different scoping rules for variables, but the scope change 
> was one of the major differences between Puppet 2 and Puppet 3.  Not only 
> should what you describe not work in Puppet 3 (or 4), there is no way at 
> all in v3 or v4 of the Puppet language to access the local variables of a 
> defined type instance, though I believe there is a function available from 
> the stdlib module for accessing their *parameters*.
>
> All that aside, the easiest solution is probably to give 
> mainclass::myress::sub a parameter by which the wanted value from a 
> mainclass::myress instance is provided to it.
>


Thank you very much jcbollinger !

What you propose worked like a charm ! 

I don't understand why the code without parameter works on puppet 3.7... 
maybe a different way to handle the resources default parameters ? In all 
cases "$mainclass::myress::myressvar" don't works. I seem there is no way 
in Puppet-4.8 to access the "upper-ressources" variables.

Thank again !

Baptiste.
 

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/5d49a1a0-f864-42c6-ab87-beadf8844d53%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to