On Dec 8, 2010, at 11:09 AM, Ken Barber wrote:

> (cross posting here as I originally posted in puppet-users - I figure the 
> question is more of a dev one then for puppet-users)
> 
> Hi everyone,
> 
> I'm experimenting with converting some of my live puppet content to
> Ruby DSL and have found a few gaps I wouldn't mind some advice on. I'm
> not sure how many of you have already experimented in this arena yet.
> 
> I've already read Dan Bode's excellent blog article on the subject:
> 
> http://www.puppetlabs.com/blog/ruby-dsl/
> 
> I know the Ruby DSL is quite new - but I figured perhaps some of these
> items deserve to be tickets (or perhaps documented) and I thought I'd
> ask first :-).
Thanks for testing this.  As you say, it's still quite new, and definitely 
incomplete, but as with most things we do, I wanted to get a simple thing out 
and in the wild rather than wait for perfection before shipping.  This kind of 
feedback is exactly what we need (although of course patches are even better).
> 1. Defaults
> 
> How do I set defaults in Ruby DSL? For example what is the ruby DSL
> equivalent to this:
> 
>   Service {
>     hasstatus => true
>   }
This is one of the things I left out of my initial implementation.

You might be able to figure out how to add it by patching one of the files in 
lib/puppet/dsl.
> 2. Top scope
> 
> I notice the convenience methodology does not work at 'top scope' for
> example
> this will fail:
> 
>   file "/tmp/zzz", :content => "foo"
> 
> But this will not:
> 
>   node "default" do
>     file "/tmp/zzz", :content => "foo"
>   end
> 
> Is there a proper way to call resources without using the convenience
> methods? Or
> perhaps is there a way to define elements that reside in top scope?
I made a decision when I did this not to pollute the top namespace - both for 
cleanliness, and also for simplicity of implementation.  This has come up a few 
times, though, so it's something that I'm happy to revisit.
> 3. Class resource
> 
> I think Dan Bode already raised this as a bug:
> 
> https://projects.puppetlabs.com/issues/5236
> 
> The following returns an error 'method_missing':
> 
>   hostclass :foo do
>     notify "bar"
>   end
>   node "default" do
>     hostclass "foo", :stage => "baz"
>   end
> 
> This is because hostclass has not been defined as a convenience method
> it would seem. Just like issues 2 If someone knows
> a way to call a resource directly without requiring the convenience
> method that would be a decent enough work-around.
Hmm.  It should be, but it looks like this is failing somewhere and has been 
marked as a high priority bug. :/
> 4. exec Resource
> 
> The 'exec' resource as a convenience method is overlapping with the
> ruby 'exec'
> method. So if you do this:
> 
>   node "default" do
>     exec "ls", :command => "/bin/ls"
>   end
> 
> You get:
> 
>   can't convert Hash into String on node obelisk.usr.bob.sh
> 
> Returned from the Kernel.exec call.
You should be able to use 'create_resource :exec, ...' here.

> 5. Referencing other resources
> 
> I'm not quite clear how to reference other resources that already
> exist. This is obviously a problem for the 'require' attribute:
> 
>   node "default" do
>     package "foo", :ensure => "installed"
>     service "foo", :enable => "true", :ensure => "running", :require
> => ???
>   end
I believe the internal implementation allows you to do 'require => [:package, 
"foo"]'.  I couldn't find a reasonable syntax for this, without a lot more work 
making, e.g., Package["foo"] work, which was my ideal.
> 6. Chaining Resources
> 
> Is there a syntactical equivalent to this in Ruby DSL yet? For
> example:
> 
>   Stage[pre] -> Stage[main] -> Stage[post]
> 
> Without knowing how to solve 5 I'm kind of stuck when it comes to
> defining dependencies :-).
There isn't.

The DSL is obviously still a subset of the "full" Puppet language (ironic, 
given how small the language is).

-- 
Computers are not intelligent.  They only think they are.
---------------------------------------------------------------------
Luke Kanies  -|-   http://puppetlabs.com   -|-   +1(615)594-8199



-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To post to this group, send email to puppet-us...@googlegroups.com.
To unsubscribe from this group, send email to 
puppet-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/puppet-users?hl=en.

Reply via email to