From 98bf0e8ca08c22df34cce90c8e4c1b0d36b96c7a Mon Sep 17 00:00:00 2001 From: Ben Roberts Date: Mon, 23 May 2011 08:03:33 +0100 Subject: [PATCH] Promote Sabayon to a fully supported OS with package and service resource support --- lib/facter/operatingsystem.rb | 13 +++++++ lib/puppet/provider/package/entropy.rb | 6 ++-- lib/puppet/provider/service/gentoo.rb | 50 ++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 lib/facter/operatingsystem.rb create mode 100644 lib/puppet/provider/service/gentoo.rb diff --git a/lib/facter/operatingsystem.rb b/lib/facter/operatingsystem.rb new file mode 100644 index 0000000..8af8cd3 --- /dev/null +++ b/lib/facter/operatingsystem.rb @@ -0,0 +1,13 @@ +require 'facter/lsb' + +Facter.add(:operatingsystem) do + confine :kernel => :linux + confine :has_entropy => true + + setcode do + if FileTest.exists?("/etc/sabayon-release") + "Sabayon" + end + end +end + diff --git a/lib/puppet/provider/package/entropy.rb b/lib/puppet/provider/package/entropy.rb index 0bbe688..20e330f 100644 --- a/lib/puppet/provider/package/entropy.rb +++ b/lib/puppet/provider/package/entropy.rb @@ -11,9 +11,9 @@ Puppet::Type.type(:package).provide :entropy, :parent => Puppet::Provider::Packa commands :equo => "/usr/bin/equo" - #confine :operatingsystem => [ :gentoo, :sabayon ] - - defaultfor :has_entropy => true + confine :operatingsystem => :sabayon + + defaultfor :operatingsystem => :sabayon def self.instances result_format = /^(\S+)\/(\S+)-([\.\d]+(?:_(?:alpha|beta|pre|rc|p)\d+)?(?:-r\d+)?)$/ diff --git a/lib/puppet/provider/service/gentoo.rb b/lib/puppet/provider/service/gentoo.rb new file mode 100644 index 0000000..b667b4b --- /dev/null +++ b/lib/puppet/provider/service/gentoo.rb @@ -0,0 +1,50 @@ +# Manage gentoo services. Start/stop is the same as InitSvc, but enable/disable +# is special. +Puppet::Type.type(:service).provide :gentoo, :parent => :init do + desc "Gentoo's form of `init`-style service management. + + Uses `rc-update` for service enabling and disabling. + + " + + commands :update => "/sbin/rc-update" + + confine :operatingsystem => [ :gentoo, :sabayon ] + + defaultfor :operatingsystem => [ :gentoo, :sabayon ] + + def self.defpath + superclass.defpath + end + + def disable + output = update :del, @resource[:name], :default + rescue Puppet::ExecutionFailure + raise Puppet::Error, "Could not disable #{self.name}: #{output}" + end + + def enabled? + begin + output = update :show + rescue Puppet::ExecutionFailure + return :false + end + + line = output.split(/\n/).find { |l| l.include?(@resource[:name]) } + + return :false unless line + + # If it's enabled then it will print output showing service | runlevel + if output =~ /^\s*#{@resource[:name]}\s*\|\s*(boot|default)/ + return :true + else + return :false + end + end + + def enable + output = update :add, @resource[:name], :default + rescue Puppet::ExecutionFailure + raise Puppet::Error, "Could not enable #{self.name}: #{output}" + end +end