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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1b0558819c167f813246adebc01045532d038d7cbff96d9d98003628032cc10e
4
- data.tar.gz: 8fb79f415a8af80fb941825687c649bf324ede35c56ba8faa9aa7f59d7062b69
3
+ metadata.gz: b4296f3bbb1d4aa3a2e8c76913e7bdf3fa2af6a33ba0c669f313ce9a5960bebe
4
+ data.tar.gz: 62aab3a846663ed13f5e41fb56f3bbf33148025ddd4e72b55447403188587ad5
5
5
  SHA512:
6
- metadata.gz: f44e09f8fabc2630fa9c03878388bf9082671d37841d534fabec67b6eb0849fbefe8251365cf86e36b7de0b5061e573003695622c16f190d5762f5c4db051549
7
- data.tar.gz: 9068d4a71bd8d115e21cab38872375358b7cbdbb3c9c59d4e9593a333a750a8b920f95c916190cf5cc1e993303bcea3826648e62c65565a50773a125f7a5f18b
6
+ metadata.gz: 2a4713b8db011857a9270d86008a514c5f37138734d08ce7032298d1443e3e17e9b3d1ffd85d85f93db28af22b3e3e6f26d15b1ffb0bc223c85ba589c26d674a
7
+ data.tar.gz: 8dccc782e3537d7e606fbc269e5d43aae5fa70ceeba7d15265201007a1dc623af6cb097f419c5cc9ea81f9e2b95a04af7e3121d4e637a72e35d19bdd5acf1ed3
data/Gemfile.lock CHANGED
@@ -27,7 +27,7 @@ GIT
27
27
  PATH
28
28
  remote: .
29
29
  specs:
30
- vagrant-nfs4j (0.1.2)
30
+ vagrant-nfs4j (0.2.1)
31
31
 
32
32
  GEM
33
33
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -1,7 +1,35 @@
1
1
  # vagrant-nfs4j
2
2
 
3
+ [![](https://img.shields.io/gem/v/vagrant-nfs4j.svg)](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: 'C:\Users\Toilal' # absolute or relative path from Vagrantfile
5
- target: '/user' # absolute or relative path from home of VM
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: 'D:\' # absolute or relative path from Vagrantfile
8
- target: '/hdd' # absolute or relative path from home of VM
7
+ source: 'C:\' # absolute or relative path from Vagrantfile
8
+ target: '/C' # absolute or relative path from home of VM
@@ -27,6 +27,7 @@ module VagrantNfs4j
27
27
  config.daemon_start,
28
28
  config.daemon_exe,
29
29
  config.daemon_jar,
30
+ config.daemon_cmd,
30
31
  config.daemon_opts,
31
32
  config.java_home,
32
33
  config.java_opts)
@@ -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
- errors << 'nfs4j.shares_config cannot be nil.' if machine.config.nfs4j.shares_config.nil?
33
- errors << 'nfs4j.host_ip cannot be nil.' if machine.config.nfs4j.host_ip.nil?
34
- errors << 'nfs4j.api_port cannot be nil.' if machine.config.nfs4j.api_port.nil?
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
- ENV['JAVA_HOME'] = @java_home if @java_home
60
- ENV['JAVA_OPTS'] = @java_opts if @java_opts
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 start(ui, start, exe, jar, opts, java_home, java_opts)
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
- bin = if exe
130
- exe.is_a?(String) ? exe : @exe
131
- else
132
- java_exe = if java_home
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\" #{bin}#{opts}"
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)
@@ -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
- return nil
82
+
83
+ return cmd
83
84
  end
84
85
  end
85
86
  end
@@ -1,3 +1,3 @@
1
1
  module VagrantNfs4j
2
- VERSION = '0.2.0'
2
+ VERSION = '0.2.1'
3
3
  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.0
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-19 00:00:00.000000000 Z
11
+ date: 2018-12-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler