lib/vagrant-notify/config.rb
module Vagrant
module Notify
class Config < Vagrant.plugin(2, :config)
# Enable?
attr_accessor :enable
# Bind IP
attr_accessor :bind_ip
# Notify send application
attr_accessor :sender_app
# Notify send params string
attr_accessor :sender_params_str
# Sender params escape
attr_accessor :sender_params_escape
def initialize()
@enable = UNSET_VALUE
@sender_app = UNSET_VALUE
@sender_params_str = UNSET_VALUE
@sender_params_escape = UNSET_VALUE
end
def validate(machine)
errors = _detected_errors
if backed_by_cloud_provider?(machine)
machine.ui.warn("Disabling vagrant-notify, cloud provider #{machine.provider_name} in use.")
@enable = false
end
if @enable != 0
if @enable != false && @enable != true
errors << "Unknown option for enable: #{@enable}"
end
end
if @sender_params_escape != false && @sender_params_escape != true && @sender_params_escape != UNSET_VALUE
errors << "Unknown option for @sender_params_escape: #{@sender_params_escape}"
end
if backed_by_supported_provider?(machine)
if @bind_ip.is_a?(String)
require "resolv"
unless @bind_ip =~ Resolv::IPv4::Regex
errors << "Invalid bind IP address: #{@bind_ip}"
end
else
@bind_ip = SUPPORTED_PROVIDERS[machine.provider_name]
end
else
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")
@enable = false
end
{ "notify" => errors }
end
def finalize!
@enable = 0 if @enable == UNSET_VALUE
@sender_app = "notify-send" if @sender_app == UNSET_VALUE
@sender_params_str = "[--app-name {app_name}] [--urgency {urgency}] [--expire-time {expire_time}] [--icon {icon}] [--category {category}] [--hint {hint}] {title} [{message}]" if @sender_params_str == UNSET_VALUE
@sender_params_escape = true if @sender_app == UNSET_VALUE
end
private
def backed_by_cloud_provider?(machine)
CLOUD_PROVIDERS.include?(machine.provider_name.to_s)
end
def backed_by_supported_provider?(machine)
SUPPORTED_PROVIDERS.has_key?(machine.provider_name)
end
end
end
end