Skip to content

Instantly share code, notes, and snippets.

@kbrock
Created January 21, 2016 13:47
Show Gist options
  • Select an option

  • Save kbrock/688fa52208147cc433e1 to your computer and use it in GitHub Desktop.

Select an option

Save kbrock/688fa52208147cc433e1 to your computer and use it in GitHub Desktop.
Our apache proxy creation

environment_manager.rb:

  def prep_apache_proxying
    return unless MiqEnvironment::Command.supports_apache?

    MiqApache::Control.kill_all
    MiqUiWorker.install_apache_proxy_config
    MiqWebServiceWorker.install_apache_proxy_config
  end

There is only 1 definition of install_apache_proxy_config in miq_web_server_worker_mixin.rb:

def self.install_apache_proxy_config
  options = {
    :member_file    => self::BALANCE_MEMBER_CONFIG_FILE,
    :redirects_file => self::REDIRECTS_CONFIG_FILE,
    :method         => self::LB_METHOD,
    :redirects      => self::REDIRECTS,
    :cluster        => self::CLUSTER,
  }

  _log.info("[#{options.inspect}")
  MiqApache::Conf.install_default_config(options)
end

Those constants are overridden by miq_ui_worker.rb:

  BALANCE_MEMBER_CONFIG_FILE = '/etc/httpd/conf.d/cfme-balancer-ui.conf'
  REDIRECTS_CONFIG_FILE      = '/etc/httpd/conf.d/cfme-redirects-ui'
  STARTING_PORT              = 3000
  LB_METHOD                  = :busy
  REDIRECTS                  = '/'
  CLUSTER                    = 'evmcluster_ui'

and miq_web_service_worker.rb:

  BALANCE_MEMBER_CONFIG_FILE = '/etc/httpd/conf.d/cfme-balancer-ws.conf'
  REDIRECTS_CONFIG_FILE      = '/etc/httpd/conf.d/cfme-redirects-ws'
  STARTING_PORT              = 4000
  LB_METHOD                  = :busy
  REDIRECTS                  = ['/api']
  CLUSTER                    = 'evmcluster_ws'

And that calls miq_apache.rb:

def self.install_default_config(opts = {})
  File.write(opts[:member_file],    create_balancer_config(opts))
  File.write(opts[:redirects_file], create_redirects_config(opts))
end

def self.create_balancer_config(opts = {})
  lbmethod = case opts[:lbmethod]
             when :busy then     :bybusyness
             when :traffic then  :bytraffic
             else            :byrequests
             end

  "<Proxy balancer://#{opts[:cluster]}/ lbmethod=#{lbmethod}>\n</Proxy>\n"
end

def self.create_redirects_config(opts = {})
  opts[:redirects].to_miq_a.each_with_object("") do |redirect, content|
    content << "ProxyPass /proxy_pages !\n" if redirect == "/"
    content << "ProxyPass /self_service !\n" if redirect == "/"
    content << "ProxyPass #{redirect} balancer://#{opts[:cluster]}#{redirect}\n"
    content << "ProxyPassReverse #{redirect} balancer://#{opts[:cluster]}#{redirect}\n"
  end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment