vagrant-dnsdock-hostupdater 0.0.20 → 0.0.21

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 390d2a2a840f4a07852d57172230f67600396433
4
- data.tar.gz: 250965b27a89eb7ea9ab85667e28ab1bce9144c8
3
+ metadata.gz: e3573580bb55bd09385772c7bcdd7cff5564d6e4
4
+ data.tar.gz: 7aa965373fe6f88c2c4347895a1d69bcb6a98f7c
5
5
  SHA512:
6
- metadata.gz: 7169e32d4954b21e334a22b860e759cc4d656686696ba92087fca5de738171c4ae695ae9c76d27275ac8907c48489a05661049f6d108dbde96e9e8ba0a12d707
7
- data.tar.gz: 5e3f7648fbee8556e52644b0bc8d23c99b22aa6269433ac95ebce8810791c0957c9b2f6fb140b1fd7398b2f7c019b4cac4d931d91db031bd5d4964871a1fe56c
6
+ metadata.gz: 882ec6bc80ec52c62c1b2106209df03f8b6c00a0951dca92ca1901c750e6d87ba4e691c0313cc6643d48d084c67a15fc6a29d5c7568473a349d3a8483b9bf617
7
+ data.tar.gz: a6dbbf6cab2d0dafda674da90e5cb9700bb17276a86166727ad67e198b14e90c934c0d35fd821c32951eb8f1eb79b220bc444689b62ca3e111b20726832aaf80
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ # group :development do
6
+ # gem 'vagrant',
7
+ # git: 'https://github.com/mitchellh/vagrant.git',
8
+ # ref: ENV.fetch('VAGRANT_VERSION', 'v1.9.1')
9
+ # end
10
+ #
11
+ # group :plugins do
12
+ # gem "vagrant-dnsdock-hostupdater", path: "."
13
+ # end
14
+ #
@@ -1,5 +1,4 @@
1
1
  require_relative 'host-manager'
2
2
 
3
3
  HostManager::Client
4
- .create('10.10.10.1', 2991)
5
- .send_action('delete', 'the1234.test.host', '127.0.0.1', 'containerid')
4
+ .create('192.168.200.1', 2991)
@@ -1,58 +1,51 @@
1
1
  require_relative 'host-manager'
2
2
  require 'yaml'
3
-
4
- def update
5
- client = HostManager::Client.create('10.10.10.1', 2991)
6
- client.host_suffix '.local.signal.sh'
7
- client.sync_hosts Docker::Container.all({:all => true})
8
- client.close
9
- end
10
-
11
- sleep(2)
12
-
13
- update
14
-
15
- loop {
16
- begin
17
- Docker::Event.stream { |event|
18
- HostManager.log.info 'Connected to docker socket. Listening for events.'
19
- # respond to all container events
20
-
3
+ require 'pp'
4
+
5
+ module HostManager
6
+ class DockerEvent
7
+
8
+ def self.update(ip, port, host_suffix)
9
+ client = HostManager::Client.create(ip, port)
10
+ client.host_suffix host_suffix
11
+ client.sync_hosts Docker::Container.all({:all => true})
12
+ client.close
13
+ end
14
+
15
+ def self.run(ip, port, host_suffix)
16
+ # sync existing host entries on start (normally this will remove old left-over entries)
17
+ self.update(ip, port, host_suffix)
18
+
19
+ sleep(2)
20
+ loop {
21
+ run_once(ip, port, host_suffix)
22
+ }
23
+ end
24
+
25
+ private
26
+ def self.run_once(ip, port, host_suffix)
21
27
  begin
22
- if event.type == 'container'
23
- # container_id = event.actor.id.chomp
24
-
25
- # puts event.action
28
+ Docker::Event.stream { |event|
29
+ HostManager.log.info 'Connected to docker socket. Listening for events.'
30
+ # respond to all container events
26
31
 
27
- # container = Docker::Container.get(container_id)
28
- # ip = container.info['NetworkSettings']['IPAddress']
29
- # HostManager.log.info container.
30
- # puts event.type
32
+ begin
33
+ if event.type == 'container' && %w(start die).include?(event.action)
34
+ self.update(ip, port, host_suffix)
35
+ end
31
36
 
32
- # container_name = container.info['Name'].sub!(/^\//, '')
33
-
34
-
35
- # To handle updating single entries
36
- # if event.action == 'start'
37
- # client.send_action('create', container_name, ip, container_id)
38
- # elsif event.action == 'die'
39
- # client.send_action('delete', container_name, ip, container_id)
40
- # end
41
-
42
- if event.action == 'start' || event.action == 'die'
43
- update
37
+ rescue => e
38
+ puts e.inspect
44
39
  end
45
40
 
46
- end
47
- rescue => e
48
- puts e.inspect
49
- end
41
+ break
42
+ }
50
43
 
51
- break
52
- }
53
-
54
- rescue Docker::Error::TimeoutError
55
- HostManager.log.info 'Docker socket connection timed out whilst listening for events. Reconnecting...'
44
+ rescue Docker::Error::TimeoutError
45
+ HostManager.log.info 'Docker socket connection timed out whilst listening for events. Reconnecting...'
46
+ end
47
+ end
56
48
  end
57
- }
49
+ end
58
50
 
51
+ HostManager::DockerEvent.run('192.168.200.1', 2991, '.local.signal.sh')
@@ -53,10 +53,35 @@ module HostManager
53
53
  if container_name.include?('.')
54
54
  container_name
55
55
  else
56
- container_name.sub(/^\//, '').gsub(/_/, '-') + host_suffix
56
+ sanitize_host_value(container_name) + host_suffix
57
57
  end
58
58
  end
59
59
 
60
+ def compose_host_names(container)
61
+ names = []
62
+ labels = container.info['Config']['Labels']
63
+
64
+ name = labels['com.docker.compose.project']
65
+ service = labels['com.docker.compose.service']
66
+
67
+
68
+ if name != nil && service != nil
69
+ service = sanitize_host_value(service)
70
+ name = sanitize_host_value(name)
71
+
72
+ container_num = labels['com.docker.compose.container-number']
73
+ if container_num == '1'
74
+ names.push("#{service}.#{name}#{host_suffix}")
75
+ else
76
+ names.push("#{service}-#{container_num}.#{name}#{host_suffix}")
77
+ end
78
+ else
79
+ names.push(host_name(container.info['Name']))
80
+ end
81
+
82
+ names
83
+ end
84
+
60
85
  def host_suffix(suffix = nil)
61
86
  if suffix != nil
62
87
  @domain_suffix = suffix
@@ -98,13 +123,15 @@ module HostManager
98
123
  ip = container.info['NetworkSettings']['IPAddress']
99
124
 
100
125
  if ip
101
- item = {
102
- :hostname => host_name(name),
103
- :ip => ip,
104
- :containerId => container.info['id']
105
- }
106
-
107
- data.push(item)
126
+ compose_host_names(container).each do |hostname|
127
+ item = {
128
+ :hostname => hostname,
129
+ :ip => ip,
130
+ :containerId => container.info['id']
131
+ }
132
+
133
+ data.push(item)
134
+ end
108
135
  else
109
136
  log.warn("Ignored request to create hosts entry due to no IP being returned from container: #{name}")
110
137
  end
@@ -150,9 +177,10 @@ module HostManager
150
177
  end
151
178
 
152
179
  def add_entry(entry, hosts)
153
- if entry['ip'] && entry['containerId'] && entry['hostname']
154
- comment = HostManager.comment_prefix + (entry['containerId'] ? " Container ID: #{entry['containerId']}" : '')
155
- hosts.elements << Hosts::Entry.new(entry['ip'], entry['hostname'], :comment => comment)
180
+ if entry[:ip] && entry[:containerId] && entry[:hostname]
181
+ comment = HostManager.comment_prefix + (entry['containerId'] ? " Container ID: #{entry[:containerId]}" : '')
182
+ log.info "Adding entry: #{entry[:hostname]} => #{entry[:ip]}"
183
+ hosts.elements << Hosts::Entry.new(entry[:ip], entry[:hostname], :comment => comment)
156
184
 
157
185
  else
158
186
  log.warn 'Unable to write entry due to missing values [ip,containerId,hostname]: ' + entry.to_json
@@ -162,9 +190,6 @@ module HostManager
162
190
  def execute(action, hostname, ip, container_id = nil)
163
191
  hosts = get_hosts
164
192
 
165
-
166
- # todo: remove all entries and then re-add (sync hosts every time)
167
-
168
193
  if action == 'create'
169
194
  hosts.elements.each do |element|
170
195
  if valid_entry?(element) && hostname == element.name
@@ -193,6 +218,12 @@ module HostManager
193
218
  end
194
219
  end
195
220
 
221
+ private
222
+
223
+ def sanitize_host_value(value)
224
+ value.sub(/^\//, '').gsub(/_/, '-')
225
+ end
226
+
196
227
  end
197
228
 
198
229
  class Server < Base
@@ -239,20 +270,6 @@ module HostManager
239
270
  @socket.close
240
271
  end
241
272
 
242
- def send_action(action, hostname, ip, container_id = nil)
243
- data = {
244
- :action => action,
245
- :hostname => host_name(hostname),
246
- :ip => ip,
247
- }
248
-
249
- if container_id
250
- data[:containerId] = container_id
251
- end
252
-
253
- send(data)
254
- end
255
-
256
273
  def sync_hosts(container_data)
257
274
  data = build_hosts_data(container_data)
258
275
 
@@ -1,5 +1,5 @@
1
1
  module Vagrant
2
2
  module DnsdockHostUpdater
3
- VERSION = '0.0.20'.freeze
3
+ VERSION = '0.0.21'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-dnsdock-hostupdater
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.20
4
+ version: 0.0.21
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Coit
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-23 00:00:00.000000000 Z
11
+ date: 2017-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docker-api
@@ -61,6 +61,7 @@ executables: []
61
61
  extensions: []
62
62
  extra_rdoc_files: []
63
63
  files:
64
+ - Gemfile
64
65
  - Rakefile
65
66
  - lib/client.rb
66
67
  - lib/event-watcher.rb
@@ -83,7 +84,7 @@ files:
83
84
  - lib/vagrant-dnsdock-hostupdater/command.rb
84
85
  - lib/vagrant-dnsdock-hostupdater/plugin.rb
85
86
  - lib/version.rb
86
- homepage: https://bitbucket.org/blonde/shore
87
+ homepage: https://bitbucket.org/briancoit
87
88
  licenses:
88
89
  - ISC
89
90
  metadata: {}
@@ -103,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
104
  version: '0'
104
105
  requirements: []
105
106
  rubyforge_project:
106
- rubygems_version: 2.4.5.2
107
+ rubygems_version: 2.5.2
107
108
  signing_key:
108
109
  specification_version: 4
109
110
  summary: Update hosts