savi-vagrant-notify 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d92053eacab1ebcd98c6b67f67676fc5eb5a9696
4
+ data.tar.gz: b1102a33b1b5be79e89b932a6f20d2dda492a2d4
5
+ SHA512:
6
+ metadata.gz: 80fdeaf03c9d5f73eb2f95a7dbe714f280bd04e7ef7e79b468a662ef9ab7867065a7e5ad0d55bf16c1b32f1740ada4c9756f2bb68bead105861b0080d3a506d2
7
+ data.tar.gz: 1baaac6d972014177b137268a4f3d98444ca814b0ef603cc5d33f56c63f95065732d78d846e1c9ab331820e57cb630021b85c6b9d4e1fb43d49e436d2f185cca
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ /.vagrant/
10
+ /Vagrantfile
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source "https://rubygems.org"
2
+
3
+ group :development do
4
+ gem "vagrant", git: "https://github.com/pward123/savi-vagrant-notify.git#change-project-name"
5
+ end
6
+
7
+ group :plugins do
8
+ gem "savi-vagrant-notify", path: "."
9
+ end
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,59 @@
1
+ # savi-vagrant-notify
2
+
3
+ A vagrant plugin that removes the need for port forwarding udp in the otherwise excellent [vagrant-notify-forwarder](https://github.com/mhallin/vagrant-notify-forwarder) plugin.
4
+
5
+ Instead of sending the udp notification to 127.0.0.1, this plugin looks up the public ip of the guest vm and forwards all notifications to that address.
6
+
7
+ Thanks to [vagrant-address](https://github.com/mkuzmin/vagrant-address) for figuring out how to look up the address.
8
+
9
+ The remainder of this document has only minor changes from the document in the [original](https://github.com/mhallin/vagrant-notify-forwarder/blob/030173561dcaaa64d9161bd52b1216cc7d1e0748/README.md).
10
+
11
+ # Vagrant file system notification forwarder plugin
12
+
13
+ A vagrant plugin that uses [notify-forwarder](https://github.com/mhallin/notify-forwarder) to
14
+ forward file system events from the host to the guest automatically on all shared folders.
15
+
16
+ This is useful for auto reloading file systems that rebuild when files change. Normally, they have
17
+ to use CPU intensive polling when watching shared folders. This plugin makes them able to use
18
+ inotify or similar for improved performance and reduced CPU usage.
19
+
20
+ ## Installation and usage
21
+
22
+ ```terminal
23
+ $ vagrant plugin install savi-vagrant-notify
24
+ $ vagrant reload
25
+ ```
26
+
27
+ The server and guest binaries will be automatically downloaded from the notify-forwarder repo's
28
+ releases and verified with SHA256.
29
+
30
+ ### Permissions
31
+
32
+ The client in the guest OS will run as root by default, assuming passwordless `sudo` works. If this
33
+ does *not* work, you can disable privilege escalation in your `Vagrantfile`:
34
+
35
+ ```ruby
36
+ config.notify_forwarder.run_as_root = false
37
+ ```
38
+
39
+ ## Supported operating systems
40
+
41
+ To conserve size and dependencies, the plugin downloads binaries for supported platforms. This
42
+ plugin supports the same host/guest platforms as `notify-forwarder` itself:
43
+
44
+ * FreeBSD 64 bit as guest,
45
+ * Linux 64 bit as host and guest, and
46
+ * Mac OS X 64 bit as host and guest.
47
+
48
+ If you're running an unsupported host or guest and want to disable this plugin for a specific
49
+ machine, add the following line to your `Vagrantfile`:
50
+
51
+ ```ruby
52
+ config.notify_forwarder.enable = false
53
+ ```
54
+
55
+ ## Contributors
56
+
57
+ * [CharlieC3](https://github.com/CharlieC3)
58
+ * [hedinfaok](https://github.com/hedinfaok)
59
+ * [seff](https://github.com/seff)
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "savi-vagrant-notify"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,10 @@
1
+ require 'savi-vagrant-notify/plugin'
2
+ require 'savi-vagrant-notify/config'
3
+
4
+ module VagrantPlugins
5
+ module SaviVagrantNotify
6
+ def self.source_root
7
+ @source_root ||= Pathname.new(File.expand_path('../../', __FILE__))
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,18 @@
1
+ module VagrantPlugins
2
+ module SaviVagrantNotify
3
+ module Action
4
+ class CheckBootState
5
+ def initialize(app, env)
6
+ @app = app
7
+ end
8
+
9
+ def call(env)
10
+ return unless env[:machine].config.notify_forwarder.enable
11
+ $BOOT_SAVED = env[:machine].state.id == :saved
12
+
13
+ @app.call env
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,57 @@
1
+ require 'savi-vagrant-notify/utils'
2
+
3
+ module VagrantPlugins
4
+ module SaviVagrantNotify
5
+ module Action
6
+ class StartClientForwarder
7
+ def initialize(app, env)
8
+ @app = app
9
+ end
10
+
11
+ def ensure_binary_downloaded(env)
12
+ os = :unsupported
13
+ hardware = :unsupported
14
+
15
+ env[:machine].communicate.execute('uname -s') do |type, data|
16
+ os = Utils.parse_os_name data if type == :stdout
17
+ end
18
+
19
+ env[:machine].communicate.execute('uname -m') do |type, data|
20
+ hardware = Utils.parse_hardware_name data if type == :stdout
21
+ end
22
+
23
+ env[:ui].error 'SAVI-Vagrant-Notify Unsupported client operating system' if os == :unsupported
24
+ env[:ui].error 'SAVI-Vagrant-Notify Unsupported client hardware' if hardware == :unsupported
25
+
26
+ if os != :unsupported and hardware != :unsupported
27
+ Utils.ensure_binary_downloaded env, os, hardware
28
+ end
29
+ end
30
+
31
+ def call(env)
32
+ @app.call env
33
+
34
+ return if $BOOT_SAVED
35
+
36
+ return unless env[:machine].config.notify_forwarder.enable
37
+
38
+ path = ensure_binary_downloaded env
39
+ return unless path
40
+
41
+ port = env[:machine].config.notify_forwarder.port
42
+
43
+ start_command = "nohup /tmp/notify-forwarder receive -p #{port} &"
44
+
45
+ if env[:machine].config.notify_forwarder.run_as_root
46
+ start_command = "sudo #{start_command}"
47
+ end
48
+
49
+ env[:machine].communicate.upload(path, "/tmp/notify-forwarder")
50
+ env[:ui].output("Starting notify-forwarder ...")
51
+ env[:machine].communicate.execute(start_command)
52
+ env[:ui].detail("SAVI-Vagrant-Notify guest listening for file change notifications on 0.0.0.0:#{port}.")
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,62 @@
1
+ require 'savi-vagrant-notify/utils'
2
+
3
+ module VagrantPlugins
4
+ module SaviVagrantNotify
5
+ module Action
6
+ class StartHostForwarder
7
+ def initialize(app, env)
8
+ @app = app
9
+ end
10
+
11
+ def ensure_binary_downloaded(env)
12
+ os = Utils.parse_os_name `uname -s`
13
+ hardware = Utils.parse_hardware_name `uname -m`
14
+
15
+ env[:ui].error 'SAVI-Vagrant-Notify Unsupported host operating system' if os == :unsupported
16
+ env[:ui].error 'SAVI-Vagrant-Notify Unsupported host hardware' if hardware == :unsupported
17
+
18
+ if os != :unsupported and hardware != :unsupported
19
+ Utils.ensure_binary_downloaded env, os, hardware
20
+ end
21
+ end
22
+
23
+ def start_watcher(env, command)
24
+ pid = Process.spawn command
25
+ Process.detach(pid)
26
+
27
+ pidfile = Utils.host_pidfile env
28
+ pidfile.open('a+') do |f|
29
+ f.write("#{pid}\n")
30
+ end
31
+ end
32
+
33
+ def call(env)
34
+ if env[:machine].config.notify_forwarder.enable
35
+ port = env[:machine].config.notify_forwarder.port
36
+ # env[:machine].config.vm.network :forwarded_port, host: port, guest: port, protocol: 'udp'
37
+ end
38
+
39
+ @app.call env
40
+
41
+ if env[:machine].config.notify_forwarder.enable
42
+ path = ensure_binary_downloaded env
43
+ return unless path
44
+
45
+ address = env[:machine].provider.capability(:public_address)
46
+ env[:machine].config.vm.synced_folders.each do |id, options|
47
+ unless options[:disabled]
48
+ hostpath = File.expand_path(options[:hostpath], env[:root_path])
49
+ guestpath = options[:guestpath]
50
+
51
+ args = "watch -c #{address}:#{port} #{hostpath} #{guestpath}"
52
+ start_watcher env, "#{path} #{args}"
53
+ env[:ui].detail("SAVI-Vagrant-Notify host sending file change notifications to #{address}:#{port}")
54
+ env[:ui].detail("SAVI-Vagrant-Notify host forwarding notifications on #{hostpath} to #{guestpath}")
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,34 @@
1
+ require 'savi-vagrant-notify/utils'
2
+
3
+ module VagrantPlugins
4
+ module SaviVagrantNotify
5
+ module Action
6
+ class StopHostForwarder
7
+ def initialize(app, env)
8
+ @app = app
9
+ end
10
+
11
+ def call(env)
12
+ @app.call env
13
+
14
+ return unless env[:machine].config.notify_forwarder.enable
15
+
16
+ pidfile = Utils.host_pidfile env
17
+
18
+ if File.exists? pidfile
19
+ pidfile.open('r') do |f|
20
+ f.readlines.each do |process|
21
+ pid = process.to_i
22
+ begin
23
+ Process.kill 'TERM', pid
24
+ rescue Errno::ESRCH
25
+ end
26
+ end
27
+ pidfile.delete
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,21 @@
1
+ module VagrantPlugins
2
+ module SaviVagrantNotify
3
+ class Config < Vagrant.plugin(2, :config)
4
+ attr_accessor :port
5
+ attr_accessor :enable
6
+ attr_accessor :run_as_root
7
+
8
+ def initialize
9
+ @port = UNSET_VALUE
10
+ @enable = UNSET_VALUE
11
+ @run_as_root = UNSET_VALUE
12
+ end
13
+
14
+ def finalize!
15
+ @port = 29324 if @port == UNSET_VALUE
16
+ @enable = true if @enable == UNSET_VALUE
17
+ @run_as_root = true if @run_as_root == UNSET_VALUE
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,70 @@
1
+ require 'vagrant'
2
+
3
+ $BOOT_SAVED = false
4
+
5
+ module VagrantPlugins
6
+ module SaviVagrantNotify
7
+ class Plugin < Vagrant.plugin('2')
8
+ name 'savi-vagrant-notify'
9
+ description 'Version of vagrant-notify-forwarder that does not require port forwarding'
10
+
11
+ register_boot_hooks = lambda do |hook|
12
+ require_relative 'action/start_host_forwarder'
13
+ require_relative 'action/start_client_forwarder'
14
+ require_relative 'action/check_boot_state'
15
+
16
+ hook.before VagrantPlugins::ProviderVirtualBox::Action::Resume,
17
+ SaviVagrantNotify::Action::CheckBootState
18
+ hook.after Vagrant::Action::Builtin::Provision,
19
+ SaviVagrantNotify::Action::StartHostForwarder
20
+ hook.after SaviVagrantNotify::Action::StartHostForwarder,
21
+ SaviVagrantNotify::Action::StartClientForwarder
22
+ end
23
+
24
+ register_suspend_hooks = lambda do |hook|
25
+ require_relative 'action/stop_host_forwarder'
26
+
27
+ hook.before VagrantPlugins::ProviderVirtualBox::Action::Suspend,
28
+ SaviVagrantNotify::Action::StopHostForwarder
29
+ end
30
+
31
+ register_resume_hooks = lambda do |hook|
32
+ require_relative 'action/start_host_forwarder'
33
+
34
+ hook.after VagrantPlugins::ProviderVirtualBox::Action::Provision,
35
+ SaviVagrantNotify::Action::StartHostForwarder
36
+ end
37
+
38
+ register_halt_hooks = lambda do |hook|
39
+ require_relative 'action/stop_host_forwarder'
40
+
41
+ hook.before Vagrant::Action::Builtin::GracefulHalt,
42
+ SaviVagrantNotify::Action::StopHostForwarder
43
+ end
44
+
45
+ register_destroy_hooks = lambda do |hook|
46
+ require_relative 'action/stop_host_forwarder'
47
+
48
+ hook.before Vagrant::Action::Builtin::GracefulHalt,
49
+ SaviVagrantNotify::Action::StopHostForwarder
50
+ end
51
+
52
+ config(:notify_forwarder) do
53
+ require_relative 'config'
54
+ Config
55
+ end
56
+
57
+ action_hook :start_notify_forwarder, :machine_action_up, &register_boot_hooks
58
+ action_hook :start_notify_forwarder, :machine_action_reload, &register_boot_hooks
59
+
60
+ action_hook :stop_notify_forwarder, :machine_action_suspend, &register_suspend_hooks
61
+ action_hook :stop_notify_forwarder, :machine_action_resume, &register_resume_hooks
62
+
63
+ action_hook :stop_notify_forwarder, :machine_action_halt, &register_halt_hooks
64
+ action_hook :stop_notify_forwarder, :machine_action_reload, &register_halt_hooks
65
+
66
+ action_hook :stop_notify_forwarder, :machine_action_destroy, &register_destroy_hooks
67
+
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,63 @@
1
+ require 'vagrant/util/downloader'
2
+
3
+ module VagrantPlugins
4
+ module SaviVagrantNotify
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
+ "amd64" => :x86_64,
15
+ }
16
+
17
+ def self.parse_os_name(data)
18
+ @@OS_NAMES[data.strip] or :unsupported
19
+ end
20
+
21
+ def self.parse_hardware_name(data)
22
+ @@HARDWARE_NAMES[data.strip] or :unsupported
23
+ end
24
+
25
+ def self.ensure_binary_downloaded(env, os, hardware)
26
+ download_urls = {
27
+ [:linux, :x86_64] => %w(https://github.com/mhallin/notify-forwarder/releases/download/release/v0.1.1/notify-forwarder_linux_x64
28
+ fc00ce7e30ae87daa10fb3bc4d77e06571998b408ff79a4aef3189f5210dc914),
29
+ [:darwin, :x86_64] => %w(https://github.com/mhallin/notify-forwarder/releases/download/release/v0.1.1/notify-forwarder_osx_x64
30
+ 317f3ffea15393668bf04b128cef1545031eaf306eeb2c4a345a95d8c6e1c941),
31
+ [:freebsd, :x86_64] => %w(https://github.com/mhallin/notify-forwarder/releases/download/release/v0.1.1/notify-forwarder_freebsd_x64
32
+ 082ceac8f5fbda6abc5e2872a6c748241f243f2d780c96d50b3f11f8e96ca65b),
33
+ }
34
+
35
+ url, sha256sum = download_urls[[os, hardware]]
36
+ path = env[:tmp_path].join File.basename(url)
37
+ should_download = true
38
+
39
+ if File.exists? path
40
+ digest = Digest::SHA256.file(path).hexdigest
41
+
42
+ if digest == sha256sum
43
+ should_download = false
44
+ end
45
+ end
46
+
47
+ if should_download
48
+ env[:ui].info 'SAVI-Vagrant-Notify Downloading client'
49
+ downloader = Vagrant::Util::Downloader.new url, path
50
+ downloader.download!
51
+ end
52
+
53
+ File.chmod(0755, path)
54
+
55
+ path
56
+ end
57
+
58
+ def self.host_pidfile(env)
59
+ env[:machine].data_dir.join('notify_watcher_host_pid')
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,5 @@
1
+ module VagrantPlugins
2
+ module SaviVagrantNotify
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,35 @@
1
+ lib = File.expand_path("lib", __dir__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "savi-vagrant-notify/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "savi-vagrant-notify"
7
+ spec.version = VagrantPlugins::SaviVagrantNotify::VERSION
8
+ spec.authors = ["Paul Ward"]
9
+ spec.email = ["pward@savicontrols.com"]
10
+
11
+ spec.summary = "Version of vagrant-notify-forwarder that does not need port forwarding"
12
+ spec.description = spec.summary
13
+ spec.homepage = "https://github.com/pward123/savi-vagrant-notify"
14
+ spec.license = "MIT"
15
+
16
+ # spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
17
+
18
+ spec.metadata["homepage_uri"] = spec.homepage
19
+ spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
20
+ spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
21
+
22
+ # Specify which files should be added to the gem when it is released.
23
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
24
+ # spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
25
+ # `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
26
+ # end
27
+ spec.files = `git ls-files -z`.split("\x0")
28
+
29
+ spec.bindir = "exe"
30
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
+ spec.require_paths = ["lib"]
32
+
33
+ spec.add_development_dependency "bundler", "~> 2.0"
34
+ spec.add_development_dependency "rake", "~> 10.0"
35
+ end
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: savi-vagrant-notify
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Paul Ward
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-10-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: Version of vagrant-notify-forwarder that does not need port forwarding
42
+ email:
43
+ - pward@savicontrols.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - ".gitignore"
49
+ - Gemfile
50
+ - LICENSE.txt
51
+ - README.md
52
+ - Rakefile
53
+ - bin/console
54
+ - bin/setup
55
+ - lib/savi-vagrant-notify.rb
56
+ - lib/savi-vagrant-notify/action/check_boot_state.rb
57
+ - lib/savi-vagrant-notify/action/start_client_forwarder.rb
58
+ - lib/savi-vagrant-notify/action/start_host_forwarder.rb
59
+ - lib/savi-vagrant-notify/action/stop_host_forwarder.rb
60
+ - lib/savi-vagrant-notify/config.rb
61
+ - lib/savi-vagrant-notify/plugin.rb
62
+ - lib/savi-vagrant-notify/utils.rb
63
+ - lib/savi-vagrant-notify/version.rb
64
+ - savi-vagrant-notify.gemspec
65
+ homepage: https://github.com/pward123/savi-vagrant-notify
66
+ licenses:
67
+ - MIT
68
+ metadata:
69
+ homepage_uri: https://github.com/pward123/savi-vagrant-notify
70
+ source_code_uri: 'TODO: Put your gem''s public repo URL here.'
71
+ changelog_uri: 'TODO: Put your gem''s CHANGELOG.md URL here.'
72
+ post_install_message:
73
+ rdoc_options: []
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ requirements: []
87
+ rubyforge_project:
88
+ rubygems_version: 2.5.2.3
89
+ signing_key:
90
+ specification_version: 4
91
+ summary: Version of vagrant-notify-forwarder that does not need port forwarding
92
+ test_files: []