docker-compose 0.5.0 → 0.5.1

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: 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