From: Tim Pierce Date: Tue, 21 Jan 2014 22:09:00 +0000 (-0500) Subject: Clients use $HOME/.config/arvados/settings.conf for configuration. (fixes #1943) X-Git-Tag: 1.1.0~2722^2~61^2 X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/b84df42d2949d46fe62c8ab5302be439bea66663 Clients use $HOME/.config/arvados/settings.conf for configuration. (fixes #1943) --- diff --git a/sdk/cli/bin/arv b/sdk/cli/bin/arv index b133a7783d..3955c94576 100755 --- a/sdk/cli/bin/arv +++ b/sdk/cli/bin/arv @@ -12,7 +12,7 @@ end # read authentication data from ~/.config/arvados if present lineno = 0 -config_file = File.expand_path('~/.config/arvados') +config_file = File.expand_path('~/.config/arvados/settings.conf') if File.exist? config_file then File.open(config_file, 'r').each do |line| lineno = lineno + 1 diff --git a/sdk/perl/lib/Arvados.pm b/sdk/perl/lib/Arvados.pm index 8a643788b6..31258f5172 100644 --- a/sdk/perl/lib/Arvados.pm +++ b/sdk/perl/lib/Arvados.pm @@ -82,9 +82,18 @@ sub new sub build { my $self = shift; - $self->{'authToken'} ||= $ENV{'ARVADOS_API_TOKEN'}; - $self->{'apiHost'} ||= $ENV{'ARVADOS_API_HOST'}; - $self->{'apiProtocolScheme'} ||= $ENV{'ARVADOS_API_PROTOCOL_SCHEME'}; + + $config = load_config_file("$ENV{HOME}/.config/arvados/settings.conf"); + + $self->{'authToken'} ||= + $ENV{ARVADOS_API_TOKEN} || $config->{ARVADOS_API_TOKEN}; + + $self->{'apiHost'} ||= + $ENV{ARVADOS_API_HOST} || $config->{ARVADOS_API_HOST}; + + $self->{'apiProtocolScheme'} ||= + $ENV{ARVADOS_API_PROTOCOL_SCHEME} || + $config->{ARVADOS_API_PROTOCOL_SCHEME}; $self->{'ua'} = new Arvados::Request; @@ -124,4 +133,21 @@ sub new_request Arvados::Request->new(); } +sub load_config_file ($) +{ + my $config_file = shift; + my %config; + + if (open (CONF, $config_file)) { + while () { + next if /^\s*#/ || /^\s*$/; # skip comments and blank lines + chomp; + my ($key, $val) = split /\s*=\s*/, $_, 2; + $config{$key} = $val; + } + } + close CONF; + return \%config; +} + 1; diff --git a/sdk/python/arvados/__init__.py b/sdk/python/arvados/__init__.py index dacdba851a..1adadd152f 100644 --- a/sdk/python/arvados/__init__.py +++ b/sdk/python/arvados/__init__.py @@ -37,7 +37,7 @@ class ArvadosConfig(dict): self[var] = os.environ[var] -config = ArvadosConfig(os.environ['HOME'] + '/.config/arvados') +config = ArvadosConfig(os.environ['HOME'] + '/.config/arvados/settings.conf') if 'ARVADOS_DEBUG' in config: logging.basicConfig(level=logging.DEBUG) diff --git a/sdk/ruby/lib/arvados.rb b/sdk/ruby/lib/arvados.rb index 0b00463508..5be1fd939e 100644 --- a/sdk/ruby/lib/arvados.rb +++ b/sdk/ruby/lib/arvados.rb @@ -32,18 +32,20 @@ class Arvados @application_version ||= 0.0 @application_name ||= File.split($0).last + @config = self.load_config_file + @arvados_api_version = opts[:api_version] || - ENV['ARVADOS_API_VERSION'] || + @config['ARVADOS_API_VERSION'] || 'v1' @arvados_api_host = opts[:api_host] || - ENV['ARVADOS_API_HOST'] or + @config['ARVADOS_API_HOST'] or raise "#{$0}: no :api_host or ENV[ARVADOS_API_HOST] provided." @arvados_api_token = opts[:api_token] || - ENV['ARVADOS_API_TOKEN'] or + @config['ARVADOS_API_TOKEN'] or raise "#{$0}: no :api_token or ENV[ARVADOS_API_TOKEN] provided." - if (opts[:api_host] ? opts[:suppress_ssl_warnings] : - ENV['ARVADOS_API_HOST_INSECURE']) + if (opts[:suppress_ssl_warnings] or + @config['ARVADOS_API_HOST_INSECURE']) suppress_warnings do OpenSSL::SSL.const_set 'VERIFY_PEER', OpenSSL::SSL::VERIFY_NONE end @@ -132,6 +134,32 @@ class Arvados $stderr.puts "#{File.split($0).last} #{$$}: #{message}" if @@debuglevel >= verbosity end + def load_config_file(config_file_path="~/.config/arvados/settings.conf") + # Initialize config settings with environment variables. + config = {} + config['ARVADOS_API_HOST'] = ENV['ARVADOS_API_HOST'] + config['ARVADOS_API_TOKEN'] = ENV['ARVADOS_API_TOKEN'] + config['ARVADOS_API_HOST_INSECURE'] = ENV['ARVADOS_API_HOST_INSECURE'] + config['ARVADOS_API_VERSION'] = ENV['ARVADOS_API_VERSION'] + + # Load settings from the config file. + lineno = 0 + File.open(File.expand_path config_file_path).each do |line| + lineno = lineno + 1 + # skip comments and blank lines + next if line.match('^\s*#') or not line.match('\S') + var, val = line.chomp.split('=', 2) + # allow environment settings to override config files. + if var and val + config[var] ||= val + else + warn "#{config_file}: #{lineno}: could not parse `#{line}'" + end + end + + config + end + class Model def self.arvados_api arvados.arvados_api @@ -147,7 +175,7 @@ class Arvados end def self.api_exec(method, parameters={}) parameters = parameters. - merge(:api_token => ENV['ARVADOS_API_TOKEN']) + merge(:api_token => @config['ARVADOS_API_TOKEN']) parameters.each do |k,v| parameters[k] = v.to_json if v.is_a? Array or v.is_a? Hash end