class HammerCLICsv::CsvCommand::ContentViewFiltersCommand
Constants
- CONTENTVIEW
- DESCRIPTION
- ORGANIZATION
- REPOSITORIES
- RULES
- TYPE
Public Instance Methods
create_filters_from_csv(line)
click to toggle source
rubocop:disable CyclomaticComplexity
# File lib/hammer_cli_csv/content_view_filters.rb, line 64 def create_filters_from_csv(line) return if option_organization && line[ORGANIZATION] != option_organization @existing_filters[line[ORGANIZATION]] ||= {} if !@existing_filters[line[ORGANIZATION]][line[CONTENTVIEW]] @existing_filters[line[ORGANIZATION]][line[CONTENTVIEW]] ||= {} @api.resource(:content_view_filters).call(:index, { 'per_page' => 999999, 'content_view_id' => katello_contentview(line[ORGANIZATION], :name => line[CONTENTVIEW]) })['results'].each do |filter| @existing_filters[line[ORGANIZATION]][line[CONTENTVIEW]][filter['name']] = filter['id'] if filter end end repository_ids = collect_column(line[REPOSITORIES]) do |repository| katello_repository(line[ORGANIZATION], :name => repository) end count(line[COUNT]).times do |number| filter_name = namify(line[NAME], number) filter_id = @existing_filters[line[ORGANIZATION]][line[CONTENTVIEW]][filter_name] filter_type = import_filter_type(line[TYPE]) if !filter_id print "Creating filter '#{filter_name}' for content view filter '#{line[CONTENTVIEW]}'..." if option_verbose? filter_id = @api.resource(:content_view_filters).call(:create, { 'content_view_id' => katello_contentview(line[ORGANIZATION], :name => line[CONTENTVIEW]), 'name' => filter_name, 'description' => line[DESCRIPTION], 'type' => filter_type, 'inclusion' => filter_inclusion?(line[TYPE]), 'repository_ids' => repository_ids })['id'] @existing_filters[line[ORGANIZATION]][line[CONTENTVIEW]][filter_name] = filter_id else print "Updating filter '#{filter_name}' for content view filter '#{line[CONTENTVIEW]}'..." if option_verbose? @api.resource(:content_view_filters).call(:update, { 'id' => filter_id, 'description' => line[DESCRIPTION], 'type' => filter_type, 'inclusion' => filter_inclusion?(line[TYPE]), 'repository_ids' => repository_ids }) end # drop existing rules @api.resource(:content_view_filter_rules).call(:index, { 'per_page' => 999999, 'content_view_filter_id' => filter_id })['results'].each do |rule| @api.resource(:content_view_filter_rules).call(:destroy, { 'content_view_filter_id' => filter_id, 'id' => rule['id'] }) end collect_column(line[RULES]) do |rule| name, type, version = rule.split('|') params = { 'content_view_filter_id' => filter_id, 'name' => name } if type == 'all' # empty elsif type == '=' params['version'] = version elsif type == '<' params['max_version'] = version elsif type == '>' params['min_version'] = version elsif type == '-' min_version, max_version = version.split(',') params['min_version'] = min_version params['max_version'] = max_version elsif filter_type == 'package_group' params['uuid'] = name # TODO: this is not right else raise "Unknown type '#{type}' from '#{line[RULES]}'" end print "." if option_verbose? @api.resource(:content_view_filter_rules).call(:create, params) end puts 'done' if option_verbose? end end
export(csv)
click to toggle source
# File lib/hammer_cli_csv/content_view_filters.rb, line 17 def export(csv) csv << [NAME, CONTENTVIEW, ORGANIZATION, TYPE, DESCRIPTION, REPOSITORIES, RULES] @api.resource(:organizations).call(:index, { :per_page => 999999 })['results'].each do |organization| next if option_organization && organization['name'] != option_organization @api.resource(:content_views).call(:index, { 'per_page' => 999999, 'organization_id' => organization['id'], 'nondefault' => true })['results'].each do |contentview| @api.resource(:content_view_filters).call(:index, { 'content_view_id' => contentview['id'] })['results'].collect do |filter| filter_type = "#{filter['inclusion'] == true ? 'Include' : 'Exclude'} #{export_filter_type(filter['type'])}" rules = nil case filter['type'] when /rpm/ rules = export_rpm_rules(filter) when /erratum/ rules = export_erratum_rules(filter) when /package_group/ rules = export_package_group_rules(filter) else raise "Unknown filter rule type '#{filter['type']}'" end name = filter['name'] repositories = export_column(filter, 'repositories', 'name') csv << [name, contentview['name'], organization['name'], filter_type, filter['description'], repositories, rules] end end end end
import()
click to toggle source
# File lib/hammer_cli_csv/content_view_filters.rb, line 55 def import @existing_filters = {} thread_import do |line| create_filters_from_csv(line) end end
Private Instance Methods
export_erratum_rules(filter)
click to toggle source
# File lib/hammer_cli_csv/content_view_filters.rb, line 204 def export_erratum_rules(filter) rules = CSV.generate do |column| rule = filter['rules'][0] conditions = [] conditions << "start = #{DateTime.parse(rule['start_date']).strftime('%F')}" if rule['start_date'] conditions << "end = #{DateTime.parse(rule['end_date']).strftime('%F')}" if rule['end_date'] conditions << "types = #{rule['types'].join(',')}" if rule['types'] conditions << "errata = #{rule['errata_id']}" if rule['errata_id'] column << conditions end rules.delete!("\n") end
export_filter_type(type)
click to toggle source
# File lib/hammer_cli_csv/content_view_filters.rb, line 166 def export_filter_type(type) case type when /rpm/i 'Packages' when /package_group/i 'Package Groups' else 'unknown' end end
export_package_group_rules(filter)
click to toggle source
# File lib/hammer_cli_csv/content_view_filters.rb, line 217 def export_package_group_rules(filter) rules = CSV.generate do |column| column << filter['rules'].collect do |rule| rule['name'] end end rules.delete!("\n") end
export_rpm_rules(filter)
click to toggle source
# File lib/hammer_cli_csv/content_view_filters.rb, line 185 def export_rpm_rules(filter) rules = CSV.generate do |column| column << filter['rules'].collect do |rule| if rule['version'] "#{rule['name']}|=|#{rule['version']}" elsif rule['min_version'] && rule['max_version'] "#{rule['name']}|-|#{rule['min_version']},#{rule['max_version']}" elsif rule['min_version'] "#{rule['name']}|>|#{rule['min_version']}" elsif rule['max_version'] "#{rule['name']}|<|#{rule['max_version']}" else "#{rule['name']}|all" end end end rules.delete!("\n") end
filter_inclusion?(type)
click to toggle source
# File lib/hammer_cli_csv/content_view_filters.rb, line 177 def filter_inclusion?(type) if type.split[0] == 'Include' true else false end end
import_filter_type(type)
click to toggle source
# File lib/hammer_cli_csv/content_view_filters.rb, line 155 def import_filter_type(type) case type.split[1..-1].join(' ') when /packages/i 'rpm' when /package groups/i 'package_group' else 'unknown' end end