vagrant-bindfs 0.2.4 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
- ---
2
- SHA1:
3
- metadata.gz: f3a91ef3c7189be732845454b9099c48f42f4b33
4
- data.tar.gz: 09b853dcb880f59066f3571b0a886c968cb22bd1
5
- SHA512:
6
- metadata.gz: ae49587125019c1779a3d03302410b994327663f7ef09430e1926ae5959e82e0febe2a46ea99b8dad6893243015239f00016c0802b460bbb494e1dec8fcc6311
7
- data.tar.gz: 16b33f5b3ccf30518f1f9405346e5994402134d58955800d757db06e710f293f66505fdb0a401e7b49043854f50824b3ad3a31e56fda679fb3081039ea6d3360
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7e5ede475244f757129e5549bd4efa08da086515
4
+ data.tar.gz: f1fc218651127f7ade08604adaac9ebb4200e762
5
+ SHA512:
6
+ metadata.gz: 53435c06bc292ad42a6d8803ee0d576b376f5141a41e570c74b644ce2e8bd8fad95be68bfb0fe761582fd8a9474fee97f6b4bd5a37f1befbbf87d5b301e96c01
7
+ data.tar.gz: 122c7a0fb83f8a088b84eb24a1af6a8d394c130b84a5f08b7e8890fe1d1877652ab0cd273056441b453b5e86d0309d514564b6de1efc0dad23f7b635bcc83c3a
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # vagrant-bindfs
2
2
 
3
- A Vagrant plugin to automate [bindfs](http://bindfs.org/) mount in the VM.
4
- This allow you to change owner, group and permissions on files and, for example, work around NFS share permissions issues.
3
+ A Vagrant plugin to automate [bindfs](http://bindfs.org/) mount in the VM. This allow you to change
4
+ owner, group and permissions on files and, for example, work around NFS share permissions issues.
5
5
 
6
6
 
7
7
  ## Some Background: Why `vagrant-bindfs`
@@ -28,103 +28,126 @@ _Note that `map_uid` and `map_gid` NFS options can be used to set the identity u
28
28
 
29
29
  ## Installation
30
30
 
31
- Vagrant-bindfs is distributed as a Ruby gem.
32
- You can install it as any other Vagrant plugin with `vagrant plugin install vagrant-bindfs`.
31
+ Vagrant-bindfs is distributed as a Ruby gem. You can install it as any other Vagrant plugin
32
+ with `vagrant plugin install vagrant-bindfs`.
33
33
 
34
34
 
35
35
  ## Usage
36
36
 
37
- In your `Vagrantfile`, use `config.bindfs.bind_folder` to configure folders that will be binded on VM startup.
38
- The format is:
37
+ In your `Vagrantfile`, use `config.bindfs.bind_folder` to configure folders that will be binded on VM
38
+ startup. The format is:
39
39
 
40
40
  ```ruby
41
- config.bindfs.bind_folder "/path/to/source", "/path/to/destination", options
41
+ config.bindfs.bind_folder "/path/to/source", "/path/to/destination", options
42
42
  ```
43
43
 
44
44
 
45
45
  ### Example
46
46
 
47
47
  ```ruby
48
- Vagrant::Config.run do |config|
49
-
50
- [...] # Your VM configuration
51
-
52
- ## Basic usage
53
- config.bindfs.bind_folder "source/dir", "mount/point"
54
-
55
- ## Advanced options
56
- config.bindfs.bind_folder "source/dir", "mount/point",
57
- :perms => "u=rw:g=r:o=r",
58
- :create_as_user => true
59
-
60
- ## Complete example for a NFS shared folder
61
- # Static IP is required to use NFS shared folder
62
- config.vm.network "private_network", ip: "192.168.50.4"
63
- # Declare shared folder with Vagrant syntax
64
- config.vm.synced_folder "host/source/dir", "/vagrant-nfs", :type => :nfs
65
- # Use vagrant-bindfs to re-mount folder
66
- config.bindfs.bind_folder "/vagrant-nfs", "guest/mount/point"
67
-
68
- end
48
+ Vagrant::Config.run do |config|
49
+
50
+ [...] # Your VM configuration
51
+
52
+ ## Basic usage
53
+ config.bindfs.bind_folder "source/dir", "mount/point"
54
+
55
+ ## Advanced options
56
+ config.bindfs.bind_folder "source/dir", "mount/point",
57
+ perms: "u=rw:g=r:o=r",
58
+ create_as_user: true
59
+
60
+ ## Complete example for a NFS shared folder
61
+
62
+ # Declare shared folder with Vagrant syntax
63
+ config.vm.synced_folder ".", "/vagrant-nfs", type: :nfs
64
+
65
+ # Use vagrant-bindfs to re-mount folder
66
+ config.bindfs.bind_folder "/vagrant-nfs", "/vagrant"
67
+
68
+ end
69
69
  ```
70
70
 
71
71
 
72
72
  ### Supported options
73
73
 
74
- `bind_folder` supports the following arguments:
74
+ The `bind_folder` config supports the following long arguments, some of them are overwritable
75
+ with short options:
75
76
 
76
- - `:owner` (defaults to 'vagrant')
77
- - `:group` (defaults to 'vagrant')
77
+ - `:force_user` (defaults to 'vagrant')
78
+ - `:force_group` (defaults to 'vagrant')
78
79
  - `:perms` (defaults to 'u=rwX:g=rD:o=rD')
79
80
  - `:mirror`
81
+ - `:mirror_only`
82
+ - `:map`
83
+ - `:create_for_user`
84
+ - `:create_for_group`
85
+ - `:create_with_perms`
86
+ - `:chmod_filter`
87
+ - `:read_rate`
88
+ - `:write_rate`
89
+
90
+ There are also options available for backward compatibility, if one of these options is defined
91
+ the newer counterpart will be unset:
92
+
93
+ - `:owner`
94
+ - `:group`
95
+
96
+ The following shortcuts are also available:
97
+
80
98
  - `:o`
81
- - `:'mirror-only'`
82
- - `:'create-for-user'`
83
- - `:'create-for-group'`
84
- - `:'create-with-perms'`
85
-
86
- … and following flags (all disabled by default, vagrant-bindfs rely on bindfs own defaults) :
87
-
88
- - `:'no-allow-other'`
89
- - `:'create-as-user'`
90
- - `:'create-as-mounter'`
91
- - `:'chown-normal'`
92
- - `:'chown-ignore'`
93
- - `:'chown-deny'`
94
- - `:'chgrp-normal'`
95
- - `:'chgrp-ignore'`
96
- - `:'chgrp-deny'`
97
- - `:'chmod-normal'`
98
- - `:'chmod-ignore'`
99
- - `:'chmod-deny'`
100
- - `:'chmod-allow-x'`
101
- - `:'xattr-none'`
102
- - `:'xattr-ro'`
103
- - `:'xattr-rw'`
104
- - `:'ctime-from-mtime'`
105
-
106
- You can overwrite default options _via_ `config.bindfs.default_options`.
107
-
108
- See [bindfs man page](http://bindfs.org/docs/bindfs.1.html) for details.
109
-
110
- vagrant-bindfs does not check compatibility between given arguments but warn you when a binding command fail or if bindfs is not installed on your virtual machine.
111
- On Debian systems, it will try to install bindfs automatically.
99
+ - `:u` (Overwrites the value of force_user)
100
+ - `:g` (Overwrites the value of force_group)
101
+ - `:m` (Overwrites the value of mirror)
102
+ - `:M` (Overwrites the value of mirror_only)
103
+ - `:p` (Overwrites the value of perms)
104
+
105
+ … and the following flags (all disabled by default, vagrant-bindfs rely on bindfs own defaults):
106
+
107
+ - `:create_as_user`
108
+ - `:create_as_mounter`
109
+ - `:chown_normal`
110
+ - `:chown_ignore`
111
+ - `:chown_deny`
112
+ - `:chgrp_normal`
113
+ - `:chgrp_ignore`
114
+ - `:chgrp_deny`
115
+ - `:chmod_normal`
116
+ - `:chmod_ignore`
117
+ - `:chmod_deny`
118
+ - `:chmod_allow_x`
119
+ - `:xattr_none`
120
+ - `:xattr_ro`
121
+ - `:xattr_rw`
122
+ - `:no_allow_other`
123
+ - `:realistic_permissions`
124
+ - `:ctime_from_mtime`
125
+ - `:hide_hard_links`
126
+ - `:multithreaded`
127
+
128
+ You can overwrite default options _via_ `config.bindfs.default_options`. See
129
+ [bindfs man page](http://bindfs.org/docs/bindfs.1.html) for details.
130
+
131
+ vagrant-bindfs does not check compatibility between given arguments but warn you when a binding
132
+ command fail or if bindfs is not installed on your virtual machine. On Debian and SUSE systems, it
133
+ will try to install bindfs automatically.
112
134
 
113
135
 
114
136
  ## Contributing
115
137
 
116
- If you find this plugin useful, we could use a few enhancements!
117
- In particular, capabilities files for installing vagrant-bindfs on systems other than Debian would be useful. We could also use some specs…
138
+ If you find this plugin useful, we could use a few enhancements! In particular, capabilities files
139
+ for installing vagrant-bindfs on systems other than Debian or SUSE would be useful. We could also
140
+ use some specs…
118
141
 
119
142
 
120
143
  ### How to Test Changes
121
144
 
122
- If you've made changes to this plugin, you can easily test it locally in vagrant.
123
- From the root of the repo, do:
145
+ If you've made changes to this plugin, you can easily test it locally in vagrant. From the root of
146
+ the repo, do:
124
147
 
125
148
  - `bundle install`
126
149
  - `rake build`
127
150
  - `bundle exec vagrant up`
128
151
 
129
- This will spin up a default Debian VM and try to bindfs-mount some shares in it.
130
- Feel free to modify the included `Vagrantfile` to add additional test cases.
152
+ This will spin up a default Debian VM and try to bindfs-mount some shares in it. Feel free to modify
153
+ the included `Vagrantfile` to add additional test cases.
@@ -4,19 +4,18 @@ rescue LoadError
4
4
  raise "The Vagrant bindfs plugin must be run within Vagrant"
5
5
  end
6
6
 
7
- require 'vagrant-bindfs/plugin'
8
- require 'vagrant-bindfs/errors'
7
+ require "vagrant-bindfs/plugin"
8
+ require "vagrant-bindfs/errors"
9
9
 
10
10
  require "pathname"
11
11
 
12
12
  module VagrantPlugins
13
13
  module Bindfs
14
- # Returns the path to the source of this plugin
15
14
  def self.source_root
16
- @source_root ||= Pathname.new(File.expand_path('../../', __FILE__))
15
+ @source_root ||= Pathname.new(File.expand_path("../../", __FILE__))
17
16
  end
18
17
 
19
- I18n.load_path << File.expand_path('locales/en.yml', source_root)
18
+ I18n.load_path << File.expand_path("locales/en.yml", source_root)
20
19
  I18n.reload!
21
20
  end
22
21
  end
@@ -2,45 +2,6 @@ module VagrantPlugins
2
2
  module Bindfs
3
3
  module Action
4
4
  class Bind
5
-
6
- # Options
7
- @@options = {
8
- :owner => 'vagrant',
9
- :group => 'vagrant',
10
- :perms => 'u=rwX:g=rD:o=rD',
11
- :mirror => nil,
12
- :'mirror-only' => nil,
13
- :'create-for-user' => nil,
14
- :'create-for-group' => nil,
15
- :'create-with-perms' => nil,
16
- }
17
-
18
- # Shorthands
19
- @@shorthands = {
20
- :o => nil,
21
- }
22
-
23
- # Flags
24
- @@flags = {
25
- :'no-allow-other' => false,
26
- :'create-as-user' => false,
27
- :'create-as-mounter' => false,
28
- :'chown-normal' => false,
29
- :'chown-ignore' => false,
30
- :'chown-deny' => false,
31
- :'chgrp-normal' => false,
32
- :'chgrp-ignore' => false,
33
- :'chgrp-deny' => false,
34
- :'chmod-normal' => false,
35
- :'chmod-ignore' => false,
36
- :'chmod-deny' => false,
37
- :'chmod-allow-x' => false,
38
- :'xattr-none' => false,
39
- :'xattr-ro' => false,
40
- :'xattr-rw' => false,
41
- :'ctime-from-mtime' => false,
42
- }
43
-
44
5
  def initialize(app, env)
45
6
  @app = app
46
7
  @env = env
@@ -49,7 +10,7 @@ module VagrantPlugins
49
10
  def call(env)
50
11
  @app.call(env)
51
12
  @env = env
52
-
13
+
53
14
  @machine = env[:machine]
54
15
 
55
16
  unless binded_folders.empty?
@@ -63,59 +24,198 @@ module VagrantPlugins
63
24
  end
64
25
 
65
26
  def default_options
66
- @@options.merge(@@shorthands).merge(@@flags).merge(@machine.config.bindfs.default_options)
27
+ current_defaults = @machine.config.bindfs.default_options
28
+
29
+ new_defaults = {}.tap do |new_default|
30
+ current_defaults.each do |key, value|
31
+ new_default[key.to_s.gsub("_", "-")] = value
32
+ end
33
+ end
34
+
35
+ available_options.merge(
36
+ available_shortcuts
37
+ ).merge(
38
+ available_flags
39
+ ).merge(
40
+ new_defaults
41
+ )
67
42
  end
68
-
69
- def normalize_options opts
70
- source = opts.delete(:source_path)
71
- dest = opts.delete(:dest_path)
72
- opts = default_options.merge(opts)
73
-
74
- args = []
75
- opts.each do |key, value|
76
- args << "--#{key.to_s}" if @@flags.key?(key) and !!value
77
- args << "--#{key.to_s}=#{value}" if @@options.key?(key) and !value.nil?
78
- args << "-#{key.to_s} #{value}" if @@shorthands.key?(key) and !value.nil?
43
+
44
+ def normalize_options(current_options)
45
+ new_options = {}.tap do |new_option|
46
+ current_options.each do |key, value|
47
+ new_option[key.to_s.gsub("_", "-")] = value
48
+ end
49
+ end
50
+
51
+ source = new_options.delete("source-path")
52
+ dest = new_options.delete("dest-path")
53
+ options = default_options.merge(new_options)
54
+
55
+ args = [].tap do |arg|
56
+ options.each do |key, value|
57
+ next if key == "force-user" and options.keys.include? "owner"
58
+ next if key == "force-user" and options.keys.include? "u"
59
+
60
+ next if key == "force-group" and options.keys.include? "group"
61
+ next if key == "force-group" and options.keys.include? "g"
62
+
63
+ next if key == "mirror" and options.keys.include? "m"
64
+ next if key == "mirror-only" and options.keys.include? "M"
65
+ next if key == "perms" and options.keys.include? "p"
66
+
67
+ if available_flags.keys.include? key
68
+ arg.push "--#{key}" if value
69
+ next
70
+ end
71
+
72
+ next if value.nil?
73
+
74
+ if available_shortcuts.keys.include?(key) or additional_shortcuts.keys.include?(key)
75
+ arg.push "-#{key} '#{value}'"
76
+ next
77
+ end
78
+
79
+ if available_options.keys.include?(key) or additional_options.keys.include?(key)
80
+ arg.push "--#{key}='#{value}'"
81
+ next
82
+ end
83
+ end
79
84
  end
80
-
81
- [ source, dest, " #{args.join(" ")}" ]
85
+
86
+ [
87
+ source,
88
+ dest,
89
+ args.join(" ")
90
+ ]
82
91
  end
83
92
 
84
93
  def bind_folders
85
94
  @env[:ui].info I18n.t("vagrant.config.bindfs.status.binding_all")
86
95
 
87
- binded_folders.each do |id, opts|
88
- source, dest, args = normalize_options opts
89
- bind_command = "sudo bindfs#{args} #{source} #{dest}"
90
-
96
+ binded_folders.each do |id, options|
97
+ source, dest, args = normalize_options(options)
98
+
99
+ bind_command = [
100
+ "bindfs",
101
+ args,
102
+ source,
103
+ dest
104
+ ].compact
105
+
91
106
  unless @machine.communicate.test("test -d #{source}")
92
- @env[:ui].error(I18n.t('vagrant.config.bindfs.errors.source_path_not_exist', :path => source))
107
+ @env[:ui].error I18n.t(
108
+ "vagrant.config.bindfs.errors.source_path_not_exist",
109
+ path: source
110
+ )
111
+
93
112
  next
94
113
  end
95
114
 
96
- if @machine.communicate.test("mount | grep bindfs | grep ' #{dest} '")
97
- @env[:ui].info(I18n.t('vagrant.config.bindfs.already_mounted', :dest => dest))
115
+ if @machine.communicate.test("mount | grep bindfs | grep #{dest}")
116
+ @env[:ui].info I18n.t(
117
+ "vagrant.config.bindfs.already_mounted",
118
+ dest: dest
119
+ )
120
+
98
121
  next
99
122
  end
100
123
 
101
- @env[:ui].info I18n.t("vagrant.config.bindfs.status.binding_entry", :source => source, :dest => dest)
124
+ @env[:ui].info I18n.t(
125
+ "vagrant.config.bindfs.status.binding_entry",
126
+ dest: dest,
127
+ source: source
128
+ )
102
129
 
103
- @machine.communicate.sudo("mkdir -p #{dest}")
104
- @machine.communicate.sudo(bind_command, :error_class => Error, :error_key => :binding_failed)
130
+ @machine.communicate.tap do |comm|
131
+ comm.sudo("mkdir -p #{dest}")
132
+
133
+ comm.sudo(
134
+ bind_command.join(" "),
135
+ error_class: Error,
136
+ error_key: :binding_failed
137
+ )
138
+ end
105
139
  end
106
140
  end
107
141
 
108
142
  def handle_bindfs_installation
109
- if !@machine.guest.capability(:bindfs_installed)
110
- @env[:ui].warn(I18n.t('vagrant.config.bindfs.not_installed'))
143
+ unless @machine.guest.capability(:bindfs_installed)
144
+ @env[:ui].warn(I18n.t("vagrant.config.bindfs.not_installed"))
111
145
 
112
- if !@machine.guest.capability(:bindfs_install)
146
+ unless @machine.guest.capability(:bindfs_install)
113
147
  raise Vagrant::Bindfs::Error, :cannot_install
114
148
  end
115
149
  end
116
150
  end
117
-
118
- end #Bind
119
- end #Action
120
- end #Bindfs
121
- end #VagrantPlugins
151
+
152
+ def available_options
153
+ @available_options ||= {
154
+ "force-user" => "vagrant",
155
+ "force-group" => "vagrant",
156
+ "perms" => "u=rwX:g=rD:o=rD",
157
+ "mirror" => nil,
158
+ "mirror-only" => nil,
159
+ "map" => nil,
160
+ "create-for-user" => nil,
161
+ "create-for-group" => nil,
162
+ "create-with-perms" => nil,
163
+ "chmod-filter" => nil,
164
+ "read-rate" => nil,
165
+ "write-rate" => nil
166
+ }.freeze
167
+ end
168
+
169
+ def additional_options
170
+ @additional_options ||= {
171
+ # only for old versions, this will result in an error
172
+ # if you try that within current bindfs versions!
173
+ "owner" => "vagrant",
174
+ "group" => "vagrant"
175
+ }.freeze
176
+ end
177
+
178
+ def available_shortcuts
179
+ @available_shortcuts ||= {
180
+ "o" => nil
181
+ }.freeze
182
+ end
183
+
184
+ def additional_shortcuts
185
+ @additional_shortcuts ||= {
186
+ "u" => nil, # overwrites the value of force-user
187
+ "g" => nil, # overwrites the value of force-group
188
+ "m" => nil, # overwrites the value of mirror
189
+ "M" => nil, # overwrites the value of mirror-only
190
+ "p" => nil # overwrites the value of perms
191
+ }.freeze
192
+ end
193
+
194
+ def available_flags
195
+ @available_flags ||= {
196
+ "create-as-user" => false,
197
+ "create-as-mounter" => false,
198
+ "chown-normal" => false,
199
+ "chown-ignore" => false,
200
+ "chown-deny" => false,
201
+ "chgrp-normal" => false,
202
+ "chgrp-ignore" => false,
203
+ "chgrp-deny" => false,
204
+ "chmod-normal" => false,
205
+ "chmod-ignore" => false,
206
+ "chmod-deny" => false,
207
+ "chmod-allow-x" => false,
208
+ "xattr-none" => false,
209
+ "xattr-ro" => false,
210
+ "xattr-rw" => false,
211
+ "no-allow-other" => false,
212
+ "realistic-permissions" => false,
213
+ "ctime-from-mtime" => false,
214
+ "hide-hard-links" => false,
215
+ "multithreaded" => false
216
+ }.freeze
217
+ end
218
+ end
219
+ end
220
+ end
221
+ end
@@ -6,13 +6,13 @@ module VagrantPlugins
6
6
 
7
7
  def self.bindfs_install(machine)
8
8
  machine.communicate.tap do |comm|
9
- comm.sudo('apt-get update')
10
- comm.sudo('apt-get install -y bindfs')
9
+ comm.sudo("apt-get update")
10
+ comm.sudo("apt-get install -y bindfs")
11
11
  end
12
12
  end
13
13
 
14
- end # BindfsInstall
15
- end # Debian
16
- end # Cap
17
- end # Bindfs
18
- end # VagrantPlugins
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -5,11 +5,11 @@ module VagrantPlugins
5
5
  module BindfsInstalled
6
6
 
7
7
  def self.bindfs_installed(machine)
8
- machine.communicate.test('bindfs --help')
8
+ machine.communicate.test("bindfs --help")
9
9
  end
10
10
 
11
- end # BindfsInstalled
12
- end # Linux
13
- end # Cap
14
- end # Bindfs
15
- end # module VagrantPlugins
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ module VagrantPlugins
2
+ module Bindfs
3
+ module Cap
4
+ module SUSE
5
+ module BindfsInstall
6
+
7
+ def self.bindfs_install(machine)
8
+ machine.communicate.tap do |comm|
9
+ comm.sudo("zypper -n install bindfs")
10
+ end
11
+ end
12
+
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,65 +1,88 @@
1
+ require 'vagrant'
2
+ require 'vagrant/errors'
3
+ require 'vagrant/util/template_renderer'
4
+
1
5
  module VagrantPlugins
2
6
  module Bindfs
3
- class Config < Vagrant.plugin('2', :config)
7
+ class Config < Vagrant.plugin("2", :config)
8
+ attr_accessor :default_options, :bind_folders
4
9
 
5
10
  def initialize
6
- @__default_options = {}
7
- @__bind_folders = {}
8
- end
11
+ @default_options = UNSET_VALUE
12
+ @bind_folders = {}
9
13
 
10
- def bind_folders
11
- @__bind_folders
14
+ @logger = Log4r::Logger.new('vagrantplugins::bindfs::config')
12
15
  end
13
16
 
14
- def default_options(new_options = {})
15
- @__default_options.merge! new_options
17
+ def default_options(new_values = {})
18
+ @default_options = {} if @default_options == UNSET_VALUE
19
+ @default_options.merge! new_values
16
20
  end
17
21
 
18
- def bind_folder(source_path, dest_path, options = nil)
19
- options ||= {}
22
+ def bind_folder(source_path, dest_path, options = {})
20
23
  options[:source_path] = source_path
21
24
  options[:dest_path] = dest_path
22
25
 
23
- @__bind_folders[options[:dest_path]] = options
26
+ @bind_folders[options[:dest_path]] = options
24
27
  end
25
28
 
26
29
  def merge(other)
27
30
  super.tap do |result|
28
- # merge the changes to default options
29
- result.instance_variable_set(
30
- :@__default_options, default_options(other.default_options))
31
+ result.default_options(default_options(other.default_options))
31
32
 
32
- # merge the folders to be bound
33
- new_folders = @__bind_folders.dup
34
- other_folders = other.instance_variable_get(:@__bind_folders)
33
+ new_folders = bind_folders.dup
34
+ other_folders = other.bind_folders
35
35
 
36
36
  other_folders.each do |id, options|
37
37
  new_folders[id] ||= {}
38
- new_folders[id].merge!(options)
38
+ new_folders[id].merge! options
39
39
  end
40
40
 
41
- result.instance_variable_set(:@__bind_folders, new_folders)
41
+ result.bind_folders = new_folders
42
42
  end
43
43
  end
44
44
 
45
- def validate(machine)
45
+ def finalize!
46
+ @default_options = {} if @default_options == UNSET_VALUE
47
+ end
48
+
49
+ def validate!(machine)
50
+ finalize!
46
51
  errors = []
47
52
 
48
- @__bind_folders.each do |id, options|
53
+ bind_folders.each do |id, options|
49
54
  next if options[:disabled]
50
55
 
56
+ if options[:dest_path].nil? or options[:source_path].nil?
57
+ errors << I18n.t(
58
+ "vagrant.config.bindfs.errors.no_path_supplied",
59
+ path: options[:dest_path]
60
+ )
61
+ end
62
+
51
63
  if Pathname.new(options[:dest_path]).relative?
52
- errors << I18n.t('vagrant.config.bindfs.errors.destination_path_relative',
53
- :path => options[:dest_path])
64
+ errors << I18n.t(
65
+ "vagrant.config.bindfs.errors.destination_path_relative",
66
+ path: options[:dest_path]
67
+ )
54
68
  end
55
69
 
56
70
  if Pathname.new(options[:source_path]).relative?
57
- errors << I18n.t('vagrant.config.bindfs.errors.source_path_relative',
58
- :path => options[:source_path])
71
+ errors << I18n.t(
72
+ "vagrant.config.bindfs.errors.source_path_relative",
73
+ path: options[:source_path]
74
+ )
59
75
  end
60
76
  end
61
77
 
62
- errors.empty? && {} || { 'bindfs' => errors }
78
+ if errors.any?
79
+ rendered_errors = Vagrant::Util::TemplateRenderer.render(
80
+ 'config/validation_failed',
81
+ errors: { 'vagrant-bindfs' => errors }
82
+ )
83
+
84
+ fail Vagrant::Errors::ConfigInvalid, errors: rendered_errors
85
+ end
63
86
  end
64
87
  end
65
88
  end
@@ -1,5 +1,3 @@
1
- require "vagrant"
2
-
3
1
  module VagrantPlugins
4
2
  module Bindfs
5
3
  class Error < Vagrant::Errors::VagrantError
@@ -8,26 +8,34 @@ module VagrantPlugins
8
8
  DESC
9
9
 
10
10
  config(:bindfs) do
11
- require 'vagrant-bindfs/config'
11
+ require "vagrant-bindfs/config"
12
12
  Config
13
13
  end
14
14
 
15
15
  guest_capability("debian", "bindfs_install") do
16
- require 'vagrant-bindfs/cap/debian/bindfs_install'
16
+ require "vagrant-bindfs/cap/debian/bindfs_install"
17
17
  Cap::Debian::BindfsInstall
18
18
  end
19
19
 
20
+ guest_capability("suse", "bindfs_install") do
21
+ require "vagrant-bindfs/cap/suse/bindfs_install"
22
+ Cap::SUSE::BindfsInstall
23
+ end
24
+
20
25
  guest_capability("linux", "bindfs_installed") do
21
- require 'vagrant-bindfs/cap/linux/bindfs_installed'
26
+ require "vagrant-bindfs/cap/linux/bindfs_installed"
22
27
  Cap::Linux::BindfsInstalled
23
28
  end
24
29
 
25
- require 'vagrant-bindfs/bind'
30
+ require "vagrant-bindfs/bind"
31
+
26
32
  %w{up reload}.each do |action|
27
33
  action_hook(:bindfs, "machine_action_#{action}".to_sym) do |hook|
28
- target = (Vagrant::Action::Builtin.const_defined?(:NFS) ?
29
- Vagrant::Action::Builtin::NFS :
30
- Vagrant::Action::Builtin::SyncedFolders)
34
+ target = if Vagrant::Action::Builtin.const_defined? :NFS
35
+ Vagrant::Action::Builtin::NFS
36
+ else
37
+ Vagrant::Action::Builtin::SyncedFolders
38
+ end
31
39
 
32
40
  hook.before(target, Action::Bind)
33
41
  end
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module Bindfs
3
- VERSION = "0.2.4"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
data/locales/en.yml CHANGED
@@ -2,18 +2,19 @@ en:
2
2
  vagrant:
3
3
  config:
4
4
  bindfs:
5
- not_installed: bindfs seems to not be installed on the virtual machine
6
- already_mounted: "there's already a bindfs mount to destination %{dest}"
5
+ not_installed: "Bindfs seems to not be installed on the virtual machine"
6
+ already_mounted: "There's already a bindfs mount to destination %{dest}"
7
7
  status:
8
- binding_all: creating bind mounts for selected devices
9
- binding_entry: creating bind mount from %{source} to %{dest}
8
+ binding_all: "Creating bind mounts for selected devices"
9
+ binding_entry: "Creating bind mount from %{source} to %{dest}"
10
10
  errors:
11
- destination_path_relative: "destination path is relative for bind whatever"
12
- source_path_relative: "source path is relative for bind whatever"
13
- source_path_not_exist: "cannot bind source path %{path} because it doesn't exist"
11
+ destination_path_relative: "Destination path is relative for bind whatever"
12
+ source_path_relative: "Source path is relative for bind whatever"
13
+ source_path_not_exist: "Cannot bind source path %{path} because it doesn't exist"
14
14
  binding_failed: |-
15
- bind command %{command} failed to run!
16
-
17
- Please check options values and compatibility.
18
- For a complete documentation, run `sudo bindfs --help` on the VM or see bindfs man page at http://www.cs.helsinki.fi/u/partel/bindfs_docs/bindfs.1.html
15
+ The bind command `%{command}` failed to run!
19
16
 
17
+ Please check options values and compatibility. For a complete documentation,
18
+ run `sudo bindfs --help` on the VM.
19
+
20
+ You can see it online at http://www.cs.helsinki.fi/u/partel/bindfs_docs/bindfs.1.html.
metadata CHANGED
@@ -1,65 +1,61 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: vagrant-bindfs
3
- version: !ruby/object:Gem::Version
4
- version: 0.2.4
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
5
  platform: ruby
6
- authors:
7
- - "Ga\xC3\xABl-Ian Havard"
6
+ authors:
7
+ - Gaël-Ian Havard
8
8
  - Igor Serebryany
9
+ - Thomas Boerger
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
-
13
- date: 2014-01-04 00:00:00 Z
13
+ date: 2014-10-08 00:00:00.000000000 Z
14
14
  dependencies: []
15
-
16
- description: A Vagrant plugin to automate bindfs mount in the VM. This allow you to change owner, group and permissions on files and, for example, work around NFS share permissions issues.
17
- email:
15
+ description: A Vagrant plugin to automate bindfs mount in the VM. This allow you to
16
+ change owner, group and permissions on files and, for example, work around NFS share
17
+ permissions issues.
18
+ email:
18
19
  - gaelian.havard@gmail.com
19
20
  - igor.serebryany@airbnb.com
20
21
  executables: []
21
-
22
22
  extensions: []
23
-
24
23
  extra_rdoc_files: []
25
-
26
- files:
24
+ files:
27
25
  - MIT-LICENSE
28
26
  - README.md
29
27
  - lib/vagrant-bindfs.rb
30
28
  - lib/vagrant-bindfs/bind.rb
31
29
  - lib/vagrant-bindfs/cap/debian/bindfs_install.rb
32
30
  - lib/vagrant-bindfs/cap/linux/bindfs_installed.rb
31
+ - lib/vagrant-bindfs/cap/suse/bindfs_install.rb
33
32
  - lib/vagrant-bindfs/config.rb
34
33
  - lib/vagrant-bindfs/errors.rb
35
34
  - lib/vagrant-bindfs/plugin.rb
36
35
  - lib/vagrant-bindfs/version.rb
37
36
  - locales/en.yml
38
37
  homepage: https://github.com/gael-ian/vagrant-bindfs
39
- licenses:
38
+ licenses:
40
39
  - MIT
41
40
  metadata: {}
42
-
43
41
  post_install_message:
44
42
  rdoc_options: []
45
-
46
- require_paths:
43
+ require_paths:
47
44
  - lib
48
- required_ruby_version: !ruby/object:Gem::Requirement
49
- requirements:
50
- - &id001
51
- - ">="
52
- - !ruby/object:Gem::Version
53
- version: "0"
54
- required_rubygems_version: !ruby/object:Gem::Requirement
55
- requirements:
56
- - *id001
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
57
55
  requirements: []
58
-
59
56
  rubyforge_project:
60
- rubygems_version: 2.2.0
57
+ rubygems_version: 2.2.2
61
58
  signing_key:
62
59
  specification_version: 4
63
60
  summary: A Vagrant plugin to automate bindfs mount in the VM
64
61
  test_files: []
65
-