From af3f9f2440e2c2248be1ff239190317a4a9969ab Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sat, 11 Feb 2017 03:40:27 -0800 Subject: [PATCH 01/21] Outline of an ELB setup --- lib/broadside/ecs/ecs_deploy.rb | 12 ++++++++++++ lib/broadside/ecs/ecs_manager.rb | 17 ++++++++++++++++ lib/broadside/target.rb | 4 +++- spec/broadside/ecs/ecs_manager_spec.rb | 27 ++++++++++++++++++++++++++ spec/support/ecs_shared_contexts.rb | 2 ++ 5 files changed, 61 insertions(+), 1 deletion(-) diff --git a/lib/broadside/ecs/ecs_deploy.rb b/lib/broadside/ecs/ecs_deploy.rb index 1a655d5..e7d48ce 100644 --- a/lib/broadside/ecs/ecs_deploy.rb +++ b/lib/broadside/ecs/ecs_deploy.rb @@ -44,6 +44,18 @@ def bootstrap info("Service for #{family} already exists.") else raise ConfigurationError, "No :service_config for #{family}" unless @target.service_config + + if @target.service_config[:load_balancers] + elb_name = @target.service_config[:load_balancers].first[:load_balancer_name] + + if (elb_arn = EcsManager.get_load_balancer_arn_by_name(elb_name)) + # Verify ELB definition matches + else + raise ConfigurationError, "No ELB #{elb_name}/no :load_balancer_config" unless @target.load_balancer_config + EcsManager.create_load_balancer(@target.load_balancer_config) + end + end + info "Service '#{family}' doesn't exist, creating..." EcsManager.create_service(cluster, family, @target.service_config) end diff --git a/lib/broadside/ecs/ecs_manager.rb b/lib/broadside/ecs/ecs_manager.rb index 9882091..ac29f26 100644 --- a/lib/broadside/ecs/ecs_manager.rb +++ b/lib/broadside/ecs/ecs_manager.rb @@ -149,6 +149,16 @@ def current_service_scale(target) EcsManager.ecs.describe_services(cluster: target.cluster, services: [target.family]).services.first[:desired_count] end + # Returns the load balancer response hash + def create_load_balancer(load_balancer_config) + elb_client.create_load_balancer(load_balancer_config).load_balancers.first.to_hash + end + + def get_load_balancer_arn_by_name(name) + load_balancers = elb_client.describe_load_balancers().load_balancers + load_balancers.detect { |lb| lb.load_balancer_name == name }.try(:[], :load_balancer_arn) + end + private def all_results(method, key, args = {}) @@ -169,6 +179,13 @@ def ec2_client credentials: Broadside.config.aws.credentials ) end + + def elb_client + @elb_client ||= Aws::ElasticLoadBalancingV2::Client.new( + region: region_name, + credentials: credentials + ) + end end end end diff --git a/lib/broadside/target.rb b/lib/broadside/target.rb index 3737441..3df77d3 100644 --- a/lib/broadside/target.rb +++ b/lib/broadside/target.rb @@ -11,6 +11,7 @@ class Target :cluster, :command, :docker_image, + :load_balancer_config, :name, :predeploy_commands, :scale, @@ -26,7 +27,7 @@ class Target record.errors.add(attr, 'is not array of arrays') unless val.is_a?(Array) && val.all? { |v| v.is_a?(Array) } end - validates_each(:service_config, allow_nil: true) do |record, attr, val| + validates_each(:load_balancer_config, :service_config, allow_nil: true) do |record, attr, val| record.errors.add(attr, 'is not a hash') unless val.is_a?(Hash) end @@ -52,6 +53,7 @@ def initialize(name, options = {}) @cluster = config.delete(:cluster) || Broadside.config.aws.ecs_default_cluster @command = config.delete(:command) @docker_image = config.delete(:docker_image) || Broadside.config.default_docker_image + @load_balancer_config = config.delete(:load_balancer_config) @predeploy_commands = config.delete(:predeploy_commands) @scale = config.delete(:scale) @service_config = config.delete(:service_config) diff --git a/spec/broadside/ecs/ecs_manager_spec.rb b/spec/broadside/ecs/ecs_manager_spec.rb index 185bd20..77ce1a3 100644 --- a/spec/broadside/ecs/ecs_manager_spec.rb +++ b/spec/broadside/ecs/ecs_manager_spec.rb @@ -57,4 +57,31 @@ expect(described_class.get_task_definition_arns('task')).to eq(task_definition_arns) end end + + context 'load balancers' do + let(:elb_name) { 'my-load-balancer' } + let(:elb_config) { { name: elb_name, subnets: [ 'subnet-xyz', 'subnet-abc'] } } + let(:elb_arn) { 'elb_arn' } + let(:elb_response) { { load_balancer_arn: elb_arn, load_balancer_name: elb_config[:name] } } + + describe '#create_load_balancer' do + before do + elb_stub.stub_responses(:create_load_balancer, load_balancers: [elb_response]) + end + + it 'can create an ELB' do + expect(described_class.create_load_balancer(elb_config)).to eq(elb_response) + end + end + + describe '#get_load_balancer_arn_by_name' do + before do + elb_stub.stub_responses(:describe_load_balancers, load_balancers: [elb_response]) + end + + it 'should find the relevant elb config' do + expect(described_class.get_load_balancer_arn_by_name(elb_name)).to eq(elb_arn) + end + end + end end diff --git a/spec/support/ecs_shared_contexts.rb b/spec/support/ecs_shared_contexts.rb index b90bab3..2faa3d7 100644 --- a/spec/support/ecs_shared_contexts.rb +++ b/spec/support/ecs_shared_contexts.rb @@ -3,10 +3,12 @@ let(:api_request_methods) { api_request_log.map(&:keys).flatten } let(:ecs_stub) { build_stub_aws_client(Aws::ECS::Client, api_request_log) } let(:ec2_stub) { build_stub_aws_client(Aws::EC2::Client, api_request_log) } + let(:elb_stub) { build_stub_aws_client(Aws::ElasticLoadBalancingV2::Client, api_request_log) } before(:each) do Broadside::EcsManager.instance_variable_set(:@ecs_client, ecs_stub) Broadside::EcsManager.instance_variable_set(:@ec2_client, ec2_stub) + Broadside::EcsManager.instance_variable_set(:@elb_client, elb_stub) end end From 7a15e482ad496292b25e6ae0eb327d95d09a5366 Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sat, 11 Feb 2017 03:56:26 -0800 Subject: [PATCH 02/21] Validation + spec --- lib/broadside/ecs/ecs_deploy.rb | 2 +- lib/broadside/target.rb | 10 +++++++++- spec/broadside/target_spec.rb | 4 +++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/broadside/ecs/ecs_deploy.rb b/lib/broadside/ecs/ecs_deploy.rb index e7d48ce..d4f6e3f 100644 --- a/lib/broadside/ecs/ecs_deploy.rb +++ b/lib/broadside/ecs/ecs_deploy.rb @@ -52,7 +52,7 @@ def bootstrap # Verify ELB definition matches else raise ConfigurationError, "No ELB #{elb_name}/no :load_balancer_config" unless @target.load_balancer_config - EcsManager.create_load_balancer(@target.load_balancer_config) + EcsManager.create_load_balancer(@target.load_balancer_config.merge(load_balancer_name: elb_name)) end end diff --git a/lib/broadside/target.rb b/lib/broadside/target.rb index 3df77d3..a2c9324 100644 --- a/lib/broadside/target.rb +++ b/lib/broadside/target.rb @@ -27,8 +27,16 @@ class Target record.errors.add(attr, 'is not array of arrays') unless val.is_a?(Array) && val.all? { |v| v.is_a?(Array) } end - validates_each(:load_balancer_config, :service_config, allow_nil: true) do |record, attr, val| + validates_each(:service_config, allow_nil: true) do |record, attr, val| record.errors.add(attr, 'is not a hash') unless val.is_a?(Hash) + if (elbs = val[:load_balancers].try(:first)) + record.errors.add(:load_balancer_config) unless elbs[:load_balancer_name] + end + end + + validates_each(:load_balancer_config, allow_nil: true) do |record, attr, val| + record.errors.add(attr, 'is not a hash') unless val.is_a?(Hash) + record.errors.add(attr, ':load_balancer_name is specified in :service_config') if val[:load_balancer_name] end validates_each(:task_definition_config, allow_nil: true) do |record, attr, val| diff --git a/spec/broadside/target_spec.rb b/spec/broadside/target_spec.rb index ea2cc7a..6206f6e 100644 --- a/spec/broadside/target_spec.rb +++ b/spec/broadside/target_spec.rb @@ -35,7 +35,9 @@ it_behaves_like 'valid_configuration?', true, predeploy_commands: [%w(do something)] it_behaves_like 'valid_configuration?', true, predeploy_commands: [%w(do something), %w(other command)] - it_behaves_like 'valid_configuration?', false, task_definition_config: { container_definitions: %w(a b) } + it_behaves_like 'valid_configuration?', false, task_definition_config: { container_definitions: %w(a b) } + + it_behaves_like 'valid_configuration?', true, { service_config: { load_balancers: [{ load_balancer_name: 'elb' }] } } end describe '#ecs_env_vars' do From 506431669769b56c681fcda50360e148315ca9a3 Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sat, 11 Feb 2017 04:02:13 -0800 Subject: [PATCH 03/21] Tags --- lib/broadside/target.rb | 8 ++++++-- spec/broadside/target_spec.rb | 10 +++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/broadside/target.rb b/lib/broadside/target.rb index a2c9324..d4697b4 100644 --- a/lib/broadside/target.rb +++ b/lib/broadside/target.rb @@ -29,14 +29,18 @@ class Target validates_each(:service_config, allow_nil: true) do |record, attr, val| record.errors.add(attr, 'is not a hash') unless val.is_a?(Hash) - if (elbs = val[:load_balancers].try(:first)) - record.errors.add(:load_balancer_config) unless elbs[:load_balancer_name] + if (elb = val[:load_balancers].try(:first)) + record.errors.add(:load_balancer_config) unless elb[:load_balancer_name] end end validates_each(:load_balancer_config, allow_nil: true) do |record, attr, val| record.errors.add(attr, 'is not a hash') unless val.is_a?(Hash) record.errors.add(attr, ':load_balancer_name is specified in :service_config') if val[:load_balancer_name] + # TODO: validate tag? + [:subnets].each do |elb_property| + record.errors.add(attr, "#{elb_property} is required in :load_balancer_config") unless val[elb_property] + end end validates_each(:task_definition_config, allow_nil: true) do |record, attr, val| diff --git a/spec/broadside/target_spec.rb b/spec/broadside/target_spec.rb index 6206f6e..23003ef 100644 --- a/spec/broadside/target_spec.rb +++ b/spec/broadside/target_spec.rb @@ -37,7 +37,15 @@ it_behaves_like 'valid_configuration?', false, task_definition_config: { container_definitions: %w(a b) } - it_behaves_like 'valid_configuration?', true, { service_config: { load_balancers: [{ load_balancer_name: 'elb' }] } } + it_behaves_like 'valid_configuration?', true, { service_config: { load_balancers: [{ load_balancer_name: 'x' }] } } + it_behaves_like 'valid_configuration?', true, { + service_config: { + load_balancers: [{ load_balancer_name: 'x' }] + }, + load_balancer_config: { + subnets: ['abc', 'xyz'] + } + } end describe '#ecs_env_vars' do From 575dffa36ea8cdf81ddfe9157e9cf8ba2852f5a8 Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sat, 11 Feb 2017 04:09:37 -0800 Subject: [PATCH 04/21] Tag with family --- lib/broadside/ecs/ecs_manager.rb | 6 ++++-- spec/broadside/ecs/ecs_manager_spec.rb | 10 ++-------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/lib/broadside/ecs/ecs_manager.rb b/lib/broadside/ecs/ecs_manager.rb index ac29f26..efbf4b9 100644 --- a/lib/broadside/ecs/ecs_manager.rb +++ b/lib/broadside/ecs/ecs_manager.rb @@ -150,8 +150,10 @@ def current_service_scale(target) end # Returns the load balancer response hash - def create_load_balancer(load_balancer_config) - elb_client.create_load_balancer(load_balancer_config).load_balancers.first.to_hash + def create_load_balancer(load_balancer_config, family = nil) + # Docs say tags are required but sandbox says otherwise + tags = [{ key: 'family', value: family }] if family + elb_client.create_load_balancer(load_balancer_config.merge(tags: tags)).load_balancers.first.to_h end def get_load_balancer_arn_by_name(name) diff --git a/spec/broadside/ecs/ecs_manager_spec.rb b/spec/broadside/ecs/ecs_manager_spec.rb index 77ce1a3..8b511be 100644 --- a/spec/broadside/ecs/ecs_manager_spec.rb +++ b/spec/broadside/ecs/ecs_manager_spec.rb @@ -64,14 +64,8 @@ let(:elb_arn) { 'elb_arn' } let(:elb_response) { { load_balancer_arn: elb_arn, load_balancer_name: elb_config[:name] } } - describe '#create_load_balancer' do - before do - elb_stub.stub_responses(:create_load_balancer, load_balancers: [elb_response]) - end - - it 'can create an ELB' do - expect(described_class.create_load_balancer(elb_config)).to eq(elb_response) - end + it 'can create an ELB' do + described_class.create_load_balancer(elb_config, 'elb_family') end describe '#get_load_balancer_arn_by_name' do From 1ba68f8a1f5e2f389b8146a48923c023a5b41114 Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sat, 11 Feb 2017 04:21:45 -0800 Subject: [PATCH 05/21] Spec for create_service with load_balancer --- lib/broadside/ecs/ecs_deploy.rb | 2 +- spec/broadside/ecs/ecs_deploy_spec.rb | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/broadside/ecs/ecs_deploy.rb b/lib/broadside/ecs/ecs_deploy.rb index d4f6e3f..85badce 100644 --- a/lib/broadside/ecs/ecs_deploy.rb +++ b/lib/broadside/ecs/ecs_deploy.rb @@ -52,7 +52,7 @@ def bootstrap # Verify ELB definition matches else raise ConfigurationError, "No ELB #{elb_name}/no :load_balancer_config" unless @target.load_balancer_config - EcsManager.create_load_balancer(@target.load_balancer_config.merge(load_balancer_name: elb_name)) + EcsManager.create_load_balancer(@target.load_balancer_config.merge(load_balancer_name: elb_name), family) end end diff --git a/spec/broadside/ecs/ecs_deploy_spec.rb b/spec/broadside/ecs/ecs_deploy_spec.rb index c77da03..1515f5e 100644 --- a/spec/broadside/ecs/ecs_deploy_spec.rb +++ b/spec/broadside/ecs/ecs_deploy_spec.rb @@ -38,6 +38,19 @@ expect(Broadside::EcsManager).to receive(:create_service).with(cluster, deploy.family, service_config) expect { deploy.bootstrap }.to_not raise_error end + + context 'with a load_balancer_config' do + let(:elb_name) { 'my-load-balancer' } + let(:elb_config) { { subnets: [ 'subnet-xyz', 'subnet-abc'] } } + let(:elb_service_config) { service_config.merge(load_balancers: [{ load_balancer_name: elb_name }]) } + let(:local_target_config) { { service_config: elb_service_config, load_balancer_config: elb_config } } + + it 'sets up the ELB' do + expect(Broadside::EcsManager).to receive(:create_load_balancer).with(elb_config.merge(load_balancer_name: elb_name), family) + expect(Broadside::EcsManager).to receive(:create_service).with(cluster, deploy.family, elb_service_config) + expect { deploy.bootstrap}.to_not raise_error + end + end end context 'with an existing service' do From f7e54e0a29ee81c49d80f8dd5b9f6095b5a44a20 Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sat, 11 Feb 2017 04:32:08 -0800 Subject: [PATCH 06/21] workign spec --- lib/broadside/ecs/ecs_deploy.rb | 2 +- spec/broadside/ecs/ecs_deploy_spec.rb | 28 ++++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/lib/broadside/ecs/ecs_deploy.rb b/lib/broadside/ecs/ecs_deploy.rb index 85badce..f1cfbb1 100644 --- a/lib/broadside/ecs/ecs_deploy.rb +++ b/lib/broadside/ecs/ecs_deploy.rb @@ -52,7 +52,7 @@ def bootstrap # Verify ELB definition matches else raise ConfigurationError, "No ELB #{elb_name}/no :load_balancer_config" unless @target.load_balancer_config - EcsManager.create_load_balancer(@target.load_balancer_config.merge(load_balancer_name: elb_name), family) + EcsManager.create_load_balancer(@target.load_balancer_config.merge(name: elb_name), family) end end diff --git a/spec/broadside/ecs/ecs_deploy_spec.rb b/spec/broadside/ecs/ecs_deploy_spec.rb index 1515f5e..e3c4dfa 100644 --- a/spec/broadside/ecs/ecs_deploy_spec.rb +++ b/spec/broadside/ecs/ecs_deploy_spec.rb @@ -44,9 +44,35 @@ let(:elb_config) { { subnets: [ 'subnet-xyz', 'subnet-abc'] } } let(:elb_service_config) { service_config.merge(load_balancers: [{ load_balancer_name: elb_name }]) } let(:local_target_config) { { service_config: elb_service_config, load_balancer_config: elb_config } } + let(:load_balancer_response) do + { + load_balancers: [ + { + availability_zones: [{ subnet_id: "notorious-subnet", zone_name: 'zone' }], + canonical_hosted_zone_id: "ZEXAMPLE", + created_time: Time.now, + dns_name: 'dns', + load_balancer_arn: "arn:aws:elasticloadbalancing:arnslength", + load_balancer_name: elb_name, + scheme: "internal", + security_groups: [ 'security' ], + state: { code: "provisioning" }, + type: "application", + vpc_id: "vpc", + } + ] + } + end it 'sets up the ELB' do - expect(Broadside::EcsManager).to receive(:create_load_balancer).with(elb_config.merge(load_balancer_name: elb_name), family) + #expect(Broadside::EcsManager).to receive(:create_load_balancer).with(elb_config.merge(load_balancer_name: elb_name), family) + # expect(elb_stub).to receive(:create_load_balancer).with( + # elb_config.merge(load_balancer_name: elb_name, tags: [{ key: 'family', value: family }]) + # ).and_return( + # load_balancer_response + #) + + elb_stub.stub_responses(:create_load_balancer, load_balancer_response) expect(Broadside::EcsManager).to receive(:create_service).with(cluster, deploy.family, elb_service_config) expect { deploy.bootstrap}.to_not raise_error end From 54d6891aaf68b5b25250bd463ce8186190927994 Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sat, 11 Feb 2017 04:33:12 -0800 Subject: [PATCH 07/21] workign spec --- spec/broadside/ecs/ecs_deploy_spec.rb | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/spec/broadside/ecs/ecs_deploy_spec.rb b/spec/broadside/ecs/ecs_deploy_spec.rb index e3c4dfa..fed90ac 100644 --- a/spec/broadside/ecs/ecs_deploy_spec.rb +++ b/spec/broadside/ecs/ecs_deploy_spec.rb @@ -66,12 +66,9 @@ it 'sets up the ELB' do #expect(Broadside::EcsManager).to receive(:create_load_balancer).with(elb_config.merge(load_balancer_name: elb_name), family) - # expect(elb_stub).to receive(:create_load_balancer).with( - # elb_config.merge(load_balancer_name: elb_name, tags: [{ key: 'family', value: family }]) - # ).and_return( - # load_balancer_response - #) - + expect(elb_stub).to receive(:create_load_balancer).with( + elb_config.merge(load_balancer_name: elb_name, tags: [{ key: 'family', value: family }]) + ) elb_stub.stub_responses(:create_load_balancer, load_balancer_response) expect(Broadside::EcsManager).to receive(:create_service).with(cluster, deploy.family, elb_service_config) expect { deploy.bootstrap}.to_not raise_error From 75cc21ff33922a9e2235da2fec8fc90e635f54f1 Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sat, 11 Feb 2017 04:34:44 -0800 Subject: [PATCH 08/21] Much better spec --- spec/broadside/ecs/ecs_deploy_spec.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/broadside/ecs/ecs_deploy_spec.rb b/spec/broadside/ecs/ecs_deploy_spec.rb index fed90ac..bb13668 100644 --- a/spec/broadside/ecs/ecs_deploy_spec.rb +++ b/spec/broadside/ecs/ecs_deploy_spec.rb @@ -65,12 +65,12 @@ end it 'sets up the ELB' do - #expect(Broadside::EcsManager).to receive(:create_load_balancer).with(elb_config.merge(load_balancer_name: elb_name), family) - expect(elb_stub).to receive(:create_load_balancer).with( - elb_config.merge(load_balancer_name: elb_name, tags: [{ key: 'family', value: family }]) - ) elb_stub.stub_responses(:create_load_balancer, load_balancer_response) + expect(elb_stub).to receive(:create_load_balancer).with( + elb_config.merge(name: elb_name, tags: [{ key: 'family', value: family }]) + ).and_call_original expect(Broadside::EcsManager).to receive(:create_service).with(cluster, deploy.family, elb_service_config) + expect { deploy.bootstrap}.to_not raise_error end end From 7a1a600eedf10f9a684877d67f63bcaf6edf3222 Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sat, 11 Feb 2017 05:04:35 -0800 Subject: [PATCH 09/21] ELB name is just the family name --- README.md | 2 ++ lib/broadside/ecs/ecs_deploy.rb | 21 +++++++++------------ lib/broadside/ecs/ecs_manager.rb | 6 +++--- spec/broadside/ecs/ecs_deploy_spec.rb | 21 +++++++++++++++------ spec/broadside/ecs/ecs_manager_spec.rb | 2 +- 5 files changed, 30 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 2584e40..f615a34 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,8 @@ Broadside.configure do |config| scale: 1, command: ['java', '-cp', '*:.', 'path.to.MyClass'], # This target has a task_definition and service config which you use to bootstrap a new AWS Service + # with an elastic load balancer. (The load balancer is optional.) + load_balancer_config: { subnets: [ 'subnet-xyz', 'subnet-abc'] }, service_config: { deployment_configuration: { minimum_healthy_percent: 0.5 } }, task_definition_config: { container_definitions: [ { cpu: 1, memory: 2000, } ] } } diff --git a/lib/broadside/ecs/ecs_deploy.rb b/lib/broadside/ecs/ecs_deploy.rb index f1cfbb1..0cada9b 100644 --- a/lib/broadside/ecs/ecs_deploy.rb +++ b/lib/broadside/ecs/ecs_deploy.rb @@ -42,22 +42,19 @@ def bootstrap if EcsManager.service_exists?(cluster, family) info("Service for #{family} already exists.") + if (elb_arn = EcsManager.get_load_balancer_arn_by_name(family)) + # Verify ELB definition matches + end else raise ConfigurationError, "No :service_config for #{family}" unless @target.service_config + info "Service '#{family}' doesn't exist, creating..." - if @target.service_config[:load_balancers] - elb_name = @target.service_config[:load_balancers].first[:load_balancer_name] - - if (elb_arn = EcsManager.get_load_balancer_arn_by_name(elb_name)) - # Verify ELB definition matches - else - raise ConfigurationError, "No ELB #{elb_name}/no :load_balancer_config" unless @target.load_balancer_config - EcsManager.create_load_balancer(@target.load_balancer_config.merge(name: elb_name), family) - end + if @target.load_balancer_config + EcsManager.create_load_balancer(@target.load_balancer_config.merge(name: family)) + EcsManager.create_service(cluster, family, @target.service_config.merge(load_balancers: [load_balancer_name: family])) + else + EcsManager.create_service(cluster, family, @target.service_config) end - - info "Service '#{family}' doesn't exist, creating..." - EcsManager.create_service(cluster, family, @target.service_config) end end diff --git a/lib/broadside/ecs/ecs_manager.rb b/lib/broadside/ecs/ecs_manager.rb index efbf4b9..a799d4c 100644 --- a/lib/broadside/ecs/ecs_manager.rb +++ b/lib/broadside/ecs/ecs_manager.rb @@ -150,9 +150,9 @@ def current_service_scale(target) end # Returns the load balancer response hash - def create_load_balancer(load_balancer_config, family = nil) - # Docs say tags are required but sandbox says otherwise - tags = [{ key: 'family', value: family }] if family + def create_load_balancer(load_balancer_config) + # Docs say tags are required but sandbox accepts ELB definitions without :tags + tags = [{ key: 'family', value: load_balancer_config[:name] }] elb_client.create_load_balancer(load_balancer_config.merge(tags: tags)).load_balancers.first.to_h end diff --git a/spec/broadside/ecs/ecs_deploy_spec.rb b/spec/broadside/ecs/ecs_deploy_spec.rb index bb13668..f59dfc7 100644 --- a/spec/broadside/ecs/ecs_deploy_spec.rb +++ b/spec/broadside/ecs/ecs_deploy_spec.rb @@ -40,10 +40,8 @@ end context 'with a load_balancer_config' do - let(:elb_name) { 'my-load-balancer' } let(:elb_config) { { subnets: [ 'subnet-xyz', 'subnet-abc'] } } - let(:elb_service_config) { service_config.merge(load_balancers: [{ load_balancer_name: elb_name }]) } - let(:local_target_config) { { service_config: elb_service_config, load_balancer_config: elb_config } } + let(:local_target_config) { { service_config: service_config, load_balancer_config: elb_config } } let(:load_balancer_response) do { load_balancers: [ @@ -53,7 +51,7 @@ created_time: Time.now, dns_name: 'dns', load_balancer_arn: "arn:aws:elasticloadbalancing:arnslength", - load_balancer_name: elb_name, + load_balancer_name: family, scheme: "internal", security_groups: [ 'security' ], state: { code: "provisioning" }, @@ -64,12 +62,23 @@ } end + let(:service_config_args) do + service_config.merge( + cluster: cluster, + load_balancers: [{ load_balancer_name: family }], + service_name: family, + task_definition: family + ) + end + it 'sets up the ELB' do elb_stub.stub_responses(:create_load_balancer, load_balancer_response) expect(elb_stub).to receive(:create_load_balancer).with( - elb_config.merge(name: elb_name, tags: [{ key: 'family', value: family }]) + elb_config.merge(name: family, tags: [{ key: 'family', value: family }]) ).and_call_original - expect(Broadside::EcsManager).to receive(:create_service).with(cluster, deploy.family, elb_service_config) + + expect(ecs_stub).to receive(:create_service).with(service_config_args).and_call_original + #expect(Broadside::EcsManager).to receive(:create_service).with(cluster, deploy.family, service_config) expect { deploy.bootstrap}.to_not raise_error end diff --git a/spec/broadside/ecs/ecs_manager_spec.rb b/spec/broadside/ecs/ecs_manager_spec.rb index 8b511be..78325b3 100644 --- a/spec/broadside/ecs/ecs_manager_spec.rb +++ b/spec/broadside/ecs/ecs_manager_spec.rb @@ -65,7 +65,7 @@ let(:elb_response) { { load_balancer_arn: elb_arn, load_balancer_name: elb_config[:name] } } it 'can create an ELB' do - described_class.create_load_balancer(elb_config, 'elb_family') + described_class.create_load_balancer(elb_config) end describe '#get_load_balancer_arn_by_name' do From 619acaa14e4f6ac2048aa705d9028b9982f538a9 Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sat, 11 Feb 2017 05:06:33 -0800 Subject: [PATCH 10/21] Faily is everything --- spec/broadside/ecs/ecs_deploy_spec.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/spec/broadside/ecs/ecs_deploy_spec.rb b/spec/broadside/ecs/ecs_deploy_spec.rb index f59dfc7..7fac2fb 100644 --- a/spec/broadside/ecs/ecs_deploy_spec.rb +++ b/spec/broadside/ecs/ecs_deploy_spec.rb @@ -76,9 +76,7 @@ expect(elb_stub).to receive(:create_load_balancer).with( elb_config.merge(name: family, tags: [{ key: 'family', value: family }]) ).and_call_original - expect(ecs_stub).to receive(:create_service).with(service_config_args).and_call_original - #expect(Broadside::EcsManager).to receive(:create_service).with(cluster, deploy.family, service_config) expect { deploy.bootstrap}.to_not raise_error end From d009d31e73314ffb580b656a7f855c20d7b3c5ad Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sat, 11 Feb 2017 05:16:27 -0800 Subject: [PATCH 11/21] Validate deployed ELB matches configured ELB --- lib/broadside/ecs/ecs_deploy.rb | 10 ++++++++-- lib/broadside/ecs/ecs_manager.rb | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/broadside/ecs/ecs_deploy.rb b/lib/broadside/ecs/ecs_deploy.rb index 0cada9b..4760769 100644 --- a/lib/broadside/ecs/ecs_deploy.rb +++ b/lib/broadside/ecs/ecs_deploy.rb @@ -42,8 +42,14 @@ def bootstrap if EcsManager.service_exists?(cluster, family) info("Service for #{family} already exists.") - if (elb_arn = EcsManager.get_load_balancer_arn_by_name(family)) - # Verify ELB definition matches + + # Verify that the requested ELB config matches what is running. + if @target.load_balancer_config && (elb_arn = EcsManager.get_load_balancer_arn_by_name(family)) + elb = elb_client.describe_load_balancers(load_balancer_arns: [elb_arn]).load_balancers.first.to_h + + @target.load_balancer_config.each do |k, v| + raise Error, "Running ELB.#{k} is '#{elb[k]}'; config says #{v}. Can't reconfigure." if elb[k] != v + end end else raise ConfigurationError, "No :service_config for #{family}" unless @target.service_config diff --git a/lib/broadside/ecs/ecs_manager.rb b/lib/broadside/ecs/ecs_manager.rb index a799d4c..80d30e1 100644 --- a/lib/broadside/ecs/ecs_manager.rb +++ b/lib/broadside/ecs/ecs_manager.rb @@ -149,7 +149,7 @@ def current_service_scale(target) EcsManager.ecs.describe_services(cluster: target.cluster, services: [target.family]).services.first[:desired_count] end - # Returns the load balancer response hash + # Returns the load balancer description hash def create_load_balancer(load_balancer_config) # Docs say tags are required but sandbox accepts ELB definitions without :tags tags = [{ key: 'family', value: load_balancer_config[:name] }] From 17bfb1c2362f2e40f63a4a219436a22609d4f911 Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sat, 11 Feb 2017 05:27:26 -0800 Subject: [PATCH 12/21] Default to internal ELB --- lib/broadside/ecs/ecs_deploy.rb | 3 ++- lib/broadside/target.rb | 3 --- spec/broadside/ecs/ecs_deploy_spec.rb | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/broadside/ecs/ecs_deploy.rb b/lib/broadside/ecs/ecs_deploy.rb index 4760769..2f3f630 100644 --- a/lib/broadside/ecs/ecs_deploy.rb +++ b/lib/broadside/ecs/ecs_deploy.rb @@ -56,7 +56,8 @@ def bootstrap info "Service '#{family}' doesn't exist, creating..." if @target.load_balancer_config - EcsManager.create_load_balancer(@target.load_balancer_config.merge(name: family)) + load_balancer_config = { scheme: 'internal', name: family }.merge(@target.load_balancer_config) + EcsManager.create_load_balancer(load_balancer_config) EcsManager.create_service(cluster, family, @target.service_config.merge(load_balancers: [load_balancer_name: family])) else EcsManager.create_service(cluster, family, @target.service_config) diff --git a/lib/broadside/target.rb b/lib/broadside/target.rb index d4697b4..1e44226 100644 --- a/lib/broadside/target.rb +++ b/lib/broadside/target.rb @@ -29,9 +29,6 @@ class Target validates_each(:service_config, allow_nil: true) do |record, attr, val| record.errors.add(attr, 'is not a hash') unless val.is_a?(Hash) - if (elb = val[:load_balancers].try(:first)) - record.errors.add(:load_balancer_config) unless elb[:load_balancer_name] - end end validates_each(:load_balancer_config, allow_nil: true) do |record, attr, val| diff --git a/spec/broadside/ecs/ecs_deploy_spec.rb b/spec/broadside/ecs/ecs_deploy_spec.rb index 7fac2fb..5d129af 100644 --- a/spec/broadside/ecs/ecs_deploy_spec.rb +++ b/spec/broadside/ecs/ecs_deploy_spec.rb @@ -74,7 +74,7 @@ it 'sets up the ELB' do elb_stub.stub_responses(:create_load_balancer, load_balancer_response) expect(elb_stub).to receive(:create_load_balancer).with( - elb_config.merge(name: family, tags: [{ key: 'family', value: family }]) + elb_config.merge(name: family, scheme: 'internal', tags: [{ key: 'family', value: family }]) ).and_call_original expect(ecs_stub).to receive(:create_service).with(service_config_args).and_call_original From d33b16b816ee8720d31bb1dcc7198702d4bac444 Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sat, 11 Feb 2017 05:28:05 -0800 Subject: [PATCH 13/21] Default to internal ELB --- lib/broadside/ecs/ecs_deploy.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/broadside/ecs/ecs_deploy.rb b/lib/broadside/ecs/ecs_deploy.rb index 2f3f630..645923b 100644 --- a/lib/broadside/ecs/ecs_deploy.rb +++ b/lib/broadside/ecs/ecs_deploy.rb @@ -56,6 +56,7 @@ def bootstrap info "Service '#{family}' doesn't exist, creating..." if @target.load_balancer_config + # We cautiously default to an internal ELB; the AWS default is `internet-facing` load_balancer_config = { scheme: 'internal', name: family }.merge(@target.load_balancer_config) EcsManager.create_load_balancer(load_balancer_config) EcsManager.create_service(cluster, family, @target.service_config.merge(load_balancers: [load_balancer_name: family])) From 006391a0582401ed162ff53fc26c01fea9b57c67 Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sat, 11 Feb 2017 05:30:57 -0800 Subject: [PATCH 14/21] README --- README.md | 2 +- lib/broadside/ecs/ecs_deploy.rb | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f615a34..df38848 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,7 @@ Broadside.configure do |config| scale: 1, command: ['java', '-cp', '*:.', 'path.to.MyClass'], # This target has a task_definition and service config which you use to bootstrap a new AWS Service - # with an elastic load balancer. (The load balancer is optional.) + # along with an ELB configured with :load_balancer_config. The load balancer is optional. load_balancer_config: { subnets: [ 'subnet-xyz', 'subnet-abc'] }, service_config: { deployment_configuration: { minimum_healthy_percent: 0.5 } }, task_definition_config: { container_definitions: [ { cpu: 1, memory: 2000, } ] } diff --git a/lib/broadside/ecs/ecs_deploy.rb b/lib/broadside/ecs/ecs_deploy.rb index 645923b..5b8d7ac 100644 --- a/lib/broadside/ecs/ecs_deploy.rb +++ b/lib/broadside/ecs/ecs_deploy.rb @@ -57,9 +57,12 @@ def bootstrap if @target.load_balancer_config # We cautiously default to an internal ELB; the AWS default is `internet-facing` - load_balancer_config = { scheme: 'internal', name: family }.merge(@target.load_balancer_config) - EcsManager.create_load_balancer(load_balancer_config) - EcsManager.create_service(cluster, family, @target.service_config.merge(load_balancers: [load_balancer_name: family])) + EcsManager.create_load_balancer({ scheme: 'internal', name: family }.merge(@target.load_balancer_config)) + EcsManager.create_service( + cluster, + family, + @target.service_config.merge(load_balancers: [load_balancer_name: family]) + ) else EcsManager.create_service(cluster, family, @target.service_config) end From 6ab9df55e892cb0087c46623c1a5ed65f78c168f Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sat, 11 Feb 2017 05:46:17 -0800 Subject: [PATCH 15/21] Subnets required --- lib/broadside/target.rb | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/lib/broadside/target.rb b/lib/broadside/target.rb index 1e44226..99b2809 100644 --- a/lib/broadside/target.rb +++ b/lib/broadside/target.rb @@ -33,11 +33,8 @@ class Target validates_each(:load_balancer_config, allow_nil: true) do |record, attr, val| record.errors.add(attr, 'is not a hash') unless val.is_a?(Hash) - record.errors.add(attr, ':load_balancer_name is specified in :service_config') if val[:load_balancer_name] - # TODO: validate tag? - [:subnets].each do |elb_property| - record.errors.add(attr, "#{elb_property} is required in :load_balancer_config") unless val[elb_property] - end + record.errors.add(attr, ':load_balancer_name is set automatically') if val[:load_balancer_name] + record.errors.add(attr, ":subnets is required") unless val[:subnets] && val[:subnets].is_a?(Array) end validates_each(:task_definition_config, allow_nil: true) do |record, attr, val| From 0dbd3d55ebfa4c6cfbdd6e7be12e31fe39104edf Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sat, 11 Feb 2017 05:48:34 -0800 Subject: [PATCH 16/21] Version --- lib/broadside/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/broadside/version.rb b/lib/broadside/version.rb index eb9f0cc..69d4404 100644 --- a/lib/broadside/version.rb +++ b/lib/broadside/version.rb @@ -1,3 +1,3 @@ module Broadside - VERSION = '3.0.0-prerelease'.freeze + VERSION = '3.1.0-prerelease'.freeze end From 0135932bed52fdedea1dff9cbdff9786bc23eba2 Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sat, 11 Feb 2017 05:58:25 -0800 Subject: [PATCH 17/21] Lookup the container port --- lib/broadside/ecs/ecs_deploy.rb | 4 +++- spec/broadside/ecs/ecs_deploy_spec.rb | 13 +++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/broadside/ecs/ecs_deploy.rb b/lib/broadside/ecs/ecs_deploy.rb index 5b8d7ac..8c9c575 100644 --- a/lib/broadside/ecs/ecs_deploy.rb +++ b/lib/broadside/ecs/ecs_deploy.rb @@ -56,12 +56,14 @@ def bootstrap info "Service '#{family}' doesn't exist, creating..." if @target.load_balancer_config + container_port = EcsManager.get_latest_task_definition(family)[:container_definitions].first[:port_mappings].first[:container_port] + # We cautiously default to an internal ELB; the AWS default is `internet-facing` EcsManager.create_load_balancer({ scheme: 'internal', name: family }.merge(@target.load_balancer_config)) EcsManager.create_service( cluster, family, - @target.service_config.merge(load_balancers: [load_balancer_name: family]) + @target.service_config.merge(load_balancers: [container_name: family, container_port: container_port, load_balancer_name: family]) ) else EcsManager.create_service(cluster, family, @target.service_config) diff --git a/spec/broadside/ecs/ecs_deploy_spec.rb b/spec/broadside/ecs/ecs_deploy_spec.rb index 5d129af..627e6f9 100644 --- a/spec/broadside/ecs/ecs_deploy_spec.rb +++ b/spec/broadside/ecs/ecs_deploy_spec.rb @@ -62,20 +62,29 @@ } end + let(:container_port) { 80 } let(:service_config_args) do service_config.merge( cluster: cluster, - load_balancers: [{ load_balancer_name: family }], + load_balancers: [{ container_name: family, container_port: container_port, load_balancer_name: family }], service_name: family, task_definition: family ) end - it 'sets up the ELB' do + before do elb_stub.stub_responses(:create_load_balancer, load_balancer_response) + end + + it 'sets up the ELB' do + expect(Broadside::EcsManager).to receive(:get_latest_task_definition).and_return( + container_definitions: [port_mappings: [container_port: container_port]] + ) + expect(elb_stub).to receive(:create_load_balancer).with( elb_config.merge(name: family, scheme: 'internal', tags: [{ key: 'family', value: family }]) ).and_call_original + expect(ecs_stub).to receive(:create_service).with(service_config_args).and_call_original expect { deploy.bootstrap}.to_not raise_error From 212161911a2e8d4d9fada4f08fa2c05312f22282 Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sat, 11 Feb 2017 05:59:13 -0800 Subject: [PATCH 18/21] Lookup the container port --- lib/broadside/ecs/ecs_deploy.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/broadside/ecs/ecs_deploy.rb b/lib/broadside/ecs/ecs_deploy.rb index 8c9c575..18e9389 100644 --- a/lib/broadside/ecs/ecs_deploy.rb +++ b/lib/broadside/ecs/ecs_deploy.rb @@ -63,7 +63,9 @@ def bootstrap EcsManager.create_service( cluster, family, - @target.service_config.merge(load_balancers: [container_name: family, container_port: container_port, load_balancer_name: family]) + @target.service_config.merge( + load_balancers: [container_name: family, container_port: container_port, load_balancer_name: family] + ) ) else EcsManager.create_service(cluster, family, @target.service_config) From f0cec525bc80708ba98baf282db39654540dc54b Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sat, 11 Feb 2017 05:59:40 -0800 Subject: [PATCH 19/21] Lookup the container port --- lib/broadside/ecs/ecs_deploy.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/broadside/ecs/ecs_deploy.rb b/lib/broadside/ecs/ecs_deploy.rb index 18e9389..15608aa 100644 --- a/lib/broadside/ecs/ecs_deploy.rb +++ b/lib/broadside/ecs/ecs_deploy.rb @@ -60,6 +60,7 @@ def bootstrap # We cautiously default to an internal ELB; the AWS default is `internet-facing` EcsManager.create_load_balancer({ scheme: 'internal', name: family }.merge(@target.load_balancer_config)) + EcsManager.create_service( cluster, family, From 46036a85118707068cd17ba26bf50b429bf18405 Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sat, 11 Feb 2017 22:40:50 -0800 Subject: [PATCH 20/21] Hound --- README.md | 2 +- lib/broadside/ecs/ecs_manager.rb | 2 +- lib/broadside/target.rb | 2 +- spec/broadside/ecs/ecs_deploy_spec.rb | 18 +++++++++--------- spec/broadside/ecs/ecs_manager_spec.rb | 2 +- spec/broadside/target_spec.rb | 6 +++--- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index df38848..ff76cde 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ Broadside.configure do |config| command: ['java', '-cp', '*:.', 'path.to.MyClass'], # This target has a task_definition and service config which you use to bootstrap a new AWS Service # along with an ELB configured with :load_balancer_config. The load balancer is optional. - load_balancer_config: { subnets: [ 'subnet-xyz', 'subnet-abc'] }, + load_balancer_config: { subnets: ['subnet-xyz', 'subnet-abc'] }, service_config: { deployment_configuration: { minimum_healthy_percent: 0.5 } }, task_definition_config: { container_definitions: [ { cpu: 1, memory: 2000, } ] } } diff --git a/lib/broadside/ecs/ecs_manager.rb b/lib/broadside/ecs/ecs_manager.rb index 80d30e1..6ae5f7f 100644 --- a/lib/broadside/ecs/ecs_manager.rb +++ b/lib/broadside/ecs/ecs_manager.rb @@ -157,7 +157,7 @@ def create_load_balancer(load_balancer_config) end def get_load_balancer_arn_by_name(name) - load_balancers = elb_client.describe_load_balancers().load_balancers + load_balancers = elb_client.describe_load_balancers.load_balancers load_balancers.detect { |lb| lb.load_balancer_name == name }.try(:[], :load_balancer_arn) end diff --git a/lib/broadside/target.rb b/lib/broadside/target.rb index 99b2809..781b616 100644 --- a/lib/broadside/target.rb +++ b/lib/broadside/target.rb @@ -34,7 +34,7 @@ class Target validates_each(:load_balancer_config, allow_nil: true) do |record, attr, val| record.errors.add(attr, 'is not a hash') unless val.is_a?(Hash) record.errors.add(attr, ':load_balancer_name is set automatically') if val[:load_balancer_name] - record.errors.add(attr, ":subnets is required") unless val[:subnets] && val[:subnets].is_a?(Array) + record.errors.add(attr, ':subnets is required') unless val[:subnets] && val[:subnets].is_a?(Array) end validates_each(:task_definition_config, allow_nil: true) do |record, attr, val| diff --git a/spec/broadside/ecs/ecs_deploy_spec.rb b/spec/broadside/ecs/ecs_deploy_spec.rb index 627e6f9..7976769 100644 --- a/spec/broadside/ecs/ecs_deploy_spec.rb +++ b/spec/broadside/ecs/ecs_deploy_spec.rb @@ -40,23 +40,23 @@ end context 'with a load_balancer_config' do - let(:elb_config) { { subnets: [ 'subnet-xyz', 'subnet-abc'] } } + let(:elb_config) { { subnets: ['subnet-xyz', 'subnet-abc'] } } let(:local_target_config) { { service_config: service_config, load_balancer_config: elb_config } } let(:load_balancer_response) do { load_balancers: [ { - availability_zones: [{ subnet_id: "notorious-subnet", zone_name: 'zone' }], - canonical_hosted_zone_id: "ZEXAMPLE", + availability_zones: [{ subnet_id: 'notorious-subnet', zone_name: 'zone' }], + canonical_hosted_zone_id: 'EXAMPLE', created_time: Time.now, dns_name: 'dns', - load_balancer_arn: "arn:aws:elasticloadbalancing:arnslength", + load_balancer_arn: 'arn:aws:elasticloadbalancing:arnslength', load_balancer_name: family, - scheme: "internal", + scheme: 'internal', security_groups: [ 'security' ], - state: { code: "provisioning" }, - type: "application", - vpc_id: "vpc", + state: { code: 'provisioning' }, + type: 'application', + vpc_id: 'vpc', } ] } @@ -87,7 +87,7 @@ expect(ecs_stub).to receive(:create_service).with(service_config_args).and_call_original - expect { deploy.bootstrap}.to_not raise_error + expect { deploy.bootstrap }.to_not raise_error end end end diff --git a/spec/broadside/ecs/ecs_manager_spec.rb b/spec/broadside/ecs/ecs_manager_spec.rb index 78325b3..eb3a38c 100644 --- a/spec/broadside/ecs/ecs_manager_spec.rb +++ b/spec/broadside/ecs/ecs_manager_spec.rb @@ -60,7 +60,7 @@ context 'load balancers' do let(:elb_name) { 'my-load-balancer' } - let(:elb_config) { { name: elb_name, subnets: [ 'subnet-xyz', 'subnet-abc'] } } + let(:elb_config) { { name: elb_name, subnets: ['subnet-xyz', 'subnet-abc'] } } let(:elb_arn) { 'elb_arn' } let(:elb_response) { { load_balancer_arn: elb_arn, load_balancer_name: elb_config[:name] } } diff --git a/spec/broadside/target_spec.rb b/spec/broadside/target_spec.rb index 23003ef..764476f 100644 --- a/spec/broadside/target_spec.rb +++ b/spec/broadside/target_spec.rb @@ -37,13 +37,13 @@ it_behaves_like 'valid_configuration?', false, task_definition_config: { container_definitions: %w(a b) } - it_behaves_like 'valid_configuration?', true, { service_config: { load_balancers: [{ load_balancer_name: 'x' }] } } + it_behaves_like 'valid_configuration?', true, { service_config: { load_balancers: [load_balancer_name: 'x'] } } it_behaves_like 'valid_configuration?', true, { service_config: { - load_balancers: [{ load_balancer_name: 'x' }] + load_balancers: [load_balancer_name: 'x'] }, load_balancer_config: { - subnets: ['abc', 'xyz'] + subnets: %w(abc xyz) } } end From 646dfb73119a611ad7837e6229ee9b6cc2015757 Mon Sep 17 00:00:00 2001 From: "apurvis@lumoslabs.com" Date: Sun, 12 Feb 2017 03:33:50 -0800 Subject: [PATCH 21/21] Fix client init --- lib/broadside/ecs/ecs_manager.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/broadside/ecs/ecs_manager.rb b/lib/broadside/ecs/ecs_manager.rb index 6ae5f7f..9f28744 100644 --- a/lib/broadside/ecs/ecs_manager.rb +++ b/lib/broadside/ecs/ecs_manager.rb @@ -184,8 +184,8 @@ def ec2_client def elb_client @elb_client ||= Aws::ElasticLoadBalancingV2::Client.new( - region: region_name, - credentials: credentials + region: Broadside.config.aws.region, + credentials: Broadside.config.aws.credentials ) end end