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 91
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 105
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 96
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 111
def initialize
  set_defaults
end
options_to_config(options, args=OPTIONS.keys) click to toggle source
# File lib/rhc/config.rb, line 68
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 81
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 352
def self.home_dir
  File.expand_path('~')
end

Public Instance Methods

[](key) click to toggle source
# File lib/rhc/config.rb, line 179
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 160
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 241
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 292
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 193
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 314
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 309
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 206
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 253
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 272
def has_additional_config?
  lazy_init
  !@additional_config.nil?
end
has_configs_from_files?() click to toggle source
# File lib/rhc/config.rb, line 277
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 258
def has_global_config?
  lazy_init
  !@global_config.nil?
end
has_local_config?() click to toggle source
# File lib/rhc/config.rb, line 263
def has_local_config?
  lazy_init
  !@local_config.nil?
end
has_opts_config?() click to toggle source
# File lib/rhc/config.rb, line 268
def has_opts_config?
  !@opts_config.nil?
end
home_conf_path() click to toggle source
# File lib/rhc/config.rb, line 304
def home_conf_path
  home_conf_dir
end
home_dir() click to toggle source
# File lib/rhc/config.rb, line 300
def home_dir
  RHC::Config.home_dir
end
path() click to toggle source
# File lib/rhc/config.rb, line 296
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 336
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 116
def read_config_files
  load_config_files
end
save!(options, fields=nil) click to toggle source
# File lib/rhc/config.rb, line 167
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 342
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 121
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 216
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 225
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 282
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 346
def sync_additional_config
  @additional_config = servers_config
end
to_options() click to toggle source
# File lib/rhc/config.rb, line 141
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*$/i)
              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 233
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 211
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 331
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 377
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 356
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 363
def load_servers
  @servers ||= RHC::Servers.new
end
servers_config() click to toggle source
# File lib/rhc/config.rb, line 367
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