Class: VagrantPlugins::Pushover::Action

Inherits:
Object
  • Object
show all
Defined in:
lib/vagrant-pushover/action.rb

Instance Method Summary collapse

Constructor Details

#initialize(app, env) ⇒ Action

Returns a new instance of Action.



7
8
9
10
11
# File 'lib/vagrant-pushover/action.rb', line 7

def initialize(app,env)
  @app     = app
  @ui      = env[:ui]
  @machine = env[:machine].name.to_s
end

Instance Method Details

#call(env) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/vagrant-pushover/action.rb', line 13

def call(env)
  # Before machine action
  state  = env[:machine].state.id
  
  # Execute machine action
  @app.call(env)

  # After execute machine action
  config    = env[:machine].config.pushover
  action    = env[:machine_action]
  provision = env[:provision_enabled]
  
  case action
  when :up
    nortification config if state != :running && provision && config.execute
  when :reload          
    nortification config if provision && config.execute
  when :provision
    nortification config if config.execute
  end
end

#nortification(config) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/vagrant-pushover/action.rb', line 35

def nortification config
  message = "[#{@machine}] " + config.message
  url = URI.parse("https://api.pushover.net/1/messages.json")
  req = Net::HTTP::Post.new(url.path)        
  req.set_form_data({
                      token:     config.token,
                      user:      config.user, 
                      message:   message,
                      title:     config.title,
                      device:    config.device,
                      url:       config.url,      
                      url_title: config.url_title,
                      priority:  config.priority, 
                      timestamp: config.timestamp,
                      sound:     config.sound,    
                    })
  res = Net::HTTP.new(url.host, url.port)
  res.use_ssl = true
  res.verify_mode = OpenSSL::SSL::VERIFY_PEER
  status = res.start {|http| http.request(req)}.message
  
  if status == "OK"
    @ui.info  "Send pushover notification."
  else
    @ui.error "Send pushover notification is failed. Parameter is wrong."
  end
  
end