vagrant-notify 0.5.0 → 0.5.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/CHANGELOG.md +10 -0
- data/Gemfile.lock +2 -2
- data/README.md +12 -2
- data/development/Vagrantfile +2 -1
- data/examples/README.md +9 -3
- data/examples/osx/notify-send_growl_for_mac +38 -0
- data/examples/osx/notify-send_terminal-notifier +2 -1
- data/examples/windows/notify-send_growl_for_windows +4 -4
- data/examples/windows/notify-send_snarl +44 -0
- data/files/notify-send.erb +8 -3
- data/lib/vagrant-notify/action/install_command.rb +2 -0
- data/lib/vagrant-notify/action/set_shared_folder.rb +11 -5
- data/lib/vagrant-notify/action/start_server.rb +3 -0
- data/lib/vagrant-notify/action/stop_server.rb +3 -0
- data/lib/vagrant-notify/action.rb +5 -1
- data/lib/vagrant-notify/config.rb +39 -0
- data/lib/vagrant-notify/plugin.rb +11 -0
- data/lib/vagrant-notify/version.rb +1 -1
- data/spec/action/install_command_spec.rb +2 -1
- data/spec/action/start_server_spec.rb +2 -1
- data/spec/action/stop_server_spec.rb +3 -2
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 147e8cd55fe84bc3a668961b660d1390ed5d7e34
|
4
|
+
data.tar.gz: 315a4ec49f89f72c9a73b5ac03df91274ea56289
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed87d3c11b85beea60b89d4d6a7982ccd2f5a93ddafe85497914bce996220b15a6921364d1d9d9e966fda3e84641c71e02eeb53454e5a738bfa220950a1dba1a
|
7
|
+
data.tar.gz: aeb2356140cf699eb676b461ec6e2ba9f972b0f1cded0bce2d1e97988ad8fcaead4fa8d90e584e7fa0f1c7399d724d19f613f5b120781fe8aa2d640a5e36b68c
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,14 @@
|
|
1
|
+
## [0.5.1](https://github.com/fgrehm/vagrant-notify/compare/v0.5.0...v0.5.1) (July 23, 2016)
|
2
|
+
IMPROVEMENTS
|
3
|
+
- New config option to disable plugin. [[GH-6]]
|
4
|
+
- Plugin will automatically be disabled for cloud providers. [[GH-15]]
|
5
|
+
- Solaris 11 and BSD guests are now supported.
|
6
|
+
- Windows snarl wrapper script.
|
7
|
+
- OS X growlnotify 1.2.2 wrapper script.
|
8
|
+
|
9
|
+
BUG FIXES
|
1
10
|
|
11
|
+
- All single quotes that are part of the title or message get removed.
|
2
12
|
|
3
13
|
## [0.5.0](https://github.com/fgrehm/vagrant-notify/compare/v0.4.0...v0.5.0) (June 21, 2016)
|
4
14
|
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -55,14 +55,24 @@ A (too) primitive script integrating with Growl:
|
|
55
55
|
growlnotify -t "Vagrant VM" -m "$*"
|
56
56
|
```
|
57
57
|
|
58
|
-
|
58
|
+
Check out our OS X notify-send compatible [scripts](https://github.com/fgrehm/vagrant-notify/tree/master/examples).
|
59
59
|
|
60
60
|
### Windows (beta)
|
61
61
|
|
62
62
|
You can use the freeware application [notify-send for Windows](http://vaskovsky.net/notify-send/), make sure the notify-send binary is available on `Path`.
|
63
63
|
|
64
|
-
|
64
|
+
Check out our Windows notify-send compatible [scripts](https://github.com/fgrehm/vagrant-notify/tree/master/examples).
|
65
65
|
|
66
|
+
## Configuration
|
67
|
+
|
68
|
+
Notifcation server is enabled by default on all VMs. You can individually disable the plugin by adding the following to your `Vagrantfile`
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
config.notify.enable = false
|
72
|
+
```
|
73
|
+
|
74
|
+
_Please note that as of v0.5.1, the notification server will automatically be disabled for any of the following
|
75
|
+
[cloud providers](lib/vagrant-notify/plugin.rb#L72-74)_
|
66
76
|
|
67
77
|
## Demo
|
68
78
|
|
data/development/Vagrantfile
CHANGED
@@ -5,9 +5,10 @@ Vagrant.require_plugin 'vagrant-notify'
|
|
5
5
|
Vagrant.require_plugin 'vagrant-lxc'
|
6
6
|
|
7
7
|
Vagrant.configure("2") do |config|
|
8
|
-
config.vm.box = "
|
8
|
+
config.vm.box = "ubuntu/trusty64"
|
9
9
|
config.vm.synced_folder "../", "/vagrant", id: 'vagrant-root'
|
10
10
|
|
11
11
|
config.vm.define :vm1
|
12
12
|
config.vm.define :vm2
|
13
|
+
config.notify.enable = true
|
13
14
|
end
|
data/examples/README.md
CHANGED
@@ -3,14 +3,20 @@
|
|
3
3
|
## OS X
|
4
4
|
|
5
5
|
* [terminal-notifier](https://github.com/alloy/terminal-notifier) [wrapper script](https://github.com/fgrehm/vagrant-notify/blob/master/examples/osx/notify-send_terminal-notifier)
|
6
|
+
* [growlnotify](http://growl.info/downloads) [wrapper script](https://github.com/fgrehm/vagrant-notify/blob/master/examples/osx/notify-send_growl_for_mac)
|
6
7
|
|
7
8
|
|
8
9
|
## Windows
|
9
10
|
|
11
|
+
**IMPORTANT:** In addition of `notify-send` being in your `path`, the `notify-send` wrapper script has to be binary executable.
|
12
|
+
Compiling using ocra:
|
13
|
+
|
14
|
+
ocra --output notify-send windows/notify-send_growl_for_snarl
|
15
|
+
|
16
|
+
|
10
17
|
* [Growl for Windows](http://www.growlforwindows.com/gfw/default.aspx) [wrapper script](https://github.com/fgrehm/vagrant-notify/blob/master/examples/windows/notify-send_growl_for_windows)
|
11
18
|
|
12
|
-
|
19
|
+
`growlnotify.exe` needs to be is in your `path`.
|
13
20
|
|
14
|
-
Compiling using ocra:
|
15
21
|
|
16
|
-
|
22
|
+
* [Snarl](http://snarl.fullphat.net/) [wrapper script](https://github.com/fgrehm/vagrant-notify/blob/master/examples/windows/notify-send_snarl)
|
@@ -0,0 +1,38 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# -*- mode: ruby -*-
|
3
|
+
# vi: set ft=ruby :
|
4
|
+
|
5
|
+
# Example OS X growlnotify 1.2.2 notify-send wrapper script.
|
6
|
+
|
7
|
+
require 'optparse'
|
8
|
+
|
9
|
+
|
10
|
+
options = {}
|
11
|
+
OptionParser.new do |opts|
|
12
|
+
opts.on('-u', '--urgency LEVEL') { |v| options[:u] = v } # TO DO: set to --priority
|
13
|
+
opts.on('-t', '--expire-time TIME') { |v| options[:t] = v } # Option gets removed
|
14
|
+
opts.on('-a', '--app-name APP_NAME') { |v| options[:a] = v } # Set to --name
|
15
|
+
opts.on('-i', '--icon ICON[,ICON...]') { |v| options[:i] = v } # Set to --image
|
16
|
+
opts.on('-c', '--category TYPE[,TYPE...]') { |v| options[:c] = v } # Option gets removed
|
17
|
+
opts.on('-h', '--hint TYPE:NAME:VALUE') { |v| options[:h] = v } # Option gets removed
|
18
|
+
opts.on('-v', '--version') { |v| options[:v] = v } # Option gets removed
|
19
|
+
end.parse!
|
20
|
+
|
21
|
+
|
22
|
+
if ARGV.length == 0
|
23
|
+
puts "No summary specified"
|
24
|
+
exit 1
|
25
|
+
elsif ARGV.length == 1
|
26
|
+
message = "--message '#{ARGV[0]}'"
|
27
|
+
message << " --name #{options[:a]}" if options.include?(:a)
|
28
|
+
message << " --image #{options[:i]}" if options.include?(:i)
|
29
|
+
elsif ARGV.length == 2
|
30
|
+
message = "--title '#{ARGV[0]}' --message '#{ARGV[1]}'"
|
31
|
+
message << " --name #{options[:a]}" if options.include?(:a)
|
32
|
+
message << " --image #{options[:i]}" if options.include?(:i)
|
33
|
+
else
|
34
|
+
puts "Invalid number of options."
|
35
|
+
exit 1
|
36
|
+
end
|
37
|
+
|
38
|
+
system("growlnotify #{message} 2>/dev/null")
|
@@ -27,7 +27,8 @@ elsif ARGV.length == 1
|
|
27
27
|
elsif ARGV.length == 2
|
28
28
|
message = "-title '\\#{ARGV[0]}' -message '\\#{ARGV[1]}'"
|
29
29
|
else
|
30
|
-
|
30
|
+
puts "Invalid number of options."
|
31
|
+
exit 1
|
31
32
|
end
|
32
33
|
|
33
34
|
system("terminal-notifier -sound default #{message}")
|
@@ -25,12 +25,12 @@ if ARGV.length == 0
|
|
25
25
|
puts "No summary specified"
|
26
26
|
elsif ARGV.length == 1
|
27
27
|
message = "'#{ARGV[0]}'"
|
28
|
-
system("growlnotify.exe \"#{message}\"")
|
29
28
|
elsif ARGV.length == 2
|
30
29
|
title = "/t:'#{ARGV[0]}'"
|
31
30
|
message = "'#{ARGV[1]}'"
|
32
|
-
system("growlnotify.exe \"#{title}\" \"#{message}\"")
|
33
31
|
else
|
34
|
-
|
35
|
-
|
32
|
+
puts "Invalid number of options."
|
33
|
+
exit 1
|
36
34
|
end
|
35
|
+
|
36
|
+
system("growlnotify.exe \"#{message}\"")
|
@@ -0,0 +1,44 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# -*- mode: ruby -*-
|
3
|
+
# vi: set ft=ruby :
|
4
|
+
|
5
|
+
# Example MS-Windows Snarl SNP/HTTP notify-send wrapper script.
|
6
|
+
|
7
|
+
require 'optparse'
|
8
|
+
require 'uri'
|
9
|
+
require "net/http"
|
10
|
+
|
11
|
+
|
12
|
+
options = {}
|
13
|
+
OptionParser.new do |opts|
|
14
|
+
opts.on('-u', '--urgency LEVEL') { |v| options[:u] = v } # TO DO: set to priority
|
15
|
+
opts.on('-t', '--expire-time TIME') { |v| options[:t] = v } # Set to timeout (notify-send milliseconds to snarl seconds)
|
16
|
+
opts.on('-a', '--app-name APP_NAME') { |v| options[:a] = v } # Option gets removed
|
17
|
+
opts.on('-i', '--icon ICON[,ICON...]') { |v| options[:i] = v } # Option gets removed (Snarl does not properly handle masked git-bash/cygwin absoute paths)
|
18
|
+
opts.on('-c', '--category TYPE[,TYPE...]') { |v| options[:c] = v } # Option gets removed
|
19
|
+
opts.on('-h', '--hint TYPE:NAME:VALUE') { |v| options[:h] = v } # Option gets removed
|
20
|
+
opts.on('-v', '--version') { |v| options[:v] = v } # Option gets removed
|
21
|
+
end.parse!
|
22
|
+
|
23
|
+
|
24
|
+
if ARGV.length == 0
|
25
|
+
puts "No summary specified"
|
26
|
+
exit 1
|
27
|
+
elsif ARGV.length == 1
|
28
|
+
message = "notify?text='#{ARGV[0]}'"
|
29
|
+
message << "&timeout=#{options[:t].to_i / 1000}'" if options.include?(:t)
|
30
|
+
elsif ARGV.length == 2
|
31
|
+
message = "notify?title='#{ARGV[0]}'&text='#{ARGV[1]}'"
|
32
|
+
message << "&timeout=#{options[:t].to_i / 1000}'" if options.include?(:t)
|
33
|
+
else
|
34
|
+
puts "Invalid number of options."
|
35
|
+
exit 1
|
36
|
+
end
|
37
|
+
|
38
|
+
enc_uri = URI.escape(message)
|
39
|
+
uri = URI.parse("http://127.0.0.1/#{enc_uri}")
|
40
|
+
#puts uri
|
41
|
+
|
42
|
+
Net::HTTP.get_response(uri)
|
43
|
+
|
44
|
+
|
data/files/notify-send.erb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#!/usr/bin/ruby
|
1
|
+
#!/usr/bin/env ruby
|
2
2
|
# -*- mode: ruby -*-
|
3
3
|
# vi: set ft=ruby :
|
4
4
|
|
@@ -36,10 +36,15 @@ end.join(' ')
|
|
36
36
|
|
37
37
|
# TODO: Need to escape values
|
38
38
|
unless ARGV.empty?
|
39
|
-
cmd << ARGV.map{|a| " '#{a}'"}.join(' ')
|
39
|
+
cmd << ARGV.map{|a| " '#{a.gsub(/'/, "")}'"}.join(' ')
|
40
|
+
end
|
41
|
+
|
42
|
+
if RUBY_PLATFORM =~ /linux/
|
43
|
+
client_ip = `ip route|awk '/default/ {print $3}'`
|
44
|
+
elsif RUBY_PLATFORM =~ /solaris|freebsd|openbsd|netbsd/
|
45
|
+
client_ip = `netstat -r|awk '/default/ {print $2}'`
|
40
46
|
end
|
41
47
|
|
42
|
-
client_ip = `ip route|grep default|awk '{print $3}'`
|
43
48
|
TCPSocket.open client_ip, <%= host_port %> do |s|
|
44
49
|
s.send cmd, 0
|
45
50
|
end
|
@@ -6,11 +6,17 @@ module Vagrant
|
|
6
6
|
@app = app
|
7
7
|
end
|
8
8
|
|
9
|
-
def call(env)
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
def call(env)
|
10
|
+
begin
|
11
|
+
unless env[:machine].config.notify.enable == false
|
12
|
+
host_dir = Pathname("/tmp/vagrant-notify/#{env[:machine].id}")
|
13
|
+
FileUtils.mkdir_p host_dir.to_s unless host_dir.exist?
|
14
|
+
env[:machine].config.vm.synced_folder host_dir, "/tmp/vagrant-notify", id: "vagrant-notify"
|
15
|
+
end
|
16
|
+
@app.call(env)
|
17
|
+
rescue
|
18
|
+
env[:machine].ui.warn("vagrant-notify: guest does not support the shared folder capability.")
|
19
|
+
end
|
14
20
|
end
|
15
21
|
end
|
16
22
|
end
|
@@ -17,6 +17,8 @@ module Vagrant
|
|
17
17
|
port = next_available_port
|
18
18
|
id = env[:machine].id
|
19
19
|
dir = File.expand_path('../../', __FILE__)
|
20
|
+
|
21
|
+
return if env[:machine].config.notify.enable == false
|
20
22
|
|
21
23
|
if which('ruby')
|
22
24
|
env[:notify_data][:pid] = Process.spawn("ruby #{dir}/server.rb #{id} #{port}")
|
@@ -29,6 +31,7 @@ module Vagrant
|
|
29
31
|
end
|
30
32
|
|
31
33
|
@app.call env
|
34
|
+
|
32
35
|
end
|
33
36
|
|
34
37
|
def next_available_port
|
@@ -7,6 +7,9 @@ module Vagrant
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def call(env)
|
10
|
+
|
11
|
+
return if env[:machine].config.notify.enable == false
|
12
|
+
|
10
13
|
if env[:machine].state.id == :running
|
11
14
|
env[:machine].communicate.sudo('rm /usr/bin/notify-send; exit 0')
|
12
15
|
env[:machine].communicate.sudo('mv /usr/bin/{notify-send.bkp,notify-send}; exit 0')
|
@@ -63,7 +63,11 @@ module Vagrant
|
|
63
63
|
if env2[:result]
|
64
64
|
env[:machine].ui.success("vagrant-notify-server pid: #{env2[:notify_data][:pid]}")
|
65
65
|
else
|
66
|
-
env[:machine].
|
66
|
+
if env[:machine].config.notify.enable == false
|
67
|
+
env[:machine].ui.error("No vagrant-notify server detected. Disabled in Vagrantfile")
|
68
|
+
else
|
69
|
+
env[:machine].ui.error("No vagrant-notify server detected.")
|
70
|
+
end
|
67
71
|
end
|
68
72
|
end
|
69
73
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Vagrant
|
2
|
+
module Notify
|
3
|
+
class Config < Vagrant.plugin(2, :config)
|
4
|
+
attr_accessor :enable
|
5
|
+
|
6
|
+
def initialize()
|
7
|
+
@enable = UNSET_VALUE
|
8
|
+
end
|
9
|
+
|
10
|
+
def validate(machine)
|
11
|
+
errors = _detected_errors
|
12
|
+
|
13
|
+
if backed_by_cloud_provider?(machine)
|
14
|
+
machine.ui.warn("Disabling vagrant-notify, cloud provider #{machine.provider_name} in use.")
|
15
|
+
|
16
|
+
@enable = false
|
17
|
+
end
|
18
|
+
|
19
|
+
if @enable != 0
|
20
|
+
if @enable != false && @enable != true
|
21
|
+
errors << "Unknown option: #{@enable}"
|
22
|
+
|
23
|
+
{ "notify" => errors }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def finalize!
|
29
|
+
@enable = 0 if @enable == UNSET_VALUE
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def backed_by_cloud_provider?(machine)
|
35
|
+
CLOUD_PROVIDERS.include?(machine.provider_name.to_s)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -59,6 +59,17 @@ module Vagrant
|
|
59
59
|
require_relative 'command'
|
60
60
|
Vagrant::Notify::Command
|
61
61
|
end
|
62
|
+
|
63
|
+
config(:notify) do
|
64
|
+
require_relative 'config'
|
65
|
+
Vagrant::Notify::Config
|
66
|
+
end
|
62
67
|
end
|
63
68
|
end
|
69
|
+
|
70
|
+
# Keep an eye on https://github.com/mitchellh/vagrant/wiki/Available-Vagrant-Plugins#wiki-providers
|
71
|
+
# for more.
|
72
|
+
CLOUD_PROVIDERS = %w( aws cloudstack digital_ocean hp joyent openstack rackspace
|
73
|
+
softlayer proxmox managed azure brightbox cloudstack vcloud
|
74
|
+
vsphere )
|
64
75
|
end
|
@@ -5,9 +5,10 @@ require 'vagrant-notify/action/install_command'
|
|
5
5
|
|
6
6
|
describe Vagrant::Notify::Action::InstallCommand do
|
7
7
|
let(:app) { lambda { |env| } }
|
8
|
+
let(:config) { mock(notify: stub(enable: true)) }
|
8
9
|
let(:env) { {notify_data: {port: host_port}, machine: machine, tmp_path: tmp_path} }
|
9
10
|
let(:host_port) { 12345 }
|
10
|
-
let(:machine) { mock(communicate: communicator) }
|
11
|
+
let(:machine) { mock(communicate: communicator, config: config) }
|
11
12
|
let(:communicator) { mock(upload: true, sudo: true) }
|
12
13
|
let(:host_ip) { '192.168.1.2' }
|
13
14
|
let(:tmp_path) { Pathname.new(Dir.mktmpdir) }
|
@@ -6,9 +6,10 @@ require 'vagrant-notify/server'
|
|
6
6
|
|
7
7
|
describe Vagrant::Notify::Action::StartServer do
|
8
8
|
let(:app) { lambda { |env| } }
|
9
|
+
let(:config) { mock(notify: stub(enable: true)) }
|
9
10
|
let(:ui) { mock(success: true)}
|
10
11
|
let(:id) { '425e799c-1293-4939-bo39-263lcc7457e8' }
|
11
|
-
let(:machine) { mock(state: stub(id: :stopped), ui: ui, id: id) }
|
12
|
+
let(:machine) { mock(state: stub(id: :stopped), ui: ui, id: id, config: config) }
|
12
13
|
let(:env) { {notify_data: {}, machine: machine} }
|
13
14
|
let(:pid) { '42' }
|
14
15
|
let(:port) { '1234' }
|
@@ -4,9 +4,10 @@ require 'vagrant-notify/action/stop_server'
|
|
4
4
|
|
5
5
|
describe Vagrant::Notify::Action::StopServer do
|
6
6
|
let(:app) { lambda { |env| } }
|
7
|
+
let(:config) { mock(notify: stub(enable: true)) }
|
7
8
|
let(:communicator) { mock(sudo: true) }
|
8
|
-
let(:ui) { mock(success: true)}
|
9
|
-
let(:machine) { mock(communicate: communicator, state: stub(id: :running), ui: ui) }
|
9
|
+
let(:ui) { mock(success: true) }
|
10
|
+
let(:machine) { mock(communicate: communicator, state: stub(id: :running), ui: ui, config: config) }
|
10
11
|
let(:env) { {notify_data: {pid: pid, port: 1234}, machine: machine} }
|
11
12
|
let(:pid) { '42' }
|
12
13
|
let(:port) { described_class::PORT }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-notify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fabio Rehm
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-07-23 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: A Vagrant plugin that forwards `notify-send` from guest to host machine
|
15
15
|
and notifies provisioning status
|
@@ -32,8 +32,10 @@ files:
|
|
32
32
|
- Rakefile
|
33
33
|
- development/Vagrantfile
|
34
34
|
- examples/README.md
|
35
|
+
- examples/osx/notify-send_growl_for_mac
|
35
36
|
- examples/osx/notify-send_terminal-notifier
|
36
37
|
- examples/windows/notify-send_growl_for_windows
|
38
|
+
- examples/windows/notify-send_snarl
|
37
39
|
- files/notify-send.erb
|
38
40
|
- lib/vagrant-notify.rb
|
39
41
|
- lib/vagrant-notify/action.rb
|
@@ -47,6 +49,7 @@ files:
|
|
47
49
|
- lib/vagrant-notify/action/stop_server.rb
|
48
50
|
- lib/vagrant-notify/action/windows/process_info.rb
|
49
51
|
- lib/vagrant-notify/command.rb
|
52
|
+
- lib/vagrant-notify/config.rb
|
50
53
|
- lib/vagrant-notify/data.rb
|
51
54
|
- lib/vagrant-notify/plugin.rb
|
52
55
|
- lib/vagrant-notify/server.rb
|