Module: Katello::Concerns::MediumExtensions::ClassMethods

Defined in:
app/models/katello/concerns/medium_extensions.rb

Instance Method Summary collapse

Instance Method Details

#construct_name(repo, _distribution) ⇒ Object



54
55
56
57
58
59
60
61
62
# File 'app/models/katello/concerns/medium_extensions.rb', line 54

def construct_name(repo, _distribution)
  parts = [repo.organization.label, repo.environment.label]
  if repo.content_view && !repo.content_view.default?
    parts << repo.content_view.label
  end
  parts << repo.product.label
  parts << repo.label
  return normalize_name(parts.compact.join('/'))
end

#find_medium(repo) ⇒ Object



49
50
51
52
# File 'app/models/katello/concerns/medium_extensions.rb', line 49

def find_medium(repo)
  path = ::Medium.installation_media_path(repo.uri)
  ::Medium.find_by(:path => path)
end

#find_or_create_medium(org, medium_name, medium_path) ⇒ Object



39
40
41
42
43
44
45
46
47
# File 'app/models/katello/concerns/medium_extensions.rb', line 39

def find_or_create_medium(org, medium_name, medium_path)
  params = { :name => medium_name, :path => medium_path,
             :os_family => 'Redhat' }

  medium = ::Medium.joins(:organizations).where(params).where("taxonomies.id in (?)", [org.id]).first
  medium = ::Medium.create!(params.merge(:organization_ids => [org.id])) unless medium

  return medium
end

#installation_media_path(repo_uri) ⇒ Object

takes repo uri from Katello and makes installation media url suitable for provisioning from it



71
72
73
74
75
# File 'app/models/katello/concerns/medium_extensions.rb', line 71

def installation_media_path(repo_uri)
  path = repo_uri.sub(/\Ahttps/, 'http')
  path << "/" unless path.end_with?('/')
  return path
end

#normalize_name(name) ⇒ Object

Foreman and Puppet uses RedHat name for Red Hat Enterprise Linux



65
66
67
# File 'app/models/katello/concerns/medium_extensions.rb', line 65

def normalize_name(name)
  name.sub('Red_Hat_Enterprise_Linux', 'Red_Hat')
end

#update_media(repo) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'app/models/katello/concerns/medium_extensions.rb', line 13

def update_media(repo)
  return if repo.puppet?

  medium_path = ::Medium.installation_media_path(repo.uri)

  if distribution = repo.distribution_bootable?
    return if ::Medium.find_by(:path => medium_path)

    os = ::Redhat.find_or_create_operating_system(repo)

    arch = ::Architecture.where(:name => repo.distribution_arch).first_or_create!
    os.architectures << arch unless os.architectures.include?(arch)

    medium_name = ::Medium.construct_name(repo, distribution)
    medium = ::Medium.find_or_create_medium(repo.organization, medium_name, medium_path)
    os.media << medium

    os.save!

  else
    if medium = ::Medium.find_by(:path => medium_path)
      medium.destroy
    end
  end
end