class Runcible::Extensions::Repository

Public Instance Methods

create_or_update_schedule(repo_id, type, schedule) click to toggle source

Creates or updates a sync schedule for a repository

@param [String] repo_id the ID of the repository @param [String] type the importer type @param [String] schedule the time as an iso8601 interval @return [RestClient::Response] the newly created or updated schedule

# File lib/runcible/extensions/repository.rb, line 376
def create_or_update_schedule(repo_id, type, schedule)
  schedules = Runcible::Resources::RepositorySchedule.new(self.config).list(repo_id, type)
  if schedules.empty?
    Runcible::Resources::RepositorySchedule.new(self.config).create(repo_id, type, schedule)
  else
    Runcible::Resources::RepositorySchedule.new(self.config).update(repo_id, type,
                                                schedules[0]['_id'], :schedule => schedule)
  end
end
create_with_distributors(id, distributors) click to toggle source

Utility function that allows distributors to be added at repository creation time

@param [String] id the id of the repository being created @param [Array] distributors an array of hashes representing distributors or

an array of Distributor objects

@return [RestClient::Response] the created repository

# File lib/runcible/extensions/repository.rb, line 20
def create_with_distributors(id, distributors)
  create_with_importer_and_distributors(id, nil, distributors)
end
create_with_importer(id, importer) click to toggle source

Utility function that allows an importer to be added at repository creation time

@param [String] id the id of the repository being created @param [Hash, Runcible::Extensions::Importer] importer either a hash representing an importer or

an Importer object

@return [RestClient::Response] the created repository

# File lib/runcible/extensions/repository.rb, line 10
def create_with_importer(id, importer)
  create_with_importer_and_distributors(id, importer)
end
create_with_importer_and_distributors(id, importer, distributors = [], optional = {}) click to toggle source

Utility function that allows an importer and distributors to be added at repository creation time

@param [String] id the id of the repository being created @param [Hash, Runcible::Extensions::Importer] importer either a hash representing an importer or

an Importer object

@param [Array] distributors an array of hashes representing distributors or

an array of Distributor objects

@param [Hash] optional container for all optional parameters @return [RestClient::Response] the created repository

# File lib/runcible/extensions/repository.rb, line 33
def create_with_importer_and_distributors(id, importer, distributors = [], optional = {})
  if importer && importer.is_a?(Runcible::Models::Importer)
    optional[:importer_type_id] = importer.id
    optional[:importer_config] = importer.config
  elsif importer
    optional[:importer_type_id] = importer.delete('id') || importer.delete(:id)
    optional[:importer_config] = importer
  end

  repo_type = if importer.methods.include?(:repo_type)
                importer.repo_type
              elsif importer.is_a?(Hash) && importer.key?(:repo_type)
                importer[:repo_type]
              end

  if optional.key?(:importer_type_id) && repo_type
    # pulp needs _repo-type in order to determine the type of repo to create.
    optional[:notes] = { '_repo-type' => importer.repo_type }
  end

  optional[:distributors] = distributors.map do |d|
    if d.is_a?(Runcible::Models::Distributor)
      {'distributor_type_id' => d.type_id,
       'distributor_config' => d.config,
       'auto_publish' => d.auto_publish,
       'distributor_id' => d.id
      }
    else
      {'distributor_type_id' => d['type_id'],
       'distributor_config' => d['config'],
       'auto_publish' => d['auto_publish'],
       'distributor_id' => d['id']
      }
    end
  end unless distributors.empty?
  optional[:id] = id
  create(id, optional)
end
distributions(id) click to toggle source

Retrieves the distributions for a single repository

@param [String] id the ID of the repository @return [RestClient::Response] the set of repository distributions

# File lib/runcible/extensions/repository.rb, line 196
def distributions(id)
  criteria = {:type_ids => [Runcible::Extensions::Distribution.content_type]}

  unit_search(id, criteria).map { |i| i['metadata'].with_indifferent_access }
end
docker_image_ids(id) click to toggle source

Retrieves the docker image IDs for a single repository

@param [String] id the ID of the repository @return [RestClient::Response] the set of repository docker image IDs

# File lib/runcible/extensions/repository.rb, line 325
def docker_image_ids(id)
  criteria = {:type_ids => [Runcible::Extensions::DockerImage.content_type],
              :fields => {:unit => [], :association => ['unit_id']}}

  unit_search(id, criteria).map { |i| i['unit_id'] }
end
docker_images(id) click to toggle source

Retrieves the docker images for a single repository

@param [String] id the ID of the repository @return [RestClient::Response] the set of repository docker images

# File lib/runcible/extensions/repository.rb, line 336
def docker_images(id)
  criteria = {:type_ids => [Runcible::Extensions::DockerImage.content_type]}
  unit_search(id, criteria).map { |i| i['metadata'].with_indifferent_access }
end
docker_manifest_ids(id) click to toggle source

Retrieves the docker manifest IDs for a single repository

@param [String] id the ID of the repository @return [RestClient::Response] the set of repository docker manifest IDs

# File lib/runcible/extensions/repository.rb, line 265
def docker_manifest_ids(id)
  criteria = {:type_ids => [Runcible::Extensions::DockerManifest.content_type],
              :fields => {:unit => [], :association => ['unit_id']}}

  unit_search(id, criteria).map { |i| i['unit_id'] }
end
docker_manifest_list_ids(id) click to toggle source

Retrieves the docker manifest list IDs for a single repository

@param [String] id the ID of the repository @return [RestClient::Response] the set of repository docker manifest IDs

# File lib/runcible/extensions/repository.rb, line 285
def docker_manifest_list_ids(id)
  criteria = {:type_ids => [Runcible::Extensions::DockerManifestList.content_type],
              :fields => {:unit => [], :association => ['unit_id']}}

  unit_search(id, criteria).map { |i| i['unit_id'] }
end
docker_manifest_lists(id) click to toggle source

Retrieves the docker manifest lists for a single repository

@param [String] id the ID of the repository @return [RestClient::Response] the set of repository docker manifests

# File lib/runcible/extensions/repository.rb, line 296
def docker_manifest_lists(id)
  criteria = {:type_ids => [Runcible::Extensions::DockerManifestList.content_type]}
  unit_search(id, criteria).map { |i| i['metadata'].with_indifferent_access }
end
docker_manifests(id) click to toggle source

Retrieves the docker manifests for a single repository

@param [String] id the ID of the repository @return [RestClient::Response] the set of repository docker manifests

# File lib/runcible/extensions/repository.rb, line 276
def docker_manifests(id)
  criteria = {:type_ids => [Runcible::Extensions::DockerManifest.content_type]}
  unit_search(id, criteria).map { |i| i['metadata'].with_indifferent_access }
end
docker_tag_ids(id) click to toggle source

Retrieves the docker tag IDs for a single repository

@param [String] id the ID of the repository @return [RestClient::Response] the set of repository docker tag IDs

# File lib/runcible/extensions/repository.rb, line 305
def docker_tag_ids(id)
  criteria = {:type_ids => [Runcible::Extensions::DockerTag.content_type],
              :fields => {:unit => [], :association => ['unit_id']}}

  unit_search(id, criteria).map { |i| i['unit_id'] }
end
docker_tags(id) click to toggle source

Retrieves the docker tags for a single repository

@param [String] id the ID of the repository @return [RestClient::Response] the set of repository docker tags

# File lib/runcible/extensions/repository.rb, line 316
def docker_tags(id)
  criteria = {:type_ids => [Runcible::Extensions::DockerTag.content_type]}
  unit_search(id, criteria).map { |i| i['metadata'].with_indifferent_access }
end
errata(id) click to toggle source

Retrieves the errata for a single repository

@param [String] id the ID of the repository @return [RestClient::Response] the set of repository errata

# File lib/runcible/extensions/repository.rb, line 187
def errata(id)
  criteria = {:type_ids => [Runcible::Extensions::Errata.content_type]}
  unit_search(id, criteria).map { |i| i['metadata'].with_indifferent_access }
end
errata_ids(id) click to toggle source

Retrieves the errata IDs for a single repository

@param [String] id the ID of the repository @return [RestClient::Response] the set of repository errata IDs

# File lib/runcible/extensions/repository.rb, line 176
def errata_ids(id)
  criteria = {:type_ids => [Runcible::Extensions::Errata.content_type],
              :fields => {:unit => [], :association => ['unit_id']}}

  unit_search(id, criteria).map { |i| i['unit_id'] }
end
file_ids(id) click to toggle source

Retrieves the file IDs for a single repository

@param [String] id the ID of the repository @return [RestClient::Response] the set of repository file IDs

# File lib/runcible/extensions/repository.rb, line 354
def file_ids(id)
  criteria = {:type_ids => [Runcible::Extensions::File.content_type],
              :fields => {:unit => [], :association => ['unit_id']}}

  unit_search(id, criteria).map { |i| i['unit_id'] }
end
files(id) click to toggle source

Retrieves the files for a single repository

@param [String] id the ID of the repository @return [RestClient::Response] the set of repository files

# File lib/runcible/extensions/repository.rb, line 365
def files(id)
  criteria = {:type_ids => [Runcible::Extensions::File.content_type]}
  unit_search(id, criteria).map { |i| i['metadata'].with_indifferent_access }
end
ostree_branch_ids(id) click to toggle source

Retrieves the ostree branch IDs for a single repository

@param [String] id the ID of the repository @return [RestClient::Response] the set of repository ostree branch IDs

# File lib/runcible/extensions/repository.rb, line 245
def ostree_branch_ids(id)
  criteria = {:type_ids => [Runcible::Extensions::OstreeBranch.content_type],
              :fields => {:unit => [], :association => ['unit_id']}}

  unit_search(id, criteria).map { |i| i['unit_id'] }
end
ostree_branches(id) click to toggle source

Retrieves the ostree branches for a single repository

@param [String] id the ID of the repository @return [RestClient::Response] the set of repository ostree branches

# File lib/runcible/extensions/repository.rb, line 256
def ostree_branches(id)
  criteria = {:type_ids => [Runcible::Extensions::OstreeBranch.content_type]}
  unit_search(id, criteria).map { |i| i['metadata'].with_indifferent_access }
end
package_categories(id) click to toggle source

Retrieves the package group categoriess for a single repository

@param [String] id the ID of the repository @return [RestClient::Response] the set of repository package group categories

# File lib/runcible/extensions/repository.rb, line 216
def package_categories(id)
  criteria = {:type_ids => [Runcible::Extensions::PackageCategory.content_type]}
  unit_search(id, criteria).map { |i| i['metadata'].with_indifferent_access }
end
package_groups(id) click to toggle source

Retrieves the package groups for a single repository

@param [String] id the ID of the repository @return [RestClient::Response] the set of repository package groups

# File lib/runcible/extensions/repository.rb, line 206
def package_groups(id)
  criteria = {:type_ids => [Runcible::Extensions::PackageGroup.content_type]}

  unit_search(id, criteria).map { |i| i['metadata'].with_indifferent_access }
end
publish_all(repo_id) click to toggle source

Publishes a repository for all of it's distributors

@param [String] repo_id the ID of the repository @return [RestClient::Response] set of tasks representing each publish

# File lib/runcible/extensions/repository.rb, line 402
def publish_all(repo_id)
  to_ret = []
  retrieve_with_details(repo_id)['distributors'].each do |d|
    to_ret << publish(repo_id, d['id'])
  end
  to_ret
end
publish_status(repo_id) click to toggle source

Retrieves the publish status for a repository

@param [String] repo_id the repository ID @return [RestClient::Response] a task representing the sync status

# File lib/runcible/extensions/repository.rb, line 84
def publish_status(repo_id)
  Runcible::Resources::Task.new(self.config).list(["pulp:repository:#{repo_id}", 'pulp:action:publish'])
end
puppet_module_ids(id) click to toggle source

Retrieves the puppet module IDs for a single repository

@param [String] id the ID of the repository @return [RestClient::Response] the set of repository puppet module IDs

# File lib/runcible/extensions/repository.rb, line 225
def puppet_module_ids(id)
  criteria = {:type_ids => [Runcible::Extensions::PuppetModule.content_type],
              :fields => {:unit => [], :association => ['unit_id']}}

  unit_search(id, criteria).map { |i| i['unit_id'] }
end
puppet_modules(id) click to toggle source

Retrieves the puppet modules for a single repository

@param [String] id the ID of the repository @return [RestClient::Response] the set of repository puppet modules

# File lib/runcible/extensions/repository.rb, line 236
def puppet_modules(id)
  criteria = {:type_ids => [Runcible::Extensions::PuppetModule.content_type]}
  unit_search(id, criteria).map { |i| i['metadata'].with_indifferent_access }
end
regenerate_applicability_by_ids(ids, parallel = false) click to toggle source

Regenerate the applicability for consumers bound to a given set of repositories

@param [String, Array] ids array of repo ids @param [boolean] parallel when true run the regeneration in parallel and return a task group

tracking the summary,
when false run this operation serially and return a list of
spawned tasks that are to be tracked separately.
False is the default option.

@return [RestClient::Response]

# File lib/runcible/extensions/repository.rb, line 427
def regenerate_applicability_by_ids(ids, parallel = false)
  criteria = {
    'parallel' => parallel,
    'repo_criteria' => { 'filters' => { 'id' => { '$in' => ids } } }
  }
  regenerate_applicability(criteria)
end
remove_schedules(repo_id, type) click to toggle source

Removes a scheduled sync from a repository

@param [String] repo_id the ID of the repository @param [String] type the importer type @return [RestClient::Response]

# File lib/runcible/extensions/repository.rb, line 391
def remove_schedules(repo_id, type)
  schedules = Runcible::Resources::RepositorySchedule.new(self.config).list(repo_id, type)
  schedules.each do |schedule|
    Runcible::Resources::RepositorySchedule.new(self.config).delete(repo_id, type, schedule['_id'])
  end
end
retrieve_with_details(repo_id) click to toggle source

Retrieves a repository with details that include importer and distributors

@param [String] repo_id the ID of the repository @return [RestClient::Response] the repository with full details

# File lib/runcible/extensions/repository.rb, line 414
def retrieve_with_details(repo_id)
  retrieve(repo_id, :details => true)
end
rpm_ids(id) click to toggle source

Retrieves the RPM IDs for a single repository

@param [String] id the ID of the repository @return [Array<String>] the array of repository RPM IDs

# File lib/runcible/extensions/repository.rb, line 104
def rpm_ids(id)
  criteria = {:type_ids => [Runcible::Extensions::Rpm.content_type],
              :fields => {:unit => [], :association => ['unit_id']}}
  self.unit_search(id, criteria).map { |i| i['unit_id'] }
rescue RestClient::RequestTimeout
  self.logger.warn('Call to rpm_ids timed out')
  # lazy evaluated iterator from zero to infinite
  pages = Enumerator.new do |y|
    page = 0
    loop do
      y << page
      page += 1
    end
  end

  # TODO: this is hotfix, pagination support should be added to Runcible
  pages.reduce([]) do |rpm_ids, page|
    page_size = 500
    criteria  = { :type_ids => [Runcible::Extensions::Rpm.content_type],
                  :fields   => { :unit => [], :association => ['unit_id'] },
                  :limit    => page_size,
                  :skip     => 0 + page * page_size }
    result    = unit_search(id, criteria).map { |i| i['unit_id'] }
    rpm_ids.concat(result)
    if result.empty? || result.size < 500
      break rpm_ids
    else
      rpm_ids
    end
  end
end
rpms(id) click to toggle source

Retrieves the RPMs for a single repository

@param [String] id the ID of the repository @return [RestClient::Response] the set of repository RPMs

# File lib/runcible/extensions/repository.rb, line 140
def rpms(id)
  criteria = {:type_ids => [Runcible::Extensions::Rpm.content_type]}
  unit_search(id, criteria).map { |i| i['metadata'].with_indifferent_access }
end
rpms_by_nvre(id, name, version = nil, release = nil, epoch = nil) click to toggle source

Retrieves the RPMs by NVRE for a single repository

@param [String] id the ID of the repository @param [String] name the name of the RPMs @param [String] version the version of the RPMs @param [String] release the release of the RPMs @param [String] epoch the epoch of the RPMs @return [RestClient::Response] the set of repository RPMs

# File lib/runcible/extensions/repository.rb, line 153
def rpms_by_nvre(id, name, version = nil, release = nil, epoch = nil)
  and_condition = []
  and_condition << {:name => name} if name
  and_condition << {:version => version} if version
  and_condition << {:release => release} if release
  and_condition << {:epoch => epoch} if epoch

  criteria = {:type_ids => [Runcible::Extensions::Rpm.content_type],
              :filters => {
                :unit => {
                  '$and' => and_condition
                }
              },
              :sort => {
                :unit => [['name', 'ascending'], ['version', 'descending']]
              }}
  unit_search(id, criteria).map { |p| p['metadata'].with_indifferent_access }
end
search_by_repository_ids(repository_ids) click to toggle source

Retrieves a set of repositories by their IDs

@param [Array] repository_ids the repository ID @return [RestClient::Response] the set of repositories requested

# File lib/runcible/extensions/repository.rb, line 92
def search_by_repository_ids(repository_ids)
  criteria = {:filters =>
                { 'id' => {'$in' => repository_ids}}
             }
  search(criteria)
end
sync_status(repo_id) click to toggle source

Retrieves the sync status for a repository

@param [String] repo_id the repository ID @return [RestClient::Response] a task representing the sync status

# File lib/runcible/extensions/repository.rb, line 76
def sync_status(repo_id)
  Runcible::Resources::Task.new(self.config).list(["pulp:repository:#{repo_id}", 'pulp:action:sync'])
end
update_docker_tags(id, tags) click to toggle source

Updates the docker tags in a repo @param [String] id the ID of the repository @param [Hash] tags for an image in the following format

the [{:image_id => <image hash>, :tag =>"value"}]

@return [RestClient::Response]

# File lib/runcible/extensions/repository.rb, line 346
def update_docker_tags(id, tags)
  update(id, :scratchpad => {:tags => tags})
end