require 'json' require 'logger' require 'net/http' require "trace-runner" require "registry" class PrepareEnvironment def addToEnv (envFile) log = Logger.new(Canzea::config[:logging_root] + '/plans.log') r = Registry.new file = File.read(envFile) serviceLookups = JSON.parse(file) serviceLookups['keyvalues'].each do |svc| log.info("Looking up...#{svc['name']}") s = r.getKeyValue(svc['name']) if (s.nil? == false) # puts s key = "" + svc['name'].upcase key = key.gsub(/\./, '').gsub(/-/, '_').gsub(/\//, '_') log.info("Setting: " + key + " : " + s) ENV.store(key, s) else log.warn("KEY VALUE NOT FOUND! " + svc['name']) puts "-- KEY VALUE NOT FOUND! " + svc['name'] abort() end end serviceLookups['services'].each do |svc| puts "Looking up...#{svc['name']}" url = ENV["CONSUL_URL"] + '/v1/catalog/service/' + svc['name'] resp = Net::HTTP.get_response(URI.parse(url)) service = JSON.parse(resp.body) # s = r.getValue(svc['name'], "publicIp") s = service[0] if (s.nil? == false) # puts s key = "" + svc['name'].upcase + "_ADDRESS" key = key.gsub(/\./, '') log.info("Setting: " + key + " : " + s["ServiceAddress"]) ENV.store(key, s["ServiceAddress"]) key = "" + svc['name'].upcase + "_PORT" key = key.gsub(/\./, '') log.info("Setting: " + key + " : " + String(s["ServicePort"])) ENV.store(key, String(s["ServicePort"])) key = "" + svc['name'].upcase + "_URL" key = key.gsub(/\./, '') val = "http://" + s["ServiceAddress"] + ":" + String(s["ServicePort"]) log.info("Setting: " + key + " : " + val) ENV.store(key, val) else log.warn("SERVICE NOT FOUND! " + svc['name']) puts "-- SERVICE NOT FOUND! " + svc['name'] abort() end end serviceLookups['secrets'].each do |svc| # puts "Looking up secret...#{svc['name']}" url = URI(ENV['VAULT_URL'] + '/v1/secret/' + svc['name']) req = Net::HTTP::Get.new(url) req['X-Vault-Token'] = ENV["VAULT_TOKEN"] req['Content-type'] = 'application/json' resp = Net::HTTP.start(url.hostname, url.port) {|http| http.request(req) } # puts resp.body if (Integer(resp.code) == 200) data = JSON.parse(resp.body) s = data['data'] s.each do |k| key = "" + svc['name'].upcase + "_" + k[0].upcase key = key.gsub(/\./, '').gsub(/-/, '_').gsub(/\//, '_') log.info("Setting: " + key) ENV.store(key, k[1]) end else log.warn( "SECRET NOT FOUND! " + svc['name']) log.warn( "ERROR FROM VAULT " + resp.body) puts "-- SECRET NOT FOUND! " + svc['name'] puts "-- ERROR FROM VAULT " + resp.body abort() end end end def print () ENV.each_pair { |name,value| puts name + " = " + value } end end