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.