hako 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/Gemfile +1 -0
  4. data/Rakefile +2 -1
  5. data/exe/hako +1 -0
  6. data/hako.gemspec +1 -0
  7. data/lib/hako/app_container.rb +1 -0
  8. data/lib/hako/application.rb +1 -0
  9. data/lib/hako/cli.rb +1 -0
  10. data/lib/hako/commander.rb +1 -0
  11. data/lib/hako/container.rb +1 -0
  12. data/lib/hako/definition_loader.rb +1 -0
  13. data/lib/hako/env_expander.rb +1 -0
  14. data/lib/hako/env_provider.rb +1 -0
  15. data/lib/hako/env_providers/file.rb +1 -0
  16. data/lib/hako/env_providers/yaml.rb +1 -0
  17. data/lib/hako/env_providers.rb +1 -0
  18. data/lib/hako/error.rb +1 -0
  19. data/lib/hako/loader.rb +1 -0
  20. data/lib/hako/scheduler.rb +1 -0
  21. data/lib/hako/schedulers/ecs.rb +31 -0
  22. data/lib/hako/schedulers/ecs_autoscaling.rb +1 -0
  23. data/lib/hako/schedulers/ecs_definition_comparator.rb +1 -0
  24. data/lib/hako/schedulers/ecs_elb.rb +1 -0
  25. data/lib/hako/schedulers/ecs_elb_v2.rb +1 -0
  26. data/lib/hako/schedulers/ecs_service_comparator.rb +1 -0
  27. data/lib/hako/schedulers.rb +1 -0
  28. data/lib/hako/schema/boolean.rb +1 -0
  29. data/lib/hako/schema/integer.rb +1 -0
  30. data/lib/hako/schema/nullable.rb +1 -0
  31. data/lib/hako/schema/ordered_array.rb +1 -0
  32. data/lib/hako/schema/string.rb +1 -0
  33. data/lib/hako/schema/structure.rb +1 -0
  34. data/lib/hako/schema/table.rb +1 -0
  35. data/lib/hako/schema/unordered_array.rb +1 -0
  36. data/lib/hako/schema/with_default.rb +1 -0
  37. data/lib/hako/schema.rb +1 -0
  38. data/lib/hako/script.rb +1 -0
  39. data/lib/hako/scripts/create_aws_cloud_watch_logs_log_group.rb +1 -0
  40. data/lib/hako/scripts/nginx_front.rb +1 -0
  41. data/lib/hako/scripts.rb +1 -0
  42. data/lib/hako/version.rb +2 -1
  43. data/lib/hako/yaml_loader.rb +1 -0
  44. data/lib/hako.rb +1 -0
  45. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4fa62526803c7e309c566c869c1f89e6b9446fe3
4
- data.tar.gz: 6912f420b348951e279b30d7009a1d482b410e22
3
+ metadata.gz: c1d86bc51070984dd1963477c7e0e65d3db228f8
4
+ data.tar.gz: 87daa9ce6841fc2b029d8bf33b03c4bce72aea35
5
5
  SHA512:
6
- metadata.gz: 72770b616872cb3d9fc73882c2ac977d35370dc46592c2291bd147e09cf0e7c519f78e54f2bea82f4a39317edf4b96d1b34c8c9d656927a54189ace40d873f1d
7
- data.tar.gz: 1c55da209092dc268dfcbe260bb2873858b2412a591ea3121c32267b1e9c9fe7094bfb1be5a8294522d72da9942b118c483c15a70b51736b12d8faf31196e8f1
6
+ metadata.gz: d3a0c055aebebccb5bb8b38a66e7183eb3d887e8fb483d106b3b1db191547041123ff720a0181ddbcbda41510b0255eb6ae313e4b78ad469430ef5531e92a9df
7
+ data.tar.gz: bf5ad5bc15d7750a21cb7de91d3d69f745f4e9febd2fa641f5d1b24953a644862aeaefe4cdd512d238a33d8c114efe87c3aa10a26574c26d90de1cac69562c8f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 1.2.0 (2017-04-14)
2
+ ## Changes
3
+ - Fail deployment when some tasks are stopped during deployment
4
+ - It should prevent infinite loop when the new revision always fails to start
5
+
1
6
  # 1.1.0 (2017-03-09)
2
7
  ## New features
3
8
  - Add script hooks to rollback
data/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  source 'https://rubygems.org'
3
4
 
4
5
  # Specify your gem's dependencies in hako.gemspec
data/Rakefile CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'bundler/gem_tasks'
3
4
  require 'rspec/core/rake_task'
4
5
  require 'rubocop/rake_task'
@@ -8,4 +9,4 @@ RSpec::Core::RakeTask.new(:spec)
8
9
  RuboCop::RakeTask.new(:rubocop)
9
10
  YARD::Rake::YardocTask.new(:yard)
10
11
 
11
- task :default => [:spec, :rubocop]
12
+ task :default => %i[spec rubocop]
data/exe/hako CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
+
3
4
  require 'hako/cli'
4
5
 
5
6
  Hako::CLI.start(ARGV)
data/hako.gemspec CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  lib = File.expand_path('../lib', __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'hako/version'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'hako/container'
3
4
 
4
5
  module Hako
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'hako/yaml_loader'
3
4
  require 'pathname'
4
5
 
data/lib/hako/cli.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'hako'
3
4
  require 'optparse'
4
5
  require 'pathname'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'hako/definition_loader'
3
4
  require 'hako/env_expander'
4
5
  require 'hako/error'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'hako/version'
3
4
 
4
5
  module Hako
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'set'
3
4
  require 'hako/app_container'
4
5
  require 'hako/container'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'set'
3
4
  require 'strscan'
4
5
  require 'hako/env_providers'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'hako/error'
3
4
 
4
5
  module Hako
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'hako/env_provider'
3
4
 
4
5
  module Hako
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'hako/env_provider'
3
4
  require 'yaml'
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Hako
3
4
  module EnvProviders
4
5
  end
data/lib/hako/error.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Hako
3
4
  class Error < StandardError
4
5
  end
data/lib/hako/loader.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Hako
3
4
  class Loader
4
5
  # @param [Module] base_module
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'aws-sdk'
3
4
 
4
5
  module Hako
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'aws-sdk'
3
4
  require 'hako'
4
5
  require 'hako/error'
@@ -647,6 +648,8 @@ module Hako
647
648
  Process.clock_gettime(Process::CLOCK_MONOTONIC)
648
649
  end
649
650
 
651
+ started_task_ids = []
652
+
650
653
  loop do
651
654
  if started_at
652
655
  if Process.clock_gettime(Process::CLOCK_MONOTONIC) - started_at > @timeout
@@ -666,11 +669,22 @@ module Hako
666
669
  break
667
670
  end
668
671
  Hako.logger.info "#{e.created_at}: #{e.message}"
672
+ task_id = extract_task_id(e.message)
673
+ if task_id && e.message.include?(' has started ')
674
+ started_task_ids << task_id
675
+ end
669
676
  end
670
677
  latest_event_id = find_latest_event_id(s.events)
671
678
  Hako.logger.debug " latest_event_id=#{latest_event_id}, deployments=#{s.deployments}"
672
679
  no_active = s.deployments.all? { |d| d.status != 'ACTIVE' }
673
680
  primary = s.deployments.find { |d| d.status == 'PRIMARY' }
681
+ if primary.desired_count < started_task_ids.size
682
+ Hako.logger.error('Some started tasks are stopped. It seems new deployment is failing to start')
683
+ ecs_client.describe_tasks(cluster: service.cluster_arn, tasks: started_task_ids).tasks.each do |task|
684
+ report_task_diagnostics(task)
685
+ end
686
+ return false
687
+ end
674
688
  primary_ready = primary && primary.running_count == primary.desired_count
675
689
  if no_active && primary_ready
676
690
  return true
@@ -690,6 +704,23 @@ module Hako
690
704
  end
691
705
  end
692
706
 
707
+ TASK_ID_RE = /\(task ([\h-]+)\)\.\z/
708
+ # @param [String] message
709
+ # @return [String, nil]
710
+ def extract_task_id(message)
711
+ message.slice(TASK_ID_RE, 1)
712
+ end
713
+
714
+ # @param [Aws::ECS::Types::Task] task
715
+ # @return [nil]
716
+ def report_task_diagnostics(task)
717
+ Hako.logger.error("task_definition_arn=#{task.task_definition_arn} last_status=#{task.last_status}")
718
+ Hako.logger.error(" stopped_reason: #{task.stopped_reason}")
719
+ task.containers.sort_by(&:name).each do |container|
720
+ Hako.logger.error(" Container #{container.name}: last_status=#{container.last_status} exit_code=#{container.exit_code.inspect} reason=#{container.reason.inspect}")
721
+ end
722
+ end
723
+
693
724
  # @param [Aws::ECS::Types::TaskDefinition]
694
725
  # @return [String]
695
726
  def find_rollback_target(task_definition)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'hako'
3
4
  require 'hako/error'
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'hako/schema'
3
4
 
4
5
  module Hako
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'aws-sdk'
3
4
  require 'hako'
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'aws-sdk'
3
4
  require 'hako'
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'hako/schema'
3
4
 
4
5
  module Hako
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Hako
3
4
  module Schedulers
4
5
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Hako
3
4
  module Schema
4
5
  class Boolean
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Hako
3
4
  module Schema
4
5
  class Integer
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Hako
3
4
  module Schema
4
5
  class Nullable
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Hako
3
4
  module Schema
4
5
  class OrderedArray
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Hako
3
4
  module Schema
4
5
  class String
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Hako
3
4
  module Schema
4
5
  class Structure
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Hako
3
4
  module Schema
4
5
  class Table
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Hako
3
4
  module Schema
4
5
  class UnorderedArray
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Hako
3
4
  module Schema
4
5
  class WithDefault
data/lib/hako/schema.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'hako/schema/boolean'
3
4
  require 'hako/schema/integer'
4
5
  require 'hako/schema/nullable'
data/lib/hako/script.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'hako/scripts'
3
4
 
4
5
  module Hako
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'aws-sdk'
3
4
  require 'hako'
4
5
  require 'hako/script'
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'aws-sdk'
3
4
  require 'erb'
4
5
  require 'hako'
data/lib/hako/scripts.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Hako
3
4
  module Scripts
4
5
  end
data/lib/hako/version.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Hako
3
- VERSION = '1.1.0'
4
+ VERSION = '1.2.0'
4
5
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'psych'
3
4
 
4
5
  module Hako
data/lib/hako.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'logger'
3
4
  require 'hako/version'
4
5
 
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: 1.1.0
4
+ version: 1.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: 2017-03-09 00:00:00.000000000 Z
11
+ date: 2017-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk