Sha256: 77cd6bf2140df3307e4304a96f804a496f97e3d20ad97d3d4f441985a3c36d28

Contents?: true

Size: 1.89 KB

Versions: 3

Compression:

Stored size: 1.89 KB

Contents

module ForemanOpenscap
  module OpenscapProxyCoreExtensions
    extend ActiveSupport::Concern

    included do
      validate :openscap_proxy_has_feature
    end

    def update_scap_client_params(proxy_id)
      new_proxy = SmartProxy.find proxy_id
      model_match = self.class.name.underscore.match(/\Ahostgroup\z/) ? "hostgroup" : "fqdn"
      puppetclass = Puppetclass.find_by_name("foreman_scap_client")
      fail _("Puppetclass 'foreman_scap_client' not found, make sure it is imported form Puppetmaster") if puppetclass.nil?
      scap_params = puppetclass.class_params
      server_lookup_key = scap_params.find { |param| param.key == "server" }
      port_lookup_key = scap_params.find { |param| param.key == "port" }
      pairs = scap_client_lookup_values_for([server_lookup_key, port_lookup_key], model_match)
      mapping = { "server" => new_proxy.hostname, "port" => new_proxy.port }
      update_scap_client_lookup_values(pairs, model_match, mapping)
    end

    def inherited_openscap_proxy_id
      inherited_ancestry_attribute(:openscap_proxy_id)
    end

    private

    def scap_client_lookup_values_for(lookup_keys, model_match)
      lookup_keys.inject({}) do |result, key|
        result[key] = key.lookup_values.find { |value| value.match == "#{lookup_matcher(model_match)}" }
        result
      end
    end

    def update_scap_client_lookup_values(pairs, model_match, mapping)
      pairs.each do |k, v|
        if v.nil?
          LookupValue.create(:match => lookup_matcher(model_match), :value => mapping[k.key], :lookup_key_id => k.id)
        else
          v.value = mapping[k.key]
          v.save
        end
      end
    end

    def lookup_matcher(model_match)
      model_match == "fqdn" ? "#{model_match}=#{name}" : "#{model_match}=#{title}"
    end

    def openscap_proxy_has_feature
      return true unless openscap_proxy_id
      openscap_proxy.has_feature? "Openscap"
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
foreman_openscap-0.5.3 app/models/concerns/foreman_openscap/openscap_proxy_core_extensions.rb
foreman_openscap-0.5.2 app/models/concerns/foreman_openscap/openscap_proxy_core_extensions.rb
foreman_openscap-0.5.1 app/models/concerns/foreman_openscap/openscap_proxy_core_extensions.rb