Merge branch 'CID-471-set_ebs_optimized' into features
This commit is contained in:
commit
7e3e1715e1
@ -9,7 +9,7 @@ module Devops
|
||||
|
||||
def schedule_expiration!
|
||||
return unless @expires
|
||||
DeleteExpiredServerWorker.perform_in(interval_in_seconds, server_chef_node_name: @server.chef_node_name)
|
||||
DeleteExpiredServerWorker.perform_in(interval_in_seconds, server_id: @server.id)
|
||||
end
|
||||
|
||||
def interval_in_seconds
|
||||
|
||||
@ -265,8 +265,8 @@ module Devops
|
||||
return error_code(:server_not_in_chef_nodes)
|
||||
end
|
||||
else
|
||||
# @out << roll_back
|
||||
# mongo.server_delete @server.id
|
||||
roll_back
|
||||
mongo.server_delete @server.id
|
||||
msg = "Failed while bootstraping server with id '#{@server.id}'\n"
|
||||
msg << "Bootstraping operation result was #{bootstrap_status}"
|
||||
DevopsLogger.logger.error msg
|
||||
@ -511,8 +511,8 @@ module Devops
|
||||
|
||||
def schedule_expiration
|
||||
if @deploy_env.expires
|
||||
@out << "Planning expiration in #{@deploy_env.expires}"
|
||||
ExpirationScheduler.new(@deploy_env.expires, @server).schedule_expiration!
|
||||
job_id = ExpirationScheduler.new(@deploy_env.expires, @server).schedule_expiration!
|
||||
puts_and_flush "Planning expiration in #{@deploy_env.expires}, job_id: #{job_id}"
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@ -100,7 +100,9 @@ module Provider
|
||||
"InstanceType" => flavor,
|
||||
# "Placement.AvailabilityZone" => s.options[:availability_zone],
|
||||
"KeyName" => self.ssh_key,
|
||||
"PrivateIpAddress" => s.private_ip
|
||||
"PrivateIpAddress" => s.private_ip,
|
||||
"EbsOptimized" => ebs_optimized?(flavor),
|
||||
"BlockDeviceMapping" => ephemeral_storages_mappings(flavor)
|
||||
}
|
||||
vpcId = nil
|
||||
unless subnets.empty?
|
||||
@ -412,5 +414,30 @@ module Provider
|
||||
end
|
||||
end
|
||||
|
||||
# When you create an instance with one of these flavors within AWS console,
|
||||
# EbsOptimized is automatically set to true. But in case of creating within API we should set it manually.
|
||||
def ebs_optimized?(flavor)
|
||||
always_ebs_optimized = ['c4.large', 'c4.xlarge', 'c4.2xlarge', 'c4.4xlarge', 'c4.8xlarge', 'd2.xlarge', 'd2.2xlarge', 'd2.4xlarge', 'd2.8xlarge', 'm4.large', 'm4.xlarge', 'm4.2xlarge', 'm4.4xlarge', 'm4.10xlarge']
|
||||
always_ebs_optimized.include?(flavor)
|
||||
end
|
||||
|
||||
# When you create an instance with with ephemeral storages available within AWS console,
|
||||
# they are mapped automatically. But in case of creating within API we should map them manually.
|
||||
# Result example: [{'VirtualName' => 'ephemeral0', 'DeviceName' => '/dev/xvdb'}]
|
||||
def ephemeral_storages_mappings(flavor)
|
||||
require 'fog/aws/models/compute/flavors'
|
||||
details = Fog::Compute::AWS::FLAVORS.detect {|f| f[:id] == flavor}
|
||||
return [] unless details
|
||||
|
||||
mappings = []
|
||||
details[:instance_store_volumes].times do |i|
|
||||
mappings << {
|
||||
'VirtualName' => "ephemeral#{i}",
|
||||
'DeviceName' => "/dev/xvd#{('b'.ord + i).chr}"
|
||||
}
|
||||
end
|
||||
mappings
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
@ -5,7 +5,7 @@ RSpec.describe Devops::Executor::ExpirationScheduler do
|
||||
|
||||
describe '#schedule_expiration!' do
|
||||
it 'schedules server deleting at given time' do
|
||||
expect(DeleteExpiredServerWorker).to receive(:perform_in).with(120, server_chef_node_name: 'chef_node_name')
|
||||
expect(DeleteExpiredServerWorker).to receive(:perform_in).with(120, server_id: server.id)
|
||||
described_class.new('2m', server).schedule_expiration!
|
||||
end
|
||||
|
||||
|
||||
@ -140,7 +140,7 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec
|
||||
it 'schedules expiration for server' do
|
||||
deploy_env.expires = '2m'
|
||||
allow(DeleteExpiredServerWorker).to receive(:perform_in)
|
||||
expect(DeleteExpiredServerWorker).to receive(:perform_in).with(120, {server_chef_node_name: 'node_name'})
|
||||
expect(DeleteExpiredServerWorker).to receive(:perform_in).with(120, hash_including(:server_id))
|
||||
create_server
|
||||
end
|
||||
|
||||
@ -366,10 +366,19 @@ RSpec.describe Devops::Executor::ServerExecutor, type: :executor, stubbed_connec
|
||||
end
|
||||
|
||||
context "when bootstrap wasn't successful" do
|
||||
it 'returns :server_bootstrap_fail error code' do
|
||||
before do
|
||||
allow(executor).to receive(:bootstrap) { 1 }
|
||||
allow(executor).to receive(:roll_back)
|
||||
end
|
||||
|
||||
it 'returns :server_bootstrap_fail error code' do
|
||||
expect(two_phase_bootstrap).to eq 2
|
||||
end
|
||||
|
||||
it 'rollbacks server' do
|
||||
allow(executor).to receive(:roll_back)
|
||||
two_phase_bootstrap
|
||||
end
|
||||
end
|
||||
|
||||
context 'when an error occured during bootstrap' do
|
||||
|
||||
@ -3,7 +3,7 @@ require 'workers/stack_bootstrap/stack_servers_persister'
|
||||
RSpec.describe StackServersPersister, stubbed_connector: true do
|
||||
let(:out) { double(:out, puts: nil, flush: nil) }
|
||||
let(:run_list) { ['role[asd]'] }
|
||||
let(:stack) { build(:stack, deploy_env: 'foo', run_list: run_list) }
|
||||
let(:stack) { build(:stack_ec2, deploy_env: 'foo', run_list: run_list) }
|
||||
let(:project) { build(:project, id: 'name') }
|
||||
let(:persister) { described_class.new(stack, out) }
|
||||
let(:provider) { instance_double(Provider::Ec2, name: 'ec2') }
|
||||
@ -113,6 +113,15 @@ RSpec.describe StackServersPersister, stubbed_connector: true do
|
||||
persister.persist
|
||||
end
|
||||
|
||||
it "sets provider and provider account from stack" do
|
||||
stack.provider_account = 'foo'
|
||||
expect(stubbed_connector).to receive(:server_insert) do |server|
|
||||
expect(server.provider).to eq 'ec2'
|
||||
expect(server.provider_account).to eq 'foo'
|
||||
end
|
||||
persister.persist
|
||||
end
|
||||
|
||||
describe 'incremented variables' do
|
||||
it 'substitutes :increment-groupid: with incrementing numbers' do
|
||||
allow(provider).to receive(:stack_servers) {[
|
||||
|
||||
@ -6,12 +6,11 @@ require "workers/worker"
|
||||
class DeleteExpiredServerWorker < Worker
|
||||
|
||||
def perform(options)
|
||||
chef_node_name = options.fetch('server_chef_node_name')
|
||||
|
||||
call() do |out, file|
|
||||
out.puts "Expire server '#{chef_node_name}'."
|
||||
server = mongo.server_by_chef_node_name(chef_node_name)
|
||||
report = save_report(file, server)
|
||||
call do
|
||||
server_id = options.fetch('server_id')
|
||||
puts_and_flush "Expire server '#{server_id}'."
|
||||
server = mongo.server_by_instance_id(server_id)
|
||||
report = save_report(server)
|
||||
|
||||
e = Devops::Executor::ServerExecutor.new(server, out)
|
||||
e.report = report
|
||||
@ -21,17 +20,13 @@ class DeleteExpiredServerWorker < Worker
|
||||
|
||||
private
|
||||
|
||||
def save_report(file, server)
|
||||
report = Devops::Model::Report.new(
|
||||
"file" => file,
|
||||
"_id" => jid,
|
||||
def save_report(server)
|
||||
update_report(
|
||||
"created_by" => 'SYSTEM',
|
||||
"project" => server.project,
|
||||
"deploy_env" => server.deploy_env,
|
||||
"type" => Devops::Model::Report::EXPIRE_SERVER_TYPE
|
||||
)
|
||||
mongo.save_report(report)
|
||||
report
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@ -50,7 +50,8 @@ class StackServersPersister
|
||||
'deploy_env' => @deploy_env.identifier,
|
||||
'key' => server_info['key_name'] || @provider.ssh_key,
|
||||
'project' => @project.id,
|
||||
'provider' => @provider.name,
|
||||
'provider' => @stack.provider,
|
||||
'provider_account' => @stack.provider_account,
|
||||
'remote_user' => mongo.image(@deploy_env.image).remote_user,
|
||||
'private_ip' => server_info['private_ip'],
|
||||
'public_ip' => server_info['public_ip'],
|
||||
|
||||
Loading…
Reference in New Issue
Block a user