summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-09-05 21:29:03 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-09-05 21:29:03 +0000
commite28250dc1d30cf9e9c13e157143e140b402c967e (patch)
tree6a0343b6165b014d89b88fe1647b61860cb5b418
parent41c90815e16dc65103c617ce56a071902ff93123 (diff)
downloadpuppet-e28250dc1d30cf9e9c13e157143e140b402c967e.tar.gz
puppet-e28250dc1d30cf9e9c13e157143e140b402c967e.tar.xz
puppet-e28250dc1d30cf9e9c13e157143e140b402c967e.zip
Adding further gentoo support -- finalized portage support, plus conf and init info for puppetd
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1564 980ebf18-57e1-0310-9a29-db15c13687c0
-rw-r--r--conf/gentoo/conf.d/puppet5
-rw-r--r--conf/gentoo/conf.d/puppetmaster8
-rw-r--r--conf/gentoo/init.d/puppet38
-rw-r--r--lib/puppet/provider/package/portage.rb42
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)