This is what's confusing me most certainly. If I add a statement in the 'initialize' define that lists a count of the items in the catalog, it increases *every time*.
However, in the 'finish' define, it is static. Why doesn't it know about the entire catalog, and why does catalog injection not work consistently in both places? I think you answered enough of my question for me to muddle through though. I'll take a look at generate. Thanks, Trevor On Tue, Aug 21, 2012 at 7:55 PM, Luke Kanies <[email protected]> wrote: > Ok, not sure how much I can help, but I'll try. > > First, fair warning: This is a messy part of the code that we're trying to > get into shape, but it's got more rough spots than other parts. > > Ok, you're clearly having trouble with the difference between compile time > and run time. > > Basically anything involving Puppet::Type has to be at run time (that is, on > the client, when the compile is completely done). Thus, it looks like > everything here is happening at run time, and none of it is at parse time. > > Thus, you should be able to control any order issues through relationships. > > It *looks* like you should be able to do what you want through a combination > of autorequire and generate. > > Use 'autorequire' so that dependencies are set up for you as automatically as > possible. > > For any actual creation of resources, use a generate method. It looks like > the 'create_default_build' method should be called from that, but note that > 'generate' should return resources, not directly add them to the catalog (see > transaction.rb for how it's used; the generate_additional_resources method). > I think there are a couple of examples shipped with Puppet, although probably > a bit simplistic, or too complicated, as in file.rb's eval_generate method. > > Note that 'generate' is called recursively. > > I *think* 'finish' is called in graph order, so this should all just work. > > I'm not sure about where you should be calling purge_unknown_fragments, > though. Maybe in the provider's prefetch method? > > On Aug 21, 2012, at 11:46 AM, Trevor Vaughan <[email protected]> wrote: > >> Sure thing! >> >> You can find an example of what I'm doing here: goo.gl/1HiZm >> >> This works just fine. >> >> However, if we have a resource that we're creating in the finish >> define that another resource in a manifest relies on, *sometimes* that >> requirement fails. >> >> So, if we created a file resource in 'create_default_build' '/tmp/foo' >> for example then, in a manifest, had a require => File['/tmp/foo'] >> statement, then this statement would work occasionally. >> >> In that light it feels like a parse order issue but I have no idea >> where or why or how to stick something in 'initialize' that says that >> this object should be coming later in the parse tree. >> >> Let me know if that's not enough and I can hack together a full example. >> >> Trevor >> >> >> >> >> On Tue, Aug 21, 2012 at 12:56 PM, Luke Kanies <[email protected]> wrote: >>> On Aug 20, 2012, at 5:21 PM, Trevor Vaughan <[email protected]> wrote: >>> >>>> So, I'm stumbling through some sort of strange code and want to know >>>> where I'm going wrong. >>>> >>>> We've been updating our concat module on Github and are now >>>> auto-generating the concat_build from the 'finish' portion of the >>>> concat_fragment type if it doesn't already exist. >>>> >>>> This *seems* reasonable, but I'm starting to see potential situations >>>> where I've been experimenting with different techniques for doing this >>>> and have found the following: >>>> >>>> 1) When auto-spawning a resource in the 'initialize' define, you don't >>>> have any guarantee as to which one will be hit first, the one in the >>>> manifest or the one spawned from the resource since the code isn't >>>> fully compiled at that time. >>>> 2) When auto-spawning a resource in the 'finish' define, you have the >>>> guarantee that the catalog has been fully compiled but, occasionally, >>>> when I try to set a require to that object, it fails stating that the >>>> object is not defined. >>>> >>>> I'm assuming that #2 is happening because the containing object has >>>> not yet completed its journey through the compiler but I'm curious if >>>> there is a way that I can tell the catalog that the auto-generated >>>> object (that will be optionally spawned in the 'finish' define) exists >>>> without completely breaking things. >>>> >>>> Any suggestions or assistance would be appreciated. >>> >>> Can you post some code? I'm not quite sure what you mean, and as you know, >>> this is complicated stuff. >>> >>> -- >>> Luke Kanies | http://about.me/lak | http://puppetlabs.com/ | +1-615-594-8199 >>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "Puppet Developers" group. >>> 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-dev?hl=en. >>> >> >> >> >> -- >> Trevor Vaughan >> Vice President, Onyx Point, Inc >> (410) 541-6699 >> [email protected] >> >> -- This account not approved for unencrypted proprietary information -- >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Puppet Developers" group. >> 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-dev?hl=en. >> > > > -- > Luke Kanies | http://about.me/lak | http://puppetlabs.com/ | +1-615-594-8199 > > -- > You received this message because you are subscribed to the Google Groups > "Puppet Developers" group. > 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-dev?hl=en. > -- Trevor Vaughan Vice President, Onyx Point, Inc (410) 541-6699 [email protected] -- This account not approved for unencrypted proprietary information -- -- You received this message because you are subscribed to the Google Groups "Puppet Developers" group. 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-dev?hl=en.
