Refactor #235 » 0001-Small-refactoring-of-the-media-handling-for-operatin.patch
app/controllers/unattended_controller.rb | ||
---|---|---|
end
|
||
def preseed
|
||
@preseed_path = @host.os.preseed_path @host.media
|
||
@preseed_server = @host.os.preseed_server @host.media
|
||
@preseed_path = @host.os.preseed_path @host
|
||
@preseed_server = @host.os.preseed_server @host
|
||
unattended_local "preseed"
|
||
end
|
||
app/models/media.rb | ||
---|---|---|
validates_uniqueness_of :path, :scope => :operatingsystem_id
|
||
validates_presence_of :name, :path
|
||
validates_format_of :name, :with => /\A(\S+\s?)+\Z/, :message => "can't be blank or contain trailing white spaces."
|
||
validates_format_of :path, :with => /^((http|ftp):\/\/)|\w+:\/\w+/,
|
||
:message => "Url (http:// or ftp://) or a NFS share area allowed (e.g. server:/vol/dir)"
|
||
validates_format_of :path, :with => /^(http|https|ftp|nfs):\/\//,
|
||
:message => "Only URLs with schema http://, https://, ftp:// or nfs:// are allowed (e.g. nfs://server/vol/dir)"
|
||
alias_attribute :os, :operatingsystem
|
||
before_destroy Ensure_not_used_by.new(:hosts)
|
app/views/medias/_form.html.erb | ||
---|---|---|
</p >
|
||
<small>
|
||
The path to the media, can be a URL or a valid NFS server (exclusive of the architecture).<br />
|
||
for example http://mirror.averse.net/centos/6.0/os/$arch where <b>$arch</b> will be substituted for the host actual OS architecture.
|
||
for example http://mirror.averse.net/centos/$version/os/$arch where <strong>$arch</strong> will be substituted for the host's actual OS architecture<br />
|
||
and <strong>$version</strong>, <strong>$major</strong> and <strong>$minor</strong> will be substituted for the version of the operating system.
|
||
</small>
|
||
<p>
|
||
<%= f.label :operatingsystem_id %><br />
|
lib/family.rb | ||
---|---|---|
# 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]
|
||
... | ... | |
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
|
||
... | ... | |
# 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
|
- « Previous
- 1
- 2
- 3
- 4
- Next »