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 92 def self.default @default ||= RHC::Config.new end
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 106 def self.initialize @default = nil default end
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
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 112 def initialize set_defaults end
# 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
# 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
Allow mocking of the home dir
# File lib/rhc/config.rb, line 353 def self.home_dir File.expand_path('~') end
# 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
# File lib/rhc/config.rb, line 161 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 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
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
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
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
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 310 def default_rhlogin get_value('default_rhlogin') end
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 207 def get_value(key) self[key] end
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
# File lib/rhc/config.rb, line 273 def has_additional_config? lazy_init !@additional_config.nil? end
# File lib/rhc/config.rb, line 278 def has_configs_from_files? has_local_config? || has_opts_config? || has_additional_config? end
# File lib/rhc/config.rb, line 259 def has_global_config? lazy_init !@global_config.nil? end
# File lib/rhc/config.rb, line 264 def has_local_config? lazy_init !@local_config.nil? end
# File lib/rhc/config.rb, line 269 def has_opts_config? !@opts_config.nil? end
# File lib/rhc/config.rb, line 305 def home_conf_path home_conf_dir end
# File lib/rhc/config.rb, line 301 def home_dir RHC::Config.home_dir end
# File lib/rhc/config.rb, line 297 def path config_path end
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
DEPRECATED - will be removed when old commands are gone
# File lib/rhc/config.rb, line 117 def read_config_files load_config_files end
# 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
# File lib/rhc/config.rb, line 343 def servers @servers end
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
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
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
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
# File lib/rhc/config.rb, line 347 def sync_additional_config @additional_config = servers_config end
# 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
# 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
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
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
# File lib/rhc/config.rb, line 378 def lazy_init unless @loaded load_config_files load_servers @loaded = true end end
# 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
# File lib/rhc/config.rb, line 364 def load_servers @servers ||= RHC::Servers.new end
# 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