dory 0.1.0 → 0.2.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: b636e5e451b94e93e9ef2ce598f7b41af8e49463
4
- data.tar.gz: 4513ecc2eace13190f46355ff93ec0ca0f9a0b57
3
+ metadata.gz: dd130b3cf0b939ac79261dced4f91430d1c391ba
4
+ data.tar.gz: 2f7465a0c96d42c3a13f2d725f8b8f8e0c931a9d
5
5
  SHA512:
6
- metadata.gz: 12db07585ec03aa4478c969586976c1365595bbbd72dd8dba8dce2daede46aedd96d59b3cff68247a9b1285183e8213d56d71ae4fd0216a63963d9ec9ff078f6
7
- data.tar.gz: 4efa86ae20f8bf1ef7386f4ef61891396e6c84016fc68742d843a66513a9c1f491c47cb5a9b932e3771af3ec03e01d3132b764a3e619f09b4cb0617458917ac6
6
+ metadata.gz: 2efd954506347e634028b6c5f7aebd0305736eba68921d3e415574bc5922def0bc4a17639054e60cfdf4796dda0b8b23b5ecd32f1e3e453a107a6f3b731e4ea5
7
+ data.tar.gz: 2393eac90e2b129a9cc60d77c1f6f35fe3bd63771d7454d129ad75769e6ce8dbeb4a1e920588f650a23f335a2f7114c5cc267643a029f17dc1e291154de12508
@@ -1,4 +1,5 @@
1
1
  require 'yaml'
2
+ require 'active_support/core_ext/hash/indifferent_access'
2
3
 
3
4
  module Dory
4
5
  class Config
@@ -8,7 +9,7 @@ module Dory
8
9
 
9
10
  def self.default_yaml
10
11
  %q(---
11
- :dory:
12
+ dory:
12
13
  # Be careful if you change the settings of some of
13
14
  # these services. They may not talk to each other
14
15
  # if you change IP Addresses.
@@ -17,35 +18,38 @@ module Dory
17
18
  # but if you disable dnsmasq, it
18
19
  # will make your system look for a name server that
19
20
  # doesn't exist.
20
- :dnsmasq:
21
- :enabled: true
22
- :domain: docker # domain that will be listened for
23
- :address: 127.0.0.1 # address returned for queries against domain
24
- :container_name: dory_dnsmasq
25
- :nginx_proxy:
26
- :enabled: true
27
- :container_name: dory_dinghy_http_proxy
28
- :https_enabled: true
29
- :ssl_certs_dir: '' # leave as empty string to use default certs
30
- :resolv:
31
- :enabled: true
32
- :nameserver: 127.0.0.1
21
+ dnsmasq:
22
+ enabled: true
23
+ domains: # array of domains that will be resolved to the specified address
24
+ - domain: docker # you can set '#' for a wilcard
25
+ address: 127.0.0.1 # return for queries against the domain
26
+ - domain: dev
27
+ address: 127.0.0.1
28
+ container_name: dory_dnsmasq
29
+ nginx_proxy:
30
+ enabled: true
31
+ container_name: dory_dinghy_http_proxy
32
+ https_enabled: true
33
+ ssl_certs_dir: '' # leave as empty string to use default certs
34
+ resolv:
35
+ enabled: true
36
+ nameserver: 127.0.0.1
33
37
  ).split("\n").map{|s| s.sub(' ' * 8, '')}.join("\n")
34
38
  end
35
39
 
36
40
  def self.default_settings
37
- YAML.load(self.default_yaml)
41
+ YAML.load(self.default_yaml).with_indifferent_access
38
42
  end
39
43
 
40
44
  def self.settings(filename = self.filename)
41
45
  if File.exist?(filename)
42
- default_settings = self.default_settings.dup
43
- config_file_settings = YAML.load_file(filename)
46
+ defaults = self.default_settings.dup
47
+ config_file_settings = YAML.load_file(filename).with_indifferent_access
44
48
  [:dnsmasq, :nginx_proxy, :resolv].each do |service|
45
- default_settings[:dory][service].merge!(config_file_settings[:dory][service] || {})
49
+ defaults[:dory][service].merge!(config_file_settings[:dory][service] || {})
46
50
  end
47
- default_settings[:dory][:debug] = config_file_settings[:dory][:debug]
48
- default_settings
51
+ defaults[:dory][:debug] = config_file_settings[:dory][:debug]
52
+ defaults
49
53
  else
50
54
  self.default_settings
51
55
  end
@@ -60,8 +64,28 @@ module Dory
60
64
  self.write_settings(self.default_yaml, filename, is_yaml: true)
61
65
  end
62
66
 
67
+ def self.upgrade_settings_file(filename = self.filename)
68
+ self.write_settings(self.upgrade(self.settings), filename, is_yaml: false)
69
+ end
70
+
63
71
  def self.debug?
64
72
  self.settings[:dory][:debug]
65
73
  end
74
+
75
+ def self.upgrade(old_hash)
76
+ newsettings = old_hash.dup
77
+
78
+ # If there's a single domain and address, upgrade to the array format
79
+ if newsettings[:dory][:dnsmasq][:domain]
80
+ newsettings[:dory][:dnsmasq][:domains] = [{
81
+ domain: newsettings[:dory][:dnsmasq][:domain],
82
+ address: newsettings[:dory][:dnsmasq][:address] || '127.0.0.1'
83
+ }]
84
+ newsettings[:dory][:dnsmasq].delete(:domain)
85
+ newsettings[:dory][:dnsmasq].delete(:address)
86
+ end
87
+
88
+ newsettings
89
+ end
66
90
  end
67
91
  end
@@ -37,25 +37,39 @@ module Dory
37
37
  end
38
38
 
39
39
  def self.dnsmasq_image_name
40
- 'freedomben/dory-dnsmasq'
40
+ 'freedomben/dory-dnsmasq:1.1.0'
41
41
  end
42
42
 
43
43
  def self.container_name
44
44
  Dory::Config.settings[:dory][:dnsmasq][:container_name]
45
45
  end
46
46
 
47
- def self.domain
47
+ def self.domains
48
+ Dory::Config.settings[:dory][:dnsmasq][:domains]
49
+ end
50
+
51
+ def self.old_domain
48
52
  Dory::Config.settings[:dory][:dnsmasq][:domain]
49
53
  end
50
54
 
51
- def self.addr
55
+ def self.old_address
52
56
  Dory::Config.settings[:dory][:dnsmasq][:address]
53
57
  end
54
58
 
55
- def self.run_command(domain = self.domain, addr = self.addr)
59
+ def self.domain_addr_arg_string
60
+ if self.old_domain
61
+ "#{Shellwords.escape(self.old_domain)} #{Shellwords.escape(self.old_address)}"
62
+ else
63
+ self.domains.map do |domain|
64
+ "#{Shellwords.escape(domain[:domain])} #{Shellwords.escape(domain[:address])}"
65
+ end.join(" ")
66
+ end
67
+ end
68
+
69
+ def self.run_command(domains = self.domains)
56
70
  "docker run -d -p 53:53/tcp -p 53:53/udp --name=#{Shellwords.escape(self.container_name)} " \
57
71
  "--cap-add=NET_ADMIN #{Shellwords.escape(self.dnsmasq_image_name)} " \
58
- "#{Shellwords.escape(domain)} #{Shellwords.escape(addr)}"
72
+ "#{self.domain_addr_arg_string}"
59
73
  end
60
74
 
61
75
  def self.check_port(port_num)
@@ -16,18 +16,18 @@ module Dory
16
16
  unless self.running?
17
17
  self.run_preconditions
18
18
  status = if self.container_exists?
19
- if Dory::Config.debug?
20
- puts "[DEBUG] Container '#{self.container_name}' already exists. " \
21
- "Starting with '#{self.start_cmd}'"
22
- end
23
- Sh.run_command(self.start_cmd)
24
- else
25
- if Dory::Config.debug?
26
- puts "[DEBUG] Container '#{self.container_name}' does not exist. " \
27
- "Creating/starting with '#{self.run_command}'"
28
- end
29
- Sh.run_command(self.run_command)
30
- end
19
+ if Dory::Config.debug?
20
+ puts "[DEBUG] Container '#{self.container_name}' already exists. " \
21
+ "Starting with '#{self.start_cmd}'"
22
+ end
23
+ Sh.run_command(self.start_cmd)
24
+ else
25
+ if Dory::Config.debug?
26
+ puts "[DEBUG] Container '#{self.container_name}' does not exist. " \
27
+ "Creating/starting with '#{self.run_command}'"
28
+ end
29
+ Sh.run_command(self.run_command)
30
+ end
31
31
  unless status.success?
32
32
  if !handle_error || !self.handle_error(status)
33
33
  raise RuntimeError.new(
@@ -1,4 +1,4 @@
1
1
  module Dory
2
- VERSION = '0.1.0'
3
- DATE = '2016-05-15'
2
+ VERSION = '0.2.0'
3
+ DATE = '2016-06-09'
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Porter
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-15 00:00:00.000000000 Z
11
+ date: 2016-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activesupport
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '4.2'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '4.2'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rspec
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -158,3 +172,4 @@ specification_version: 4
158
172
  summary: slackbot_frd provides a dirt-simple framework for implementing one or more
159
173
  slack bots
160
174
  test_files: []
175
+ has_rdoc: