chef-provisioning-docker 0.5.2 → 0.6

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: 959604e2862aa490b2f63f3f326adc682c068a18
4
- data.tar.gz: c9ff236c685873fa302eab7d1be1982cfd5740dd
3
+ metadata.gz: 2ec4b5e583d16fa9f00cc14e0504dd3d9e8d392f
4
+ data.tar.gz: 2af59e90c819b9f9cb2a3a57f82be6c9cd64e299
5
5
  SHA512:
6
- metadata.gz: f39e023ac212535111eead676a7f4fc2799c13cc833bba6b9aefbe2fed4d038780c2334ff6a644b3291d8e41c5e7843ed72f15b45bcb00a4d22a29596d626092
7
- data.tar.gz: eaae6f3291c3799d95a6f473f332cb66b2ba1dab10e998195822812b44f8a0d0bc730df1b4bc83a28809b58071db534ccd19678761131833b6c16bdf572c0a96
6
+ metadata.gz: 7f0f8a74d6b873cf3e69147dba79ebe8d6c112f53d3cde7b20dbff8511672b259ccea10dece62cedcb41da24c33fe6b0ff37481f810269bf48acd714865d2cbe
7
+ data.tar.gz: 36a5c76b1528709222cf23305f0a289db028e82304a2ee538f12ef1a19380d97f6fc56a0733803e9748cccd09637363bd34a6a2dc7aa51b1730fb1967e60933e
data/README.md CHANGED
@@ -14,37 +14,49 @@ This will run Chef-zero and use the description stored in docker_ubuntu_image.rb
14
14
 
15
15
  Using this , you can then define a machine similar to the following example:
16
16
 
17
- ```ruby
17
+ ```ruby
18
18
  require 'chef/provisioning/docker_driver'
19
19
 
20
20
  machine 'wario' do
21
21
  recipe 'openssh::default'
22
-
22
+
23
23
  machine_options :docker_options => {
24
24
  :base_image => {
25
25
  :name => 'ubuntu',
26
26
  :repository => 'ubuntu',
27
27
  :tag => '14.04'
28
28
  },
29
- :command => '/usr/sbin/sshd -p 8022 -D',
29
+ :command => '/usr/sbin/sshd -p 8022 -D',
30
30
 
31
31
  #ENV (Environment Variables)
32
32
  #Set any env var in the container by using one or more -e flags, even overriding those already defined by the developer with a Dockerfile ENV
33
33
  :env => {
34
34
  "deep" => 'purple',
35
35
  "led" => 'zeppelin'
36
- }
37
-
36
+ },
37
+
38
38
  # Ports can be one of two forms:
39
39
  # src_port (string or integer) is a pass-through, i.e 8022 or "9933"
40
40
  # src:dst (string) is a map from src to dst, i.e "8022:8023" maps 8022 externally to 8023 in the container
41
41
 
42
42
  # Example (multiple):
43
- :ports => [8022, "8023:9000", "9500"]
43
+ :ports => [8022, "8023:9000", "9500"],
44
44
 
45
45
  # Examples (single):
46
- :ports => 1234
47
- :ports => "2345:6789"
46
+ :ports => 1234,
47
+ :ports => "2345:6789",
48
+
49
+ # Volumes can be one of three forms:
50
+ # src_volume (string) is volume to add to container, i.e. creates new volume inside container at "/tmp"
51
+ # src:dst (string) mounts host's directory src to container's dst, i.e "/tmp:/tmp1" mounts host's directory /tmp to container's /tmp1
52
+ # src:dst:mode (string) mounts host's directory src to container's dst with the specified mount option, i.e "/:/rootfs:ro" mounts read-only host's root (/) folder to container's /rootfs
53
+ # See more details on Docker volumes at https://github.com/docker/docker/blob/master/docs/sources/userguide/dockervolumes.md .
54
+
55
+ # Example (single):
56
+ :volumes => "/tmp",
57
+
58
+ # Example (multiple):
59
+ :volumes => ["/tmp:/tmp", "/:/rootfs:ro"],
48
60
 
49
61
  # if you need to keep stdin open (i.e docker run -i)
50
62
  # :keep_stdin_open => true
@@ -16,77 +16,80 @@ class ChefZeroHttpProxy
16
16
 
17
17
  # Start our server to handle connections (will raise things on errors)
18
18
  @socket = TCPServer.new @local_address, @local_port
19
-
19
+
20
20
  # Handle every request in another thread
21
21
  loop do
22
22
  s = @socket.accept
23
23
  Thread.new s, &method(:handle_request)
24
24
  end
25
-
25
+
26
26
  ensure
27
27
  @socket.close if @socket
28
28
  end
29
29
  end
30
-
30
+
31
31
  def handle_request(to_client)
32
- request_line = to_client.readline
32
+ begin
33
+ request_line = to_client.readline
33
34
 
34
- verb = request_line[/^\w+/]
35
- url = request_line[/^\w+\s+(\S+)/, 1]
36
- version = request_line[/HTTP\/(1\.\d)\s*$/, 1]
37
- uri = URI::parse url
35
+ verb = request_line[/^\w+/]
36
+ url = request_line[/^\w+\s+(\S+)/, 1]
37
+ version = request_line[/HTTP\/(1\.\d)\s*$/, 1]
38
+ uri = URI::parse url
38
39
 
39
- # Show what got requested
40
- Chef::Log.debug("[C->S]: #{verb} -> #{url}")
40
+ # Show what got requested
41
+ Chef::Log.debug("[C->S]: #{verb} -> #{url}")
41
42
 
42
- querystr = if uri.query
43
- "#{uri.path}?#{uri.query}"
44
- else
45
- uri.path
46
- end
43
+ querystr = if uri.query
44
+ "#{uri.path}?#{uri.query}"
45
+ else
46
+ uri.path
47
+ end
47
48
 
48
- to_server = TCPSocket.new(@remote_address, @remote_port)
49
+ to_server = TCPSocket.new(@remote_address, @remote_port)
49
50
 
50
- to_server.write("#{verb} #{querystr} HTTP/#{version}\r\n")
51
+ to_server.write("#{verb} #{querystr} HTTP/#{version}\r\n")
51
52
 
52
- content_len = 0
53
+ content_len = 0
53
54
 
54
- loop do
55
- line = to_client.readline
55
+ loop do
56
+ line = to_client.readline
56
57
 
57
- if line =~ /^Content-Length:\s+(\d+)\s*$/
58
- content_len = $1.to_i
59
- end
58
+ if line =~ /^Content-Length:\s+(\d+)\s*$/
59
+ content_len = $1.to_i
60
+ end
60
61
 
61
- # Strip proxy headers
62
- if line =~ /^proxy/i
63
- next
64
- elsif line.strip.empty?
65
- to_server.write("Connection: close\r\n\r\n")
62
+ # Strip proxy headers
63
+ if line =~ /^proxy/i
64
+ next
65
+ elsif line.strip.empty?
66
+ to_server.write("Connection: close\r\n\r\n")
66
67
 
67
- if content_len >= 0
68
- to_server.write(to_client.read(content_len))
69
- Chef::Log.debug("[C->S]: Wrote #{content_len} bytes")
68
+ if content_len >= 0
69
+ to_server.write(to_client.read(content_len))
70
+ Chef::Log.debug("[C->S]: Wrote #{content_len} bytes")
71
+ end
72
+
73
+ break
74
+ else
75
+ to_server.write(line)
70
76
  end
77
+ end
71
78
 
72
- break
73
- else
74
- to_server.write(line)
79
+ buff = ''
80
+ while to_server.read(8192, buff)
81
+ to_client.write(buff)
75
82
  end
76
- end
77
83
 
78
- buff = ''
79
- loop do
80
- to_server.read(8192, buff)
81
- to_client.write(buff)
82
- break if buff.size < 8192
83
- end
84
+ rescue
85
+ Chef::Log.error $!
86
+ raise
84
87
 
85
- # Close the sockets
86
- to_client.close
87
- to_server.close
88
+ ensure
89
+ # Close the sockets
90
+ to_client.close
91
+ to_server.close
92
+ end
88
93
  end
89
-
94
+
90
95
  end
91
-
92
-
@@ -14,6 +14,7 @@ module DockerDriver
14
14
  @env = opts[:env]
15
15
  @command = opts[:command]
16
16
  @ports = opts[:ports]
17
+ @volumes = opts[:volumes]
17
18
  @keep_stdin_open = opts[:keep_stdin_open]
18
19
  @container_name = machine_spec.location['container_name']
19
20
  @transport = transport
@@ -27,7 +28,7 @@ module DockerDriver
27
28
  super action_handler
28
29
  if @command
29
30
  Chef::Log.debug("DockerContainerMachine converge complete, executing #{@command} in #{@container_name}")
30
- @transport.execute(@command, :env => @env ,:detached => true, :read_only => true, :ports => @ports, :keep_stdin_open => @keep_stdin_open)
31
+ @transport.execute(@command, :env => @env ,:detached => true, :read_only => true, :ports => @ports, :volumes => @volumes, :keep_stdin_open => @keep_stdin_open)
31
32
  end
32
33
  end
33
34
 
@@ -81,6 +81,13 @@ module DockerDriver
81
81
  end
82
82
  end
83
83
 
84
+ if options[:volumes]
85
+ options[:volumes].each do |volume|
86
+ args << '-v'
87
+ args << "#{volume}"
88
+ end
89
+ end
90
+
84
91
  if options[:keep_stdin_open]
85
92
  args << '-i'
86
93
  end
@@ -227,6 +227,7 @@ module DockerDriver
227
227
  :command => docker_options[:command],
228
228
  :env => docker_options[:env],
229
229
  :ports => [].push(docker_options[:ports]).flatten,
230
+ :volumes => [].push(docker_options[:volumes]).flatten.compact,
230
231
  :keep_stdin_open => docker_options[:keep_stdin_open]
231
232
  )
232
233
  end
@@ -1,7 +1,7 @@
1
1
  class Chef
2
2
  module Provisioning
3
3
  module DockerDriver
4
- VERSION = '0.5.2'
4
+ VERSION = '0.6'
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-provisioning-docker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: '0.6'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Duffield
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-26 00:00:00.000000000 Z
11
+ date: 2015-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chef
@@ -131,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
131
  version: '0'
132
132
  requirements: []
133
133
  rubyforge_project:
134
- rubygems_version: 2.2.2
134
+ rubygems_version: 2.4.5
135
135
  signing_key:
136
136
  specification_version: 4
137
137
  summary: Provisioner for creating Docker containers in Chef Provisioning.