Hi Stefan,

My apologies that I did not get back sooner. What you are suggesting
yields the same results I was seeing before. Let me try to explain
better:

Using no modules (just standard puppet types), I can do this:
---
Package {
  notify => Exec["package-changed"]
}

exec { "package-changed":
  command => "/bin/true",
  refreshonly => true;
}

package { "vim-enhanced":
  ensure => installed;
}
---

If the above code happens to install vim-enhanced, then I will see
output like this:
---
Notice: /Stage[main]//Package[vim-enhanced]/ensure: created
Notice: /Stage[main]//Exec[package-changed]: Triggered 'refresh' from 1
events
Notice: Finished catalog run in 4.75 seconds
---

The 'Package {}' defaults are applied and the Exec gets notified.

Now, I write a simple module with a type like this:
---
Puppet::Type.newtype(:foo) do
  newparam(:title) do
    isnamevar
  end
  def eval_generate
    resources = []
    resources << Puppet::Type.type(:package).new(:title => self.title)
    resources
  end
end
---

All it does is add a new package resource via eval_generate. I execute
it using a manifest that looks like this:
---
Package {
  notify => Exec["package-changed"]
}

exec { "package-changed":
  command => "/bin/true",
  refreshonly => true;
}

foo { "vim-enhanced": }
---

It yields the following:
---
Notice: /Package[vim-enhanced]/ensure: created
Notice: Finished catalog run in 5.10 seconds
---

The Exec from the resource defaults in my current scope is not notified.
If they were, the Exec resource should have run, just like in the first
example.

I am looking for a way to generate resources from a type, and have the
resource defaults from the scope they are defined applied to them.

Any other thoughts or suggestions are most appreciated, as always.

Thanks!
- Ryan

> From: "Stefan Schulte" <stefan.schu...@taunusstein.net>
> To: puppet-users@googlegroups.com
> Sent: Wednesday, May 1, 2013 4:54:38 AM
> Subject: Re: [Puppet Users] Retrieve scoped resource defaults from class
> method in custom type
> 
> On Tue, 30 Apr 2013 15:37:11 -0700
> Ryan Uber <r...@ryanuber.com> wrote:
> 
> > [accidently sent this to puppet-dev, re-posting to puppet-users]
> > 
> > Hello puppet-users,
> > 
> > I am working on a module that provides a custom type. The type when
> > called will create new resources in the catalog using syntax like:
> > 
> > Puppet::Type.type(:file).new(:title => 'blah')
> > 
> > This works fine and the resources are added as expected. However, I am
> > unable to apply any scoped defaults to the generated resources. So
> > something like:
> > 
> > File {
> >   mode => 0750
> > }
> > 
> 
> were do you generate the resources? Puppet already has a method
> "eval_generate" that every type can implement and which has to return
> an array of generated resources (that's how puppet generates implicit
> file resource when you use `recurse`). These resources are
> automatically added to the catalog.
> 
> So e.g.
> 
>     Puppet::Type.newtype(:foo) do
>       newparam(:name)
>       [...]
>       def eval_generate
>         resources = []
>         resources << Puppet::Type.type(:file).new(:title => 'blah')
>         resources
>       end
>     end
> 
> I played with it a little bit (wanted to make a proof of concept for
> a `dirtree` type that simulates the behaviour of `mkdir -p`) but I hit
> problems because autorequirements of generated resources do not seem to
> work (e.g. You have File['/foo'] in your puppet manifest and your
> custom type generates a resource File['/foo/bar'] there a no automatic
> dependencies so File['/foo/bar'] may be applied before File['/foo'] but
> maybe I am wrong about that one.
> 
> -Stefan
> 
> -- 
> 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 puppet-users+unsubscr...@googlegroups.com.
> To post to this group, send email to puppet-users@googlegroups.com.
> Visit this group at http://groups.google.com/group/puppet-users?hl=en.
> For more options, visit https://groups.google.com/groups/opt_out.
> 
> 

-- 
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 puppet-users+unsubscr...@googlegroups.com.
To post to this group, send email to puppet-users@googlegroups.com.
Visit this group at http://groups.google.com/group/puppet-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to