hako 1.1.0 → 1.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.
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