Skip to content

Commit

Permalink
Fixes #27604 - added Fedora|Redhat CoreOS and IM
Browse files Browse the repository at this point in the history
  • Loading branch information
lzap authored and ezr-ondrej committed May 7, 2021
1 parent 6251a8d commit b1f7348
Show file tree
Hide file tree
Showing 18 changed files with 341 additions and 77 deletions.
2 changes: 1 addition & 1 deletion app/assets/javascripts/application.js
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ function filter_by_level(item) {
}
function show_release(element) {
var os_family = $(element).val();
if ($.inArray(os_family, ['Debian', 'Solaris', 'Coreos']) != -1) {
if ($.inArray(os_family, ['Debian', 'Solaris', 'Coreos', 'Fcos', 'Rhcos']) != -1) {
$('#release_name').show();
} else {
$('#release_name').hide();
Expand Down
6 changes: 4 additions & 2 deletions app/helpers/operatingsystems_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@ def icon(record, opts = {})
return "" if record.blank? || record.name.blank?
size = opts[:size] ||= '16x16'
name = case record.name.downcase
when /fedora/
when /fedora|fcos|coreos/i
"fedora"
when /redhat|rhcos/i
"redhat"
when /ubuntu/
"ubuntu"
when /solaris|sunos/
Expand Down Expand Up @@ -45,7 +47,7 @@ def icon(record, opts = {})
"stub/firebrick-h"
when /oraclelinux/
"stub/firebrick-o"
when /coreos|containerlinux|container linux/
when /flatcar|containerlinux|container linux/
"coreos"
when /flatcar/
"stub/darkblue-f"
Expand Down
24 changes: 21 additions & 3 deletions app/models/operatingsystem.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ class Operatingsystem < ApplicationRecord
accepts_nested_attributes_for :os_default_templates, :allow_destroy => true,
:reject_if => :reject_empty_provisioning_template

validates :major, :numericality => {:greater_than_or_equal_to => 0}, :presence => { :message => N_("Operating System version is required") }
validates :major, numericality: true, presence: { message: N_("Operating System version is required") }
validates :minor, format: { with: /\A\d+(\.\d+)*\z/, message: "Operating System minor version must be in N or N.N format" }, allow_blank: true
has_many :os_parameters, :dependent => :destroy, :foreign_key => :reference_id, :inverse_of => :operatingsystem
has_many :parameters, :dependent => :destroy, :foreign_key => :reference_id, :class_name => "OsParameter"
accepts_nested_attributes_for :os_parameters, :allow_destroy => true
Expand All @@ -32,7 +33,6 @@ class Operatingsystem < ApplicationRecord
include ParameterSearch

attr_name :to_label
validates :minor, :numericality => {:greater_than_or_equal_to => 0}, :allow_nil => true, :allow_blank => true
validates :name, :presence => true, :no_whitespace => true,
:uniqueness => { :scope => [:major, :minor], :message => N_("Operating system version already exists")}
validates :description, :uniqueness => true, :allow_blank => true
Expand Down Expand Up @@ -65,6 +65,8 @@ class Operatingsystem < ApplicationRecord
'Altlinux' => %r{Altlinux}i,
'Archlinux' => %r{Archlinux}i,
'Coreos' => %r{CoreOS|Flatcar}i,
'Fcos' => %r{FCOS|FedoraCoreOS|FedoraCOS}i,
'Rhcos' => %r{RHCOS|RedHatCoreOS|RedHatCOS}i,
'Rancheros' => %r{RancherOS}i,
'Gentoo' => %r{Gentoo}i,
'Solaris' => %r{Solaris}i,
Expand Down Expand Up @@ -269,6 +271,21 @@ def use_release_name?
false
end

# Helper text shown next to major version (do not use i18n)
def major_version_help
'7'
end

# Helper text shown next to minor version (do not use i18n)
def minor_version_help
'e.g. 0 or 6.1810 (CentOS scheme)'
end

# Helper text shown next to release name (do not use i18n)
def release_name_help
'karmic, lucid, hw0910...'
end

def image_extension
raise ::Foreman::Exception.new(N_("Attempting to construct an operating system image filename but %s cannot be built from an image"), family)
end
Expand Down Expand Up @@ -319,6 +336,7 @@ def pxe_file_names(medium_provider)

def boot_file_sources(medium_provider, &block)
@boot_file_sources ||= pxe_file_names(medium_provider).transform_values do |img|
img = medium_provider.interpolate_vars(img)
"#{medium_provider.medium_uri(pxedir(medium_provider), &block)}/#{img}"
end
end
Expand Down Expand Up @@ -348,7 +366,7 @@ def set_title
end

def stringify_major_and_minor
# Cast major and minor to strings. see db/schema.rb around lines 560-562 (Or https://github.com/theforeman/foreman/blob/develop/db/migrate/20090720134126_create_operatingsystems.rb#L4).
# Cast major and minor to strings.
# Need to ensure type when using major and minor as scopes for name uniqueness.
self.major = major.to_s
self.minor = minor.to_s
Expand Down
29 changes: 28 additions & 1 deletion app/models/operatingsystems/coreos.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
class Coreos < Operatingsystem
PXEFILES = {:kernel => 'coreos_production_pxe.vmlinuz', :initrd => 'coreos_production_pxe_image.cpio.gz'}
#
# Original CoreOS example PXE URLs:
# https://stable-temporary-archive.release.core-os.net/amd64-usr/2512.3.0/coreos_production_pxe.vmlinuz
# https://stable-temporary-archive.release.core-os.net/amd64-usr/2512.3.0/coreos_production_pxe_image.cpio.gz
#
# Flatcar example PXE URLs:
# https://stable.release.flatcar-linux.net/amd64-usr/current/flatcar_production_image.vmlinuz
# https://stable.release.flatcar-linux.net/amd64-usr/current/flatcar_production_pxe_image.cpio.gz
#
PXEFILES = {
kernel: 'coreos_production_pxe.vmlinuz',
initrd: 'coreos_production_pxe_image.cpio.gz',
}

def pxe_type
'coreos'
Expand Down Expand Up @@ -40,6 +52,21 @@ def use_release_name?
true
end

# Helper text shown next to major version (do not use i18n)
def major_version_help
'2512.3'
end

# Helper text shown next to minor version (do not use i18n)
def minor_version_help
'0'
end

# Helper text shown next to release name (do not use i18n)
def release_name_help
'stable, beta, alpha, edge'
end

private

# tries to guess if this a flatcar or original coreos container linux
Expand Down
5 changes: 5 additions & 0 deletions app/models/operatingsystems/debian.rb
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ def use_release_name?
true
end

# Helper text shown next to release name (do not use i18n)
def release_name_help
'bullseye, focal, buster, bionic, stretch, xenial...'
end

def display_family
"Debian"
end
Expand Down
47 changes: 47 additions & 0 deletions app/models/operatingsystems/fcos.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
class Fcos < Operatingsystem
#
# Example PXE URLs:
# https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/32.20200907.3.0/x86_64/fedora-coreos-32.20200907.3.0-live-kernel-x86_64
# https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/32.20200907.3.0/x86_64/fedora-coreos-32.20200907.3.0-live-initramfs.x86_64.img
#
PXEFILES = {
kernel: 'fedora-coreos-$major.$minor-live-kernel-$arch',
initrd: 'fedora-coreos-$major.$minor-live-initramfs.$arch.img',
}

def pxe_type
'fcos'
end

def bootfile(medium_provider, type)
medium_provider.interpolate_vars(super).to_s
end

def pxedir(medium_provider = nil)
medium_provider.interpolate_vars('prod/streams/$release/builds/$major.$minor/$arch').to_s
end

def display_family
'Fedora CoreOS'
end

# Does this OS family use release_name in its naming scheme
def use_release_name?
true
end

# Helper text shown next to major version (do not use i18n)
def major_version_help
'32'
end

# Helper text shown next to minor version (do not use i18n)
def minor_version_help
'20200907.3.0'
end

# Helper text shown next to release name (do not use i18n)
def release_name_help
'stable, testing, next'
end
end
5 changes: 5 additions & 0 deletions app/models/operatingsystems/nxos.rb
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,11 @@ def use_release_name?
true
end

# Helper text shown next to release name
def release_name_help
_('auxiliary field')
end

# release_name can have upper case letters and we want to keep it that way
def downcase_release_name
release_name
Expand Down
5 changes: 5 additions & 0 deletions app/models/operatingsystems/redhat.rb
Original file line number Diff line number Diff line change
Expand Up @@ -67,4 +67,9 @@ def pxe_kernel_options(params)
options << "modprobe.blacklist=#{params['blacklist'].delete(' ')}" if params['blacklist']
options
end

# Helper text shown next to minor version (do not use i18n)
def minor_version_help
'0, 6.1810'
end
end
50 changes: 50 additions & 0 deletions app/models/operatingsystems/rhcos.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
class Rhcos < Operatingsystem
#
# Example PXE URLs:
# http://mirror.openshift.com/pub/openshift-v4/x86_64/dependencies/rhcos/4.5/4.5.6/rhcos-installer-kernel-x86_64
# http://mirror.openshift.com/pub/openshift-v4/x86_64/dependencies/rhcos/4.5/4.5.6/rhcos-installer-initramfs.x86_64.img
#
# Version 4.6+ changed:
# http://mirror.openshift.com/pub/openshift-v4/x86_64/dependencies/rhcos/4.6/4.6.1/rhcos-live-initramfs.x86_64.img
# http://mirror.openshift.com/pub/openshift-v4/x86_64/dependencies/rhcos/4.6/4.6.1/rhcos-live-kernel-x86_64
PXEFILES = {
kernel: 'rhcos-live-kernel-$arch',
initrd: 'rhcos-live-initramfs.$arch.img',
}

def pxe_type
'rhcos'
end

def bootfile(medium_provider, type)
medium_provider.interpolate_vars(super).to_s
end

def pxedir(medium_provider = nil)
medium_provider.interpolate_vars('pub/openshift-v$major/$arch/dependencies/rhcos/$major.$minor/$major.$minor.$release').to_s
end

def display_family
'Red Hat CoreOS'
end

# Does this OS family use release_name in its naming scheme
def use_release_name?
true
end

# Helper text shown next to major version (do not use i18n)
def major_version_help
'4 (*X*.Y.Z)'
end

# Helper text shown next to minor version (do not use i18n)
def minor_version_help
'5 (X.*Y*.Z)'
end

# Helper text shown next to release name (do not use i18n)
def release_name_help
'6 (X.Y.*Z*)'
end
end
5 changes: 5 additions & 0 deletions app/models/operatingsystems/solaris.rb
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,11 @@ def use_release_name?
true
end

# Helper text shown next to release name
def release_name_help
_('auxiliary field')
end

def jumpstart_params(host, vendor)
medium_provider = Foreman::Plugin.medium_providers_registry.find_provider(host)
# root server and install server are always the same under Foreman
Expand Down
6 changes: 3 additions & 3 deletions app/views/operatingsystems/_form.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@
<div class="tab-pane active" id="primary">

<%= text_f f, :name, :help_inline => _("OS name from facter; e.g. RedHat") %>
<%= text_f f, :major, :help_inline => _("OS major version from facter; e.g. 7"), :class => "col-md-2" %>
<%= text_f f, :minor, :help_inline => _("OS minor version from facter; e.g. 0 or 6.1810 (CentOS scheme)"), :class => "col-md-2" %>
<%= text_f f, :major, :help_inline => _("OS major version from facter; e.g. %s") % @operatingsystem.major_version_help, :class => "col-md-2" %>
<%= text_f f, :minor, :help_inline => _("OS minor version from facter; e.g. %s") % @operatingsystem.minor_version_help, :class => "col-md-2" %>
<%= text_f f, :description, :help_inline => _("OS friendly name; e.g. RHEL 6.5") %>
<%= select_f f, :family, Operatingsystem.families_as_collection, :value, :name, { :include_blank => _("Choose a family") }, { :label => _("Family"), :onchange => 'show_release(this);' } %>
<div id="release_name" <%= display?(!@operatingsystem.use_release_name?) %>>
<%= text_f f, :release_name, :help_inline => _("e.g. karmic, lucid, hw0910 etc") %>
<%= text_f f, :release_name, :help_inline => @operatingsystem.release_name_help %>
</div>
<%= select_f f, :password_hash, PasswordCrypt::ALGORITHMS.keys, :to_s, :to_s, {}, { :label => _("Root Password Hash"), :help_inline => _("Hash function to use. Change takes effect for new or updated hosts.")} %>
<%= multiple_checkboxes f, :architectures, @operatingsystem, Architecture, :label => _("Architectures") %>
Expand Down
82 changes: 70 additions & 12 deletions db/seeds.d/100-installation_media.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,76 @@
# Installation media: default mirrors
Medium.without_auditing do
[
{ :name => "CentOS 7 mirror", :os_family => "Redhat", :path => "http://mirror.centos.org/centos/$major/os/$arch" },
{ :name => "CentOS 8 mirror", :os_family => "Redhat", :path => "http://mirror.centos.org/centos/$major/BaseOS/$arch/kickstart" },
{ :name => "CentOS Stream", :os_family => "Redhat", :path => "http://mirror.centos.org/centos/$major-stream/BaseOS/$arch/os" },
{ :name => "Debian mirror", :os_family => "Debian", :path => "http://ftp.debian.org/debian" },
{ :name => "Fedora mirror", :os_family => "Redhat", :path => "http://dl.fedoraproject.org/pub/fedora/linux/releases/$major/Server/$arch/os/" },
{ :name => "Fedora Atomic mirror", :os_family => "Redhat", :path => "http://dl.fedoraproject.org/pub/alt/atomic/stable/Cloud_Atomic/$arch/os/" },
{ :name => "FreeBSD mirror", :os_family => "Freebsd", :path => "http://ftp.freebsd.org/pub/FreeBSD/releases/$arch/$version-RELEASE/" },
{ :name => "OpenSUSE mirror", :os_family => "Suse", :path => "http://download.opensuse.org/distribution/leap/$version/repo/oss", :operatingsystems => os_suse },
{ :name => "Ubuntu mirror", :os_family => "Debian", :path => "http://archive.ubuntu.com/ubuntu" },
{ :name => "CoreOS mirror", :os_family => "Coreos", :path => "http://$release.release.core-os.net" },
{ :name => "Flatcar mirror", :os_family => "Coreos", :path => "http://$release.release.flatcar-linux.net" },
{ :name => "RancherOS mirror", :os_family => "Rancheros", :path => "https://github.com/rancher/os/releases/download/v$version" },
{
:name => "CentOS 7 mirror",
:os_family => "Redhat",
:path => "http://mirror.centos.org/centos/$major/os/$arch",
},
{
:name => "CentOS 8 mirror",
:os_family => "Redhat",
:path => "http://mirror.centos.org/centos/$major/BaseOS/$arch/kickstart",
},
{
:name => "CentOS Stream",
:os_family => "Redhat",
:path => "http://mirror.centos.org/centos/$major-stream/BaseOS/$arch/os",
},
{
:name => "Debian mirror",
:os_family => "Debian",
:path => "http://ftp.debian.org/debian",
},
{
:name => "Fedora mirror",
:os_family => "Redhat",
:path => "http://dl.fedoraproject.org/pub/fedora/linux/releases/$major/Server/$arch/os/",
},
{
:name => "Fedora Atomic mirror",
:os_family => "Redhat",
:path => "http://dl.fedoraproject.org/pub/alt/atomic/stable/Cloud_Atomic/$arch/os/",
},
{
:name => "FreeBSD mirror",
:os_family => "Freebsd",
:path => "http://ftp.freebsd.org/pub/FreeBSD/releases/$arch/$version-RELEASE/",
},
{
:name => "OpenSUSE mirror",
:os_family => "Suse",
:path => "http://download.opensuse.org/distribution/leap/$version/repo/oss", :operatingsystems => os_suse
},
{
:name => "Ubuntu mirror",
:os_family => "Debian",
:path => "http://archive.ubuntu.com/ubuntu",
},
{
:name => "RancherOS mirror",
:os_family => "Rancheros",
:path => "https://github.com/rancher/os/releases/download/v$version",
},
{
:name => "CoreOS mirror",
:os_family => "Coreos",
:path => "http://$release-temporary-archive.release.core-os.net",
},
{
:name => "Flatcar mirror",
:os_family => "Coreos",
:path => "http://$release.release.flatcar-linux.net",
},
{
:name => "Fedora CoreOS mirror",
:os_family => "Fcos",
:path => "https://builds.coreos.fedoraproject.org",
},
{
:name => "Red Hat CoreOS mirror",
:os_family => "Rhcos",
:path => "http://mirror.openshift.com",
},
].each do |input|
next if Medium.unscoped.where(['name = ? OR path = ?', input[:name], input[:path]]).any?
next if SeedHelper.audit_modified? Medium, input[:name]
Expand Down
2 changes: 1 addition & 1 deletion lib/foreman/renderer/scope/variables/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def load_variables_base
@template_url = params['url']
end

%w(coreos aif memdisk ZTP).each do |name|
%w(coreos fcos rhcos aif memdisk ZTP).each do |name|
define_method("#{name}_attributes") do
@mediapath = mediumpath(@medium_provider) if medium
end
Expand Down
Loading

0 comments on commit b1f7348

Please sign in to comment.