hako 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/lib/hako/schedulers/ecs.rb +17 -4
- data/lib/hako/schedulers/ecs_elb_v2.rb +11 -1
- data/lib/hako/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff65e26d2cf4eae4e30db26a06c20b805691df1ef69b6b3f13978d556621c39b
|
4
|
+
data.tar.gz: f7e69c8ba3e9de134ed0392a051d58d88ee70d6876751dfb2c7e8077672587e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3db0f686407d5c0c5a7905b6773b642eaa60ba7ad5eef714b8047750ae31c588adc7ddd000ed80ea5c707cbd8e2380fc9ebcaedd825a341a1eb2836c1ad65e2
|
7
|
+
data.tar.gz: 93159fa006ba102e18b3053b9f26efa372fd04052afc2a06cf935bede3cc13c6cae569d3b197740b9c71db4d4890970a8ff88dbc2cacfc62d84f2bea2cd921eb
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
# 2.2.0 (2018-06-29)
|
2
|
+
## New features
|
3
|
+
- Add support for `scheduling_strategy` on service
|
4
|
+
- Change existing ELB's subnets when different from definition
|
5
|
+
## Bug fixes
|
6
|
+
- Take task-level cpu/memory into account on scale out
|
7
|
+
- Show `--memory-reservation` in the dry-run output
|
8
|
+
|
1
9
|
# 2.1.0 (2018-04-18)
|
2
10
|
## New features
|
3
11
|
- Support Network Load Balancer
|
data/lib/hako/schedulers/ecs.rb
CHANGED
@@ -59,6 +59,7 @@ module Hako
|
|
59
59
|
end
|
60
60
|
@placement_constraints = options.fetch('placement_constraints', [])
|
61
61
|
@placement_strategy = options.fetch('placement_strategy', [])
|
62
|
+
@scheduling_strategy = options.fetch('scheduling_strategy', nil)
|
62
63
|
@execution_role_arn = options.fetch('execution_role_arn', nil)
|
63
64
|
@cpu = options.fetch('cpu', nil)
|
64
65
|
@memory = options.fetch('memory', nil)
|
@@ -85,7 +86,7 @@ module Hako
|
|
85
86
|
# @param [Hash<String, Container>] containers
|
86
87
|
# @return [nil]
|
87
88
|
def deploy(containers)
|
88
|
-
|
89
|
+
if @desired_count.nil? && @scheduling_strategy != 'DAEMON'
|
89
90
|
validation_error!('desired_count must be set')
|
90
91
|
end
|
91
92
|
front_port = determine_front_port
|
@@ -798,16 +799,19 @@ module Hako
|
|
798
799
|
cluster: @cluster,
|
799
800
|
service_name: @app_id,
|
800
801
|
task_definition: task_definition_arn,
|
801
|
-
desired_count: 0,
|
802
802
|
role: @role,
|
803
803
|
deployment_configuration: @deployment_configuration,
|
804
804
|
placement_constraints: @placement_constraints,
|
805
805
|
placement_strategy: @placement_strategy,
|
806
|
+
scheduling_strategy: @scheduling_strategy,
|
806
807
|
launch_type: @launch_type,
|
807
808
|
platform_version: @platform_version,
|
808
809
|
network_configuration: @network_configuration,
|
809
810
|
health_check_grace_period_seconds: @health_check_grace_period_seconds,
|
810
811
|
}
|
812
|
+
if @scheduling_strategy != 'DAEMON'
|
813
|
+
params[:desired_count] = 0
|
814
|
+
end
|
811
815
|
if ecs_elb_client.find_or_create_load_balancer(front_port)
|
812
816
|
ecs_elb_client.modify_attributes
|
813
817
|
params[:load_balancers] = [ecs_elb_client.load_balancer_params_for_service]
|
@@ -942,7 +946,10 @@ module Hako
|
|
942
946
|
|
943
947
|
RUN_TASK_INTERVAL = 10
|
944
948
|
def try_scale_out_with_sns(task_definition)
|
945
|
-
required_cpu
|
949
|
+
required_cpu = task_definition.cpu && task_definition.cpu.to_i
|
950
|
+
required_cpu ||= task_definition.container_definitions.inject(0) { |cpu, d| cpu + d.cpu }
|
951
|
+
required_memory = task_definition.memory && task_definition.memory.to_i
|
952
|
+
required_memory ||= task_definition.container_definitions.inject(0) { |memory, d| memory + (d.memory_reservation || d.memory) }
|
946
953
|
@hako_task_id ||= SecureRandom.uuid
|
947
954
|
message = JSON.dump(
|
948
955
|
group_name: @autoscaling_group_for_oneshot,
|
@@ -1025,7 +1032,10 @@ module Hako
|
|
1025
1032
|
# @param [Array<Aws::ECS::Types::ContainerInstance>] container_instances
|
1026
1033
|
# @return [Boolean]
|
1027
1034
|
def has_capacity?(task_definition, container_instances)
|
1028
|
-
required_cpu
|
1035
|
+
required_cpu = task_definition.cpu && task_definition.cpu.to_i
|
1036
|
+
required_cpu ||= task_definition.container_definitions.inject(0) { |cpu, d| cpu + d.cpu }
|
1037
|
+
required_memory = task_definition.memory && task_definition.memory.to_i
|
1038
|
+
required_memory ||= task_definition.container_definitions.inject(0) { |memory, d| memory + (d.memory_reservation || d.memory) }
|
1029
1039
|
container_instances.any? do |ci|
|
1030
1040
|
cpu = ci.remaining_resources.find { |r| r.name == 'CPU' }.integer_value
|
1031
1041
|
memory = ci.remaining_resources.find { |r| r.name == 'MEMORY' }.integer_value
|
@@ -1043,6 +1053,9 @@ module Hako
|
|
1043
1053
|
if definition[:memory]
|
1044
1054
|
cmd << '--memory' << "#{definition[:memory]}M"
|
1045
1055
|
end
|
1056
|
+
if definition[:memory_reservation]
|
1057
|
+
cmd << '--memory-reservation' << "#{definition[:memory_reservation]}M"
|
1058
|
+
end
|
1046
1059
|
definition.fetch(:links).each do |link|
|
1047
1060
|
cmd << '--link' << link
|
1048
1061
|
end
|
@@ -130,8 +130,18 @@ module Hako
|
|
130
130
|
return nil
|
131
131
|
end
|
132
132
|
|
133
|
+
load_balancer = describe_load_balancer
|
134
|
+
subnets = @elb_v2_config.fetch('subnets').sort
|
135
|
+
if load_balancer && subnets != load_balancer.availability_zones.map(&:subnet_id).sort
|
136
|
+
if @dry_run
|
137
|
+
Hako.logger.info("elb_client.set_subnets(load_balancer_arn: #{load_balancer.load_balancer_arn}, subnets: #{subnets}) (dry-run)")
|
138
|
+
else
|
139
|
+
Hako.logger.info("Updating ELBv2 subnets to #{subnets}")
|
140
|
+
elb_client.set_subnets(load_balancer_arn: load_balancer.load_balancer_arn, subnets: subnets)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
133
144
|
if @elb_v2_config.key?('load_balancer_attributes')
|
134
|
-
load_balancer = describe_load_balancer
|
135
145
|
attributes = @elb_v2_config.fetch('load_balancer_attributes').map { |key, value| { key: key, value: value } }
|
136
146
|
if @dry_run
|
137
147
|
if load_balancer
|
data/lib/hako/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hako
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kohei Suzuki
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-applicationautoscaling
|