kelbim 0.1.4 → 0.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 +5 -13
- data/README.md +11 -8
- data/lib/kelbim/dsl/attributes.rb +32 -0
- data/lib/kelbim/dsl/converter.rb +14 -0
- data/lib/kelbim/dsl/load-balancer.rb +7 -0
- data/lib/kelbim/exporter.rb +1 -0
- data/lib/kelbim/ext/elb-load-balancer-attributes-ext.rb +43 -0
- data/lib/kelbim/ext/elb-load-balancer-ext.rb +23 -0
- data/lib/kelbim/version.rb +1 -1
- data/lib/kelbim/wrapper/load-balancer-collection.rb +2 -1
- data/lib/kelbim/wrapper/load-balancer.rb +17 -0
- data/lib/kelbim.rb +1 -0
- metadata +17 -15
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
YTkzNTdjZjk4NzIzMDg0YTdhMGUzOTVmNjZlYzhlMmM0NDk0ZmM5ZA==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9bbb3197d476ccd10329c48a3edff97441e40f9f
|
4
|
+
data.tar.gz: dc3d13a4887646050d975d9cf27b266d2a048e22
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
OWMxMjczYjlmNzgwYjI3NWQ2OTY0ZDY3YTk1MDVlMjZlYjVjNGY5N2YzYzFj
|
11
|
-
Mzg5ZDcyOGE1MDk4NzMxNTMwMWRmMmE3ODA3YjQzYWIyZWJiYmU=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
YzU1M2I2ZDMwYWMyZjExMTViYjliMmIzYWQ2NjUyOWNhYTZkNzg4ZWZlYzRi
|
14
|
-
NTdlZjllYzQ4NzRmMTkxYzg2NTZmMmM1ZWY4ZTIwMDc0ZWY3NjA2ZTA3MTk2
|
15
|
-
MzE4ZjQwNDQxMjMxZTlhMGJlMGZkNzIzN2NiOTI3MDZmZjk5MWU=
|
6
|
+
metadata.gz: f3a19d3148899e4d0776081456311d5f26be4c669ade5b6a0278c4ec4ab484d9baf5aeb5cbfa912bc7be41cb651b9bd742f03c1a71827c783df452ab0ec44bbb
|
7
|
+
data.tar.gz: 0eec8ae9e258df9d86cb51e4a1102bb4912cb9d44359110e5b91b21e0fa955bc8c41b6b6009ccbfd780b51ced7f62fce681f0dcf4cc151f38d58b2ffaf50c971
|
data/README.md
CHANGED
@@ -65,6 +65,10 @@ ec2 do
|
|
65
65
|
unhealthy_threshold 2
|
66
66
|
end
|
67
67
|
|
68
|
+
attributes do
|
69
|
+
cross_zone_load_balancing :enabled => false
|
70
|
+
end
|
71
|
+
|
68
72
|
availability_zones(
|
69
73
|
"ap-northeast-1a",
|
70
74
|
"ap-northeast-1b"
|
@@ -97,6 +101,10 @@ ec2 "vpc-XXXXXXXXX" do
|
|
97
101
|
unhealthy_threshold 2
|
98
102
|
end
|
99
103
|
|
104
|
+
attributes do
|
105
|
+
cross_zone_load_balancing :enabled => true
|
106
|
+
end
|
107
|
+
|
100
108
|
subnets(
|
101
109
|
"subnet-XXXXXXXX"
|
102
110
|
)
|
@@ -114,14 +122,9 @@ end
|
|
114
122
|
ec2 "vpc-XXXXXXXXX" do
|
115
123
|
load_balancer "my-load-balancer" do
|
116
124
|
spec do
|
117
|
-
|
118
|
-
|
119
|
-
expect
|
120
|
-
timeout(3) do
|
121
|
-
socket = TCPSocket.open(host, 8080)
|
122
|
-
socket.close if socket
|
123
|
-
end
|
124
|
-
}.not_to raise_error
|
125
|
+
url = URI.parse('http://www.example.com/')
|
126
|
+
res = Net::HTTP.start(url.host, url.port) {|http| http.get(url.path) }
|
127
|
+
expect(res).to be_a(Net::HTTPOK)
|
125
128
|
end
|
126
129
|
...
|
127
130
|
```
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'kelbim/dsl/checker'
|
3
|
+
|
4
|
+
module Kelbim
|
5
|
+
class DSL
|
6
|
+
class EC2
|
7
|
+
class LoadBalancer
|
8
|
+
class Attributes
|
9
|
+
include Checker
|
10
|
+
|
11
|
+
def initialize(load_balancer, &block)
|
12
|
+
@error_identifier = "LoadBalancer `#{load_balancer}`"
|
13
|
+
@result = {}
|
14
|
+
instance_eval(&block)
|
15
|
+
end
|
16
|
+
|
17
|
+
def result
|
18
|
+
required(:cross_zone_load_balancing, @result[:cross_zone_load_balancing])
|
19
|
+
@result
|
20
|
+
end
|
21
|
+
|
22
|
+
def cross_zone_load_balancing(value)
|
23
|
+
call_once(:cross_zone_load_balancing)
|
24
|
+
expected_type(value, Hash)
|
25
|
+
expected_length(value, 1)
|
26
|
+
@result[:cross_zone_load_balancing] = value
|
27
|
+
end
|
28
|
+
end # Attributes
|
29
|
+
end # LoadBalancer
|
30
|
+
end # EC2
|
31
|
+
end # DSL
|
32
|
+
end # Kelbim
|
data/lib/kelbim/dsl/converter.rb
CHANGED
@@ -41,6 +41,7 @@ end
|
|
41
41
|
instances = output_instances(load_balancer[:instances], vpc).strip
|
42
42
|
listeners = output_listeners(load_balancer[:listeners]).strip
|
43
43
|
health_check = output_health_check(load_balancer[:health_check]).strip
|
44
|
+
attributes = output_attributes(load_balancer[:attributes]).strip
|
44
45
|
testcase = is_internal ? '' : ("\n " + output_testcase(load_balancer[:dns_name]).strip + "\n")
|
45
46
|
|
46
47
|
out = <<-EOS
|
@@ -51,6 +52,8 @@ end
|
|
51
52
|
#{listeners}
|
52
53
|
|
53
54
|
#{health_check}
|
55
|
+
|
56
|
+
#{attributes}
|
54
57
|
EOS
|
55
58
|
|
56
59
|
if vpc
|
@@ -178,6 +181,17 @@ end
|
|
178
181
|
interval #{interval}
|
179
182
|
healthy_threshold #{healthy_threshold}
|
180
183
|
unhealthy_threshold #{unhealthy_threshold}
|
184
|
+
end
|
185
|
+
EOS
|
186
|
+
end
|
187
|
+
|
188
|
+
def output_attributes(attributes)
|
189
|
+
cross_zone_load_balancing = attributes[:cross_zone_load_balancing].inspect
|
190
|
+
cross_zone_load_balancing.sub!(/\A\s*{\s*/, '').sub!(/\s*}\s*\Z/, '')
|
191
|
+
|
192
|
+
<<-EOS
|
193
|
+
attributes do
|
194
|
+
cross_zone_load_balancing #{cross_zone_load_balancing}
|
181
195
|
end
|
182
196
|
EOS
|
183
197
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'ostruct'
|
2
2
|
require 'kelbim/dsl/checker'
|
3
3
|
require 'kelbim/dsl/health-check'
|
4
|
+
require 'kelbim/dsl/attributes'
|
4
5
|
require 'kelbim/dsl/listeners'
|
5
6
|
|
6
7
|
module Kelbim
|
@@ -27,6 +28,7 @@ module Kelbim
|
|
27
28
|
def result
|
28
29
|
required(:listeners, @result.listeners)
|
29
30
|
required(:health_check, @result.health_check)
|
31
|
+
#required(:attributes, @result.attributes)
|
30
32
|
|
31
33
|
if @vpc
|
32
34
|
required(:subnets, @result.subnets)
|
@@ -63,6 +65,11 @@ module Kelbim
|
|
63
65
|
@result.health_check = HealthCheck.new(@name, &block).result
|
64
66
|
end
|
65
67
|
|
68
|
+
def attributes(&block)
|
69
|
+
call_once(:attributes)
|
70
|
+
@result.attributes = Attributes.new(@name, &block).result
|
71
|
+
end
|
72
|
+
|
66
73
|
def subnets(*values)
|
67
74
|
call_once(:subnets)
|
68
75
|
raise "#{@error_identifier}: Subnet cannot be specified in EC2-Classic" unless @vpc
|
data/lib/kelbim/exporter.rb
CHANGED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'aws-sdk'
|
2
|
+
|
3
|
+
proc {
|
4
|
+
define_client_method = proc do |operation|
|
5
|
+
operation[:outputs] ||= {}
|
6
|
+
builder = AWS::Core::QueryRequestBuilder.new('2012-06-01', operation)
|
7
|
+
parser = AWS::Core::QueryResponseParser.new(operation[:outputs])
|
8
|
+
AWS::ELB::Client::V20120601.send(:define_client_method, operation[:method], builder, parser)
|
9
|
+
end
|
10
|
+
|
11
|
+
define_client_method.call({
|
12
|
+
:name => 'DescribeLoadBalancerAttributes',
|
13
|
+
:method => :describe_load_balancer_attributes,
|
14
|
+
:inputs => {'LoadBalancerName' => [:string, :required]},
|
15
|
+
:outputs => {
|
16
|
+
:children => {
|
17
|
+
'ResponseMetadata' => {
|
18
|
+
:ignore => true,
|
19
|
+
:children => {'RequestId' => {:ignore => true}}},
|
20
|
+
'DescribeLoadBalancerAttributesResult' => {
|
21
|
+
:ignore => true,
|
22
|
+
:children => {
|
23
|
+
'LoadBalancerAttributes' => {
|
24
|
+
:ignore => true,
|
25
|
+
:children => {
|
26
|
+
'CrossZoneLoadBalancing' => {
|
27
|
+
:children => {
|
28
|
+
'Enabled' => {:type => :boolean}}}}}}}}}
|
29
|
+
})
|
30
|
+
|
31
|
+
define_client_method.call({
|
32
|
+
:name => 'ModifyLoadBalancerAttributes',
|
33
|
+
:method => :modify_load_balancer_attributes,
|
34
|
+
:inputs => {
|
35
|
+
'LoadBalancerName' => [:string, :required],
|
36
|
+
'LoadBalancerAttributes' => [{
|
37
|
+
:structure => {
|
38
|
+
'CrossZoneLoadBalancing' => [{
|
39
|
+
:structure => {'Enabled' => [:boolean]}}]}},
|
40
|
+
:required]
|
41
|
+
},
|
42
|
+
})
|
43
|
+
}.call
|
@@ -10,6 +10,29 @@ module AWS
|
|
10
10
|
lb[:load_balancer_name] == name
|
11
11
|
end
|
12
12
|
end
|
13
|
+
|
14
|
+
def attributes
|
15
|
+
unless @attributes
|
16
|
+
credentials = AWS.config.credential_provider.credentials
|
17
|
+
elb = AWS::ELB.new(credentials)
|
18
|
+
@attributes = elb.client.describe_load_balancer_attributes(
|
19
|
+
:load_balancer_name => self.name).data
|
20
|
+
end
|
21
|
+
|
22
|
+
return @attributes.dup
|
23
|
+
end
|
24
|
+
|
25
|
+
def attributes=(attrs)
|
26
|
+
credentials = AWS.config.credential_provider.credentials
|
27
|
+
elb = AWS::ELB.new(credentials)
|
28
|
+
|
29
|
+
elb.client.modify_load_balancer_attributes({
|
30
|
+
:load_balancer_name => self.name,
|
31
|
+
:load_balancer_attributes => attrs,
|
32
|
+
})
|
33
|
+
|
34
|
+
(@attributes = attrs).dup
|
35
|
+
end
|
13
36
|
end # LoadBalancer
|
14
37
|
end # ELB
|
15
38
|
end # AWS
|
data/lib/kelbim/version.rb
CHANGED
@@ -32,6 +32,7 @@ module Kelbim
|
|
32
32
|
:instances => [], # instancesはLoadBalancerの処理で更新
|
33
33
|
:scheme => dsl.scheme,
|
34
34
|
:health_check => {}, # health_checkはLoadBalancerの処理で更新
|
35
|
+
:attributes => {}, # attributesはLoadBalancerの処理で更新
|
35
36
|
})
|
36
37
|
|
37
38
|
lb.listeners = dsl.listeners.map do |lstnr|
|
@@ -69,7 +70,7 @@ module Kelbim
|
|
69
70
|
opts[:availability_zones] = dsl.availability_zones.map {|i| AWS::EC2::AvailabilityZone.new(i) }
|
70
71
|
end
|
71
72
|
|
72
|
-
# health_checkはLoadBalancerの処理で更新
|
73
|
+
# health_check、attributesはLoadBalancerの処理で更新
|
73
74
|
lb = @load_balancers.create(dsl.name, opts)
|
74
75
|
@options.updated = true
|
75
76
|
end
|
@@ -28,6 +28,7 @@ module Kelbim
|
|
28
28
|
end
|
29
29
|
|
30
30
|
compare_health_check(dsl) or return false
|
31
|
+
compare_attributes(dsl) or return false
|
31
32
|
|
32
33
|
if self.vpc_id
|
33
34
|
compare_subnet_ids(dsl) or return false
|
@@ -77,6 +78,15 @@ module Kelbim
|
|
77
78
|
end
|
78
79
|
end
|
79
80
|
|
81
|
+
compare_attributes(dsl) do
|
82
|
+
log(:info, ' set attributes=' + dsl.attributes.inspect, :green)
|
83
|
+
|
84
|
+
unless @options.dry_run
|
85
|
+
@load_balancer.attributes = dsl.attributes
|
86
|
+
@options.updated = true
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
80
90
|
if self.vpc_id
|
81
91
|
compare_subnet_ids(dsl) do |aws_subnet_ids, dsl_subnet_ids|
|
82
92
|
add_ids = (dsl_subnet_ids - aws_subnet_ids)
|
@@ -178,6 +188,13 @@ module Kelbim
|
|
178
188
|
return same
|
179
189
|
end
|
180
190
|
|
191
|
+
def compare_attributes(dsl)
|
192
|
+
return true unless dsl.attributes
|
193
|
+
same = (@load_balancer.attributes.sort == dsl.attributes.sort)
|
194
|
+
yield if !same && block_given?
|
195
|
+
return same
|
196
|
+
end
|
197
|
+
|
181
198
|
def compare_subnet_ids(dsl)
|
182
199
|
subnet_ids = @load_balancer.subnets.map {|i| i.id }
|
183
200
|
same = (subnet_ids.sort == dsl.subnets.sort )
|
data/lib/kelbim.rb
CHANGED
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kelbim
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- winebarrel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 1.24.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 1.24.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: uuid
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
@@ -56,28 +56,28 @@ dependencies:
|
|
56
56
|
name: json
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: term-ansicolor
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - '>='
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
@@ -98,14 +98,14 @@ dependencies:
|
|
98
98
|
name: rake
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - '>='
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - '>='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
@@ -134,6 +134,7 @@ files:
|
|
134
134
|
- README.md
|
135
135
|
- bin/kelbim
|
136
136
|
- lib/kelbim/client.rb
|
137
|
+
- lib/kelbim/dsl/attributes.rb
|
137
138
|
- lib/kelbim/dsl/checker.rb
|
138
139
|
- lib/kelbim/dsl/converter.rb
|
139
140
|
- lib/kelbim/dsl/ec2.rb
|
@@ -145,6 +146,7 @@ files:
|
|
145
146
|
- lib/kelbim/exporter.rb
|
146
147
|
- lib/kelbim/ext/ec2-ext.rb
|
147
148
|
- lib/kelbim/ext/elb-listener-ext.rb
|
149
|
+
- lib/kelbim/ext/elb-load-balancer-attributes-ext.rb
|
148
150
|
- lib/kelbim/ext/elb-load-balancer-ext.rb
|
149
151
|
- lib/kelbim/ext/string-ext.rb
|
150
152
|
- lib/kelbim/logger.rb
|
@@ -170,17 +172,17 @@ require_paths:
|
|
170
172
|
- lib
|
171
173
|
required_ruby_version: !ruby/object:Gem::Requirement
|
172
174
|
requirements:
|
173
|
-
- -
|
175
|
+
- - '>='
|
174
176
|
- !ruby/object:Gem::Version
|
175
177
|
version: '0'
|
176
178
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
177
179
|
requirements:
|
178
|
-
- -
|
180
|
+
- - '>='
|
179
181
|
- !ruby/object:Gem::Version
|
180
182
|
version: '0'
|
181
183
|
requirements: []
|
182
184
|
rubyforge_project:
|
183
|
-
rubygems_version: 2.1.
|
185
|
+
rubygems_version: 2.1.8
|
184
186
|
signing_key:
|
185
187
|
specification_version: 4
|
186
188
|
summary: Kelbim is a tool to manage ELB.
|