vagrant-nfs4j 0.2.0 → 0.2.1
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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +28 -0
- data/config.yaml +4 -4
- data/lib/vagrant-nfs4j/cap/nfs.rb +1 -0
- data/lib/vagrant-nfs4j/config/nfs4j.rb +45 -5
- data/lib/vagrant-nfs4j/nfs4j_daemon/wrapper.rb +33 -23
- data/lib/vagrant-nfs4j/utils.rb +3 -2
- data/lib/vagrant-nfs4j/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b4296f3bbb1d4aa3a2e8c76913e7bdf3fa2af6a33ba0c669f313ce9a5960bebe
|
4
|
+
data.tar.gz: 62aab3a846663ed13f5e41fb56f3bbf33148025ddd4e72b55447403188587ad5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a4713b8db011857a9270d86008a514c5f37138734d08ce7032298d1443e3e17e9b3d1ffd85d85f93db28af22b3e3e6f26d15b1ffb0bc223c85ba589c26d674a
|
7
|
+
data.tar.gz: 8dccc782e3537d7e606fbc269e5d43aae5fa70ceeba7d15265201007a1dc623af6cb097f419c5cc9ea81f9e2b95a04af7e3121d4e637a72e35d19bdd5acf1ed3
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,35 @@
|
|
1
1
|
# vagrant-nfs4j
|
2
2
|
|
3
|
+
[](https://rubygems.org/gems/vagrant-nfs4j)
|
4
|
+
|
3
5
|
A Vagrant plugin that brings support of
|
4
6
|
[Vagrant NFS Synced Folders](https://www.vagrantup.com/docs/synced-folders/nfs.html) to Windows hosts with
|
5
7
|
[nfs4j-daemon](https://github.com/gfi-centre-ouest/nfs4j-daemon) under the hood.
|
6
8
|
|
7
9
|
This project is heavily inspired by [vagrant-winnfsd](https://github.com/winnfsd/vagrant-winnfsd).
|
10
|
+
|
11
|
+
## Quickstart
|
12
|
+
|
13
|
+
- Install the plugin
|
14
|
+
```
|
15
|
+
vagrant plugin install vagrant-nfs4j
|
16
|
+
```
|
17
|
+
|
18
|
+
- Configure nfs synced folders in `Vagrantfile`
|
19
|
+
|
20
|
+
```ruby
|
21
|
+
Vagrant.configure('2') do |config|
|
22
|
+
config.vm.box = 'ubuntu/xenial64'
|
23
|
+
|
24
|
+
config.vm.synced_folder 'C:\Users\Toilal', # Host Path
|
25
|
+
'/user', # VM Path
|
26
|
+
id: 'user',
|
27
|
+
type: 'nfs',
|
28
|
+
mount_options: %w(uid=1000 gid=1000)
|
29
|
+
end
|
30
|
+
```
|
31
|
+
|
32
|
+
## Configuration
|
33
|
+
|
34
|
+
See [lib/vagrant-nfs4j/config/nfs4j.rb](https://github.com/gfi-centre-ouest/vagrant-nfs4j/blob/master/lib/vagrant-nfs4j/config/nfs4j.rb)
|
35
|
+
for options available in `config.nfs4j` object of `Vagrantfile`.
|
data/config.yaml
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
ip_address: 192.168.1.100
|
2
2
|
synced_folders:
|
3
3
|
user:
|
4
|
-
source: '
|
5
|
-
target: '/
|
4
|
+
source: 'D:\Users\FRUP67305' # absolute or relative path from Vagrantfile
|
5
|
+
target: '/D/Users/FRUP67305' # absolute or relative path from home of VM
|
6
6
|
project:
|
7
|
-
source: '
|
8
|
-
target: '/
|
7
|
+
source: 'C:\' # absolute or relative path from Vagrantfile
|
8
|
+
target: '/C' # absolute or relative path from home of VM
|
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'vagrant'
|
2
|
+
require_relative '../nfs4j_daemon/wrapper'
|
3
|
+
require 'open3'
|
2
4
|
|
3
5
|
module VagrantNfs4j
|
4
6
|
module Config
|
@@ -6,10 +8,12 @@ module VagrantNfs4j
|
|
6
8
|
attr_accessor :shares_config
|
7
9
|
attr_accessor :host_ip
|
8
10
|
attr_accessor :api_port
|
11
|
+
attr_accessor :api_bearer
|
9
12
|
attr_accessor :setup_firewall
|
10
13
|
attr_accessor :daemon_start
|
11
14
|
attr_accessor :daemon_exe
|
12
15
|
attr_accessor :daemon_jar
|
16
|
+
attr_accessor :daemon_cmd
|
13
17
|
attr_accessor :daemon_opts
|
14
18
|
attr_accessor :java_home
|
15
19
|
attr_accessor :java_opts
|
@@ -18,10 +22,12 @@ module VagrantNfs4j
|
|
18
22
|
@shares_config = UNSET_VALUE
|
19
23
|
@host_ip = UNSET_VALUE
|
20
24
|
@api_port = UNSET_VALUE
|
25
|
+
@api_bearer = UNSET_VALUE
|
21
26
|
@setup_firewall = UNSET_VALUE
|
22
27
|
@daemon_start = UNSET_VALUE
|
23
28
|
@daemon_exe = UNSET_VALUE
|
24
29
|
@daemon_jar = UNSET_VALUE
|
30
|
+
@daemon_cmd = UNSET_VALUE
|
25
31
|
@daemon_opts = UNSET_VALUE
|
26
32
|
@java_home = UNSET_VALUE
|
27
33
|
@java_opts = UNSET_VALUE
|
@@ -29,9 +35,31 @@ module VagrantNfs4j
|
|
29
35
|
|
30
36
|
def validate(machine)
|
31
37
|
errors = []
|
32
|
-
|
33
|
-
|
34
|
-
|
38
|
+
|
39
|
+
config = machine.config.nfs4j
|
40
|
+
|
41
|
+
errors << 'nfs4j.shares_config cannot be nil.' if config.shares_config.nil?
|
42
|
+
errors << 'nfs4j.host_ip cannot be nil.' if config.host_ip.nil?
|
43
|
+
errors << 'nfs4j.api_port cannot be nil.' if config.api_port.nil?
|
44
|
+
|
45
|
+
java_required = false
|
46
|
+
if config.daemon_start
|
47
|
+
begin
|
48
|
+
stdout, stderr, status = Open3.capture3("#{config.daemon_cmd} -h")
|
49
|
+
if status.to_i != 0
|
50
|
+
java_required = true
|
51
|
+
errors << "nfs4j-daemon cannot be executed (#{config.daemon_cmd}) [#{status}]. check nfs4j.daemon_* and nfs4j.java_* options."
|
52
|
+
elsif not stdout.include?('[<shares>...]')
|
53
|
+
java_required = true
|
54
|
+
errors << "nfs4j-daemon cannot be executed (#{config.daemon_cmd}) [doesn't looks like nfs4j-daemon]. check nfs4j.daemon_* and nfs4j.java_* options."
|
55
|
+
end
|
56
|
+
rescue StandardError => err
|
57
|
+
java_required = true
|
58
|
+
errors << "nfs4j-daemon cannot be executed (#{config.daemon_cmd}): #{err.message}. check nfs4j.daemon_* and nfs4j.java_* options."
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
errors << "nfs4j-daemon requires Java >= 8. Make sure you actually have a JRE/JDK installed and JAVA_HOME environment variable or nfs4j.java_home option is set to JRE/JDK installation directory." if java_required
|
35
63
|
|
36
64
|
{"nsf4j" => errors}
|
37
65
|
end
|
@@ -40,14 +68,19 @@ module VagrantNfs4j
|
|
40
68
|
@shares_config = {} if @shares_config == UNSET_VALUE
|
41
69
|
@host_ip = "" if @host_ip == UNSET_VALUE
|
42
70
|
@api_port = 9732 if @api_port == UNSET_VALUE
|
71
|
+
@api_bearer = nil if @api_bearer == UNSET_VALUE
|
43
72
|
@setup_firewall = true if @setup_firewall == UNSET_VALUE
|
44
73
|
@daemon_start = true if @daemon_start == UNSET_VALUE
|
45
74
|
@daemon_exe = true if @daemon_exe == UNSET_VALUE
|
46
75
|
@daemon_jar = false if @daemon_jar == UNSET_VALUE
|
76
|
+
@daemon_cmd = nil if @daemon_cmd == UNSET_VALUE
|
47
77
|
@daemon_opts = nil if @daemon_opts == UNSET_VALUE
|
48
78
|
@java_home = ENV['JAVA_HOME'] if @java_home == UNSET_VALUE
|
49
79
|
@java_opts = ENV['JAVA_OPTS'] if @java_opts == UNSET_VALUE
|
50
80
|
|
81
|
+
ENV['JAVA_HOME'] = @java_home if @java_home
|
82
|
+
ENV['JAVA_OPTS'] = @java_opts if @java_opts
|
83
|
+
|
51
84
|
if @daemon_jar
|
52
85
|
@daemon_exe = false
|
53
86
|
end
|
@@ -56,8 +89,15 @@ module VagrantNfs4j
|
|
56
89
|
@daemon_jar = false
|
57
90
|
end
|
58
91
|
|
59
|
-
|
60
|
-
|
92
|
+
if @daemon_cmd
|
93
|
+
@daemon_exe = false
|
94
|
+
@daemon_jar = false
|
95
|
+
else
|
96
|
+
@daemon_cmd = VagrantNfs4j::Nfs4jDaemon::Wrapper.new(
|
97
|
+
config.api_port,
|
98
|
+
config.api_bearer
|
99
|
+
).get_cmd_base(@daemon_exe, @daemon_jar, @java_home, @java_opts)
|
100
|
+
end
|
61
101
|
end
|
62
102
|
end
|
63
103
|
end
|
@@ -3,6 +3,7 @@ require 'json'
|
|
3
3
|
require 'fileutils'
|
4
4
|
|
5
5
|
require_relative 'errors'
|
6
|
+
require_relative '../utils'
|
6
7
|
|
7
8
|
module VagrantNfs4j
|
8
9
|
module Nfs4jDaemon
|
@@ -114,7 +115,33 @@ module VagrantNfs4j
|
|
114
115
|
false
|
115
116
|
end
|
116
117
|
|
117
|
-
def
|
118
|
+
def get_cmd_base(exe, jar, java_home, java_opts)
|
119
|
+
cmd_base = if exe
|
120
|
+
"\"#{exe.is_a?(String) ? VagrantNfs4j::Utils.which(exe) : @exe}\""
|
121
|
+
else
|
122
|
+
java_exe = if java_home
|
123
|
+
additional_path = File.join(java_home, 'bin')
|
124
|
+
"\"#{VagrantNfs4j::Utils.which("java", additional_path)}\""
|
125
|
+
else
|
126
|
+
"\"#{VagrantNfs4j::Utils.which("java")}\""
|
127
|
+
end
|
128
|
+
jar.is_a?(String) ? "#{java_exe} -jar #{jar}" : "#{java_exe} -jar #{@jar}"
|
129
|
+
end
|
130
|
+
|
131
|
+
unless exe
|
132
|
+
if not java_opts
|
133
|
+
java_opts = ""
|
134
|
+
else
|
135
|
+
java_opts = " #{java_opts}"
|
136
|
+
end
|
137
|
+
|
138
|
+
cmd_base = "#{cmd_base}#{java_opts}"
|
139
|
+
end
|
140
|
+
|
141
|
+
cmd_base
|
142
|
+
end
|
143
|
+
|
144
|
+
def start(ui, start, exe, jar, cmd, opts, java_home, java_opts)
|
118
145
|
unless start
|
119
146
|
unless self.is_running()
|
120
147
|
raise Nfs4jUnavailable.new({api_port: @api_port})
|
@@ -126,27 +153,10 @@ module VagrantNfs4j
|
|
126
153
|
return false
|
127
154
|
end
|
128
155
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
additional_path = File.join(java_home, 'bin')
|
134
|
-
VagrantNfs4j::Utils.which("java", additional_path)
|
135
|
-
else
|
136
|
-
VagrantNfs4j::Utils.which("java")
|
137
|
-
end
|
138
|
-
|
139
|
-
jar.is_a?(String) ? "#{java_exe} -jar #{jar}" : "#{java_exe} -jar #{@jar}"
|
140
|
-
end
|
141
|
-
|
142
|
-
unless exe
|
143
|
-
if not java_opts
|
144
|
-
java_opts = " "
|
145
|
-
else
|
146
|
-
java_opts = " #{java_opts}"
|
147
|
-
end
|
148
|
-
|
149
|
-
bin = "#{bin}#{java_opts}"
|
156
|
+
if cmd
|
157
|
+
cmd_base = cmd
|
158
|
+
else
|
159
|
+
cmd_base = self.get_cmd_base(exe, jar, java_home, java_opts)
|
150
160
|
end
|
151
161
|
|
152
162
|
if opts
|
@@ -161,7 +171,7 @@ module VagrantNfs4j
|
|
161
171
|
opts = " --api-port=#{@api_port}#{opts}"
|
162
172
|
opts = " --no-share#{opts}"
|
163
173
|
|
164
|
-
cmd = "start \"vagrant-nfs4j-daemon\" #{
|
174
|
+
cmd = "start \"vagrant-nfs4j-daemon\" #{cmd_base}#{opts}"
|
165
175
|
ui.detail(I18n.t('vagrant_nfs4j.nfs4j_daemon.is_starting', cmd: cmd))
|
166
176
|
|
167
177
|
pid = spawn(cmd)
|
data/lib/vagrant-nfs4j/utils.rb
CHANGED
@@ -70,7 +70,7 @@ module VagrantNfs4j
|
|
70
70
|
|
71
71
|
def self.which(cmd, more_paths = [])
|
72
72
|
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
73
|
-
exts = exts.map {|e| e.downcase
|
73
|
+
exts = exts.map {|e| e.downcase}
|
74
74
|
|
75
75
|
path = [more_paths, *ENV['PATH'].split(File::PATH_SEPARATOR)].flatten.map {|path| path.gsub(/\\/, '/')}
|
76
76
|
path.each do |path|
|
@@ -79,7 +79,8 @@ module VagrantNfs4j
|
|
79
79
|
return exe if File.executable?(exe) && !File.directory?(exe)
|
80
80
|
end
|
81
81
|
end
|
82
|
-
|
82
|
+
|
83
|
+
return cmd
|
83
84
|
end
|
84
85
|
end
|
85
86
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-nfs4j
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rémi Alvergnat
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-12-
|
11
|
+
date: 2018-12-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|