Class: Actions::Katello::ContentView::Update

Inherits:
EntryAction
  • Object
show all
Defined in:
app/lib/actions/katello/content_view/update.rb

Instance Method Summary collapse

Instance Method Details

#handle_rolling_content_view(content_view, target_repo_ids, target_env_ids) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'app/lib/actions/katello/content_view/update.rb', line 35

def handle_rolling_content_view(content_view, target_repo_ids, target_env_ids)
  return unless content_view.rolling?

  add_repo_ids, remove_repo_ids, retain_repo_ids = translate_id_lists(content_view.repository_ids, target_repo_ids)

  if target_env_ids.nil?
    target_env_ids = retain_env_ids = content_view.environment_ids
  else
    add_env_ids, remove_env_ids, retain_env_ids = translate_id_lists(content_view.environment_ids, target_env_ids)
    ::Katello::KTEnvironment.where(id: add_env_ids).each do |environment|
      plan_action(AddToEnvironment, content_view.versions[0], environment)
    end
    plan_action(AddRollingRepoClone, content_view, retain_repo_ids, add_env_ids) if retain_repo_ids.any? && add_env_ids.any?
    ::Katello::KTEnvironment.where(id: remove_env_ids).each do |environment|
      plan_action(RemoveFromEnvironment, content_view, environment)
    end
  end

  plan_action(AddRollingRepoClone, content_view, add_repo_ids, target_env_ids) if add_repo_ids.any?
  plan_action(RemoveRollingRepoClone, content_view, remove_repo_ids, retain_env_ids) if remove_repo_ids.any?
end

#plan(content_view, content_view_params, environment_ids) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'app/lib/actions/katello/content_view/update.rb', line 5

def plan(content_view, content_view_params, environment_ids)
  action_subject content_view
  content_view_params = content_view_params.with_indifferent_access

  # If we are removing repositories, remove their filter rules
  if content_view.filters.present? && content_view.repository_ids.present? && content_view_params.key?(:repository_ids)
    repo_ids_to_remove = content_view.repository_ids - content_view_params[:repository_ids]
    if repo_ids_to_remove.present?
      # Only yum-type repositories have by-ID filter rules
      old_repos = content_view.repositories.yum_type
      new_repos = ::Katello::Repository.where(id: content_view_params[:repository_ids]).yum_type

      lost_module_stream_ids = (::Katello::ModuleStream.in_repositories(old_repos) -
        ::Katello::ModuleStream.in_repositories(new_repos)).pluck(:id)
      ::Katello::ContentViewModuleStreamFilterRule.in_content_views([content_view.id]).where(module_stream_id: lost_module_stream_ids).delete_all

      lost_errata_ids = (::Katello::Erratum.in_repositories(old_repos) -
        ::Katello::Erratum.in_repositories(new_repos)).pluck(:errata_id)
      ::Katello::ContentViewErratumFilterRule.in_content_views([content_view.id]).where(errata_id: lost_errata_ids).delete_all

      lost_package_group_hrefs = (::Katello::PackageGroup.in_repositories(old_repos) -
        ::Katello::PackageGroup.in_repositories(new_repos)).pluck(:pulp_id)
      ::Katello::ContentViewPackageGroupFilterRule.in_content_views([content_view.id]).where(uuid: lost_package_group_hrefs).delete_all
    end
  end

  handle_rolling_content_view(content_view, content_view_params[:repository_ids], environment_ids)
  content_view.update!(content_view_params)
end

#translate_id_lists(current_ids, target_ids) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
# File 'app/lib/actions/katello/content_view/update.rb', line 57

def translate_id_lists(current_ids, target_ids)
  if target_ids.nil?
    add_ids = remove_ids = []
    retain_ids = current_ids
  else
    add_ids = target_ids - current_ids
    remove_ids = current_ids - target_ids
    retain_ids = current_ids - remove_ids
  end
  return add_ids, remove_ids, retain_ids
end