forked from bfraser/puppet-grafana
-
Notifications
You must be signed in to change notification settings - Fork 105
/
Copy pathgrafana_cli.rb
66 lines (56 loc) · 1.54 KB
/
grafana_cli.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
# frozen_string_literal: true
Puppet::Type.type(:grafana_plugin).provide(:grafana_cli) do
has_command(:grafana_cli, 'grafana-cli') do
is_optional
end
defaultfor feature: :posix
mk_resource_methods
def self.all_plugins
plugins = []
grafana_cli('plugins', 'ls').split(%r{\n}).each do |line|
next unless line =~ %r{^(\S+)\s+@\s+((?:\d\.).+)\s*$}
name = Regexp.last_match(1)
version = Regexp.last_match(2)
Puppet.debug("Found grafana plugin #{name} #{version}")
plugins.push(name)
end
plugins.sort
end
def self.instances
resources = []
all_plugins.each do |name|
plugin = {
ensure: :present,
name: name
}
resources << new(plugin) if plugin[:name]
end
resources
end
def self.prefetch(resources)
plugins = instances
resources.each_key do |name|
if (provider = plugins.find { |plugin| plugin.name == name })
resources[name].provider = provider
end
end
end
def exists?
@property_hash[:ensure] == :present
end
def create
if resource[:repo]
repo = "--repo #{resource[:repo]}"
grafana_cli(repo, 'plugins', 'install', resource[:name])
elsif resource[:plugin_url]
grafana_cli('--pluginUrl', resource[:plugin_url], 'plugins', 'install', resource[:name])
else
grafana_cli('plugins', 'install', resource[:name])
end
@property_hash[:ensure] = :present
end
def destroy
grafana_cli('plugins', 'uninstall', resource[:name])
@property_hash[:ensure] = :absent
end
end