diff --git a/devops-service/app/api2/handlers/provider.rb b/devops-service/app/api2/handlers/provider.rb index f7833b9..84f5c66 100644 --- a/devops-service/app/api2/handlers/provider.rb +++ b/devops-service/app/api2/handlers/provider.rb @@ -22,7 +22,22 @@ module Devops def add_account provider account = ::Provider::ProviderFactory.get(provider).create_account(parser.account) + certificate_content = account.certificate + cert_name = "#{account.account_name}.pem" + certificate_path = File.join(Devops::Api2.settings.keys_dir, cert_name) + if File.exists?(certificate_path) + raise ConflictException.new("File '#{cert_name}' already exists") + end + File.open(certificate_path, "w") do |f| + f << certificate_content + end + File.chmod(0600, certificate_path) + DevopsLogger.logger.info("File '#{certificate_path}' for provider account '#{account.account_name}' has been created") + key = Devops::Model::Key.new({"id" => account.ssh_key, "path" => certificate_path, "scope" => Devops::Model::Key::SYSTEM}) + Devops::Db.connector.key_insert key + account.certificate = certificate_path Devops::Db.connector.provider_accounts_insert(account) + account end def delete_account name, provider diff --git a/devops-service/app/api2/handlers/server.rb b/devops-service/app/api2/handlers/server.rb index a43ec4b..453f15a 100644 --- a/devops-service/app/api2/handlers/server.rb +++ b/devops-service/app/api2/handlers/server.rb @@ -35,7 +35,11 @@ module Devops end def provider_servers provider - ::Provider::ProviderFactory.get(provider).servers + provider_servers_with_account provider, nil + end + + def provider_servers_with_account provider, account + ::Provider::ProviderFactory.get(provider, account).servers end def server id diff --git a/devops-service/app/api2/routes/server.rb b/devops-service/app/api2/routes/server.rb index b06b610..25727d4 100644 --- a/devops-service/app/api2/routes/server.rb +++ b/devops-service/app/api2/routes/server.rb @@ -85,6 +85,11 @@ module Devops json Devops::API2_0::Handler::Server.new(request).provider_servers(provider) end + app.get_with_headers "/servers/provider/:provider/:account", :headers => [:accept] do |provider, account| + check_privileges("server", "r") + json Devops::API2_0::Handler::Server.new(request).provider_servers_with_account(provider, account) + end + # Get server info by :name # # * *Request* diff --git a/devops-service/commands/knife_commands.rb b/devops-service/commands/knife_commands.rb index ccaa811..45c4835 100644 --- a/devops-service/commands/knife_commands.rb +++ b/devops-service/commands/knife_commands.rb @@ -73,7 +73,9 @@ EOH end def knife cmd - o = `bundle exec knife #{cmd} -c #{self.config} 2>&1` + cmd = "bundle exec knife #{cmd} -c #{self.config} 2>&1" + DevopsLogger.logger.info("Going to invoke command: #{cmd}") + o = `#{cmd}` return o, $?.success? end diff --git a/devops-service/db/mongo/models/project.rb b/devops-service/db/mongo/models/project.rb index fb67c8f..24a2632 100644 --- a/devops-service/db/mongo/models/project.rb +++ b/devops-service/db/mongo/models/project.rb @@ -145,7 +145,7 @@ module Devops } end - def deploy_info deploy_env, build_number + def deploy_info deploy_env, build_number=nil { "use_json_file" => true, # "run_list" => Set.new.merge(self.run_list).merge(deploy_env.run_list).to_a, diff --git a/devops-service/lib/executors/server_executor.rb b/devops-service/lib/executors/server_executor.rb index ea58f17..7578d00 100644 --- a/devops-service/lib/executors/server_executor.rb +++ b/devops-service/lib/executors/server_executor.rb @@ -78,6 +78,7 @@ module Devops provider = @deploy_env.provider_instance mongo = ::Devops::Db.connector begin + @out.puts "Using '#{@deploy_env.provider}' account '#{@deploy_env.provider_account}'\n" if @deploy_env.provider_account @out.puts "Create server..." @out.flush @@ -137,6 +138,7 @@ module Devops end ja = { :provider => @server.provider, + :provider_account => @server.provider_account, :devops_host => `hostname`.strip } ip = @server.private_ip @@ -210,7 +212,7 @@ module Devops bootstrap_options.push "--sudo" unless @server.remote_user == "root" bootstrap_options.push "-t #{options[:bootstrap_template]}" if options[:bootstrap_template] rl = options[:run_list] - bootstrap_options.push "-r #{rl.join(",")}" unless rl.nil?# rl.empty? + bootstrap_options.push "-r #{rl.join(",")}" unless rl.nil? or rl.empty? bootstrap_options.push "-c #{options[:config]}" if options[:config] bootstrap_options end @@ -269,6 +271,7 @@ module Devops end rescue => e @out << "\nError: #{e.message}\n" + DevopsLogger.logger.error(e.message + "\n" + e.backtrace.join("\n")) result_code(:deploy_unknown_error) end end diff --git a/devops-service/providers/ec2.rb b/devops-service/providers/ec2.rb index 0a9d222..40fb10b 100644 --- a/devops-service/providers/ec2.rb +++ b/devops-service/providers/ec2.rb @@ -94,7 +94,7 @@ module Provider def servers list = self.compute.describe_instances.body["reservationSet"] - list.select{|l| l["instancesSet"][0]["instanceState"]["name"].to_s != "terminated"}.map do |server| + list.select{|l| l["instancesSet"][0]["instanceState"]["name"].to_s == "running"}.map do |server| convert_server server["instancesSet"][0] end end