module ForemanRhCloud

Constants

VERSION

Public Class Methods

base_url() click to toggle source
# File lib/foreman_rh_cloud.rb, line 15
def self.base_url
  # for testing set ENV to 'https://ci.cloud.redhat.com'
  env_or_on_premise_url('SATELLITE_RH_CLOUD_URL') || 'https://cloud.redhat.com'
end
ca_cert() click to toggle source
# File lib/foreman_rh_cloud/engine.rb, line 132
def self.ca_cert
  # The reference to candlepin ca_cert_file can be removed
  # once the setting is dropped. Foreman 3.15 introduces
  # a single CA file that bundles all CAs.
  if ::SETTINGS.dig(:katello, :candlepin, :ca_cert_file)
    ::SETTINGS[:katello][:candlepin][:ca_cert_file]
  else
    ::SETTINGS[:ssl_ca_file]
  end
end
cert_base_url() click to toggle source
# File lib/foreman_rh_cloud.rb, line 20
def self.cert_base_url
  env_or_on_premise_url('SATELLITE_CERT_RH_CLOUD_URL') || 'https://cert.cloud.redhat.com'
end
cloud_url_validator() click to toggle source
# File lib/foreman_rh_cloud.rb, line 138
def self.cloud_url_validator
  @cloud_url_validator ||= Regexp.new(ENV['SATELLITE_RH_CLOUD_VALIDATOR'] || 'redhat.com$')
end
env_or_on_premise_url(env_var_name) click to toggle source
# File lib/foreman_rh_cloud.rb, line 11
def self.env_or_on_premise_url(env_var_name)
  on_premise_url || ENV[env_var_name]
end
fix_port(uri_string) click to toggle source
# File lib/foreman_rh_cloud.rb, line 56
def self.fix_port(uri_string)
  return '' if uri_string.empty?

  uri = URI(uri_string)
  uri.send(:define_singleton_method, :default_port, -> { nil })

  uri.to_s
end
foreman_host() click to toggle source

For testing purposes we can override the default hostname with an environment variable SATELLITE_RH_CLOUD_FOREMAN_HOST

# File lib/foreman_rh_cloud.rb, line 86
def self.foreman_host
  return @foreman_host if defined?(@foreman_host)

  fullname = foreman_host_name
  return @foreman_host = nil unless fullname

  # Try fullname first
  host = ::Host.unscoped.friendly.where(name: fullname).first

  # If not found, try shortname
  if host.nil?
    shortname = /(?<shortname>[^\.]*)\.?.*/.match(fullname)[:shortname]
    host = ::Host.unscoped.friendly.where(name: shortname).first
  end

  @foreman_host = host
end
foreman_host_name() click to toggle source
# File lib/foreman_rh_cloud.rb, line 104
def self.foreman_host_name
  ENV['SATELLITE_RH_CLOUD_FOREMAN_HOST'] || marked_foreman_host&.name || foreman_url_hostname
end
foreman_url_hostname() click to toggle source
# File lib/foreman_rh_cloud.rb, line 108
def self.foreman_url_hostname
  return nil unless Setting[:foreman_url]

  begin
    # Ensure setting is a string to avoid TypeError from URI.parse
    url = Setting[:foreman_url].to_s
    URI.parse(url).host
  rescue URI::InvalidURIError, ArgumentError, TypeError => e
    Rails.logger.warn("Invalid foreman_url setting: #{e.message}")
    nil
  end
end
global_foreman_proxy() click to toggle source
# File lib/foreman_rh_cloud.rb, line 65
def self.global_foreman_proxy
  Setting[:http_proxy]
end
http_proxy_string() click to toggle source
# File lib/foreman_rh_cloud.rb, line 36
def self.http_proxy_string
  ForemanRhCloud.proxy_setting
end
iop_smart_proxy() click to toggle source
# File lib/foreman_rh_cloud/engine.rb, line 128
def self.iop_smart_proxy
  SmartProxy.unscoped.with_features('iop').first
end
legacy_insights_ca() click to toggle source
# File lib/foreman_rh_cloud.rb, line 134
def self.legacy_insights_ca
  "#{ForemanRhCloud::Engine.root}/config/rh_cert-api_chain.pem" unless ForemanRhCloud.with_iop_smart_proxy?
end
legacy_insights_url() click to toggle source
# File lib/foreman_rh_cloud.rb, line 24
def self.legacy_insights_url
  env_or_on_premise_url('SATELLITE_LEGACY_INSIGHTS_URL') || 'https://cert-api.access.redhat.com'
end
marked_foreman_host() click to toggle source
# File lib/foreman_rh_cloud.rb, line 121
def self.marked_foreman_host
  # Find host with infrastructure_facet.foreman_instance = true
  # Facets use a special mechanism in Foreman, so we query the facet table directly
  return nil unless defined?(HostFacets::InfrastructureFacet)

  facet = HostFacets::InfrastructureFacet.find_by(foreman_instance: true)
  facet&.host
rescue ActiveRecord::StatementInvalid => e
  # Table might not exist yet during migrations
  Rails.logger.debug("Could not query marked foreman host: #{e.message}")
  nil
end
on_prem_smart_proxy_features() click to toggle source
# File lib/foreman_rh_cloud/engine.rb, line 143
def self.on_prem_smart_proxy_features
  ['iop']
end
on_premise_url() click to toggle source
# File lib/foreman_rh_cloud.rb, line 6
def self.on_premise_url
  return unless ForemanRhCloud.with_iop_smart_proxy?
  ForemanRhCloud.iop_smart_proxy&.url
end
proxy_setting() click to toggle source
# File lib/foreman_rh_cloud.rb, line 44
def self.proxy_setting
  fix_port(proxy_string)
end
proxy_string() click to toggle source
# File lib/foreman_rh_cloud.rb, line 48
def self.proxy_string
  return '' if ForemanRhCloud.with_iop_smart_proxy?

  HttpProxy.default_global_content_proxy&.full_url ||
  ForemanRhCloud.global_foreman_proxy ||
  ''
end
query_limit() click to toggle source
# File lib/foreman_rh_cloud.rb, line 32
def self.query_limit
  @query_limit ||= ENV['SATELLITE_RH_CLOUD_QUERY_LIMIT'] ? ENV['SATELLITE_RH_CLOUD_QUERY_LIMIT'].to_i : 100
end
requests_delay() click to toggle source
# File lib/foreman_rh_cloud.rb, line 142
def self.requests_delay
  @requests_delay ||= ENV['SATELLITE_RH_CLOUD_REQUESTS_DELAY']
end
transform_scheme(uri_string) click to toggle source

This method assumes uri_string contains uri-encoded username and p@$$word: user:p%40%24%24word@localhost:8888

# File lib/foreman_rh_cloud.rb, line 71
def self.transform_scheme(uri_string)
  return unless uri_string
  transformed_uri = URI.parse(uri_string)

  case transformed_uri.scheme
  when "http"
    transformed_uri.scheme = 'proxy'
  when "https"
    transformed_uri.scheme = 'proxys'
  end

  transformed_uri.to_s
end
transformed_http_proxy_string() click to toggle source
# File lib/foreman_rh_cloud.rb, line 40
def self.transformed_http_proxy_string
  ForemanRhCloud.transform_scheme(ForemanRhCloud.proxy_setting)
end
verify_ssl_method() click to toggle source
# File lib/foreman_rh_cloud.rb, line 28
def self.verify_ssl_method
  @verify_ssl_method ||= ENV['SATELLITE_RH_CLOUD_URL'] ? OpenSSL::SSL::VERIFY_NONE : OpenSSL::SSL::VERIFY_PEER
end
with_iop_smart_proxy?() click to toggle source
# File lib/foreman_rh_cloud/engine.rb, line 124
def self.with_iop_smart_proxy?
  SmartProxy.unscoped.with_features('iop').exists?
end