consul_loader 1.0.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 +7 -0
- data/lib/consul_loader.rb +7 -0
- data/lib/consul_loader/config_parser.rb +25 -0
- data/lib/consul_loader/loader.rb +64 -0
- data/lib/consul_loader/response_decoder.rb +24 -0
- metadata +119 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 20f10a4a9c506b7e9cf0034cd30973e50e245a92
|
4
|
+
data.tar.gz: fa03e35d6ab293751fe7d7d34d1a076ffc5efdc1
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fff98f4516bd948167bac6d59205cc0d6fa8fed5736715663f19e875cd967f891ee89540b794add33cf3ad4f4de85cb55c2ea6eb2abe431e1549da4a3d97817f
|
7
|
+
data.tar.gz: 57545c00c9dd92a39ea459d49d5e12c81d61d33a00d6871d141079988dd51a7b009c8d15ca5a54f096450d0f8d246d7f4a7ab58632507d55fff5ebc2316d674e
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module ConsulLoader
|
2
|
+
class ConfigParser
|
3
|
+
attr_accessor :config
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
self.config = []
|
7
|
+
end
|
8
|
+
|
9
|
+
def process_yaml root, hash
|
10
|
+
keys = []
|
11
|
+
return [] unless hash
|
12
|
+
|
13
|
+
hash.each do |key, value|
|
14
|
+
if value.is_a?(Hash)
|
15
|
+
process_yaml(root + "/" + key, value).each do |k|
|
16
|
+
keys << k
|
17
|
+
end
|
18
|
+
else
|
19
|
+
keys << {:k => root + "/" + key, :v => value}
|
20
|
+
end
|
21
|
+
end
|
22
|
+
return keys
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module ConsulLoader
|
2
|
+
class Loader
|
3
|
+
|
4
|
+
attr_accessor :parser
|
5
|
+
|
6
|
+
def initialize parser
|
7
|
+
self.parser = parser
|
8
|
+
end
|
9
|
+
|
10
|
+
def load_config location, server
|
11
|
+
if File.directory? location
|
12
|
+
load_folder location, server
|
13
|
+
elsif load_file_and_upload location, server
|
14
|
+
else
|
15
|
+
raise Errno::ENOENT
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
def load_folder folder, server
|
21
|
+
Dir.glob("#{folder}/*.yaml").each do |x|
|
22
|
+
load_file_and_upload x, server
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def load_file_and_upload filename, server
|
27
|
+
yaml = YAML.load_file(filename)
|
28
|
+
self.parser.process_yaml("", yaml).each {|k|
|
29
|
+
upload_config k, server
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
def upload_config c, server
|
34
|
+
case c[:v]
|
35
|
+
when Array
|
36
|
+
value = c[:v].to_json
|
37
|
+
when String, Fixnum, TrueClass
|
38
|
+
value = c[:v]
|
39
|
+
end
|
40
|
+
|
41
|
+
check_and_send_value c[:k], value, server
|
42
|
+
end
|
43
|
+
|
44
|
+
def check_and_send_value key, value, server
|
45
|
+
send_data = true
|
46
|
+
|
47
|
+
begin
|
48
|
+
response = RestClient.get "#{server}/v1/kv#{key}"
|
49
|
+
decoder = ConsulLoader::ResponseDecoder.new
|
50
|
+
existing_value = decoder.decode_value response.body
|
51
|
+
if value.to_s == existing_value.to_s
|
52
|
+
send_data = false
|
53
|
+
end
|
54
|
+
rescue
|
55
|
+
send_data = true
|
56
|
+
end
|
57
|
+
|
58
|
+
if send_data
|
59
|
+
puts "Updating key: #{key} with value: #{value}"
|
60
|
+
RestClient.put "#{server}/v1/kv#{key}", value.to_s
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Consul returns responses like so...
|
2
|
+
#[{"CreateIndex":7809,"ModifyIndex":32838,"LockIndex":0,"Key":"api/eventsauce/retry_intervals","Flags":0,"Value":"WyIxMHMiLCIxbSIsIjE1bSIsIjFoIiwiMWQiXQ=="}]
|
3
|
+
module ConsulLoader
|
4
|
+
class ResponseDecoder
|
5
|
+
def decode_value response
|
6
|
+
return nil if response == nil
|
7
|
+
|
8
|
+
json = JSON.parse response
|
9
|
+
|
10
|
+
return nil if json == nil
|
11
|
+
return nil if json[0]["Value"] == nil
|
12
|
+
|
13
|
+
base64_decode json[0]["Value"]
|
14
|
+
end
|
15
|
+
|
16
|
+
def base64_decode value
|
17
|
+
begin
|
18
|
+
return Base64.strict_decode64(value)
|
19
|
+
rescue
|
20
|
+
return nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: consul_loader
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nic Jackson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-01-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: webmock
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rest-client
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
description: Use consul loader to convert your heirachical yaml file into key value
|
84
|
+
paths in consul, this may be useful if you want to load a config file into your
|
85
|
+
consul server.
|
86
|
+
email: jackson.nic@gmail.com
|
87
|
+
executables: []
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- lib/consul_loader.rb
|
92
|
+
- lib/consul_loader/config_parser.rb
|
93
|
+
- lib/consul_loader/loader.rb
|
94
|
+
- lib/consul_loader/response_decoder.rb
|
95
|
+
homepage: https://github.com/nicholasjackson/consul-loader
|
96
|
+
licenses:
|
97
|
+
- MIT
|
98
|
+
metadata: {}
|
99
|
+
post_install_message:
|
100
|
+
rdoc_options: []
|
101
|
+
require_paths:
|
102
|
+
- lib
|
103
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - ">="
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
108
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: '0'
|
113
|
+
requirements: []
|
114
|
+
rubyforge_project:
|
115
|
+
rubygems_version: 2.4.5.1
|
116
|
+
signing_key:
|
117
|
+
specification_version: 4
|
118
|
+
summary: Consul loader allows you to import a yaml file into Consul's key value store.
|
119
|
+
test_files: []
|