vagrant-notify-forwarder 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +24 -0
- data/Gemfile +9 -0
- data/LICENSE.txt +22 -0
- data/README.md +41 -0
- data/lib/vagrant-notify-forwarder.rb +39 -0
- data/lib/vagrant-notify-forwarder/action.rb +183 -0
- data/lib/vagrant-notify-forwarder/config.rb +20 -0
- data/lib/vagrant-notify-forwarder/version.rb +3 -0
- data/vagrant-notify-forwarder.gemspec +18 -0
- metadata +54 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d3036da0c84c970b025b499e3db1f161b4834f8a
|
4
|
+
data.tar.gz: 8716f2cea05962cdb24329a4c95163bd52c3bd96
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d52251ae022a89c51f319b8f6db84aa5b2fe7b3a0e0c4aec6a77f52c1a18b6c7bb01d7ee976abcfd90b4688fe0cd8bedfe3f0d552862157b160f9d4961eeef7e
|
7
|
+
data.tar.gz: 25705479032b9e2db1e5aa33e2e9a0c7a8f2fb9f5eb5327d4abe5aec0cf6a8a839cf6b90ab9899ce415ec04fa4814eeda8d13bf74d57b532209e919eebb5b3d7
|
data/.gitignore
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
*.bundle
|
19
|
+
*.so
|
20
|
+
*.o
|
21
|
+
*.a
|
22
|
+
mkmf.log
|
23
|
+
Vagrantfile
|
24
|
+
/.vagrant
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2015 mhallin
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# Vagrant file system notification forwarder plugin
|
2
|
+
|
3
|
+
A vagrant plugin that uses [notify-forwarder](https://github.com/mhallin/notify-forwarder) to
|
4
|
+
forward file system events from the host to the guest automatically on all shared folders.
|
5
|
+
|
6
|
+
This is useful for auto reloading file systems that rebuild when files change. Normally, they have
|
7
|
+
to use CPU intensive polling when watching shared folders. This plugin makes them able to use
|
8
|
+
inotify or similar for improved performance and reduced CPU usage.
|
9
|
+
|
10
|
+
## Installation and usage
|
11
|
+
|
12
|
+
```terminal
|
13
|
+
$ vagrant plugin install vagrant-notify-forwarder
|
14
|
+
$ vagrant reload
|
15
|
+
```
|
16
|
+
|
17
|
+
By default, this sets up UDP port 29324 for port forwarding. If you're already using this port, or
|
18
|
+
if you want to change it, add the following line to your `Vagrantfile`:
|
19
|
+
|
20
|
+
```ruby
|
21
|
+
config.notify_forwarder.port = 22020 # Or your port number
|
22
|
+
```
|
23
|
+
|
24
|
+
The server and guest binaries will be automatically downloaded from the notify-forwarder repo's
|
25
|
+
releases and verified with SHA256.
|
26
|
+
|
27
|
+
## Supported operating systems
|
28
|
+
|
29
|
+
To conserve size and dependencies, the plugin downloads binaries for supported platforms. This
|
30
|
+
plugin supports the same host/guest platforms as `notify-forwarder` itself:
|
31
|
+
|
32
|
+
* FreeBSD 64 bit as guest,
|
33
|
+
* Linux 64 bit as host and guest, and
|
34
|
+
* Mac OS X 64 bit as host and guest.
|
35
|
+
|
36
|
+
If you're running an unsupported host or guest and want to disable this plugin for a specific
|
37
|
+
machine, add the following line to your `Vagrantfile`:
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
config.notify_forwarder.enable = false
|
41
|
+
```
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require "vagrant"
|
2
|
+
|
3
|
+
module VagrantNotifyForwarderPlugin
|
4
|
+
|
5
|
+
class Plugin < Vagrant.plugin("2")
|
6
|
+
name "vagrant-notify-forwarder"
|
7
|
+
description "Wrapper around the notify-forwarder file system event forwarder"
|
8
|
+
|
9
|
+
register_boot_hooks = lambda do |hook|
|
10
|
+
require_relative "vagrant-notify-forwarder/action"
|
11
|
+
|
12
|
+
hook.after Vagrant::Action::Builtin::Provision,
|
13
|
+
VagrantNotifyForwarderPlugin::Action::StartHostForwarder
|
14
|
+
hook.after VagrantNotifyForwarderPlugin::Action::StartHostForwarder,
|
15
|
+
VagrantNotifyForwarderPlugin::Action::StartClientForwarder
|
16
|
+
end
|
17
|
+
|
18
|
+
register_halt_hooks = lambda do |hook|
|
19
|
+
require_relative "vagrant-notify-forwarder/action"
|
20
|
+
|
21
|
+
hook.before Vagrant::Action::Builtin::GracefulHalt,
|
22
|
+
VagrantNotifyForwarderPlugin::Action::StopHostForwarder
|
23
|
+
end
|
24
|
+
|
25
|
+
config "notify_forwarder" do
|
26
|
+
require_relative "vagrant-notify-forwarder/config"
|
27
|
+
|
28
|
+
VagrantNotifyForwarderPlugin::Config::Config
|
29
|
+
end
|
30
|
+
|
31
|
+
action_hook :start_notify_forwarder, :machine_action_up, ®ister_boot_hooks
|
32
|
+
action_hook :start_notify_forwarder, :machine_action_reload, ®ister_boot_hooks
|
33
|
+
|
34
|
+
action_hook :stop_notify_forwarder, :machine_action_halt, ®ister_halt_hooks
|
35
|
+
action_hook :stop_notify_forwarder, :machine_action_reload, ®ister_halt_hooks
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,183 @@
|
|
1
|
+
module VagrantNotifyForwarderPlugin
|
2
|
+
|
3
|
+
module Action
|
4
|
+
|
5
|
+
class Utils
|
6
|
+
@@OS_NAMES = {
|
7
|
+
"Linux" => :linux,
|
8
|
+
"Darwin" => :darwin,
|
9
|
+
"FreeBSD" => :freebsd,
|
10
|
+
}
|
11
|
+
|
12
|
+
@@HARDWARE_NAMES = {
|
13
|
+
"x86_64" => :x86_64,
|
14
|
+
}
|
15
|
+
|
16
|
+
def self.parse_os_name(data)
|
17
|
+
@@OS_NAMES[data.strip] or :unsupported
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.parse_hardware_name(data)
|
21
|
+
@@HARDWARE_NAMES[data.strip] or :unsupported
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.host_pidfile(env)
|
25
|
+
env[:machine].data_dir.join('notify_watcher_host_pid')
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.ensure_binary_downloaded(env, os, hardware)
|
29
|
+
download_urls = {
|
30
|
+
[:linux, :x86_64] => ['https://github.com/mhallin/notify-forwarder/releases/download/release/v0.1.0/notify-forwarder_linux_x64',
|
31
|
+
'7d14996963f45d9b1c85e78d0aa0c94371d585d0ccabae482c2ef5968417a7f0'],
|
32
|
+
[:darwin, :x86_64] => ['https://github.com/mhallin/notify-forwarder/releases/download/release/v0.1.0/notify-forwarder_osx_x64',
|
33
|
+
'd8ad61d9b70394b55bc22c94771ca6f88f0f51868617c3b2c55654ebde866c23'],
|
34
|
+
[:freebsd, :x86_64] => ['https://github.com/mhallin/notify-forwarder/releases/download/release/v0.1.0/notify-forwarder_freebsd_x64',
|
35
|
+
'2df0884958b2469dd7113660cf2de01e9e5dd8fcad0213bff3335833e6668f84'],
|
36
|
+
}
|
37
|
+
|
38
|
+
url, sha256sum = download_urls[[os, hardware]]
|
39
|
+
path = env[:tmp_path].join File.basename(url)
|
40
|
+
should_download = true
|
41
|
+
|
42
|
+
if File.exists? path
|
43
|
+
digest = Digest::SHA256.file(path).hexdigest
|
44
|
+
|
45
|
+
if digest == sha256sum
|
46
|
+
should_download = false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
if should_download
|
51
|
+
env[:ui].info 'Notify-forwarder: Downloading client'
|
52
|
+
downloader = Vagrant::Util::Downloader.new url, path
|
53
|
+
downloader.download!
|
54
|
+
end
|
55
|
+
|
56
|
+
File.chmod(0755, path)
|
57
|
+
|
58
|
+
path
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
class StartHostForwarder
|
63
|
+
def initialize(app, env)
|
64
|
+
@app = app
|
65
|
+
end
|
66
|
+
|
67
|
+
def ensure_binary_downloaded(env)
|
68
|
+
os = Utils.parse_os_name `uname -s`
|
69
|
+
hardware = Utils.parse_hardware_name `uname -m`
|
70
|
+
|
71
|
+
env[:ui].error 'Notify-forwarder: Unsupported host operating system' if os == :unsupported
|
72
|
+
env[:ui].error 'Notify-forwarder: Unsupported host hardware' if hardware == :unsupported
|
73
|
+
|
74
|
+
if os != :unsupported and hardware != :unsupported
|
75
|
+
Utils.ensure_binary_downloaded env, os, hardware
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def start_watcher(env, command)
|
80
|
+
pid = Process.spawn command
|
81
|
+
Process.detach(pid)
|
82
|
+
|
83
|
+
pidfile = Utils.host_pidfile env
|
84
|
+
pidfile.open('w+') do |f|
|
85
|
+
f.write(pid)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def call(env)
|
90
|
+
if env[:machine].config.notify_forwarder.enable
|
91
|
+
port = env[:machine].config.notify_forwarder.port
|
92
|
+
env[:machine].config.vm.network :forwarded_port, host: port, guest: port, protocol: 'udp'
|
93
|
+
end
|
94
|
+
|
95
|
+
@app.call env
|
96
|
+
|
97
|
+
if env[:machine].config.notify_forwarder.enable
|
98
|
+
path = ensure_binary_downloaded env
|
99
|
+
return unless path
|
100
|
+
|
101
|
+
args = "watch -c 127.0.0.1:#{port}"
|
102
|
+
|
103
|
+
env[:machine].config.vm.synced_folders.each do |id, options|
|
104
|
+
unless options[:disabled]
|
105
|
+
hostpath = File.absolute_path(options[:hostpath])
|
106
|
+
guestpath = options[:guestpath]
|
107
|
+
|
108
|
+
args += " #{hostpath} #{guestpath}"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
start_watcher env, "#{path} #{args}"
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
class StopHostForwarder
|
118
|
+
def initialize(app, env)
|
119
|
+
@app = app
|
120
|
+
end
|
121
|
+
|
122
|
+
def call(env)
|
123
|
+
@app.call env
|
124
|
+
|
125
|
+
return unless env[:machine].config.notify_forwarder.enable
|
126
|
+
|
127
|
+
pidfile = Utils.host_pidfile env
|
128
|
+
if File.exists? pidfile
|
129
|
+
pidfile.open('r') do |f|
|
130
|
+
pid = f.read.to_i
|
131
|
+
|
132
|
+
begin
|
133
|
+
Process.kill 'TERM', pid
|
134
|
+
rescue Errno::ESRCH
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
class StartClientForwarder
|
142
|
+
def initialize(app, env)
|
143
|
+
@app = app
|
144
|
+
end
|
145
|
+
|
146
|
+
def ensure_binary_downloaded(env)
|
147
|
+
os = :unsupported
|
148
|
+
hardware = :unsupported
|
149
|
+
|
150
|
+
env[:machine].communicate.execute('uname -s') do |type, data|
|
151
|
+
os = Utils.parse_os_name data if type == :stdout
|
152
|
+
end
|
153
|
+
|
154
|
+
env[:machine].communicate.execute('uname -m') do |type, data|
|
155
|
+
hardware = Utils.parse_hardware_name data if type == :stdout
|
156
|
+
end
|
157
|
+
|
158
|
+
env[:ui].error 'Notify-forwarder: Unsupported client operating system' if os == :unsupported
|
159
|
+
env[:ui].error 'Notify-forwarder: Unsupported client hardware' if hardware == :unsupported
|
160
|
+
|
161
|
+
if os != :unsupported and hardware != :unsupported
|
162
|
+
Utils.ensure_binary_downloaded env, os, hardware
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
def call(env)
|
167
|
+
@app.call env
|
168
|
+
|
169
|
+
return unless env[:machine].config.notify_forwarder.enable
|
170
|
+
|
171
|
+
path = ensure_binary_downloaded env
|
172
|
+
return unless path
|
173
|
+
|
174
|
+
port = env[:machine].config.notify_forwarder.port
|
175
|
+
|
176
|
+
env[:machine].communicate.upload(path, "/tmp/notify-forwarder")
|
177
|
+
env[:machine].communicate.execute("nohup /tmp/notify-forwarder receive -p #{port} &")
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
182
|
+
|
183
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module VagrantNotifyForwarderPlugin
|
2
|
+
module Config
|
3
|
+
|
4
|
+
class Config < Vagrant.plugin("2", :config)
|
5
|
+
attr_accessor :port
|
6
|
+
attr_accessor :enable
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@port = UNSET_VALUE
|
10
|
+
@enable = UNSET_VALUE
|
11
|
+
end
|
12
|
+
|
13
|
+
def finalize!
|
14
|
+
@port = 29324 if @port == UNSET_VALUE
|
15
|
+
@enable = true if @enable == UNSET_VALUE
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'vagrant-notify-forwarder/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "vagrant-notify-forwarder"
|
8
|
+
spec.version = VagrantNotifyForwarderPlugin::VERSION
|
9
|
+
spec.authors = ["Magnus Hallin"]
|
10
|
+
spec.email = ["mhallin@gmail.com"]
|
11
|
+
spec.summary = "A vagrant plugin that forwards file system events from the host to the guest"
|
12
|
+
spec.description = spec.summary
|
13
|
+
spec.homepage = "https://github.com/mhallin/vagrant-notify-forwarder"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.require_paths = ["lib"]
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vagrant-notify-forwarder
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Magnus Hallin
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-04 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A vagrant plugin that forwards file system events from the host to the
|
14
|
+
guest
|
15
|
+
email:
|
16
|
+
- mhallin@gmail.com
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- .gitignore
|
22
|
+
- Gemfile
|
23
|
+
- LICENSE.txt
|
24
|
+
- README.md
|
25
|
+
- lib/vagrant-notify-forwarder.rb
|
26
|
+
- lib/vagrant-notify-forwarder/action.rb
|
27
|
+
- lib/vagrant-notify-forwarder/config.rb
|
28
|
+
- lib/vagrant-notify-forwarder/version.rb
|
29
|
+
- vagrant-notify-forwarder.gemspec
|
30
|
+
homepage: https://github.com/mhallin/vagrant-notify-forwarder
|
31
|
+
licenses:
|
32
|
+
- MIT
|
33
|
+
metadata: {}
|
34
|
+
post_install_message:
|
35
|
+
rdoc_options: []
|
36
|
+
require_paths:
|
37
|
+
- lib
|
38
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - '>='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
requirements: []
|
49
|
+
rubyforge_project:
|
50
|
+
rubygems_version: 2.0.14
|
51
|
+
signing_key:
|
52
|
+
specification_version: 4
|
53
|
+
summary: A vagrant plugin that forwards file system events from the host to the guest
|
54
|
+
test_files: []
|