class RHC::Config

Responsible for encapsulating the loading and retrieval of OpenShift configuration files and converting them to commandline option equivalents. It also provides the converse option - converting a set of commandline options back into a config file.

In general, the values stored in the config should be identical (require little or no type conversion) to their option form. As new global options are added, only this class should have to change to persist that option.

During normal use, a new Config object should load the appropriate settings and those settings should be converted into commandline option defaults.

TODO: Encapsulate config writing to the home location TODO: Allow the config object to initialized with a path TODO: Remove deprecated methods, remove extra sources.

Constants

OPTIONS

Option name [config_key type comment_string_for_config]

if nil, == key  nil == string  won't be written to file if nil

Public Class Methods

default() click to toggle source

DEPRECATED - will be removed when old commands are gone

# File lib/rhc/config.rb, line 92
def self.default
  @default ||= RHC::Config.new
end
initialize() click to toggle source

DEPRECATED - will be removed when old commands are gone

# File lib/rhc/config.rb, line 106
def self.initialize
  @default = nil
  default
end
method_missing(method, *args, &block) click to toggle source

DEPRECATED - will be removed when old commands are gone

# File lib/rhc/config.rb, line 97
def self.method_missing(method, *args, &block)
  if default.respond_to?(method)
    default.send(method, *args, &block)
  else
    raise NoMethodError, method
  end
end
new() click to toggle source

DEPRECATED - will be removed when old commands are gone

# File lib/rhc/config.rb, line 112
def initialize
  set_defaults
end
options_to_config(options, args=OPTIONS.keys) click to toggle source
# File lib/rhc/config.rb, line 69
def self.options_to_config(options, args=OPTIONS.keys)
  OPTIONS.select{|k,v| args ? args.include?(k) : true}.inject([]) do |arr, (name, opts)|
    opts ||= []
    next arr unless opts[2]
    value = options[name]
    arr.concat(opts[2].each_line.to_a.map(&:strip).map{ |s| "# #{s}" })
    arr << "#{value.nil? ? '#' : ''}#{opts[0] || name}=#{self.type_to_config(opts[1], value)}"
    arr << ""
    arr
  end.unshift(!args.nil? && args.length < OPTIONS.length ? 
    ["# Check servers.yml for detailed server configuration", ""] : nil).flatten.compact.join("\n")
end
type_to_config(type, value) click to toggle source
# File lib/rhc/config.rb, line 82
def self.type_to_config(type, value)
  case type
  when :integer, :boolean
    value.nil? ? "<#{type}>" : value
  else
    value.nil? ? "<#{type || 'string'}>" : value
  end
end

Private Class Methods

home_dir() click to toggle source

Allow mocking of the home dir

# File lib/rhc/config.rb, line 353
def self.home_dir
  File.expand_path('~')
end

Public Instance Methods

[](key) click to toggle source
# File lib/rhc/config.rb, line 180
def [](key)
  lazy_init
  configs = configs_cascade
  result = nil
  c = nil
  configs.each_with_index do |conf, i|
    result = conf[key] if !conf.nil?
    c = conf
    break if !result.nil?
  end
  result
end
backup() click to toggle source
# File lib/rhc/config.rb, line 161
def backup
  if File.exists? path
    backup = "#{path}.bak"
    FileUtils.cp(path, backup)
  end
end
check_cpath(opts) click to toggle source

DEPRECATED - will be removed when old commands are gone

# File lib/rhc/config.rb, line 242
def check_cpath(opts)
  unless opts["config"].nil?
    opts_config_path = File.expand_path(opts["config"])
    if !File.readable?(opts_config_path)
      raise Errno::EACCES.new "Could not open config file: #{@opts_config_path}"
    else
      set_opts_config(opts_config_path)
    end
  end
end
config_path() click to toggle source

#config_path

authoritive configuration path this is used to determine where config options should be written to when a script modifies the config such as in rhc setup

# File lib/rhc/config.rb, line 293
def config_path
  @config_path ||= local_config_path
end
configs_cascade() click to toggle source

individual configs will be evaluated in the following cascading order

# File lib/rhc/config.rb, line 194
def configs_cascade
  [
    @opts, 
    @opts_config, 
    @env_config, 
    @additional_config, 
    @local_config, 
    @global_config, 
    @defaults
  ]
end
default_proxy() click to toggle source

DEPRECATED - will be removed when old commands are gone

# File lib/rhc/config.rb, line 315
def default_proxy
  @default_proxy ||= (
    proxy = ENV['http_proxy'] || ENV['HTTP_PROXY']
    if proxy
      if proxy !~ /^(\w+):\/\// then
        proxy = "http://#{proxy}"
      end
      ENV['http_proxy'] = proxy
      proxy_uri = URI.parse(ENV['http_proxy'])
      Net::HTTP::Proxy(proxy_uri.host, proxy_uri.port, proxy_uri.user, proxy_uri.password)
    else
      Net::HTTP
    end
  )
end
default_rhlogin() click to toggle source

DEPRECATED - will be removed when old commands are gone

# File lib/rhc/config.rb, line 310
def default_rhlogin
  get_value('default_rhlogin')
end
get_value(key) click to toggle source

DEPRECATED - will be removed when old commands are gone

# File lib/rhc/config.rb, line 207
def get_value(key)
  self[key]
end
global_config_path() click to toggle source

DEPRECATED - may be made private

# File lib/rhc/config.rb, line 254
def global_config_path
  linux_cfg = '/etc/openshift/' + conf_name
  File.exists?(linux_cfg) ? linux_cfg : File.join(File.expand_path(File.dirname(__FILE__) + "/../../conf"), conf_name)
end
has_additional_config?() click to toggle source
# File lib/rhc/config.rb, line 273
def has_additional_config?
  lazy_init
  !@additional_config.nil?
end
has_configs_from_files?() click to toggle source
# File lib/rhc/config.rb, line 278
def has_configs_from_files?
  has_local_config? || has_opts_config? || has_additional_config?
end
has_global_config?() click to toggle source
# File lib/rhc/config.rb, line 259
def has_global_config?
  lazy_init
  !@global_config.nil?
end
has_local_config?() click to toggle source
# File lib/rhc/config.rb, line 264
def has_local_config?
  lazy_init
  !@local_config.nil?
end
has_opts_config?() click to toggle source
# File lib/rhc/config.rb, line 269
def has_opts_config?
  !@opts_config.nil?
end
home_conf_path() click to toggle source
# File lib/rhc/config.rb, line 305
def home_conf_path
  home_conf_dir
end
home_dir() click to toggle source
# File lib/rhc/config.rb, line 301
def home_dir
  RHC::Config.home_dir
end
path() click to toggle source
# File lib/rhc/config.rb, line 297
def path
  config_path
end
proxy_vars() click to toggle source

DEPRECATED - will be removed when old commands are gone

# File lib/rhc/config.rb, line 337
def proxy_vars
  Hash[[:address,:user,:pass,:port].map do |x|
    [x, default_proxy.instance_variable_get("@proxy_#{x}")]
  end]
end
read_config_files() click to toggle source

DEPRECATED - will be removed when old commands are gone

# File lib/rhc/config.rb, line 117
def read_config_files
  load_config_files
end
save!(options, fields=nil) click to toggle source
# File lib/rhc/config.rb, line 168
def save!(options, fields=nil)
  File.open(path, 'w') do |f| 
    f.puts self.class.options_to_config(
      options, 
      fields
    )
  end
  @opts, @opts_config, @env_config, @additional_config, @local_config, @global_config = nil
  load_config_files
  self
end
servers() click to toggle source
# File lib/rhc/config.rb, line 343
def servers
  @servers
end
set_defaults() click to toggle source

DEPRECATED - will be removed when old commands are gone

# File lib/rhc/config.rb, line 122
def set_defaults
  @defaults = RHC::Vendor::ParseConfig.new()
  @opts  = RHC::Vendor::ParseConfig.new() # option switches that override config file

  @env_config = RHC::Vendor::ParseConfig.new()
  @global_config = nil
  @local_config = nil
  @opts_config = nil # config file passed in the options
  @additional_config = nil

  @default_proxy = nil

  @defaults.add('libra_server', openshift_online_server)

  @env_config.add('libra_server', libra_server_env) if libra_server_env
  @env_config.add('libra_server', rhc_server_env) if rhc_server_env

  @opts_config_path = nil
end
set_local_config(conf_path, must_exist=true) click to toggle source

DEPRECATED - will be removed when old commands are gone

# File lib/rhc/config.rb, line 217
def set_local_config(conf_path, must_exist=true)
  conf_path = File.expand_path(conf_path)
  @config_path = conf_path if @opts_config_path.nil?
  @local_config = RHC::Vendor::ParseConfig.new(conf_path)
rescue Errno::EACCES => e
  raise Errno::EACCES.new "Could not open config file: #{e.message}" if must_exist
end
set_opts_config(conf_path) click to toggle source

DEPRECATED - needs to be renamed to something cleaner

# File lib/rhc/config.rb, line 226
def set_opts_config(conf_path)
  @opts_config_path = File.expand_path(conf_path)
  @config_path = @opts_config_path
  @opts_config = RHC::Vendor::ParseConfig.new(@opts_config_path) if File.exists?(@opts_config_path)
rescue Errno::EACCES => e
  raise Errno::EACCES.new "Could not open config file: #{e.message}"
end
should_run_ssh_wizard?() click to toggle source

DEPRECATED - should be moved to Helpers

# File lib/rhc/config.rb, line 283
def should_run_ssh_wizard?
  not File.exists? ssh_priv_key_file_path
end
sync_additional_config() click to toggle source
# File lib/rhc/config.rb, line 347
def sync_additional_config
  @additional_config = servers_config
end
to_options() click to toggle source
# File lib/rhc/config.rb, line 142
def to_options
  OPTIONS.inject({}) do |h, (name, opts)|
    opts = Array(opts)
    value = self[opts[0] || name.to_s]
    unless value.nil?
      value = case opts[1]
              when :integer
                Integer(value)
              when :boolean
                value.is_a?(TrueClass) || !!(value =~ /^\s*(y|yes|1|t|true)\s*$/)
              else
                value unless value.blank?
              end
      h[name] = value
    end
    h
  end
end
use_config(path) click to toggle source
# File lib/rhc/config.rb, line 234
def use_config(path)
  path = File.expand_path(path)
  set_opts_config(path)
rescue => e
  raise ArgumentError, "Unable to read configuration file: #{e.message}", $!.backtrace
end
username() click to toggle source

DEPRECATED - underlying value and command option needs to be migrated to login

# File lib/rhc/config.rb, line 212
def username
  self['default_rhlogin']
end
using_proxy?() click to toggle source

DEPRECATED - will be removed when old commands are gone

# File lib/rhc/config.rb, line 332
def using_proxy?
  default_proxy.instance_variable_get(:@is_proxy_class) || false
end

Private Instance Methods

lazy_init() click to toggle source
# File lib/rhc/config.rb, line 378
def lazy_init
  unless @loaded
    load_config_files
    load_servers
    @loaded = true
  end
end
load_config_files() click to toggle source
# File lib/rhc/config.rb, line 357
def load_config_files
  @global_config = RHC::Vendor::ParseConfig.new(global_config_path) if File.exists?(global_config_path)
  @local_config = RHC::Vendor::ParseConfig.new(File.expand_path(local_config_path)) if File.exists?(local_config_path)
rescue Errno::EACCES => e
  raise Errno::EACCES.new("Could not open config file: #{e.message}")
end
load_servers() click to toggle source
# File lib/rhc/config.rb, line 364
def load_servers
  @servers ||= RHC::Servers.new
end
servers_config() click to toggle source
# File lib/rhc/config.rb, line 368
def servers_config
  lazy_init
  libra_server_conf = (@local_config['libra_server'] rescue nil) || (@global_config['libra_server'] rescue nil)
  if libra_server_conf
    servers.find(libra_server_conf).to_config rescue nil
  else
    servers.list.first.to_config rescue nil
  end
end