require 'logger'
require 'trollop'
+
log = Logger.new STDERR
log.progname = $0.split('/').last
if ARGV.count != 3
Trollop::die "required arguments are missing"
end
+
user_arg, user_repo_name, vm_uuid = ARGV
require 'arvados'
arv = Arvados.new(api_version: 'v1')
+# Look up the given user by uuid or, failing that, email address.
begin
- new_user = arv.user.create(user_param: user_arg, repo_name: user_repo_name, vm_uuid: vm_uuid, openid_prefix: opts.openid_prefix, user: {})
- log.warn new_user
-rescue Exception => e #Arvados::TransactionFailedError
- log.warn e.message
-end
+ user = arv.user.get(uuid: user_arg)
+rescue Arvados::TransactionFailedError
+ found = arv.user.list(where: {email: ARGV[0]})[:items]
+
+ if found.count == 0
+ if !user_arg.match(/\w\@\w+\.\w+/)
+ abort "About to create new user, but #{user_arg.inspect} " +
+ "does not look like an email address. Stop."
+ end
+
+ user = arv.user.setup(repo_name: user_repo_name, vm_uuid: vm_uuid,
+ user: {email: user_arg})
+ log.info { "created user: " + user[:uuid] }
+ elsif found.count != 1
+ abort "Found #{found.count} users " +
+ "with uuid or email #{user_arg.inspect}. Stop."
+ else
+ user = found.first
+ # Found user. Update ther user links
+ user = arv.user.setup(repo_name: user_repo_name, vm_uuid: vm_uuid,
+ user: {email: user[:uuid]})
+ end
+ puts "USER = #{user.inspect}"
+ log.info { "user uuid: " + user[:uuid] }
+end