-
Notifications
You must be signed in to change notification settings - Fork 293
/
sensuctl.rb
132 lines (119 loc) · 3.41 KB
/
sensuctl.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'sensuctl'))
Puppet::Type.type(:sensu_hook).provide(:sensuctl, :parent => Puppet::Provider::Sensuctl) do
desc "Provider sensu_hook using sensuctl"
mk_resource_methods
def self.instances
hooks = []
data = sensuctl_list('hook')
data.each do |d|
hook = {}
hook[:ensure] = :present
hook[:name] = d['metadata']['name']
hook[:namespace] = d['metadata']['namespace']
hook[:labels] = d['metadata']['labels']
hook[:annotations] = d['metadata']['annotations']
d.each_pair do |key, value|
next if key == 'metadata'
if !!value == value
value = value.to_s.to_sym
end
if type_properties.include?(key.to_sym)
hook[key.to_sym] = value
end
end
hooks << new(hook)
end
hooks
end
def self.prefetch(resources)
hooks = instances
resources.keys.each do |name|
if provider = hooks.find { |c| c.name == name }
resources[name].provider = provider
end
end
end
def exists?
@property_hash[:ensure] == :present
end
def initialize(value = {})
super(value)
@property_flush = {}
end
type_properties.each do |prop|
define_method "#{prop}=".to_sym do |value|
@property_flush[prop] = value
end
end
def create
spec = {}
metadata = {}
metadata[:name] = resource[:name]
type_properties.each do |property|
value = resource[property]
next if value.nil?
next if value == :absent || value == [:absent]
if [:true, :false].include?(value)
value = convert_boolean_property_value(value)
end
if property == :namespace
metadata[:namespace] = value
elsif property == :labels
metadata[:labels] = value
elsif property == :annotations
metadata[:annotations] = value
else
spec[property] = value
end
end
begin
sensuctl_create('HookConfig', metadata, spec)
rescue Exception => e
raise Puppet::Error, "sensuctl create #{resource[:name]} failed\nError message: #{e.message}"
end
@property_hash[:ensure] = :present
end
def flush
if !@property_flush.empty?
spec = {}
metadata = {}
metadata[:name] = resource[:name]
type_properties.each do |property|
if @property_flush[property]
value = @property_flush[property]
else
value = resource[property]
end
next if value.nil?
if [:true, :false].include?(value)
value = convert_boolean_property_value(value)
elsif value == :absent
value = nil
end
if property == :namespace
metadata[:namespace] = value
elsif property == :labels
metadata[:labels] = value
elsif property == :annotations
metadata[:annotations] = value
else
spec[property] = value
end
end
begin
sensuctl_create('HookConfig', metadata, spec)
rescue Exception => e
raise Puppet::Error, "sensuctl create #{resource[:name]} failed\nError message: #{e.message}"
end
end
@property_hash = resource.to_hash
end
def destroy
begin
sensuctl_delete('hook', resource[:name])
rescue Exception => e
raise Puppet::Error, "sensuctl delete hook #{resource[:name]} failed\nError message: #{e.message}"
end
@property_hash.clear
end
end