docker-swarm-api 1.1 → 1.2
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/lib/docker/swarm/node.rb +46 -8
- data/lib/docker/swarm/swarm.rb +37 -5
- data/lib/docker/swarm/task.rb +4 -0
- data/lib/docker/swarm/version.rb +1 -1
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7be7483768fca3556ef820aede393f082ea9112d
|
4
|
+
data.tar.gz: 46d6a6c0831df578aef01dd6ced0c6d38f79ef84
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da9b11be6fb1cd7dd935e04779cc7f4c05fb05ee48def067d4f7d64017f1278483106a5e0ee984a7ab50897197821da4af0b9090d7808800ed092c2f784602d6
|
7
|
+
data.tar.gz: e231e65865010eea0be3b362a50a9d3ba28825aeda8d269eb84b67a99c18dca93aa9fcf52d8544f5ae1caf5ee955679e47d8ab21343e92cafcbc1aafc4ad8aec
|
data/lib/docker/swarm/node.rb
CHANGED
@@ -45,8 +45,24 @@ class Docker::Swarm::Node
|
|
45
45
|
return @hash['Status']['State']
|
46
46
|
end
|
47
47
|
|
48
|
-
def drain
|
48
|
+
def drain(opts = {})
|
49
49
|
change_availability(:drain)
|
50
|
+
if (opts[:wait_for_drain])
|
51
|
+
opts[:wait_seconds]
|
52
|
+
while (running_tasks.length > 0)
|
53
|
+
puts "Waiting for node (#{host_name}) to drain. Still has #{running_tasks.length} tasks running."
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def running_tasks
|
59
|
+
return tasks.select {|t| t.status == 'running'}
|
60
|
+
end
|
61
|
+
|
62
|
+
def tasks
|
63
|
+
return @swarm.tasks.select {|t|
|
64
|
+
t.node.id == self.id
|
65
|
+
}
|
50
66
|
end
|
51
67
|
|
52
68
|
def activate
|
@@ -54,19 +70,41 @@ class Docker::Swarm::Node
|
|
54
70
|
end
|
55
71
|
|
56
72
|
def remove
|
57
|
-
|
73
|
+
leave(true)
|
74
|
+
refresh
|
75
|
+
start_time = Time.now
|
76
|
+
while (self.status != 'down')
|
77
|
+
refresh
|
78
|
+
raise "Node not down 60 seconds after leaving swarm: #{self.host_name}" if (Time.now.to_i - start_time.to_i > 60)
|
79
|
+
end
|
80
|
+
Docker::Swarm::Node.remove(self.id, @swarm.connection)
|
58
81
|
end
|
59
82
|
|
60
|
-
def
|
83
|
+
def leave(force = true)
|
84
|
+
drain(wait_for_drain: true, wait_seconds: 60)
|
85
|
+
# change_availability(:active)
|
86
|
+
@swarm.leave(self, force)
|
87
|
+
end
|
88
|
+
|
89
|
+
def change_availability(new_availability)
|
61
90
|
raise "Bad availability param: #{availability}" if (!AVAILABILITY[availability])
|
62
|
-
|
63
|
-
|
64
|
-
|
91
|
+
refresh
|
92
|
+
if (self.availability != new_availability)
|
93
|
+
@hash['Spec']['Availability'] = AVAILABILITY[new_availability]
|
94
|
+
query = {version: @hash['Version']['Index']}
|
95
|
+
response = @swarm.connection.post("/nodes/#{self.id}/update", query, :body => @hash['Spec'].to_json, expects: [200, 500], full_response: true)
|
96
|
+
if (response.status != 200)
|
97
|
+
raise "Error changing node availability: #{response.body} HTTP-#{response.status}"
|
98
|
+
end
|
99
|
+
end
|
65
100
|
end
|
66
101
|
|
67
|
-
def remove
|
102
|
+
def self.remove(node_id, connection)
|
68
103
|
query = {}
|
69
|
-
response =
|
104
|
+
response = connection.delete("/nodes/#{node_id}", query, expects: [200, 406, 500], full_response: true)
|
105
|
+
if (response.status != 200)
|
106
|
+
raise "Error deleting node: #{response.body}"
|
107
|
+
end
|
70
108
|
end
|
71
109
|
|
72
110
|
|
data/lib/docker/swarm/swarm.rb
CHANGED
@@ -7,12 +7,16 @@ class Docker::Swarm::Swarm
|
|
7
7
|
|
8
8
|
def initialize(hash, manager_connection)
|
9
9
|
@hash = hash
|
10
|
+
# @manager_connection = manager_connection
|
10
11
|
@id = hash['ID']
|
11
12
|
@worker_join_token = hash['JoinTokens']['Worker']
|
12
13
|
@manager_join_token = hash['JoinTokens']['Manager']
|
13
|
-
manager_node = nodes(manager_connection).first
|
14
14
|
@node_hash = {}
|
15
|
-
|
15
|
+
nodes(manager_connection).each do |node|
|
16
|
+
# Resolv::DNS.new.getaddress("devlog")
|
17
|
+
@node_hash[node.id] = {hash: node.hash, connection: manager_connection}
|
18
|
+
|
19
|
+
end
|
16
20
|
end
|
17
21
|
|
18
22
|
def join(node_connection, join_token)
|
@@ -26,12 +30,15 @@ class Docker::Swarm::Swarm
|
|
26
30
|
"RemoteAddrs" => ["#{master_ip}:2377"],
|
27
31
|
"JoinToken" => join_token
|
28
32
|
}
|
33
|
+
new_node = nil
|
29
34
|
resp = node_connection.post('/swarm/join', query, :body => join_options.to_json, expects: [200])
|
30
35
|
nodes.each do |node|
|
31
36
|
if (!node_ids_before.include? node.id)
|
37
|
+
new_node = node
|
32
38
|
@node_hash[node.id] = {hash: node.hash, connection: node_connection}
|
33
39
|
end
|
34
40
|
end
|
41
|
+
return new_node
|
35
42
|
end
|
36
43
|
|
37
44
|
def connection
|
@@ -41,7 +48,7 @@ class Docker::Swarm::Swarm
|
|
41
48
|
return node_info[:connection]
|
42
49
|
end
|
43
50
|
end
|
44
|
-
|
51
|
+
return @manager_connection
|
45
52
|
end
|
46
53
|
|
47
54
|
def join_worker(node_connection)
|
@@ -53,6 +60,10 @@ class Docker::Swarm::Swarm
|
|
53
60
|
end
|
54
61
|
|
55
62
|
def remove
|
63
|
+
services().each do |service|
|
64
|
+
service.remove()
|
65
|
+
end
|
66
|
+
|
56
67
|
worker_nodes.each do |node|
|
57
68
|
leave(node, true)
|
58
69
|
end
|
@@ -138,7 +149,18 @@ class Docker::Swarm::Swarm
|
|
138
149
|
hash = JSON.parse(response)
|
139
150
|
return Docker::Swarm::Service.new(self, hash)
|
140
151
|
end
|
141
|
-
|
152
|
+
|
153
|
+
def services
|
154
|
+
items = []
|
155
|
+
query = {}
|
156
|
+
opts = {}
|
157
|
+
response = self.connection.get("/services", query, :body => opts.to_json)
|
158
|
+
hashes = JSON.parse(response)
|
159
|
+
hashes.each do |hash|
|
160
|
+
items << Docker::Swarm::Service.new(self, hash)
|
161
|
+
end
|
162
|
+
return items
|
163
|
+
end
|
142
164
|
|
143
165
|
# Initialize Swarm
|
144
166
|
def self.init(opts, connection)
|
@@ -164,9 +186,19 @@ class Docker::Swarm::Swarm
|
|
164
186
|
def self.leave(force, connection)
|
165
187
|
query = {}
|
166
188
|
query['force'] = force
|
167
|
-
connection.post('/swarm/leave', query, expects: [200, 406])
|
189
|
+
response = connection.post('/swarm/leave', query, expects: [200, 406, 500], full_response: true)
|
190
|
+
if (response.status == 500)
|
191
|
+
raise "Error leaving: #{response.body} HTTP-#{response.status}"
|
192
|
+
end
|
168
193
|
end
|
169
194
|
|
195
|
+
def self.find(connection)
|
196
|
+
query = {}
|
197
|
+
response = connection.get('/swarm', query, expects: [200, 406], full_response: true)
|
198
|
+
if (response.status == 200)
|
199
|
+
return Docker::Swarm::Swarm.new(JSON.parse(response.body), connection)
|
200
|
+
end
|
201
|
+
end
|
170
202
|
|
171
203
|
|
172
204
|
end
|
data/lib/docker/swarm/task.rb
CHANGED
data/lib/docker/swarm/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docker-swarm-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
4
|
+
version: '1.2'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Moore / Rogue Wave Software
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-12-
|
11
|
+
date: 2016-12-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -39,33 +39,33 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 1.33.1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: retry_block
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
48
|
-
type: :
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: byebug
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
61
|
+
version: '6.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
68
|
+
version: '6.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|