docker-provider 0.0.2 → 0.1.0

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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +25 -0
  3. data/Gemfile +7 -7
  4. data/Gemfile.lock +51 -40
  5. data/LICENSE.txt +1 -1
  6. data/README.md +130 -60
  7. data/Rakefile +6 -1
  8. data/boxes/dind/.gitignore +2 -0
  9. data/boxes/dind/Dockerfile +12 -0
  10. data/boxes/dind/README.md +10 -0
  11. data/boxes/{nginx → dind}/Vagrantfile.sample +2 -1
  12. data/boxes/{nginx → dind}/metadata.json +0 -0
  13. data/boxes/precise/Dockerfile +10 -9
  14. data/boxes/precise/Vagrantfile.sample +0 -1
  15. data/development/Vagrantfile +1 -9
  16. data/docker-provider.gemspec +1 -2
  17. data/example/Vagrantfile +11 -10
  18. data/lib/docker-provider.rb +2 -1
  19. data/lib/docker-provider/action.rb +17 -6
  20. data/lib/docker-provider/action/check_running.rb +1 -1
  21. data/lib/docker-provider/action/create.rb +14 -11
  22. data/lib/docker-provider/action/prepare_nfs_settings.rb +59 -0
  23. data/lib/docker-provider/action/prepare_nfs_valid_ids.rb +19 -0
  24. data/lib/docker-provider/config.rb +14 -7
  25. data/lib/docker-provider/driver.rb +30 -6
  26. data/lib/docker-provider/errors.rb +14 -0
  27. data/lib/docker-provider/plugin.rb +10 -3
  28. data/lib/docker-provider/provider.rb +1 -1
  29. data/lib/docker-provider/synced_folder.rb +20 -0
  30. data/lib/docker-provider/version.rb +1 -1
  31. data/locales/en.yml +13 -2
  32. data/spec/acceptance/provider/basic_spec.rb +94 -0
  33. data/spec/acceptance/provider/network_forwarded_port_spec.rb +29 -0
  34. data/spec/acceptance/provider/synced_folder_spec.rb +39 -0
  35. data/spec/acceptance/provisioner/chef_solo_spec.rb +37 -0
  36. data/spec/acceptance/provisioner/puppet_spec.rb +37 -0
  37. data/spec/acceptance/provisioner/shell_spec.rb +51 -0
  38. data/spec/acceptance/synced_folder/nfs_spec.rb +36 -0
  39. data/spec/unit/driver_spec.rb +70 -11
  40. data/vagrant-spec.config.rb +8 -0
  41. metadata +40 -29
  42. data/boxes/nginx/.gitignore +0 -1
  43. data/boxes/nginx/Dockerfile +0 -4
  44. data/boxes/nginx/README.md +0 -25
  45. data/boxes/nginx/start +0 -5
  46. data/lib/docker-provider/action/share_folders.rb +0 -63
  47. data/spec/acceptance/Vagrantfile +0 -25
  48. data/spec/acceptance/vagrant_ssh.bats +0 -34
  49. data/spec/acceptance/vagrant_up.bats +0 -35
@@ -0,0 +1,8 @@
1
+ Vagrant::Spec::Acceptance.configure do |c|
2
+ c.component_paths << File.expand_path("../spec/acceptance", __FILE__)
3
+
4
+ c.provider "docker",
5
+ # wget http://bit.ly/vagrant-docker-precise -O precise.box
6
+ box: "#{File.expand_path("../", __FILE__)}/precise.box",
7
+ features: ['!suspend']
8
+ end
metadata CHANGED
@@ -1,67 +1,67 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docker-provider
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabio Rehm
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-05 00:00:00.000000000 Z
11
+ date: 2014-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.3'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- description: Experimental Docker provider for Vagrant
55
+ description: Docker provider for Vagrant
56
56
  email:
57
57
  - fgrehm@gmail.com
58
58
  executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
- - .gitignore
63
- - .rspec
64
- - .travis.yml
62
+ - ".gitignore"
63
+ - ".rspec"
64
+ - ".travis.yml"
65
65
  - CHANGELOG.md
66
66
  - Gemfile
67
67
  - Gemfile.lock
@@ -69,14 +69,13 @@ files:
69
69
  - LICENSE.txt
70
70
  - README.md
71
71
  - Rakefile
72
+ - boxes/dind/.gitignore
73
+ - boxes/dind/Dockerfile
74
+ - boxes/dind/README.md
75
+ - boxes/dind/Vagrantfile.sample
76
+ - boxes/dind/metadata.json
72
77
  - boxes/dummy/README.md
73
78
  - boxes/dummy/metadata.json
74
- - boxes/nginx/.gitignore
75
- - boxes/nginx/Dockerfile
76
- - boxes/nginx/README.md
77
- - boxes/nginx/Vagrantfile.sample
78
- - boxes/nginx/metadata.json
79
- - boxes/nginx/start
80
79
  - boxes/precise/.gitignore
81
80
  - boxes/precise/Dockerfile
82
81
  - boxes/precise/README.md
@@ -95,21 +94,29 @@ files:
95
94
  - lib/docker-provider/action/forward_ports.rb
96
95
  - lib/docker-provider/action/is_running.rb
97
96
  - lib/docker-provider/action/message.rb
98
- - lib/docker-provider/action/share_folders.rb
97
+ - lib/docker-provider/action/prepare_nfs_settings.rb
98
+ - lib/docker-provider/action/prepare_nfs_valid_ids.rb
99
99
  - lib/docker-provider/action/start.rb
100
100
  - lib/docker-provider/action/stop.rb
101
101
  - lib/docker-provider/config.rb
102
102
  - lib/docker-provider/driver.rb
103
+ - lib/docker-provider/errors.rb
103
104
  - lib/docker-provider/plugin.rb
104
105
  - lib/docker-provider/provider.rb
106
+ - lib/docker-provider/synced_folder.rb
105
107
  - lib/docker-provider/version.rb
106
108
  - locales/en.yml
107
- - spec/acceptance/Vagrantfile
108
- - spec/acceptance/vagrant_ssh.bats
109
- - spec/acceptance/vagrant_up.bats
109
+ - spec/acceptance/provider/basic_spec.rb
110
+ - spec/acceptance/provider/network_forwarded_port_spec.rb
111
+ - spec/acceptance/provider/synced_folder_spec.rb
112
+ - spec/acceptance/provisioner/chef_solo_spec.rb
113
+ - spec/acceptance/provisioner/puppet_spec.rb
114
+ - spec/acceptance/provisioner/shell_spec.rb
115
+ - spec/acceptance/synced_folder/nfs_spec.rb
110
116
  - spec/spec_helper.rb
111
117
  - spec/support/unit_example_group.rb
112
118
  - spec/unit/driver_spec.rb
119
+ - vagrant-spec.config.rb
113
120
  homepage: https://github.com/fgrehm/docker-provider
114
121
  licenses:
115
122
  - MIT
@@ -120,24 +127,28 @@ require_paths:
120
127
  - lib
121
128
  required_ruby_version: !ruby/object:Gem::Requirement
122
129
  requirements:
123
- - - '>='
130
+ - - ">="
124
131
  - !ruby/object:Gem::Version
125
132
  version: '0'
126
133
  required_rubygems_version: !ruby/object:Gem::Requirement
127
134
  requirements:
128
- - - '>='
135
+ - - ">="
129
136
  - !ruby/object:Gem::Version
130
137
  version: '0'
131
138
  requirements: []
132
139
  rubyforge_project:
133
- rubygems_version: 2.1.5
140
+ rubygems_version: 2.2.2
134
141
  signing_key:
135
142
  specification_version: 4
136
- summary: Experimental Docker provider for Vagrant
143
+ summary: Docker provider for Vagrant
137
144
  test_files:
138
- - spec/acceptance/Vagrantfile
139
- - spec/acceptance/vagrant_ssh.bats
140
- - spec/acceptance/vagrant_up.bats
145
+ - spec/acceptance/provider/basic_spec.rb
146
+ - spec/acceptance/provider/network_forwarded_port_spec.rb
147
+ - spec/acceptance/provider/synced_folder_spec.rb
148
+ - spec/acceptance/provisioner/chef_solo_spec.rb
149
+ - spec/acceptance/provisioner/puppet_spec.rb
150
+ - spec/acceptance/provisioner/shell_spec.rb
151
+ - spec/acceptance/synced_folder/nfs_spec.rb
141
152
  - spec/spec_helper.rb
142
153
  - spec/support/unit_example_group.rb
143
154
  - spec/unit/driver_spec.rb
@@ -1 +0,0 @@
1
- Vagrantfile
@@ -1,4 +0,0 @@
1
- # Start with a docker-provider ready image
2
- FROM fgrehm/vagrant-ubuntu:precise
3
- RUN apt-get update && apt-get install nginx -y
4
- ADD ./start /bin/start-container
@@ -1,25 +0,0 @@
1
- # Nginx base box example
2
-
3
- This folder contains an example of a box that is able to run multiple processes.
4
- With the provided `Dockerfile` you'll be able to build a base box that runs both
5
- nginx and a SSH server that is required by Vagrant to do its "magic".
6
-
7
-
8
- ```
9
- docker build -t myuser/vagrant-nginx .
10
- docker push myuser/vagrant-nginx
11
- sed 's/IMAGE/myuser\/vagrant-nginx/' Vagrantfile.sample > Vagrantfile
12
- tar cvzf nginx.box ./metadata.json ./Vagrantfile
13
- ```
14
-
15
- In order to reach the nginx server running on the container you'll need to
16
- forward the ports with a `Vagrantfile` like the one below:
17
-
18
- ```ruby
19
- Vagrant.configure("2") do |config|
20
- # Replace with the name of the box you used when adding
21
- config.vm.box = "nginx"
22
- # This makes nginx accessible from the host from http://localhost:8080
23
- config.vm.network "forwarded_port", guest: 80, host: 8080
24
- end
25
- ```
@@ -1,5 +0,0 @@
1
- #!/bin/bash
2
-
3
- /etc/init.d/nginx start
4
- # Make sure a SSH server is up so that Vagrant is able to SSH into it
5
- /usr/sbin/sshd -D -e
@@ -1,63 +0,0 @@
1
- module VagrantPlugins
2
- module DockerProvider
3
- module Action
4
- class ShareFolders
5
- def initialize(app, env)
6
- @app = app
7
- end
8
-
9
- def call(env)
10
- @env = env
11
- prepare_folders
12
-
13
- # FIXME: Check whether the container has already been created with
14
- # different synced folders and let the user know about it
15
- folders = []
16
- shared_folders.each do |id, data|
17
- folders << {
18
- :name => id,
19
- :hostpath => File.expand_path(data[:hostpath], @env[:root_path]),
20
- :guestpath => data[:guestpath]
21
- }
22
- end
23
- @env[:synced_folders] = folders
24
-
25
- @app.call(env)
26
- end
27
-
28
- # This method returns an actual list of synced folders to create and their
29
- # proper path.
30
- def shared_folders
31
- {}.tap do |result|
32
- @env[:machine].config.vm.synced_folders.each do |id, data|
33
- # Ignore disabled shared folders
34
- next if data[:disabled]
35
- # This to prevent overwriting the actual shared folders data
36
- result[id] = data.dup
37
- end
38
- end
39
- end
40
-
41
- # Prepares the shared folders by verifying they exist and creating them
42
- # if they don't.
43
- def prepare_folders
44
- shared_folders.each do |id, options|
45
- hostpath = Pathname.new(options[:hostpath]).expand_path(@env[:root_path])
46
-
47
- if !hostpath.directory? && options[:create]
48
- # Host path doesn't exist, so let's create it.
49
- @logger.debug("Host path doesn't exist, creating: #{hostpath}")
50
-
51
- begin
52
- hostpath.mkpath
53
- rescue Errno::EACCES
54
- raise Vagrant::Errors::SharedFolderCreateFailed,
55
- :path => hostpath.to_s
56
- end
57
- end
58
- end
59
- end
60
- end
61
- end
62
- end
63
- end
@@ -1,25 +0,0 @@
1
- # -*- mode: ruby -*-
2
- # vi: set ft=ruby :
3
-
4
- ENV['VAGRANT_DEFAULT_PROVIDER'] = 'docker'
5
-
6
- # This is only needed if you are using the plugin from sources with bundler
7
- Vagrant.require_plugin 'docker-provider'
8
-
9
- # Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
10
- VAGRANTFILE_API_VERSION = "2"
11
-
12
- Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
13
- config.vm.box = "precise"
14
-
15
- config.vm.provider :docker do |docker|
16
- docker.image = "fgrehm/vagrant-ubuntu:precise"
17
- docker.cmd = ["/usr/sbin/sshd", "-D", "-e"]
18
- end
19
-
20
- config.vm.provision :shell, inline: %[
21
- echo 'hello from docker'
22
- # mkdir -p /vagrant/tmp
23
- # touch /vagrant/tmp/provisioned
24
- ]
25
- end
@@ -1,34 +0,0 @@
1
- #!/usr/bin/env bats
2
-
3
- setup() {
4
- if ! [ $USER = 'vagrant' ]; then
5
- echo 'The specs should be run from a Vagrant VM'
6
- exit 1
7
- fi
8
-
9
- # Destroy all of acceptance specs related containers
10
- containers=$(docker ps -a | grep acceptance | wc -l)
11
- if [ "$containers" -gt 0 ]; then
12
- test_containers=$(docker ps -a | grep acceptance | cut -d' ' -f1)
13
- docker stop -t=1 $test_containers
14
- docker rm $test_containers
15
- fi
16
- rm -rf /vagrant/spec/acceptance/{.vagrant,tmp}
17
- }
18
-
19
- @test "vagrant ssh on a stopped container errors out" {
20
- cd /vagrant/spec/acceptance
21
-
22
- run bundle exec vagrant ssh
23
- [ "$status" -eq 1 ]
24
- }
25
-
26
- @test "vagrant ssh on a runing container" {
27
- cd /vagrant/spec/acceptance
28
- bundle exec vagrant up
29
-
30
- run bundle exec vagrant ssh -c 'echo "hello from ssh"'
31
-
32
- [ "$status" -eq 0 ]
33
- echo $output | grep -q 'hello from ssh'
34
- }
@@ -1,35 +0,0 @@
1
- #!/usr/bin/env bats
2
-
3
- setup() {
4
- if ! [ $USER = 'vagrant' ]; then
5
- echo 'The specs should be run from a Vagrant VM'
6
- exit 1
7
- fi
8
-
9
- # Destroy all of acceptance specs related containers
10
- containers=$(docker ps -a | grep acceptance | wc -l)
11
- if [ "$containers" -gt 0 ]; then
12
- test_containers=$(docker ps -a | grep acceptance | cut -d' ' -f1)
13
- docker stop -t=1 $test_containers
14
- docker rm $test_containers
15
- fi
16
- rm -rf /vagrant/spec/acceptance/{.vagrant,tmp}
17
- }
18
-
19
- @test "vagrant up from scratch runs a docker container" {
20
- cd /vagrant/spec/acceptance
21
-
22
- run bundle exec vagrant up
23
- [ "$status" -eq 0 ]
24
-
25
- # How many test containers have we got?
26
- count=$(docker ps | grep acceptance | wc -l)
27
- [ "$count" -eq 1 ]
28
- }
29
-
30
- @test "vagrant up from scratch provisions docker container" {
31
- cd /vagrant/spec/acceptance
32
- run bundle exec vagrant up
33
-
34
- echo $output | grep -q 'hello from docker'
35
- }