That's what I am thinking, but I took a look at 'finish' and it seems to be where the code is called to check the dependencies. Shouldn't this be a function of the catalog, not the type?
So: 1) Compile catalog 2) Run 'finish' in the types (very useful to have) 3) catalog.check_deps (or something) Trevor On Fri, Aug 24, 2012 at 11:55 AM, Luke Kanies <[email protected]> wrote: > I think 'finish' is only called when all of the resources are created and > added to the catalog, but 'initialize' is called to actually create each > resource. > > On Aug 23, 2012, at 9:57 AM, Trevor Vaughan <[email protected]> wrote: > >> 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. >> > > > -- > 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.
