docker-provider 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
- }