diff options
author | Nan Liu <nan@puppetlabs.com> | 2010-09-16 23:13:31 -0700 |
---|---|---|
committer | Nick Lewis <nick@puppetlabs.com> | 2010-11-11 13:49:05 -0800 |
commit | 2b772f761e151c3c2be41e1688e9af9a22d73dd0 (patch) | |
tree | 6c9f7908c0bb9f32c3cad3cc50db84121f731bfc /lib/puppet | |
parent | 275a224ee245577c4213b3a21bf1e98301740a4e (diff) | |
download | puppet-2b772f761e151c3c2be41e1688e9af9a22d73dd0.tar.gz puppet-2b772f761e151c3c2be41e1688e9af9a22d73dd0.tar.xz puppet-2b772f761e151c3c2be41e1688e9af9a22d73dd0.zip |
(#3747) Implement upstart provider
Diffstat (limited to 'lib/puppet')
-rwxr-xr-x | lib/puppet/provider/service/upstart.rb | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/lib/puppet/provider/service/upstart.rb b/lib/puppet/provider/service/upstart.rb new file mode 100755 index 000000000..915de4c0b --- /dev/null +++ b/lib/puppet/provider/service/upstart.rb @@ -0,0 +1,76 @@ +Puppet::Type.type(:service).provide :upstart, :parent => :init do + desc "Ubuntu service manager upstart. + + This provider manages upstart jobs which have replaced initd. + + See: + * http://upstart.ubuntu.com/ + " + # Note: I did not set default for Ubuntu + # defaultfor :operatingsystem => :ubuntu + + # confine to :ubuntu for now because I haven't tested on other platforms + confine :operatingsystem => :ubuntu #[:ubuntu, :fedora, :debian] + + commands :start => "/sbin/start", + :stop => "/sbin/stop", + :restart => "/sbin/restart", + :status_exec => "/sbin/status", + :initctl => "/sbin/initctl" + + # upstart developer haven't implemented initctl enable/disable yet: + # http://www.linuxplanet.com/linuxplanet/tutorials/7033/2/ + # has_feature :enableable + + def self.instances + instances = [] + execpipe("#{command(:initctl)} list") { |process| + process.each { |line| + # needs special handling of services such as network-interface: + # initctl list: + # network-interface (lo) start/running + # network-interface (eth0) start/running + # network-interface-security start/running + name = \ + if matcher = line.match(/^(network-interface)\s\(([^\)]+)\)/) + "#{matcher[1]} INTERFACE=#{matcher[2]}" + else + line.split.first + end + instances << new(:name => name) #, :path => "/etc/init/#{name}.conf") + } + } + instances + end + + def startcmd + [command(:start), @resource[:name]] + end + + def stopcmd + [command(:stop), @resource[:name]] + end + + def restartcmd + (@resource[:hasrestart] == :true) && [command(:restart), @resource[:name]] + end + + def status + # allows user override of status command + if @resource[:status] + ucommand(:status, false) + if $?.exitstatus == 0 + return :running + else + return :stopped + end + else + output = status_exec(@resource[:name].split) + if (! $?.nil?) && (output =~ /start\//) + return :running + else + return :stopped + end + end + end +end |