class ForemanOpenscap::BulkUpload
Attributes
from_scap_security_guide[RW]
Public Class Methods
new(from_scap_security_guide = false)
click to toggle source
# File lib/foreman_openscap/bulk_upload.rb, line 5 def initialize(from_scap_security_guide = false) @from_scap_security_guide = from_scap_security_guide end
Public Instance Methods
generate_scap_default_content()
click to toggle source
# File lib/foreman_openscap/bulk_upload.rb, line 9 def generate_scap_default_content return unless @from_scap_security_guide if %x`rpm -qa | grep scap-security-guide`.empty? Rails.logger.debug "Can't find scap-security-guide RPM" return end files_array = %x`rpm -ql scap-security-guide | grep ds.xml`.split upload_from_files(files_array) unless files_array.empty? end
upload_from_directory(directory_path)
click to toggle source
# File lib/foreman_openscap/bulk_upload.rb, line 43 def upload_from_directory(directory_path) files_array = Dir["#{directory_path}/*-ds.xml"] upload_from_files(files_array) unless files_array.empty? end
upload_from_files(files_array)
click to toggle source
# File lib/foreman_openscap/bulk_upload.rb, line 21 def upload_from_files(files_array) files_array.each do |datastream| file = File.open(datastream, 'rb').read digest = Digest::SHA2.hexdigest(datastream) title = content_name(datastream) filename = original_filename(datastream) scap_content = ScapContent.where(:title => title, :digest => digest).first_or_initialize next if scap_content.persisted? scap_content.scap_file = file scap_content.original_filename = filename scap_content.location_ids = Location.all.map(&:id) if SETTINGS[:locations_enabled] scap_content.organization_ids = Organization.all.map(&:id) if SETTINGS[:organizations_enabled] next puts "## SCAP content is invalid: #{scap_content.errors.full_messages.uniq.join(',')} ##" unless scap_content.valid? if scap_content.save puts "Saved #{datastream} as #{scap_content.title}" else puts "Failed saving #{datastream}" end end end
Private Instance Methods
content_name(datastream)
click to toggle source
# File lib/foreman_openscap/bulk_upload.rb, line 60 def content_name(datastream) os_name = extract_name_from_file(datastream) @from_scap_security_guide ? "Red Hat #{os_name} default content" : "#{os_name} content" end
extract_name_from_file(file)
click to toggle source
# File lib/foreman_openscap/bulk_upload.rb, line 50 def extract_name_from_file(file) # SCAP datastream files are in format of ssg-<OS>-ds.xml # We wish to extract the <OS> and create a name of it original_filename(file).gsub('ssg-','').gsub('-ds.xml', '') end
original_filename(file)
click to toggle source
# File lib/foreman_openscap/bulk_upload.rb, line 56 def original_filename(file) file.split('/').last end