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
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 91 def self.default @default ||= RHC::Config.new end
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 105 def self.initialize @default = nil default end
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
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 111 def initialize set_defaults end
# 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
# 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
Allow mocking of the home dir
# File lib/rhc/config.rb, line 352 def self.home_dir File.expand_path('~') end
Public Instance Methods
# 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
# File lib/rhc/config.rb, line 160 def backup if File.exists? path backup = "#{path}.bak" FileUtils.cp(path, backup) end end
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
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
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
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
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 309 def default_rhlogin get_value('default_rhlogin') end
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 206 def get_value(key) self[key] end
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
# File lib/rhc/config.rb, line 272 def has_additional_config? lazy_init !@additional_config.nil? end
# File lib/rhc/config.rb, line 277 def has_configs_from_files? has_local_config? || has_opts_config? || has_additional_config? end
# File lib/rhc/config.rb, line 258 def has_global_config? lazy_init !@global_config.nil? end
# File lib/rhc/config.rb, line 263 def has_local_config? lazy_init !@local_config.nil? end
# File lib/rhc/config.rb, line 268 def has_opts_config? !@opts_config.nil? end
# File lib/rhc/config.rb, line 304 def home_conf_path home_conf_dir end
# File lib/rhc/config.rb, line 300 def home_dir RHC::Config.home_dir end
# File lib/rhc/config.rb, line 296 def path config_path end
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
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 116 def read_config_files load_config_files end
# 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
# File lib/rhc/config.rb, line 342 def servers @servers end
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
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
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
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
# File lib/rhc/config.rb, line 346 def sync_additional_config @additional_config = servers_config end
# 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
# 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
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
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
# File lib/rhc/config.rb, line 377 def lazy_init unless @loaded load_config_files load_servers @loaded = true end end
# 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
# File lib/rhc/config.rb, line 363 def load_servers @servers ||= RHC::Servers.new end
# 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