grafana-rb 0.17.0 → 0.18.0
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 +4 -0
- data/lib/grafana-rb/cli.rb +75 -8
- data/lib/grafana-rb/version.rb +1 -1
- 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: 7157e2f6049795a1400c4fa71c176755b781692d
|
4
|
+
data.tar.gz: 19fa013da17499527d3dc045320aa922c01bccff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8e9b4716ebb83a368579cd149127d8d68cf29983eb11561d0c71bbdd736c7a84750cfb21b5fad712dcd74a1b83a5129433bcfcea1b52ecbcdf7354e55c02f04
|
7
|
+
data.tar.gz: ade8147a0a4b82ee7a05e5cc75a5392487206b18b79636ef663b103799efe8999cef07ffc39ad1e8a91718f943da3855712a6c4868ec6775923089497dbb6ad0
|
data/CHANGELOG.md
CHANGED
data/lib/grafana-rb/cli.rb
CHANGED
@@ -2,6 +2,7 @@ require 'yaml'
|
|
2
2
|
require 'json'
|
3
3
|
require 'pp'
|
4
4
|
require 'net/http'
|
5
|
+
require 'openssl'
|
5
6
|
|
6
7
|
module GrafanaRb
|
7
8
|
class Cli
|
@@ -12,11 +13,28 @@ module GrafanaRb
|
|
12
13
|
end
|
13
14
|
|
14
15
|
def run
|
15
|
-
if
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
if File.directory?(@argv[0].to_s)
|
17
|
+
@workdir = @argv.shift
|
18
|
+
end
|
19
|
+
|
20
|
+
if @argv[0] == "--vault" && File.exists?(@argv[1])
|
21
|
+
@argv.shift
|
22
|
+
@vault_file = @argv.shift
|
23
|
+
elsif File.exists?(File.join(Dir.pwd, "vault.key"))
|
24
|
+
@vault_file = File.join(Dir.pwd, "vault.key")
|
25
|
+
else
|
26
|
+
@vault_file = nil
|
27
|
+
end
|
28
|
+
|
29
|
+
if %w[apply a q].index(@argv[0])
|
19
30
|
apply
|
31
|
+
|
32
|
+
elsif %w[encrypt en e].index(@argv[0])
|
33
|
+
puts encrypt(@argv[1])
|
34
|
+
|
35
|
+
elsif %w[decrypt de d].index(@argv[0])
|
36
|
+
puts decrypt(@argv[1])
|
37
|
+
|
20
38
|
else
|
21
39
|
usage
|
22
40
|
end
|
@@ -27,6 +45,35 @@ module GrafanaRb
|
|
27
45
|
DEFAULT_GRAFANA_USER = "admin"
|
28
46
|
DEFAULT_GRAFANA_PASSWORD = "admin"
|
29
47
|
TAG = "grafana-rb"
|
48
|
+
MARKER = "__VAULT:"
|
49
|
+
|
50
|
+
def bin_to_hex(s)
|
51
|
+
s.unpack('H*').first
|
52
|
+
end
|
53
|
+
|
54
|
+
def hex_to_bin(s)
|
55
|
+
s.scan(/../).map { |x| x.hex }.pack('c*')
|
56
|
+
end
|
57
|
+
|
58
|
+
def encrypt(string)
|
59
|
+
die "missed vault file" unless @vault_file
|
60
|
+
die "string encrypted yet" if string.index(MARKER) == 0
|
61
|
+
cipher = OpenSSL::Cipher::AES256.new :CBC
|
62
|
+
cipher.encrypt
|
63
|
+
iv = cipher.random_iv
|
64
|
+
cipher.key = Digest::SHA256.digest(File.read(@vault_file).strip)
|
65
|
+
MARKER + bin_to_hex(cipher.update(string) + cipher.final) + ":" + bin_to_hex(iv)
|
66
|
+
end
|
67
|
+
|
68
|
+
def decrypt(string)
|
69
|
+
die "missed vault file" unless @vault_file
|
70
|
+
die "string not encrypted" unless string.index(MARKER) == 0
|
71
|
+
cipher = OpenSSL::Cipher::AES256.new :CBC
|
72
|
+
cipher.decrypt
|
73
|
+
cipher.iv = hex_to_bin(string.sub(MARKER, "").split(":")[1])
|
74
|
+
cipher.key = Digest::SHA256.digest(File.read(@vault_file).strip)
|
75
|
+
cipher.update(hex_to_bin(string.sub(MARKER, "").split(":")[0])) + cipher.final
|
76
|
+
end
|
30
77
|
|
31
78
|
def config_file
|
32
79
|
@config_file ||= File.join(@workdir, "grafana.yml")
|
@@ -90,8 +137,23 @@ module GrafanaRb
|
|
90
137
|
end
|
91
138
|
end
|
92
139
|
|
140
|
+
def read_yaml(file)
|
141
|
+
unvault = proc { |o|
|
142
|
+
if o.is_a?(Array)
|
143
|
+
o.map { |i| unvault.call(i) }
|
144
|
+
elsif o.is_a?(Hash)
|
145
|
+
o.map { |k, v| [k, unvault.call(v)] }.to_h
|
146
|
+
elsif o.is_a?(String) && o.index(MARKER) == 0
|
147
|
+
decrypt(o)
|
148
|
+
else
|
149
|
+
o
|
150
|
+
end
|
151
|
+
}
|
152
|
+
unvault.call(YAML.load(File.read(file)))
|
153
|
+
end
|
154
|
+
|
93
155
|
def config
|
94
|
-
@config ||=
|
156
|
+
@config ||= read_yaml(config_file) || {}
|
95
157
|
end
|
96
158
|
|
97
159
|
def grafana_user
|
@@ -110,7 +172,7 @@ module GrafanaRb
|
|
110
172
|
|
111
173
|
def dashboards
|
112
174
|
@dashboards ||= require_files.map { |path|
|
113
|
-
yaml =
|
175
|
+
yaml = read_yaml(path)
|
114
176
|
yaml["name"] ||= File.basename(path, File.extname(path))
|
115
177
|
yaml
|
116
178
|
}
|
@@ -368,10 +430,15 @@ module GrafanaRb
|
|
368
430
|
puts "Version: #{VERSION}"
|
369
431
|
puts ""
|
370
432
|
puts "Usage:"
|
371
|
-
puts " grafana-rb [work-dir] <cmd>"
|
433
|
+
puts " grafana-rb [work-dir] [options] <cmd>"
|
434
|
+
puts ""
|
435
|
+
puts "Options:"
|
436
|
+
puts " --vault <vault-file> - vault file (<pwd>/vault.key by default)"
|
372
437
|
puts ""
|
373
438
|
puts "Commands:"
|
374
|
-
puts " apply
|
439
|
+
puts " apply - update dashboards"
|
440
|
+
puts " encrypt <string> - encrypt script using vault-file"
|
441
|
+
puts " decrypt <string> - decrypt script using vault-file"
|
375
442
|
puts ""
|
376
443
|
end
|
377
444
|
end
|
data/lib/grafana-rb/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grafana-rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.18.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexey Vakhov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|