Class: Katello::Api::V2::SubscriptionsController

Inherits:
ApiController
  • Object
show all
Includes:
Concerns::FilteredAutoCompleteSearch
Defined in:
app/controllers/katello/api/v2/subscriptions_controller.rb

Constant Summary

Constants included from Concerns::FilteredAutoCompleteSearch

Concerns::FilteredAutoCompleteSearch::PAGE_SIZE

Instance Method Summary collapse

Methods included from Concerns::FilteredAutoCompleteSearch

#auto_complete_search

Methods inherited from ApiController

#check_katello_agent_not_disabled, #deprecate_katello_agent, #empty_search_query?, #full_result_response, #katello_agent_removal_release, #scoped_search, #skip_session

Methods included from Rendering

#respond_for_async, #respond_for_bulk_async, #respond_for_create, #respond_for_destroy, #respond_for_index, #respond_for_show, #respond_for_status, #respond_for_update, #respond_with_template, #respond_with_template_collection, #respond_with_template_resource, #try_specific_collection_template, #try_specific_resource_template

Methods included from Katello::Api::Version2

#api_version

Instance Method Details

#delete_manifestObject



121
122
123
124
# File 'app/controllers/katello/api/v2/subscriptions_controller.rb', line 121

def delete_manifest
  task = async_task(::Actions::Katello::Organization::ManifestDelete, @organization)
  respond_for_async :resource => task
end

#for_hostObject



133
134
135
136
137
138
139
140
# File 'app/controllers/katello/api/v2/subscriptions_controller.rb', line 133

def for_host
  match_attached = params[:available_for] != "host"
  params[:match_host] = ::Foreman::Cast.to_bool(params[:match_host]) if params[:match_host]
  params[:match_installed] = ::Foreman::Cast.to_bool(params[:match_installed]) if params[:match_installed]
  params[:no_overlap] = ::Foreman::Cast.to_bool(params[:no_overlap]) if params[:no_overlap]

  @host.subscription_facet.candlepin_consumer.filtered_pools(match_attached, params[:match_host], params[:match_installed], params[:no_overlap])
end

#indexObject



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'app/controllers/katello/api/v2/subscriptions_controller.rb', line 32

def index
  unless @organization || @activation_key
    fail HttpErrors::NotFound, _("Organization Information not provided.")
  end

  options = { resource_class: Pool, includes: [:subscription] }
  base_args = [index_relation.distinct, :name, :asc]

  respond_to do |format|
    format.csv do
      options[:csv] = true
      collection = scoped_search(*base_args, options)
      csv_response(collection,
                   [:id, :subscription_id, :name, :cp_id, :organization_id, :sockets, :cores,
                    :start_date, :end_date, :consumed, :quantity, :account_number, :contract_number,
                    :support_level, :ram, :stacking_id, :multi_entitlement, :type, :product_id,
                    :unmapped_guest, :virt_only, :virt_who, :upstream?],
                   ['Pool Id Number', 'Subscription Id', 'Name', 'Pool Id', 'Organization Id',
                    'Sockets', 'Cores', 'Start Date', 'End Date', 'Consumed', 'Quantity', 'Account Number',
                    'Contract Number', 'Support Level', 'RAM', 'Stacking Id', 'Multi Entitlement', 'Type',
                    'Product Id', 'Unmapped Guest', 'Virt Only', 'Requires Virt Who', 'Upstream'])
    end
    format.any do
      collection = scoped_search(*base_args, options)
      if params[:activation_key_id]
        key_pools = @activation_key.get_key_pools
        collection[:results] = collection[:results].map do |pool|
          ActivationKeySubscriptionsPresenter.new(pool, key_pools)
        end
      end
      respond(:collection => collection)
    end
  end
end

#index_relationObject



67
68
69
70
71
72
73
74
75
76
# File 'app/controllers/katello/api/v2/subscriptions_controller.rb', line 67

def index_relation
  return for_host if params[:host_id]
  return available_for_activation_key if params[:available_for] == "activation_key"
  collection = Pool.readable
  collection = collection.where("#{Katello::Subscription.table_name}.name" => params[:name]) if params[:name]
  collection = collection.where(:unmapped_guest => false)
  collection = collection.where(organization: Organization.find(params[:organization_id])) if params[:organization_id]
  collection = collection.for_activation_key(@activation_key) if params[:activation_key_id]
  collection
end

#manifest_historyObject



128
129
130
131
# File 'app/controllers/katello/api/v2/subscriptions_controller.rb', line 128

def manifest_history
  @manifest_history = @organization.manifest_history
  respond_with_template_collection(params[:action], "subscriptions", collection: @manifest_history)
end

#refresh_manifestObject



114
115
116
117
# File 'app/controllers/katello/api/v2/subscriptions_controller.rb', line 114

def refresh_manifest
  task = async_task(::Actions::Katello::Organization::ManifestRefresh, @organization)
  respond_for_async :resource => task
end

#showObject



82
83
84
85
86
87
88
89
90
91
92
# File 'app/controllers/katello/api/v2/subscriptions_controller.rb', line 82

def show
  @resource = Katello::Pool.with_identifier(params[:id])

  fail ActiveRecord::RecordNotFound, N_('Subscription not found') unless @resource&.readable?

  if params[:organization_id] && @resource.organization_id != params[:organization_id].to_i
    fail HttpErrors::BadRequest, N_('This subscription is not relevant to the current organization.')
  end

  respond(:resource => @resource)
end

#uploadObject



97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'app/controllers/katello/api/v2/subscriptions_controller.rb', line 97

def upload
  fail HttpErrors::BadRequest, _("No manifest file uploaded") if params[:content].blank?

  begin
    # candlepin requires that the file has a zip file extension
    temp_file = File.new(File.join("#{Rails.root}/tmp", "import_#{SecureRandom.hex(10)}.zip"), 'wb+', 0600)
    temp_file.write params[:content].read
  ensure
    temp_file.close
  end

  task = async_task(::Actions::Katello::Organization::ManifestImport, @organization, File.expand_path(temp_file.path), params[:force])
  respond_for_async :resource => task
end