hako 0.20.3 → 0.21.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ba8b0ebf80ac149aacdc2fdda96cae6d5bdb37d3
4
- data.tar.gz: adc2f83e9bd04929c48a530861c596bbf9d1bf50
3
+ metadata.gz: 7c6e02b9939541f56711b9225a74381d7473376b
4
+ data.tar.gz: a43209df25791df32037b123f21255c8f4ed98d5
5
5
  SHA512:
6
- metadata.gz: 2b4dfda736f5618b1ac8ef9f56f411cfb464ec8ac2bbe0e306080b480f6d2f86357074e31b37d564245a910e6ae06fbff58947c5ff898d7a8931b0570d27450c
7
- data.tar.gz: 52c931cf43b541ab9390c910dde191561b63b695ba30275667ace0d65a91b20d041e74d787d58976415b0ece28c8fc2f9acd06438eae506f9e07344b6915374f
6
+ metadata.gz: a727aaff0caded43aeda3477d6f2819c44d9285e7f296c4d1eb4738ffab649326e966377c59c7cf1d1e932fe480465663387e1e14191cc5da8c652e223130a73
7
+ data.tar.gz: affac360aeef705b05799af8dbd66a9af5b093ab1f8847227c886bed2e52dce52bd02900c84d6c91f49b346b62dfdfda835b1d37c569e32aecacc8f605ba7d71
@@ -1,75 +1,76 @@
1
1
  # frozen_string_literal: true
2
+ require 'hako/schema'
3
+
2
4
  module Hako
3
5
  module Schedulers
4
6
  class EcsDefinitionComparator
5
7
  # @param [Hash] expected_container
6
8
  def initialize(expected_container)
7
9
  @expected_container = expected_container
10
+ @schema = definition_schema
8
11
  end
9
12
 
10
- CONTAINER_KEYS = %i[image cpu memory memory_reservation links docker_labels user log_configuration].freeze
11
- PORT_MAPPING_KEYS = %i[container_port host_port protocol].freeze
12
- ENVIRONMENT_KEYS = %i[name value].freeze
13
- MOUNT_POINT_KEYS = %i[source_volume container_path read_only].freeze
14
- VOLUMES_FROM_KEYS = %i[source_container read_only].freeze
15
-
16
13
  # @param [Aws::ECS::Types::ContainerDefinition] actual_container
17
14
  # @return [Boolean]
18
15
  def different?(actual_container)
19
- unless actual_container
20
- return true
21
- end
22
- actual_container = actual_container.to_h
23
- if different_members?(@expected_container, actual_container, CONTAINER_KEYS)
24
- return true
25
- end
26
- if different_array?(@expected_container, actual_container, :port_mappings, PORT_MAPPING_KEYS)
27
- return true
28
- end
29
- if different_array?(@expected_container, actual_container, :environment, ENVIRONMENT_KEYS)
30
- return true
31
- end
32
- if different_array?(@expected_container, actual_container, :mount_points, MOUNT_POINT_KEYS)
33
- return true
34
- end
35
- if different_array?(@expected_container, actual_container, :volumes_from, VOLUMES_FROM_KEYS)
36
- return true
16
+ !@schema.same?(actual_container.to_h, @expected_container)
17
+ end
18
+
19
+ private
20
+
21
+ def definition_schema
22
+ Schema::Structure.new.tap do |struct|
23
+ struct.member(:image, Schema::String.new)
24
+ struct.member(:cpu, Schema::Integer.new)
25
+ struct.member(:memory, Schema::Integer.new)
26
+ struct.member(:memory_reservation, Schema::Nullable.new(Schema::Integer.new))
27
+ struct.member(:links, Schema::UnorderedArray.new(Schema::String.new))
28
+ struct.member(:port_mappings, Schema::UnorderedArray.new(port_mapping_schema))
29
+ struct.member(:environment, Schema::UnorderedArray.new(environment_schema))
30
+ struct.member(:docker_labels, Schema::Table.new(Schema::String.new, Schema::String.new))
31
+ struct.member(:mount_points, Schema::UnorderedArray.new(mount_point_schema))
32
+ struct.member(:command, Schema::Nullable.new(Schema::OrderedArray.new(Schema::String.new)))
33
+ struct.member(:volumes_from, Schema::UnorderedArray.new(volumes_from_schema))
34
+ struct.member(:user, Schema::Nullable.new(Schema::String.new))
35
+ struct.member(:log_configuration, Schema::Nullable.new(log_configuration_schema))
37
36
  end
37
+ end
38
38
 
39
- false
39
+ def port_mapping_schema
40
+ Schema::Structure.new.tap do |struct|
41
+ struct.member(:container_port, Schema::Integer.new)
42
+ struct.member(:host_port, Schema::Integer.new)
43
+ struct.member(:protocol, Schema::String.new)
44
+ end
40
45
  end
41
46
 
42
- private
47
+ def environment_schema
48
+ Schema::Structure.new.tap do |struct|
49
+ struct.member(:name, Schema::String.new)
50
+ struct.member(:value, Schema::String.new)
51
+ end
52
+ end
43
53
 
44
- # @param [Hash<String, Object>] expected
45
- # @param [Hash<String, Object>] actual
46
- # @param [Array<String>] keys
47
- # @return [Boolean]
48
- def different_members?(expected, actual, keys)
49
- keys.each do |key|
50
- if actual[key] != expected[key]
51
- return true
52
- end
54
+ def mount_point_schema
55
+ Schema::Structure.new.tap do |struct|
56
+ struct.member(:source_volume, Schema::String.new)
57
+ struct.member(:container_path, Schema::String.new)
58
+ struct.member(:read_only, Schema::Boolean.new)
53
59
  end
54
- false
55
60
  end
56
61
 
57
- # @param [Hash<String, Array<Object>>] expected
58
- # @param [Hash<String, Array<Object>>] actual
59
- # @param [Array<String>] keys
60
- # @return [Boolean]
61
- def different_array?(expected, actual, key, keys)
62
- if expected[key].size != actual[key].size
63
- return true
62
+ def volumes_from_schema
63
+ Schema::Structure.new.tap do |struct|
64
+ struct.member(:source_container, Schema::String.new)
65
+ struct.member(:read_only, Schema::Boolean.new)
64
66
  end
65
- sorted_expected = expected[key].sort_by { |e| keys.map { |k| e[k] }.join('') }
66
- sorted_actual = actual[key].sort_by { |a| keys.map { |k| a[k] }.join('') }
67
- sorted_expected.zip(sorted_actual) do |e, a|
68
- if different_members?(e, a, keys)
69
- return true
70
- end
67
+ end
68
+
69
+ def log_configuration_schema
70
+ Schema::Structure.new.tap do |struct|
71
+ struct.member(:log_driver, Schema::String.new)
72
+ struct.member(:options, Schema::Table.new(Schema::String.new, Schema::String.new))
71
73
  end
72
- false
73
74
  end
74
75
  end
75
76
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+ require 'hako/schema/boolean'
3
+ require 'hako/schema/integer'
4
+ require 'hako/schema/nullable'
5
+ require 'hako/schema/ordered_array'
6
+ require 'hako/schema/string'
7
+ require 'hako/schema/structure'
8
+ require 'hako/schema/table'
9
+ require 'hako/schema/unordered_array'
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+ module Hako
3
+ module Schema
4
+ class Boolean
5
+ def valid?(object)
6
+ object.is_a?(FalseClass) || object.is_a?(TrueClass)
7
+ end
8
+
9
+ def same?(x, y)
10
+ x == y
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+ module Hako
3
+ module Schema
4
+ class Integer
5
+ def valid?(object)
6
+ object.is_a?(::Integer)
7
+ end
8
+
9
+ def same?(x, y)
10
+ x == y
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+ module Hako
3
+ module Schema
4
+ class Nullable
5
+ def initialize(schema)
6
+ @schema = schema
7
+ end
8
+
9
+ def valid?(object)
10
+ object.nil? || @schema.valid?(object)
11
+ end
12
+
13
+ def same?(x, y)
14
+ if x.nil? && y.nil?
15
+ true
16
+ elsif x.nil? || y.nil?
17
+ false
18
+ else
19
+ @schema.same?(x, y)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+ module Hako
3
+ module Schema
4
+ class OrderedArray
5
+ def initialize(schema)
6
+ @schema = schema
7
+ end
8
+
9
+ def valid?(object)
10
+ object.is_a?(Array) && object.all? { |e| @schema.valid?(e) }
11
+ end
12
+
13
+ def same?(xs, ys)
14
+ if xs.size != ys.size
15
+ return false
16
+ end
17
+
18
+ xs.zip(ys) do |x, y|
19
+ unless @schema.same?(x, y)
20
+ return false
21
+ end
22
+ end
23
+ true
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+ module Hako
3
+ module Schema
4
+ class String
5
+ def valid?(object)
6
+ object.is_a?(::String)
7
+ end
8
+
9
+ def same?(x, y)
10
+ x == y
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+ module Hako
3
+ module Schema
4
+ class Structure
5
+ def initialize
6
+ @members = {}
7
+ end
8
+
9
+ def valid?(object)
10
+ unless object.is_a?(::Hash)
11
+ return false
12
+ end
13
+ @members.each do |key, val_schema|
14
+ unless val_schema.valid?(object[key])
15
+ return false
16
+ end
17
+ end
18
+ true
19
+ end
20
+
21
+ def same?(x, y)
22
+ @members.each do |key, val_schema|
23
+ unless val_schema.same?(x[key], y[key])
24
+ return false
25
+ end
26
+ end
27
+ true
28
+ end
29
+
30
+ def member(key, schema)
31
+ @members[key] = schema
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+ module Hako
3
+ module Schema
4
+ class Table
5
+ def initialize(key_schema, val_schema)
6
+ @key_schema = key_schema
7
+ @val_schema = val_schema
8
+ end
9
+
10
+ def valid?(object)
11
+ object.is_a?(::Hash) && object.all? { |k, v| @key_schema.valid?(k) && @val_schema.valid?(v) }
12
+ end
13
+
14
+ def same?(xs, ys)
15
+ if xs.size != ys.size
16
+ return false
17
+ end
18
+
19
+ t = xs.dup
20
+ ys.each do |yk, yv|
21
+ xk, = xs.find { |k, v| @key_schema.same?(k, yk) && @val_schema.same?(v, yv) }
22
+ if xk
23
+ t.delete(xk)
24
+ else
25
+ return false
26
+ end
27
+ end
28
+
29
+ t.empty?
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+ module Hako
3
+ module Schema
4
+ class UnorderedArray
5
+ def initialize(schema)
6
+ @schema = schema
7
+ end
8
+
9
+ def valid?(object)
10
+ object.is_a?(Array) && object.all? { |e| @schema.valid?(e) }
11
+ end
12
+
13
+ def same?(xs, ys)
14
+ if xs.size != ys.size
15
+ return false
16
+ end
17
+
18
+ t = xs.dup
19
+ ys.each do |y|
20
+ i = t.index { |x| @schema.same?(x, y) }
21
+ if i
22
+ t.delete_at(i)
23
+ else
24
+ return false
25
+ end
26
+ end
27
+
28
+ true
29
+ end
30
+ end
31
+ end
32
+ end
data/lib/hako/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Hako
3
- VERSION = '0.20.3'
3
+ VERSION = '0.21.0'
4
4
  end
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.20.3
4
+ version: 0.21.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-09-30 00:00:00.000000000 Z
11
+ date: 2016-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -144,6 +144,15 @@ files:
144
144
  - lib/hako/schedulers/ecs_definition_comparator.rb
145
145
  - lib/hako/schedulers/ecs_elb.rb
146
146
  - lib/hako/schedulers/ecs_elb_v2.rb
147
+ - lib/hako/schema.rb
148
+ - lib/hako/schema/boolean.rb
149
+ - lib/hako/schema/integer.rb
150
+ - lib/hako/schema/nullable.rb
151
+ - lib/hako/schema/ordered_array.rb
152
+ - lib/hako/schema/string.rb
153
+ - lib/hako/schema/structure.rb
154
+ - lib/hako/schema/table.rb
155
+ - lib/hako/schema/unordered_array.rb
147
156
  - lib/hako/script.rb
148
157
  - lib/hako/scripts.rb
149
158
  - lib/hako/scripts/nginx_front.rb