- From: Noah Kantrowitz <
>
- To:
- Subject: [chef] Re: variable scope in LWRPs
- Date: Wed, 13 May 2015 12:59:01 +0200
You can use the Poise helpers to fix this too,
https://github.com/poise/poise#lazy-initializers. Possibly a decent generic
solution that could get back ported to Chef itself.
--Noah
On May 13, 2015, at 8:50 AM, Johannes Kleinlercher
<
>
wrote:
>
I already mentioned this very similiar problem
>
https://tickets.opscode.com/browse/CHEF-4608 at
>
http://stackoverflow.com/questions/30150766/variable-scope-in-chef-lwrps
>
>
However, I wonder if it gets fixed? I think normal chef users do not expect
>
this behaviour if they are not into ruby and there is also no documentation
>
anywhere according to this fact ...
>
>
Von meinem iPhone gesendet
>
>
Am 13.05.2015 um 06:14 schrieb John Keiser
>
<
>:
>
>
> Oh wow, that looks super familiar, we had the same problem in
>
> `Chef::Config`. I wonder if the same solution is warranted in Chef?
>
>
>
> On Tue, May 12, 2015 at 7:24 PM, Daniel DeLeo
>
> <
>
>
> wrote:
>
>
>
>
>
> On Sunday, May 10, 2015 at 12:07 PM, Johannes Kleinlercher wrote:
>
>
>
> > Hi all,
>
> > I have the following problem and I think its because I do not understand
>
> > the variable scopes in Chef LWRPs.
>
> > You can look at the cookbook at
>
> > https://github.com/jkleinlercher/chef_problems and simply test the
>
> > behaviour with kitchen.
>
> > Even though I define the following very similar resources, I recognized,
>
> > that the attribute 'colors' inherits from the previous defined
>
> > resources. The attribute 'colors' is defaulted to "['blue']" and in the
>
> > provider the element 'magenta' is added to the array. However, the
>
> > second and third resource inherit the whole array from the previous
>
> > resource. That is quite weird to me ...
>
> > Resource definition in recipes/default.rb:
>
> > chef_problems_problem1 "test1" do address "myaddress1" action :install
>
> > end chef_problems_problem1 "test2" do address "myaddress2" action
>
> > :install end chef_problems_problem1 "test3" do address "myaddress3"
>
> > action :install end
>
> > In the output of the kitchen converge you see that the variable
>
> > new_resource.colors inherits the values of the previous resources:
>
> > * chef_problems_problem1[test1] action install new_resource.colors at
>
> > the beginning: ["blue"] Values of local variables: address: myaddress1
>
> > colors: ["blue"] adding magenta to local variable colors colors after
>
> > adding magenta: ["blue", "magenta"] new_resource.colors at the end:
>
> > ["blue", "magenta"] * chef_problems_problem1[test2] action install
>
> > new_resource.colors at the beginning: ["blue", "magenta"] Values of
>
> > local variables: address: myaddress2 colors: ["blue", "magenta"] adding
>
> > magenta to local variable colors colors after adding magenta: ["blue",
>
> > "magenta", "magenta"] new_resource.colors at the end: ["blue",
>
> > "magenta", "magenta"] * chef_problems_problem1[test3] action install
>
> > new_resource.colors at the beginning: ["blue", "magenta", "magenta"]
>
> > Values of local variables: address: myaddress3 colors: ["blue",
>
> > "magenta", "magenta"] adding magenta to local variable colors colors
>
> > after adding magenta: ["blue", "magenta", "magenta", "magenta"]
>
> > new_resource.colors at the end: ["blue", "magenta", "magenta", "magenta"]
>
> > Maybe you can help me to find where the problem is here.
>
> >
>
> > best regards,
>
> > Johannes
>
>
>
> I think this is a bug. I think default value in this line:
>
> https://github.com/jkleinlercher/chef_problems/blob/fe42785a400cc154b75112b2d92f6136c60c0f08/resources/problem1.rb#L7
>
> is reused for each resource. Then when you mutate it in this line:
>
> https://github.com/jkleinlercher/chef_problems/blob/fe42785a400cc154b75112b2d92f6136c60c0f08/providers/problem1.rb#L12
>
> you’re updating the one array object.
>
>
>
> You can confirm this by printing the object_id of the array in your debug
>
> logging. You should be able to work around it by calling dup on the array,
>
> or setting the default value in an initialize method instead of via the
>
> DSL.
>
>
>
> --
>
> Daniel DeLeo
>
>
>
>
>
>
>
>
Attachment:
signature.asc
Description: Message signed with OpenPGP using GPGMail
Archive powered by MHonArc 2.6.16.