vagrant-nfs4j 0.2.0 → 0.2.1

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