docker-compose 0.5.0 → 0.5.1

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: f68e64a415d160c3d7dceb0ee8276efe6ed99698
4
- data.tar.gz: 4c1ea3f627a72012c2141b289fd6e5094fcb6194
3
+ metadata.gz: a85e6cd467f9c5c4a6704724d9429a4f681d065a
4
+ data.tar.gz: a5f85af19b15c215b68a01e7004bf0c0cb05587e
5
5
  SHA512:
6
- metadata.gz: 07fa36e16495693c7c1866728f3ee303c010ee5408ac50bc69048d36f1fdc13861483e30b8e69c842474ccc94dfd12768431d32d0335c351524d71e140a907f8
7
- data.tar.gz: 708a6502e5a4b335f840418a140b0d41da2cc3434d3fdd71ba20f1ae3d50aec9df351ee6a14370fc91bec84f7f591d3165e10dee79185c8e245dd86cee74dfcc
6
+ metadata.gz: 1a9143db8626ea989d500c29a802c79b84c50ebd66674daf9bfff474f413353a9d3203bd1860d5dce3dbefa2301fc44521db597fd56b4cdf95d9ff295d11be57
7
+ data.tar.gz: f2f68bd762d659926ec4880423db394e75ef03ea72f7ee0cf7af65e06639be902f0f0d9819128f64d6dc8e4d56d06b5ceb05795ed3e800ac1383f23b3939947d
@@ -20,7 +20,19 @@ module Docker::Compose
20
20
  # @param [NetInfo] net_info
21
21
  # @yield yields with each substituted (key, value) pair
22
22
  def self.map(env, strict:true, session:Session.new, net_info:NetInfo.new)
23
- mapper = self.new(session, net_info.docker_routable_ip, strict:strict)
23
+ # TODO: encapsulate this trickiness better ... inside NetInfo perhaps?
24
+ docker_host = ENV['DOCKER_HOST']
25
+ if docker_host.nil? || docker_host =~ /^(\/|unix|file)/
26
+ # If DOCKER_HOST is blank, or pointing to a local socket, then we
27
+ # can trust the address information returned by `docker-compose port`.
28
+ override_host = nil
29
+ else
30
+ # If DOCKER_HOST is present, assume that containers have bound to
31
+ # whatever IP we reach it at; don't fall victim to dirty NAT lies!
32
+ override_host = net_info.docker_routable_ip
33
+ end
34
+
35
+ mapper = self.new(session, override_host, strict:strict)
24
36
  env.each_pair do |k, v|
25
37
  begin
26
38
  v = mapper.map(v)
@@ -33,15 +45,14 @@ module Docker::Compose
33
45
 
34
46
  # Create an instance of Mapper
35
47
  # @param [Docker::Compose::Session] session
36
- # @param [String] docker_host DNS hostnrame or IPv4 address of the host
37
- # that is publishing Docker services (i.e. the `DOCKER_HOST` hostname or
38
- # IP if you are using a non-clustered Docker environment)
48
+ # @param [String] override_host forcible address or DNS hostname to use;
49
+ # leave nil to trust docker-compose output.
39
50
  # @param [Boolean] strict if true, raise BadSubstitution when unrecognized
40
51
  # syntax is passed to #map; if false, simply return unrecognized
41
52
  # values without substituting anything
42
- def initialize(session, docker_host, strict:true)
53
+ def initialize(session, override_host=nil, strict:true)
43
54
  @session = session
44
- @docker_host = docker_host
55
+ @override_host = override_host
45
56
  @strict = strict
46
57
  end
47
58
 
@@ -81,10 +92,12 @@ module Docker::Compose
81
92
  # "service not running" case and the "container port not published" case!
82
93
  #
83
94
  # @raise [NoService] if service is not up or does not publish port
84
- # @return [Integer] host port number, or nil if port not published
85
- def published_port(service, port)
86
- result = @session.port(service, port)
87
- Integer(result.split(':').last.gsub("\n", ""))
95
+ # @return [Array] (String, Integer) pair of host address and port number
96
+ def host_and_port(service, port)
97
+ result = @session.port(service, port).chomp
98
+ host, port = result.split(':')
99
+ host = @override_host if @override_host
100
+ [host, Integer(port)]
88
101
  rescue RuntimeError
89
102
  raise NoService, "Service '#{service}' not running, or does not publish port '#{port}'"
90
103
  end
@@ -99,27 +112,26 @@ module Docker::Compose
99
112
 
100
113
  if uri && uri.scheme && uri.host
101
114
  # absolute URI with scheme, authority, etc
102
- uri.port = published_port(uri.host, uri.port)
103
- uri.host = @docker_host
115
+ uri.host, uri.port = host_and_port(uri.host, uri.port)
104
116
  return uri.to_s
105
117
  elsif pair.size == 2
106
118
  # "host:port" pair; three sub-cases...
107
119
  if pair.first =~ ELIDED
108
120
  # output only the port
109
121
  service = pair.first.gsub(REMOVE_ELIDED, '')
110
- port = published_port(service, pair.last)
122
+ _, port = host_and_port(service, pair.last)
111
123
  return port.to_s
112
124
  elsif pair.last =~ ELIDED
113
125
  # output only the hostname; resolve the port anyway to ensure that
114
126
  # the service is running.
115
127
  service = pair.first
116
128
  port = pair.last.gsub(REMOVE_ELIDED, '')
117
- published_port(service, port)
118
- return @docker_host
129
+ host, _ = host_and_port(service, port)
130
+ return host
119
131
  else
120
132
  # output port:hostname pair
121
- port = published_port(pair.first, pair.last)
122
- return "#{@docker_host}:#{port}"
133
+ host, port = host_and_port(pair.first, pair.last)
134
+ return "#{host}:#{port}"
123
135
  end
124
136
  elsif @strict
125
137
  raise BadSubstitution, "Can't understand '#{value}'"
@@ -1,4 +1,5 @@
1
1
  require 'backticks'
2
+ require 'yaml'
2
3
 
3
4
  module Docker::Compose
4
5
  # A Ruby OOP interface to a docker-compose session. A session is bound to
@@ -22,6 +23,14 @@ module Docker::Compose
22
23
  @file = file
23
24
  end
24
25
 
26
+ # Validate docker-compose file and return it as Hash
27
+ # @return [Hash] the docker-compose config file
28
+ # @raise [Error] if command fails
29
+ def config(*args)
30
+ config = run!('config', *args)
31
+ YAML.load(config)
32
+ end
33
+
25
34
  # Monitor the logs of one or more containers.
26
35
  # @param [Array] services list of String service names to show logs for
27
36
  # @return [true] always returns true
@@ -1,5 +1,5 @@
1
1
  module Docker
2
2
  module Compose
3
- VERSION = "0.5.0"
3
+ VERSION = "0.5.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docker-compose
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tony Spataro
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-03-29 00:00:00.000000000 Z
11
+ date: 2016-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backticks