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.
Option name [config_key type comment_string_for_config]
if nil, == key nil == string won't be written to file if nil
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 86 def self.default @default ||= RHC::Config.new end
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 100 def self.initialize @default = nil default end
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 91 def self.method_missing(method, *args, &block) if default.respond_to?(method) default.send(method, *args, &block) else raise NoMethodError, method end end
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 106 def initialize set_defaults end
# File lib/rhc/config.rb, line 64 def self.options_to_config(options) OPTIONS.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.join("\n") end
# File lib/rhc/config.rb, line 76 def self.type_to_config(type, value) case type when :integer, :boolean value.nil? ? "<#{type}>" : value else value.nil? ? "<#{type || 'string'}>" : value end end
# File lib/rhc/config.rb, line 159 def [](key) lazy_init # evaluate in cascading order configs = [@opts, @opts_config, @env_config, @local_config, @global_config, @defaults] result = nil configs.each do |conf| result = conf[key] if !conf.nil? break if !result.nil? end result end
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 209 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
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 251 def config_path @config_path ||= local_config_path end
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 272 def default_proxy @default_proxy ||= ( proxy = ENV['http_proxy'] || ENV['HTTP_PROXY'] if proxy if proxy !~ %r^(\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
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 267 def default_rhlogin get_value('default_rhlogin') end
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 174 def get_value(key) self[key] end
DEPRECATED - may be made private
# File lib/rhc/config.rb, line 221 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
# File lib/rhc/config.rb, line 226 def has_global_config? lazy_init !@global_config.nil? end
# File lib/rhc/config.rb, line 231 def has_local_config? lazy_init !@local_config.nil? end
# File lib/rhc/config.rb, line 236 def has_opts_config? !@opts_config.nil? end
# File lib/rhc/config.rb, line 262 def home_conf_path home_conf_dir end
# File lib/rhc/config.rb, line 258 def home_dir RHC::Config.home_dir end
# File lib/rhc/config.rb, line 254 def path config_path end
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 294 def proxy_vars Hash[[:address,:user,:pass,:port].map do |x| [x,default_proxy.instance_variable_get("@proxy_#{x}")] end] end
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 111 def read_config_files load_config_files end
# File lib/rhc/config.rb, line 152 def save!(options) File.open(path, 'w'){ |f| f.puts self.class.options_to_config(options) } @opts, @opts_config, @local_config, @global_config = nil load_config_files self end
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 116 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 @default_proxy = nil @defaults.add('libra_server', 'openshift.redhat.com') @env_config.add('libra_server', ENV['LIBRA_SERVER']) if ENV['LIBRA_SERVER'] @opts_config_path = nil end
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 184 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
DEPRECATED - needs to be renamed to something cleaner
# File lib/rhc/config.rb, line 193 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
DEPRECATED - should be moved to Helpers
# File lib/rhc/config.rb, line 241 def should_run_ssh_wizard? not File.exists? ssh_priv_key_file_path end
# File lib/rhc/config.rb, line 133 def to_options OPTIONS.inject({}) do |h, (name, opts)| opts = Array(opts) value = self[opts[0] || name.to_s] if value value = case opts[1] when :integer Integer(value) when :boolean !!(value =~ %r^\s*(y|yes|1|t|true)\s*$/) else value unless value.blank? end h[name] = value unless value.nil? end h end end
# File lib/rhc/config.rb, line 201 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
DEPRECATED - underlying value and command option needs to be migrated to login
# File lib/rhc/config.rb, line 179 def username self['default_rhlogin'] end
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 289 def using_proxy? default_proxy.instance_variable_get(:@is_proxy_class) || false end