class OrchestratorClient::Config
Public Class Methods
new(overrides = nil, load_files=false)
click to toggle source
# File lib/orchestrator_client/config.rb, line 6 def initialize(overrides = nil, load_files=false) @overrides = overrides || {} @load_files = load_files end
Public Instance Methods
[](key)
click to toggle source
# File lib/orchestrator_client/config.rb, line 124 def [](key) @config[key] end
cacert()
click to toggle source
# File lib/orchestrator_client/config.rb, line 31 def cacert "#{puppetlabs_root}/puppet/ssl/certs/ca.pem" end
config()
click to toggle source
# File lib/orchestrator_client/config.rb, line 87 def config @config ||= load_config end
defaults()
click to toggle source
# File lib/orchestrator_client/config.rb, line 35 def defaults { 'cacert' => cacert, 'token-file' => File.join(user_root, 'token'), 'User-Agent' => "OrchestratorRubyClient/#{OrchestratorClient::VERSION}", 'job-poll-interval' => 1, 'job-poll-timeout' => 1000, } end
global_conf()
click to toggle source
# File lib/orchestrator_client/config.rb, line 19 def global_conf File.join(puppetlabs_root, 'client-tools', 'orchestrator.conf') end
load_config()
click to toggle source
# File lib/orchestrator_client/config.rb, line 44 def load_config config = defaults if @load_files if File.exists?(global_conf) && File.readable?(global_conf) config = config.merge(load_file(global_conf)) end if @overrides['config-file'] config = config.merge(load_file(@overrides['config-file'])) elsif File.exists?(user_conf) && File.readable?(user_conf) config = config.merge(load_file(user_conf)) end end config.merge!(@overrides) %w[token-file cacert].each do |f| config[f] = File.expand_path(config[f]) if config[f] end config end
load_file(path)
click to toggle source
# File lib/orchestrator_client/config.rb, line 11 def load_file(path) File.open(path) {|f| JSON.parse(f.read)['options']} end
load_token()
click to toggle source
# File lib/orchestrator_client/config.rb, line 95 def load_token if @config['token'] @config['token'] else validate_file('token-file', config['token-file']) token = File.open(config['token-file']) { |f| f.read.strip } # If the token file contains illegal characters if token =~ URI::UNSAFE raise OrchestratorClient::ConfigError.new("token-file '#{config['token-file']}' contains illegal characters") end @config['token'] = token @config['token'] end end
overrides_only()
click to toggle source
# File lib/orchestrator_client/config.rb, line 91 def overrides_only @config = @overrides end
puppetlabs_root()
click to toggle source
# File lib/orchestrator_client/config.rb, line 15 def puppetlabs_root "/etc/puppetlabs" end
root_url()
click to toggle source
# File lib/orchestrator_client/config.rb, line 114 def root_url unless @root_url url = @config['service-url'] url += '/' if url !~ /\/$/ url += 'orchestrator/v1/' @root_url = url end @root_url end
token()
click to toggle source
# File lib/orchestrator_client/config.rb, line 110 def token @token ||= load_token end
user_conf()
click to toggle source
# File lib/orchestrator_client/config.rb, line 27 def user_conf File.join(user_root, 'client-tools', 'orchestrator.conf') end
user_root()
click to toggle source
# File lib/orchestrator_client/config.rb, line 23 def user_root File.join(Dir.home, '.puppetlabs') end
validate()
click to toggle source
# File lib/orchestrator_client/config.rb, line 66 def validate if config['service-url'].nil? raise OrchestratorClient::ConfigError.new("'service-url' is required in config") end begin service_url = URI.parse(config['service-url']) unless service_url.kind_of?(URI::HTTP) || service_url.kind_of?(URI::HTTPS) raise OrchestratorClient::ConfigError.new("'#{config['service-url']}' is an invalid service-url") end rescue URI::InvalidURIError raise OrchestratorClient::ConfigError.new("'#{config['service-url']}' is an invalid service-url") end if config['cacert'].nil? raise OrchestratorClient::ConfigError.new("'cacert' is required in config") end validate_file('cacert', config['cacert']) end
validate_file(type, path)
click to toggle source
# File lib/orchestrator_client/config.rb, line 128 def validate_file(type, path) stat = File.stat(path) if !stat.readable? OrchestratorClient::ConfigError.new("#{type} '#{path}' is unreadable") elsif !stat.file? OrchestratorClient::ConfigError.new("#{type} '#{path}' is not a file") end rescue Errno::ENOENT raise OrchestratorClient::ConfigError.new("#{type} '#{path}' does not exist") end