diff options
-rw-r--r-- | conf/gentoo/conf.d/puppet | 5 | ||||
-rw-r--r-- | conf/gentoo/conf.d/puppetmaster | 8 | ||||
-rw-r--r-- | conf/gentoo/init.d/puppet | 38 | ||||
-rw-r--r-- | lib/puppet/provider/package/portage.rb | 42 |
4 files changed, 66 insertions, 27 deletions
diff --git a/conf/gentoo/conf.d/puppet b/conf/gentoo/conf.d/puppet new file mode 100644 index 000000000..e7e62574b --- /dev/null +++ b/conf/gentoo/conf.d/puppet @@ -0,0 +1,5 @@ +# Location of PID files +PUPPET_PID_DIR="/var/run/puppet" + +# You may specify other parameters to the puppet client here +#PUPPET_EXTRA_OPTS="" diff --git a/conf/gentoo/conf.d/puppetmaster b/conf/gentoo/conf.d/puppetmaster index 988551ebb..462ad1921 100644 --- a/conf/gentoo/conf.d/puppetmaster +++ b/conf/gentoo/conf.d/puppetmaster @@ -1,12 +1,12 @@ # Location of PID files -PUPPETMASTER_PID_DIR=/var/run/puppet +PUPPETMASTER_PID_DIR="/var/run/puppet" # Location of the main manifest -#PUPPETMASTER_MANIFEST=/etc/puppet/manifests/site.pp +#PUPPETMASTER_MANIFEST="/etc/puppet/manifests/site.pp" # Where to log general messages to. # Specify syslog to send log messages to the system log. -#PUPPETMASTER_LOG=syslog +#PUPPETMASTER_LOG="syslog" # You may specify other parameters to the puppetmaster here -#PUPPETMASTER_EXTRA_OPTS=--noca +#PUPPETMASTER_EXTRA_OPTS="--noca" diff --git a/conf/gentoo/init.d/puppet b/conf/gentoo/init.d/puppet new file mode 100644 index 000000000..2fcd16943 --- /dev/null +++ b/conf/gentoo/init.d/puppet @@ -0,0 +1,38 @@ +#!/sbin/runscript +# Copyright 1999-2004 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header$ + +depend() { + need net + use dns logger +} + +checkconfig() { + if [[ ! -d "${PUPPET_PID_DIR}" ]] ; then + eerror "Please make sure PUPPET_PID_DIR is defined and points to a existing directory" + return 1 + fi + + return 0 +} + +start() { + checkconfig || return $? + + local options="" + [[ -n "${PUPPET_EXTRA_OPTS}" ]] && options="${options} ${PUPPET_EXTRA_OPTS}" + + ebegin "Starting puppet" + start-stop-daemon --start --quiet --exec /usr/bin/puppetd -- ${options} + eend $? "Failed to start puppet" +} + +stop() { + ebegin "Stopping puppet" + start-stop-daemon --stop --quiet --pidfile ${PUPPET_PID_DIR}/puppetd.pid + local ret=$? + eend ${ret} "Failed to stop puppet" + rm -f ${PUPPET_PID_DIR}/puppetd.pid + return ${ret} +} diff --git a/lib/puppet/provider/package/portage.rb b/lib/puppet/provider/package/portage.rb index dc9b3890f..ed701ecd6 100644 --- a/lib/puppet/provider/package/portage.rb +++ b/lib/puppet/provider/package/portage.rb @@ -1,15 +1,15 @@ Puppet::Type.type(:package).provide :portage do desc "Provides packaging support for Gentoo's portage system." - commands :emerge => "emerge", :eix => "eix" + commands :emerge => "/usr/bin/emerge", :eix => "/usr/bin/eix" defaultfor :operatingsystem => :gentoo def self.list search_format = /(\S+) (\S+) \[(.*)\] \[(\S*)\] ([\S]*) (.*)/ - result_fields = [:category, :name, :version, :version_available, + result_fields = [:category, :name, :ensure, :version_available, :vendor, :description] - command = "#{command(:eix)} --format \"{<installedversions>}<category> <name> [<installedversions>] [<best>] <homepage> <description>{}\"" + command = "#{command(:eix)} --format \"{installedversions}<category> <name> [<installedversions>] [<best>] <homepage> <description>{}\"" begin search_output = execute( command ) @@ -19,8 +19,8 @@ Puppet::Type.type(:package).provide :portage do match = search_format.match( search_result ) if( match ) - package = {:ensure => :present} - result_fields.zip( match.captures ) { |field, value| package[field] = value } + package = {} + result_fields.zip( match.captures ) { |field, value| package[field] = value unless value.empty? } if self.is_a? Puppet::Type and type = @model[:type] package[:type] = type elsif self.is_a? Module and self.respond_to? :name @@ -28,9 +28,7 @@ Puppet::Type.type(:package).provide :portage do else raise Puppet::DevError, "Cannot determine package type" end - if package[:version] - package[:version] = package[:version].split.last - end + package[:ensure] = package[:ensure].split.last packages.push( Puppet.type(:package).installedpkg(package) ) end @@ -43,11 +41,11 @@ Puppet::Type.type(:package).provide :portage do end def install - if @model[:version] && @model.should( :ensure ) != :latest - # We must install a specific version - package_name = "=#{@model[:name]}-#{@model[:version]}" + if @model.should( :ensure ) == :present || @model.should( :ensure ) == :latest + package_name = "#{@model[:category]}/#{@model[:name]}" else - package_name = @model[:name] + # We must install a specific version + package_name = "=#{@model[:category]}/#{@model[:name]}-#{@model.should( :ensure )}" end command = "EMERGE_DEFAULT_OPTS=\"\" #{command(:emerge)} #{package_name}" begin @@ -58,12 +56,7 @@ Puppet::Type.type(:package).provide :portage do end def uninstall - if @model[:version] - # We must uninstall a specific version - package_name = "=#{@model[:name]}-#{@model[:version]}" - else - package_name = @model[:name] - end + package_name = "#{@model[:category]}/#{@model[:name]}" command ="EMERGE_DEFAULT_OPTS=\"\" #{command(:emerge)} --unmerge #{package_name}" begin output = execute( command ) @@ -78,7 +71,7 @@ Puppet::Type.type(:package).provide :portage do def query search_format = /(\S+) (\S+) \[(.*)\] \[(\S*)\] ([\S]*) (.*)/ - result_fields = [:category, :name, :version, :version_available, :vendor, :description] + result_fields = [:category, :name, :ensure, :version_available, :vendor, :description] search_field = @model[:name].include?( '/' ) ? "--category-name" : "--name" command = "#{command(:eix)} --format \"<category> <name> [<installedversions>] [<best>] <homepage> <description>\" --exact #{search_field} #{@model[:name]}" @@ -93,19 +86,22 @@ Puppet::Type.type(:package).provide :portage do if( match ) package = {} result_fields.zip( match.captures ) { |field, value| package[field] = value unless value.empty? } - package[:ensure] = package[:version] ? :present : :absent - package[:version] = package[:version].split.last if package[:version] + if package[:ensure] + package[:ensure] = package[:ensure].split.last + else + package[:ensure] = :absent + end packages << package end end case packages.size when 0 - return nil + raise Puppet::PackageError.new( "No package found with the specified name [#{@model[:name]}]" ) when 1 return packages[0] else - self.fail "More than one package with the specified name [#{@model[:name]}], please use category/name to disambiguate" + raise Puppet::PackageError.new( "More than one package with the specified name [#{@model[:name]}], please use category/name to disambiguate" ) end rescue Puppet::ExecutionFailure => detail raise Puppet::PackageError.new(detail) |