Last night I was thinking about writing scripts to manage services, packages etc in a heterogeneous environment. This is hard because the operating systems all behave differently.
This is of course a problem that Puppet solves with it’s providers system, after some chatting with Luke on IRC I now have a pretty nice solution.
Assuming you don’t mind shell scripting in Ruby here’s a pretty decent bit of Ruby to manage a service on many different environments.
require 'puppet' service = ARGV.shift action = ARGV.shift ARGV.length > 0 ? hasstatus = true : hasstatus = false begin svc = Puppet::Type.type(:service).new(:name => service, :hasstatus => hasstatus).provider svc.send action puts("#{service} #{action} status: #{svc.status}") rescue Exception => e puts("Could not #{action} service #{service}: #{e}") end
# service.rb httpd stop true httpd stop status: stopped # service.rb httpd start true httpd start status: running
You’d probably want to put in support for the pattern parameter to keep certain broken Operating Systems happy, but this is pretty nice and platform independent.