hako 0.14.1 → 0.15.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/README.md +4 -0
- data/lib/hako/cli.rb +36 -0
- data/lib/hako/commander.rb +9 -0
- data/lib/hako/scheduler.rb +4 -0
- data/lib/hako/schedulers/ecs.rb +47 -0
- data/lib/hako/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 824d56a1bf34b619cd7251d92817f5c080a71b63
|
4
|
+
data.tar.gz: 80aa695a436bd7af6f6d43d2ac5196d791fb8efc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7942006910edb928222008730977d4842d9afe03c76699833e37acd2d5a60f43e6a04a0b2228c7aeeabdb123f7d98a891ab81400862ba2be59a0d4e140d206a7
|
7
|
+
data.tar.gz: 83f44968892aaaf5f8699b6962c842d520ae4e22727ee2d41d5be7e1cd152843fd0412aaffc86c18cf9256643073b31af20dc2612d9f50a81fdf1c5d2b779ab7
|
data/README.md
CHANGED
@@ -47,6 +47,10 @@ Events:
|
|
47
47
|
2015-10-05 13:35:53 +0900: (service hello) has reached a steady state.
|
48
48
|
2015-10-05 13:35:14 +0900: (service hello) stopped 1 running tasks.
|
49
49
|
|
50
|
+
% hako rollback examples/hello.yml # [EXPERIMENTAL]
|
51
|
+
I, [2016-05-02T13:07:12.679926 #10961] INFO -- : Current task defintion is hello:29. Rolling back to arn:aws:ecs:ap-northeast-1:XXXXXXXXXXXX:task-definition/hello:28
|
52
|
+
I, [2016-05-02T13:07:12.959116 #10961] INFO -- : Updated service: arn:aws:ecs:ap-northeast-1:XXXXXXXXXXXX:service/hello
|
53
|
+
I, [2016-05-02T13:08:27.280686 #10961] INFO -- : Deployment completed
|
50
54
|
```
|
51
55
|
|
52
56
|
## Front image
|
data/lib/hako/cli.rb
CHANGED
@@ -6,6 +6,7 @@ module Hako
|
|
6
6
|
class CLI
|
7
7
|
SUB_COMMANDS = %w[
|
8
8
|
deploy
|
9
|
+
rollback
|
9
10
|
oneshot
|
10
11
|
show-yaml
|
11
12
|
status
|
@@ -91,6 +92,41 @@ module Hako
|
|
91
92
|
end
|
92
93
|
end
|
93
94
|
|
95
|
+
class Rollback
|
96
|
+
def run(argv)
|
97
|
+
parse!(argv)
|
98
|
+
require 'hako/application'
|
99
|
+
require 'hako/commander'
|
100
|
+
|
101
|
+
if @verbose
|
102
|
+
Hako.logger.level = Logger::DEBUG
|
103
|
+
end
|
104
|
+
|
105
|
+
Commander.new(Application.new(@yaml_path)).rollback(dry_run: @dry_run)
|
106
|
+
end
|
107
|
+
|
108
|
+
def parse!(argv)
|
109
|
+
@dry_run = false
|
110
|
+
@verbose = false
|
111
|
+
parser.parse!(argv)
|
112
|
+
@yaml_path = argv.first
|
113
|
+
|
114
|
+
if @yaml_path.nil?
|
115
|
+
puts parser.help
|
116
|
+
exit 1
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def parser
|
121
|
+
@parser ||= OptionParser.new do |opts|
|
122
|
+
opts.banner = 'hako rollback [OPTIONS] FILE'
|
123
|
+
opts.version = VERSION
|
124
|
+
opts.on('-n', '--dry-run', 'Enable dry-run mode') { @dry_run = true }
|
125
|
+
opts.on('-v', '--verbose', 'Enable verbose logging') { @verbose = true }
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
94
130
|
class Oneshot
|
95
131
|
def run(argv)
|
96
132
|
parse!(argv)
|
data/lib/hako/commander.rb
CHANGED
@@ -29,6 +29,15 @@ module Hako
|
|
29
29
|
nil
|
30
30
|
end
|
31
31
|
|
32
|
+
# @param [Boolean] dry_run
|
33
|
+
# @return [nil]
|
34
|
+
def rollback(dry_run: false)
|
35
|
+
scripts = @app.yaml.fetch('scripts', []).map { |config| load_script(config, dry_run: dry_run) }
|
36
|
+
scheduler = load_scheduler(@app.yaml['scheduler'], scripts, dry_run: dry_run)
|
37
|
+
|
38
|
+
scheduler.rollback
|
39
|
+
end
|
40
|
+
|
32
41
|
# @param [Array<String>] commands
|
33
42
|
# @param [String] tag
|
34
43
|
# @param [Hash<String, String>] env
|
data/lib/hako/scheduler.rb
CHANGED
data/lib/hako/schedulers/ecs.rb
CHANGED
@@ -57,6 +57,32 @@ module Hako
|
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
+
def rollback
|
61
|
+
current_service = describe_service
|
62
|
+
unless current_service
|
63
|
+
Hako.logger.error 'Unable to find service'
|
64
|
+
exit 1
|
65
|
+
end
|
66
|
+
|
67
|
+
task_definition = ecs_client.describe_task_definition(task_definition: current_service.task_definition).task_definition
|
68
|
+
current_definition = "#{task_definition.family}:#{task_definition.revision}"
|
69
|
+
target_definition = find_rollback_target(task_definition)
|
70
|
+
Hako.logger.info "Current task defintion is #{current_definition}. Rolling back to #{target_definition}"
|
71
|
+
|
72
|
+
if @dry_run
|
73
|
+
Hako.logger.info 'Deployment completed (dry-run)'
|
74
|
+
else
|
75
|
+
service = ecs_client.update_service(cluster: current_service.cluster_arn, service: current_service.service_arn, task_definition: target_definition).service
|
76
|
+
Hako.logger.info "Updated service: #{service.service_arn}"
|
77
|
+
|
78
|
+
deregistered_definition = ecs_client.deregister_task_definition(task_definition: current_definition).task_definition
|
79
|
+
Hako.logger.debug "Deregistered #{deregistered_definition.task_definition_arn}"
|
80
|
+
|
81
|
+
wait_for_ready(service)
|
82
|
+
Hako.logger.info 'Deployment completed'
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
60
86
|
# @param [Hash<String, Container>] containers
|
61
87
|
# @param [Array<String>] commands
|
62
88
|
# @param [Hash<String, String>] env
|
@@ -543,6 +569,27 @@ module Hako
|
|
543
569
|
events[0].id
|
544
570
|
end
|
545
571
|
end
|
572
|
+
|
573
|
+
# @param [Aws::ECS::Types::TaskDefinition]
|
574
|
+
# @return [String]
|
575
|
+
def find_rollback_target(task_definition)
|
576
|
+
if task_definition.status != 'ACTIVE'
|
577
|
+
raise 'Cannot find rollback target from INACTIVE task_definition!'
|
578
|
+
end
|
579
|
+
|
580
|
+
arn_found = false
|
581
|
+
ecs_client.list_task_definitions(family_prefix: task_definition.family, status: 'ACTIVE', sort: 'DESC').each do |page|
|
582
|
+
page.task_definition_arns.each do |arn|
|
583
|
+
if arn_found
|
584
|
+
return arn
|
585
|
+
elsif arn == task_definition.task_definition_arn
|
586
|
+
arn_found = true
|
587
|
+
end
|
588
|
+
end
|
589
|
+
end
|
590
|
+
|
591
|
+
raise "Unable to find rollback target. #{task_definition.task_definition_arn} is INACTIVE?"
|
592
|
+
end
|
546
593
|
end
|
547
594
|
end
|
548
595
|
end
|
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: 0.
|
4
|
+
version: 0.15.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: 2016-
|
11
|
+
date: 2016-05-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|