From c9a97b57a5a94de9b21ce5a22f4c4967263d1811 Mon Sep 17 00:00:00 2001
From: Jochen Schalanda
<%= f.label :operatingsystem_id %>
diff --git a/lib/family.rb b/lib/family.rb
index f5f25cb..d10a8b2 100644
--- a/lib/family.rb
+++ b/lib/family.rb
@@ -1,6 +1,8 @@
# Adds operatingsystem family behaviour to the Operatingsystem class
# The variant is calculated at run-time
require 'ostruct'
+require 'uri'
+
module Family
# NEVER, EVER reorder this list. Additions are allowed but offsets are encoded in the database
FAMILIES = [:Debian, :RedHat, :Solaris]
@@ -12,16 +14,23 @@ module Family
FAMILIES.map{|e| OpenStruct.new(:name => e, :value => FAMILIES.index(e)) }
end
+ def media_uri host
+ URI.parse(host.media.path.gsub('$arch',host.architecture.name).
+ gsub('$major', host.os.major).
+ gsub('$minor', host.os.minor).
+ gsub('$version', [ host.os.major, host.os.minor ].compact.join('.'))
+ ).normalize
+ end
+
module Debian
include Family
- def preseed_server media
- media.path.match('^(\w+):\/\/((\w|\.)+)((\w|\/)+)$')[2]
+ def preseed_server host
+ media_uri(host).select(:host, :port).compact.join(':')
end
- #TODO: rethink of a more generic way
- def preseed_path media
- media.path.match('^(\w+):\/\/((\w|\.)+)((\w|\/)+)$')[4]
+ def preseed_path host
+ media_uri(host).select(:path, :query).compact.join('?')
end
end
@@ -30,11 +39,18 @@ module Family
# outputs kickstart installation media based on the media type (NFS or URL)
# it also convert the $arch string to the current host architecture
def mediapath host
- server, dir = host.media.path.split(":")
- dir.gsub!('$arch',host.architecture.name)
+ uri = media_uri(host)
+ server = uri.select(:host, :port).compact.join(':')
+ dir = uri.select(:path, :query).compact.join('?')
- return server =~ /^(h|f)t*p$/ ? "url --url #{server+":"+dir}" : "nfs --server #{server} --dir #{dir}"
+ case uri.scheme
+ when 'http', 'https', 'ftp'
+ "url --url #{uri.to_s}"
+ else
+ "nfs --server #{server} --dir #{dir}"
+ end
end
+
def epel arch
["4","5"].include?(major) ? "su -c 'rpm -Uvh http://download.fedora.redhat.com/pub/epel/#{major}/#{arch}/epel-release-#{to_version}.noarch.rpm'" : ""
end
--
1.6.3.3