vagrant-notify 0.5.1 → 0.5.2
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 +16 -3
- data/Gemfile +0 -1
- data/Gemfile.lock +2 -9
- data/README.md +27 -7
- data/development/Vagrantfile +1 -0
- data/files/notify-send.erb +20 -11
- data/lib/vagrant-notify/action.rb +10 -2
- data/lib/vagrant-notify/action/install_command.rb +2 -1
- data/lib/vagrant-notify/action/start_server.rb +8 -6
- data/lib/vagrant-notify/config.rb +25 -3
- data/lib/vagrant-notify/plugin.rb +32 -19
- data/lib/vagrant-notify/server.rb +8 -3
- data/lib/vagrant-notify/version.rb +1 -1
- data/spec/action/install_command_spec.rb +4 -2
- data/spec/action/start_server_spec.rb +9 -8
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ada78d8b90c45702484b19524bd6dcaa04c34de2
|
4
|
+
data.tar.gz: 506699d1e51e71f78b7e1ee673434d2220099bd4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f04ded61ee31fafbae3051584f777e040caffecc3b5d3743f27b7f67c54f57af5b6e776d891b8661fd5245a009dedaeea855fdd93be5a1bbf5572a566d262a9a
|
7
|
+
data.tar.gz: 63e64ff01e18fa9b26e904759d19aa2f8551872d9f18d8b1c1350b349a2ffb0e73d533976f99760c3e39da04f80eead0d5f062b16dfa97b9de7f045f0dc652ad
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,20 @@
|
|
1
|
+
## [0.5.2](https://github.com/fgrehm/vagrant-notify/compare/v0.5.1...v0.5.2) (October 7, 2016)
|
2
|
+
IMPROVEMENTS
|
3
|
+
|
4
|
+
- Support for docker, lxc, parrallels, and vmware fusion providers. [[GH-13]](https://github.com/fgrehm/vagrant-notify/issues/13)
|
5
|
+
- More reliable notification server status notices.
|
6
|
+
- New `bind_ip` configuration option.
|
7
|
+
|
8
|
+
BUG FIXES
|
9
|
+
|
10
|
+
- `vagrant destroy` on a running guest will now also stop the notfication server.
|
11
|
+
|
12
|
+
|
1
13
|
## [0.5.1](https://github.com/fgrehm/vagrant-notify/compare/v0.5.0...v0.5.1) (July 23, 2016)
|
2
14
|
IMPROVEMENTS
|
3
|
-
|
4
|
-
-
|
15
|
+
|
16
|
+
- New config option to disable plugin. [[GH-6]](https://github.com/fgrehm/vagrant-notify/issues/6)
|
17
|
+
- Plugin will automatically be disabled for cloud providers. [[GH-15]](https://github.com/fgrehm/vagrant-notify/issues/15)
|
5
18
|
- Solaris 11 and BSD guests are now supported.
|
6
19
|
- Windows snarl wrapper script.
|
7
20
|
- OS X growlnotify 1.2.2 wrapper script.
|
@@ -16,7 +29,7 @@ IMPROVEMENTS
|
|
16
29
|
|
17
30
|
- Notification server runs as a daemon (fork() has been removed so it's compatible with Windows). [[GH-14]]
|
18
31
|
- Windows support (beta) [[GH-14]]
|
19
|
-
- Notification server is available
|
32
|
+
- Notification server is only available to localhost.
|
20
33
|
- Notification server information is displayed each time vagrant is started and halted.
|
21
34
|
- New plugin command. Ability to view notification server status, and ability for manual restart. [CLI](https://gist.github.com/alpha01/9b81caca694a2735e658f978c41600b5)
|
22
35
|
- New notify-send example scripts for OS X and Windows
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,9 +1,3 @@
|
|
1
|
-
GIT
|
2
|
-
remote: git://github.com/fgrehm/vagrant-lxc.git
|
3
|
-
revision: 4a84d95ff26bf2d887b127765a9ae404899734f9
|
4
|
-
specs:
|
5
|
-
vagrant-lxc (0.8.1.dev)
|
6
|
-
|
7
1
|
GIT
|
8
2
|
remote: git://github.com/mitchellh/vagrant.git
|
9
3
|
revision: e3734a7a46c39cd73e79538980dd98aeaeca9656
|
@@ -19,7 +13,7 @@ GIT
|
|
19
13
|
PATH
|
20
14
|
remote: .
|
21
15
|
specs:
|
22
|
-
vagrant-notify (0.5.
|
16
|
+
vagrant-notify (0.5.2)
|
23
17
|
|
24
18
|
GEM
|
25
19
|
remote: https://rubygems.org/
|
@@ -87,8 +81,7 @@ DEPENDENCIES
|
|
87
81
|
rspec (~> 2.13.0)
|
88
82
|
rspec-spies
|
89
83
|
vagrant!
|
90
|
-
vagrant-lxc!
|
91
84
|
vagrant-notify!
|
92
85
|
|
93
86
|
BUNDLED WITH
|
94
|
-
1.
|
87
|
+
1.13.0
|
data/README.md
CHANGED
@@ -22,7 +22,7 @@ $ vagrant plugin install vagrant-notify
|
|
22
22
|
|
23
23
|
Whenever you run `vagrant up`, a Ruby [TCPServer](http://www.ruby-doc.org/stdlib-1.9.3/libdoc/socket/rdoc/TCPServer.html)
|
24
24
|
will fire up on a port within the [usable port range](https://github.com/mitchellh/vagrant/blob/master/config/default.rb#L14)
|
25
|
-
and a [script](https://github.com/fgrehm/vagrant-notify/blob/master/files/notify-send.erb)
|
25
|
+
and a Ruby [script](https://github.com/fgrehm/vagrant-notify/blob/master/files/notify-send.erb)
|
26
26
|
will be copied over to the guest machine to replace the original `notify-send`
|
27
27
|
command.
|
28
28
|
|
@@ -36,7 +36,6 @@ notifications like:
|
|
36
36
|
|
37
37
|

|
38
38
|
|
39
|
-
|
40
39
|
### Linux
|
41
40
|
|
42
41
|
Since Linux distributions have `notify-send` pre-installed, everything should work out of the box.
|
@@ -55,24 +54,46 @@ A (too) primitive script integrating with Growl:
|
|
55
54
|
growlnotify -t "Vagrant VM" -m "$*"
|
56
55
|
```
|
57
56
|
|
58
|
-
Check out our OS X notify-send compatible [scripts](https://github.com/fgrehm/vagrant-notify/tree/master/examples).
|
57
|
+
Check out our OS X notify-send compatible [scripts](https://github.com/fgrehm/vagrant-notify/tree/master/examples#os-x).
|
59
58
|
|
60
59
|
### Windows (beta)
|
61
60
|
|
62
61
|
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
62
|
|
64
|
-
Check out our Windows notify-send compatible [scripts](https://github.com/fgrehm/vagrant-notify/tree/master/examples).
|
63
|
+
Check out our Windows notify-send compatible [scripts](https://github.com/fgrehm/vagrant-notify/tree/master/examples#windows).
|
65
64
|
|
66
65
|
## Configuration
|
67
66
|
|
68
|
-
|
67
|
+
Notification server is enabled by default on all guests. You can individually disable the plugin by adding the following to your `Vagrantfile`
|
69
68
|
|
70
69
|
```ruby
|
71
70
|
config.notify.enable = false
|
72
71
|
```
|
73
72
|
|
74
73
|
_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#
|
74
|
+
[cloud providers](lib/vagrant-notify/plugin.rb#L77-L79)._
|
75
|
+
|
76
|
+
By default, the notification server is binded to [local interfaces](lib/vagrant-notify/plugin.rb#L82-L86). For networking different than your provider's default network configuration, you can use the *bind_ip* configuration option to bind the notification server onto a different local ip address.
|
77
|
+
|
78
|
+
```ruby
|
79
|
+
config.notify.bind_ip = "192.68.56.20"
|
80
|
+
```
|
81
|
+
|
82
|
+
**WARNING**
|
83
|
+
|
84
|
+
_Do **NOT** bind the notification server to an IP accessible over a network! The notification server does not have any authentication and doing so will leave your system vulnerable to remote command execution._
|
85
|
+
|
86
|
+
### Providers and Guests
|
87
|
+
|
88
|
+
vagrant-notify supports the following providers:
|
89
|
+
|
90
|
+
- VirtualBox
|
91
|
+
- Docker
|
92
|
+
- [LXC](https://github.com/fgrehm/vagrant-lxc)
|
93
|
+
- [Parallels](https://github.com/Parallels/vagrant-parallels)
|
94
|
+
- [VMWare Fusion](https://www.vagrantup.com/vmware)
|
95
|
+
|
96
|
+
vagrant-notify has been tested and known to work with Linux, Solaris 11, FreeBSD, OpenBSD, and NetBSD guests. (notify-send icon forwarding feature is not supported on BSD guests)
|
76
97
|
|
77
98
|
## Demo
|
78
99
|
|
@@ -83,7 +104,6 @@ _Please note that as of v0.5.1, the notification server will automatically be di
|
|
83
104
|
|
84
105
|
## Known issues
|
85
106
|
|
86
|
-
* `vagrant destroy` on a running VM will not stop the notification server.
|
87
107
|
* On rare occasions the notification server may stop receiving notifications if the host is suspended/hibernates. The notification server may need to be manually restarted if that's the case. `vagrant notify --restart`
|
88
108
|
|
89
109
|
|
data/development/Vagrantfile
CHANGED
data/files/notify-send.erb
CHANGED
@@ -2,8 +2,7 @@
|
|
2
2
|
# -*- mode: ruby -*-
|
3
3
|
# vi: set ft=ruby :
|
4
4
|
|
5
|
-
# This is the wrapper around
|
6
|
-
# when sending notifications
|
5
|
+
# This is the wrapper around notify-send that connects to the host machine when sending notifications.
|
7
6
|
|
8
7
|
require 'rubygems'
|
9
8
|
require 'socket'
|
@@ -24,27 +23,37 @@ OptionParser.new do |opts|
|
|
24
23
|
|
25
24
|
end.parse!
|
26
25
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
26
|
+
# BSD guests do not support shared folders
|
27
|
+
unless RUBY_PLATFORM =~ /freebsd|openbsd|netbsd/
|
28
|
+
if options[:i]
|
29
|
+
new_filename = options[:i].gsub('/', '-')
|
30
|
+
FileUtils.cp options[:i], "<%= shared_folder %>/#{new_filename}"
|
31
|
+
options[:i] = new_filename
|
32
|
+
end
|
31
33
|
end
|
32
34
|
|
33
35
|
cmd = options.map do |key, value|
|
34
36
|
"-#{key} '#{value}'"
|
35
37
|
end.join(' ')
|
36
38
|
|
37
|
-
#
|
39
|
+
# All single quotes part of the message get removed.
|
40
|
+
# TODO: Need to escape values.
|
38
41
|
unless ARGV.empty?
|
39
42
|
cmd << ARGV.map{|a| " '#{a.gsub(/'/, "")}'"}.join(' ')
|
40
43
|
end
|
41
44
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
45
|
+
# VirtualBox is the only provider that can communicate with 127.0.0.1, others will have to use default private networking
|
46
|
+
if "<%= provider_name %>" == "virtualbox"
|
47
|
+
if RUBY_PLATFORM =~ /linux/
|
48
|
+
client_ip = `ip route|awk '/default/ {print $3}'`
|
49
|
+
elsif RUBY_PLATFORM =~ /solaris|freebsd|openbsd|netbsd/
|
50
|
+
client_ip = `netstat -r|awk '/default/ {print $2}'`
|
51
|
+
end
|
52
|
+
else
|
53
|
+
client_ip = "<%= client_ip %>"
|
46
54
|
end
|
47
55
|
|
56
|
+
|
48
57
|
TCPSocket.open client_ip, <%= host_port %> do |s|
|
49
58
|
s.send cmd, 0
|
50
59
|
end
|
@@ -21,11 +21,19 @@ module Vagrant
|
|
21
21
|
b2.use PrepareData
|
22
22
|
b2.use Call, ServerIsRunning do |env2, b3|
|
23
23
|
if env2[:result]
|
24
|
-
|
24
|
+
env[:machine].ui.success("vagrant-notify-server pid: #{env2[:notify_data][:pid]}")
|
25
25
|
else
|
26
26
|
# TODO: b3.use CheckServerPortCollision
|
27
27
|
b3.use StartServer
|
28
|
-
|
28
|
+
|
29
|
+
b3.use PrepareData
|
30
|
+
b3.use Call, ServerIsRunning do |env3, b4|
|
31
|
+
if env3[:result]
|
32
|
+
env3[:machine].ui.success("vagrant-notify-server pid: #{env3[:notify_data][:pid]}")
|
33
|
+
else
|
34
|
+
env3[:machine].ui.error("Unable to start notification server using #{env3[:machine].config.notify.bind_ip}")
|
35
|
+
end
|
36
|
+
end
|
29
37
|
end
|
30
38
|
# Always install the command to make sure we can fix stale ips
|
31
39
|
# on the guest machine
|
@@ -19,7 +19,8 @@ module Vagrant
|
|
19
19
|
|
20
20
|
def compile_command(env, template_file)
|
21
21
|
host_port = env[:notify_data][:port]
|
22
|
-
|
22
|
+
provider_name = env[:machine].provider_name
|
23
|
+
template_binding = OpenStruct.new(:host_port => host_port, :shared_folder => '/tmp/vagrant-notify', :provider_name => provider_name, :client_ip => env[:machine].config.notify.bind_ip)
|
23
24
|
command_template = ERB.new(Vagrant::Notify.files_path.join(template_file).read)
|
24
25
|
command = command_template.result(template_binding.instance_eval { binding })
|
25
26
|
|
@@ -14,18 +14,20 @@ module Vagrant
|
|
14
14
|
def call(env)
|
15
15
|
@env = env
|
16
16
|
|
17
|
-
port = next_available_port
|
18
17
|
id = env[:machine].id
|
18
|
+
provider_name = env[:machine].provider_name
|
19
19
|
dir = File.expand_path('../../', __FILE__)
|
20
20
|
|
21
21
|
return if env[:machine].config.notify.enable == false
|
22
22
|
|
23
|
+
port = next_available_port(env[:machine].config.notify.bind_ip)
|
24
|
+
|
23
25
|
if which('ruby')
|
24
|
-
env[:notify_data][:pid] = Process.spawn("ruby #{dir}/server.rb #{id} #{port}")
|
26
|
+
env[:notify_data][:pid] = Process.spawn("ruby #{dir}/server.rb #{id} #{port} #{env[:machine].config.notify.bind_ip} #{provider_name}")
|
25
27
|
env[:notify_data][:port] = port
|
26
28
|
|
27
|
-
env[:machine].ui.success("Started vagrant-notify-server pid: #{env[:notify_data][:pid]}")
|
28
29
|
sleep 5
|
30
|
+
Process.detach(env[:notify_data][:pid].to_i)
|
29
31
|
else
|
30
32
|
env[:machine].ui.error("Unable to spawn TCPServer daemon, ruby not found in $PATH")
|
31
33
|
end
|
@@ -34,7 +36,7 @@ module Vagrant
|
|
34
36
|
|
35
37
|
end
|
36
38
|
|
37
|
-
def next_available_port
|
39
|
+
def next_available_port(bind_ip)
|
38
40
|
# Determine a list of usable ports for us to use
|
39
41
|
usable_ports = Set.new(@env[:machine].config.vm.usable_port_range)
|
40
42
|
|
@@ -46,7 +48,7 @@ module Vagrant
|
|
46
48
|
# Pass two, remove ports used by other processes
|
47
49
|
with_forwarded_ports do |options|
|
48
50
|
host_port = options[:host]
|
49
|
-
usable_ports.delete(options[:host]) if is_port_open?(
|
51
|
+
usable_ports.delete(options[:host]) if is_port_open?(bind_ip, host_port)
|
50
52
|
end
|
51
53
|
|
52
54
|
# If we have no usable ports then we can't use the plugin
|
@@ -56,7 +58,7 @@ module Vagrant
|
|
56
58
|
# will use the first as in:
|
57
59
|
# https://github.com/mitchellh/vagrant/blob/master/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb#L84
|
58
60
|
usable_ports.to_a.sort.reverse.find do |port|
|
59
|
-
return port unless is_port_open?(
|
61
|
+
return port unless is_port_open?(bind_ip, port)
|
60
62
|
end
|
61
63
|
end
|
62
64
|
|
@@ -1,10 +1,11 @@
|
|
1
1
|
module Vagrant
|
2
2
|
module Notify
|
3
3
|
class Config < Vagrant.plugin(2, :config)
|
4
|
-
attr_accessor :enable
|
4
|
+
attr_accessor :enable, :bind_ip
|
5
5
|
|
6
6
|
def initialize()
|
7
|
-
@enable
|
7
|
+
@enable = UNSET_VALUE
|
8
|
+
@bind_ip = UNSET_VALUE
|
8
9
|
end
|
9
10
|
|
10
11
|
def validate(machine)
|
@@ -19,14 +20,32 @@ module Vagrant
|
|
19
20
|
if @enable != 0
|
20
21
|
if @enable != false && @enable != true
|
21
22
|
errors << "Unknown option: #{@enable}"
|
23
|
+
end
|
24
|
+
end
|
22
25
|
|
23
|
-
|
26
|
+
if backed_by_supported_provider?(machine)
|
27
|
+
if @bind_ip.is_a?(String)
|
28
|
+
require "resolv"
|
29
|
+
unless @bind_ip =~ Resolv::IPv4::Regex
|
30
|
+
errors << "Invalid bind IP address: #{@bind_ip}"
|
31
|
+
end
|
32
|
+
elsif @bind_ip.is_a?(FalseClass) || @bind_ip.is_a?(Fixnum) || @bind_ip.is_a?(Array) || @bind_ip.is_a?(Hash)
|
33
|
+
errors << "Unknown bind IP address: #{@bind_ip}"
|
34
|
+
else
|
35
|
+
@bind_ip = SUPPORTED_PROVIDERS[machine.provider_name]
|
24
36
|
end
|
37
|
+
else
|
38
|
+
machine.ui.warn("#{machine.provider_name.to_s} provider is not supported by vagrant-notify. Please feel free to open a new issue https://github.com/fgrehm/vagrant-notify/issues")
|
39
|
+
|
40
|
+
@enable = false
|
25
41
|
end
|
42
|
+
|
43
|
+
{ "notify" => errors }
|
26
44
|
end
|
27
45
|
|
28
46
|
def finalize!
|
29
47
|
@enable = 0 if @enable == UNSET_VALUE
|
48
|
+
@bind_ip = @bind_ip if @bind_ip == UNSET_VALUE
|
30
49
|
end
|
31
50
|
|
32
51
|
private
|
@@ -34,6 +53,9 @@ module Vagrant
|
|
34
53
|
def backed_by_cloud_provider?(machine)
|
35
54
|
CLOUD_PROVIDERS.include?(machine.provider_name.to_s)
|
36
55
|
end
|
56
|
+
def backed_by_supported_provider?(machine)
|
57
|
+
SUPPORTED_PROVIDERS.has_key?(machine.provider_name)
|
58
|
+
end
|
37
59
|
end
|
38
60
|
end
|
39
61
|
end
|
@@ -9,16 +9,9 @@ module Vagrant
|
|
9
9
|
hook.before :run_provisioner, Vagrant::Notify::Action::NotifyProvisioningStatus
|
10
10
|
end
|
11
11
|
|
12
|
-
# TODO: This should be generic, we don't want to hard code every single
|
13
|
-
# possible provider action class that Vagrant might have
|
14
12
|
start_server_hook = lambda do |hook|
|
15
13
|
require_relative './action'
|
16
|
-
hook.after
|
17
|
-
|
18
|
-
if defined?(Vagrant::LXC)
|
19
|
-
require 'vagrant-lxc/action'
|
20
|
-
hook.after Vagrant::LXC::Action::Boot, Vagrant::Notify::Action.action_start_server
|
21
|
-
end
|
14
|
+
hook.after Vagrant::Action::Builtin::WaitForCommunicator, Vagrant::Notify::Action.action_start_server
|
22
15
|
end
|
23
16
|
|
24
17
|
action_hook 'start-server-after-boot-on-machine-up', :machine_action_up, &start_server_hook
|
@@ -35,24 +28,37 @@ module Vagrant
|
|
35
28
|
action_hook 'stop-server-after-halt', :machine_action_halt do |hook|
|
36
29
|
require_relative './action'
|
37
30
|
hook.before Vagrant::Action::Builtin::GracefulHalt, Vagrant::Notify::Action.action_stop_server
|
38
|
-
end
|
39
31
|
|
32
|
+
# Docker doesn't do a graceful halt
|
33
|
+
hook.before VagrantPlugins::DockerProvider::Action::Stop, Vagrant::Notify::Action.action_stop_server
|
34
|
+
end
|
40
35
|
|
41
|
-
# TODO: This should be generic, we don't want to hard code every single
|
42
|
-
# possible provider action class that Vagrant might have
|
43
36
|
action_hook 'stop-server-before-destroy', :machine_action_destroy do |hook|
|
44
37
|
require_relative './action'
|
45
|
-
hook.before
|
46
|
-
|
47
|
-
if defined?(Vagrant::LXC)
|
48
|
-
require 'vagrant-lxc/action'
|
49
|
-
hook.before Vagrant::LXC::Action::Destroy, Vagrant::Notify::Action.action_stop_server
|
50
|
-
end
|
38
|
+
hook.before Vagrant::Action::Builtin::DestroyConfirm, Vagrant::Notify::Action.action_stop_server
|
51
39
|
end
|
52
40
|
|
41
|
+
# There isn't a Vagrant Action Bulitin module for suspend operations.
|
42
|
+
# Suspend class is implemented at the individual provider plugin level, therefore need to list them here.
|
53
43
|
action_hook 'stop-server-after-suspend', :machine_action_suspend do |hook|
|
54
44
|
require_relative './action'
|
45
|
+
# Vagrant's default providers: (Docker does not suport suspend)
|
55
46
|
hook.before VagrantPlugins::ProviderVirtualBox::Action::Suspend, Vagrant::Notify::Action.action_stop_server
|
47
|
+
hook.before VagrantPlugins::HyperV::Action::SuspendVM, Vagrant::Notify::Action.action_stop_server
|
48
|
+
|
49
|
+
# Third party provider plugins:
|
50
|
+
if defined?(HashiCorp::VagrantVMwarefusion)
|
51
|
+
require 'vagrant-parallels/action'
|
52
|
+
hook.before HashiCorp::VagrantVMwarefusion::Action::Suspend, Vagrant::Notify::Action.action_stop_server
|
53
|
+
end
|
54
|
+
if defined?(VagrantPlugins::Parallels)
|
55
|
+
require 'vagrant-parallels/action'
|
56
|
+
hook.before VagrantPlugins::Parallels::Action::Suspend, Vagrant::Notify::Action.action_stop_server
|
57
|
+
end
|
58
|
+
if defined?(VagrantPlugins::AppCatalyst)
|
59
|
+
require 'vagrant-vmware-appcatalyst/action'
|
60
|
+
hook.before VagrantPlugins::AppCatalyst::Action::Suspend, Vagrant::Notify::Action.action_stop_server
|
61
|
+
end
|
56
62
|
end
|
57
63
|
|
58
64
|
command(:notify) do
|
@@ -67,9 +73,16 @@ module Vagrant
|
|
67
73
|
end
|
68
74
|
end
|
69
75
|
|
70
|
-
# Keep an eye on https://github.com/mitchellh/vagrant/wiki/Available-Vagrant-Plugins#wiki-providers
|
71
|
-
# for more.
|
76
|
+
# Keep an eye on https://github.com/mitchellh/vagrant/wiki/Available-Vagrant-Plugins#wiki-providers for more.
|
72
77
|
CLOUD_PROVIDERS = %w( aws cloudstack digital_ocean hp joyent openstack rackspace
|
73
78
|
softlayer proxmox managed azure brightbox cloudstack vcloud
|
74
79
|
vsphere )
|
80
|
+
|
81
|
+
# Supported providers and default IPs used to bind the notifcation server too.
|
82
|
+
SUPPORTED_PROVIDERS = { :virtualbox => '127.0.0.1',
|
83
|
+
:docker => '172.17.0.1',
|
84
|
+
:lxc => '10.0.3.1',
|
85
|
+
:parallels => '10.211.55.2',
|
86
|
+
:vmware_fusion => '192.168.172.1'
|
87
|
+
}
|
75
88
|
end
|
@@ -5,13 +5,17 @@ module Vagrant
|
|
5
5
|
class Server
|
6
6
|
HTTP_RESPONSE = "Hi! You just reached the vagrant notification server"
|
7
7
|
|
8
|
-
def self.run(id, port, machine_name='default', provider='virtualbox')
|
8
|
+
def self.run(id, port, bind_ip, machine_name='default', provider='virtualbox')
|
9
9
|
#id = env[:machine].id
|
10
10
|
#machine_name = env[:machine].name
|
11
11
|
#provider = env[:machine].provider_name
|
12
12
|
|
13
13
|
if __FILE__ == $0
|
14
|
-
|
14
|
+
begin
|
15
|
+
tcp_server = TCPServer.open(bind_ip, port)
|
16
|
+
rescue
|
17
|
+
exit 1
|
18
|
+
end
|
15
19
|
server = self.new(id, machine_name, provider)
|
16
20
|
|
17
21
|
# Have to wrap this in a begin/rescue block so we can be certain the server is running at all times.
|
@@ -83,5 +87,6 @@ end
|
|
83
87
|
# Ghetto
|
84
88
|
id = ARGV[0]
|
85
89
|
port = ARGV[1]
|
90
|
+
bind_ip = ARGV[2]
|
86
91
|
|
87
|
-
Vagrant::Notify::Server.run(id,port)
|
92
|
+
Vagrant::Notify::Server.run(id, port, bind_ip)
|
@@ -5,17 +5,19 @@ 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
|
+
let(:config) { mock(notify: stub(enable: true, bind_ip: "127.0.0.1")) }
|
9
9
|
let(:env) { {notify_data: {port: host_port}, machine: machine, tmp_path: tmp_path} }
|
10
10
|
let(:host_port) { 12345 }
|
11
|
-
let(:machine) { mock(communicate: communicator, config: config) }
|
11
|
+
let(:machine) { mock(communicate: communicator, config: config, provider_name: provider_name) }
|
12
12
|
let(:communicator) { mock(upload: true, sudo: true) }
|
13
13
|
let(:host_ip) { '192.168.1.2' }
|
14
|
+
let(:provider_name) { 'virtualbox' }
|
14
15
|
let(:tmp_path) { Pathname.new(Dir.mktmpdir) }
|
15
16
|
let(:tmp_cmd_path) { tmp_path.join('vagrant-notify-send') }
|
16
17
|
let(:guest_tmp_path) { '/tmp/notify-send' }
|
17
18
|
let(:guest_path) { '/usr/bin/notify-send' }
|
18
19
|
let(:stubbed_template) { ERB.new('<%= host_port %>') }
|
20
|
+
let(:stubbed_template2) { ERB.new('<%= provider_name %>') }
|
19
21
|
|
20
22
|
subject { described_class.new(app, env) }
|
21
23
|
|
@@ -5,14 +5,15 @@ require 'vagrant-notify/action/start_server'
|
|
5
5
|
require 'vagrant-notify/server'
|
6
6
|
|
7
7
|
describe Vagrant::Notify::Action::StartServer do
|
8
|
-
let(:app)
|
9
|
-
let(:config)
|
10
|
-
let(:ui)
|
11
|
-
let(:id)
|
12
|
-
let(:
|
13
|
-
let(:
|
14
|
-
let(:
|
15
|
-
let(:
|
8
|
+
let(:app) { lambda { |env| } }
|
9
|
+
let(:config) { mock(notify: stub(enable: true, bind_ip: "127.0.0.1")) }
|
10
|
+
let(:ui) { mock(success: true)}
|
11
|
+
let(:id) { '425e799c-1293-4939-bo39-263lcc7457e8' }
|
12
|
+
let(:provider_name) { 'virtualbox' }
|
13
|
+
let(:machine) { mock(state: stub(id: :stopped), ui: ui, id: id, config: config, provider_name: provider_name) }
|
14
|
+
let(:env) { {notify_data: {}, machine: machine} }
|
15
|
+
let(:pid) { '42' }
|
16
|
+
let(:port) { '1234' }
|
16
17
|
|
17
18
|
subject { described_class.new(app, env) }
|
18
19
|
|
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.2
|
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-10-08 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
|