Class: Actions::Pulp3::Repository::SaveVersion

Inherits:
Abstract
  • Object
show all
Defined in:
app/lib/actions/pulp3/repository/save_version.rb

Instance Method Summary collapse

Methods inherited from Abstract

#smart_proxy

Instance Method Details

#check_publication_version_match(repo) ⇒ Object



56
57
58
59
60
61
62
63
# File 'app/lib/actions/pulp3/repository/save_version.rb', line 56

def check_publication_version_match(repo)
  # get publication and check if repo-version and publication match. Otherwise, contents_changed: false
  if !repo.repository_type.pulp3_skip_publication && fetch_current_published_version_href(repo) != repo.version_href
    output[:contents_changed] = true
  else
    output[:contents_changed] = false
  end
end

#determine_version_href(repo) ⇒ Object



18
19
20
21
22
23
# File 'app/lib/actions/pulp3/repository/save_version.rb', line 18

def determine_version_href(repo)
  return fetch_version_href(repo) if input[:force_fetch_version]
  return input[:repository_details][:latest_version_href] if input[:repository_details].present?
  return ::Katello::Pulp3::Task.version_href(input[:tasks]) if input[:tasks].present?
  fetch_version_href(repo)
end

#fetch_current_published_version_href(repo) ⇒ Object



72
73
74
75
76
77
# File 'app/lib/actions/pulp3/repository/save_version.rb', line 72

def fetch_current_published_version_href(repo)
  # Fetch latest Pulp 3 repo version
  return nil if repo.publication_href.nil?
  repo_backend_service = repo.backend_service(SmartProxy.pulp_primary)
  repo_backend_service.api.publications_api.read(repo.publication_href).repository_version
end

#fetch_version_href(repo) ⇒ Object



65
66
67
68
69
70
# File 'app/lib/actions/pulp3/repository/save_version.rb', line 65

def fetch_version_href(repo)
  # Fetch latest Pulp 3 repo version
  repo_backend_service = repo.backend_service(SmartProxy.pulp_primary)
  repo_href = repo_backend_service.repository_reference.repository_href
  repo_backend_service.api.repositories_api.read(repo_href).latest_version_href
end

#plan(repository, options = {}) ⇒ Object



5
6
7
8
# File 'app/lib/actions/pulp3/repository/save_version.rb', line 5

def plan(repository, options = {})
  fail "Cannot accept tasks and repository_details into Save Version." if options[:tasks].present? && options[:repository_details].present?
  plan_self(:repository_id => repository.id, :tasks => options[:tasks], :repository_details => options[:repository_details], :force_fetch_version => options.fetch(:force_fetch_version, false))
end

#runObject



10
11
12
13
14
15
16
# File 'app/lib/actions/pulp3/repository/save_version.rb', line 10

def run
  repo = ::Katello::Repository.find(input[:repository_id])
  version_href = determine_version_href(repo)

  save_publication_if_present(repo)
  save_version_if_changed(repo, version_href)
end

#save_publication_if_present(repo) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
# File 'app/lib/actions/pulp3/repository/save_version.rb', line 25

def save_publication_if_present(repo)
  output[:publication_provided] = false
  return if input[:tasks].blank?

  publication_href = ::Katello::Pulp3::Task.publication_href(input[:tasks])
  return unless publication_href

  repo_backend_service = repo.backend_service(SmartProxy.pulp_primary)
  publication = repo_backend_service.api.publications_api.read(publication_href, {fields: 'prn'})
  repo.update(:publication_href => publication_href, :publication_prn => publication.prn)
  output[:publication_provided] = true
end

#save_version_if_changed(repo, version_href) ⇒ Object



38
39
40
41
42
43
44
# File 'app/lib/actions/pulp3/repository/save_version.rb', line 38

def save_version_if_changed(repo, version_href)
  if version_href
    update_version_if_changed(repo, version_href)
  else
    check_publication_version_match(repo)
  end
end

#update_version_if_changed(repo, version_href) ⇒ Object



46
47
48
49
50
51
52
53
54
# File 'app/lib/actions/pulp3/repository/save_version.rb', line 46

def update_version_if_changed(repo, version_href)
  return unless repo.version_href != version_href || input[:force_fetch_version]

  output[:contents_changed] = true
  repo.update(:last_contents_changed => DateTime.now)
  repo_backend_service = repo.backend_service(SmartProxy.pulp_primary)
  version = repo_backend_service.api.repository_versions_api.read(version_href, {fields: 'prn'})
  repo.update(:version_href => version_href, :version_prn => version.prn)
end