class HammerCLICsv::CsvCommand::ContentViewsCommand

Constants

COMPOSITE
DESCRIPTION
ENVIRONMENTS
LABEL
ORGANIZATION
REPOSITORIES

Public Instance Methods

create_contentviews_from_csv(line) click to toggle source
# File lib/hammer_cli_csv/content_views.rb, line 80
def create_contentviews_from_csv(line)
  return if option_organization && line[ORGANIZATION] != option_organization

  if !@existing_contentviews[line[ORGANIZATION]]
    @existing_contentviews[line[ORGANIZATION]] ||= {}
    @api.resource(:content_views).call(:index, {
        'per_page' => 999999,
        'organization_id' => foreman_organization(:name => line[ORGANIZATION]),
        'nondefault' => true
    })['results'].each do |contentview|
      @existing_contentviews[line[ORGANIZATION]][contentview['name']] = contentview['id'] if contentview
    end
  end

  is_composite = line[COMPOSITE] == 'Yes' ? true : false

  if is_composite
    composite_ids = collect_column(line[REPOSITORIES]) do |composite|
      # TODO: export version and use it here
      katello_contentviewversion(line[ORGANIZATION], composite)
    end
  else
    repository_ids = collect_column(line[REPOSITORIES]) do |repository|
      katello_repository(line[ORGANIZATION], :name => repository)
    end
  end

  count(line[COUNT]).times do |number|
    name = namify(line[NAME], number)

    contentview_id = @existing_contentviews[line[ORGANIZATION]][name]
    if !contentview_id
      puts _("Creating content view '%{name}'...") % {:name => name} if option_verbose?
      options = {
          'organization_id' => foreman_organization(:name => line[ORGANIZATION]),
          'name' => name,
          'label' => labelize(name),
          'description' => line[DESCRIPTION],
          'composite' => is_composite
      }
      contentview_id = @api.resource(:content_views).call(:create, options)['id']
      @existing_contentviews[line[ORGANIZATION]][name] = contentview_id
    else
      puts _("Updating content view '%{name}'...") % {:name => name} if option_verbose?
    end

    options = {
      'id' => contentview_id,
      'description' => line[DESCRIPTION]
    }
    if is_composite
      options['component_ids'] = composite_ids
    else
      options['repository_ids'] = repository_ids
    end
    contentview = @api.resource(:content_views).call(:update, options)
    contentview_id = contentview['id']

    if option_publish? || option_promote?
      # Content views cannot be used in composites unless a publish has occurred
      if contentview['versions'].empty? && !line[ENVIRONMENTS].empty?
        publish_content_view(contentview_id, line)
      end

      if !line[ENVIRONMENTS].empty? && option_promote?
        promote_content_view(contentview_id, line)
      end
    end

    puts _('done') if option_verbose?
  end

end
environment_names(contentview) click to toggle source
# File lib/hammer_cli_csv/content_views.rb, line 154
def environment_names(contentview)
  names = []
  contentview['versions'].each do |version|
    version['environment_ids'].each do |environment_id|
      names << lifecycle_environment(contentview['organization']['name'], :id => environment_id)
    end
  end
  names.uniq
end
export(csv) click to toggle source
# File lib/hammer_cli_csv/content_views.rb, line 23
def export(csv)
  if (options.keys & %w(option_promote option_publish)).any?
    fail _("Cannot pass publish or promote options on export")
  end

  csv << [NAME, LABEL, ORGANIZATION, COMPOSITE, REPOSITORIES, ENVIRONMENTS]
  @api.resource(:organizations).call(:index, {
      :per_page => 999999,
      :search => option_search
  })['results'].each do |organization|
    next if option_organization && organization['name'] != option_organization

    composite_contentviews = []
    @api.resource(:content_views).call(:index, {
        'per_page' => 999999,
        'organization_id' => organization['id'],
        'nondefault' => true
    })['results'].each do |contentview|
      name = contentview['name']
      label = contentview['label']
      orgname = organization['name']
      environments = CSV.generate do |column|
        column << environment_names(contentview)
      end
      environments.delete!("\n")
      composite = contentview['composite'] == true ? 'Yes' : 'No'
      if composite == 'Yes'
        contentviews = CSV.generate do |column|
          column << contentview['components'].collect do |component|
            component['content_view']['name']
          end
        end
        contentviews.delete!("\n")
        composite_contentviews << [name, label, orgname, composite, contentviews, environments]
      else
        repositories = export_column(contentview, 'repositories', 'name')
        csv << [name, label, orgname, composite, repositories, environments]
      end
    end
    composite_contentviews.each do |contentview|
      csv << contentview
    end
  end
end
import() click to toggle source
# File lib/hammer_cli_csv/content_views.rb, line 68
def import
  if options.keys.include?('option_publish') && !option_publish? && option_promote?
    fail _("Cannot pass in --promote with --no-publish")
  end

  @existing_contentviews = {}

  thread_import do |line|
    create_contentviews_from_csv(line)
  end
end
promote_content_view(contentview_id, line) click to toggle source
# File lib/hammer_cli_csv/content_views.rb, line 170
def promote_content_view(contentview_id, line)
  contentview = @api.resource(:content_views).call(:show, {'id' => contentview_id})
  existing_names = environment_names(contentview)

  CSV.parse_line(line[ENVIRONMENTS]).each do |environment_name|
    next if environment_name == 'Library' || existing_names.include?(environment_name)

    version = contentview['versions'][-1]
    task_progress(@api.resource(:content_view_versions).call(:promote, {
        'id' => version['id'],
        'environment_id' => lifecycle_environment(line[ORGANIZATION], :name => environment_name),
        'force' => true
    }))
  end
end
publish_content_view(contentview_id, line) click to toggle source
# File lib/hammer_cli_csv/content_views.rb, line 164
def publish_content_view(contentview_id, line)
  task_progress(@api.resource(:content_views).call(:publish, {
      'id' => contentview_id
  }))
end