cncflora_commons 0.0.32 → 0.0.33

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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/cncflora_commons.rb +64 -11
  3. metadata +8 -12
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2170497a7b3986d289ca11640f750a2573254acc
4
+ data.tar.gz: 4ac865a95f66b787a4240fb7eb0ffd9571d2b9fb
5
+ SHA512:
6
+ metadata.gz: 635c7edd9067fb5901614d2594ce94787d3dd4922621a22a2a9982d15d1890c23a24758c2b07cddbb3675224396b312a35279bd3656c10d0bddb8df2725d8f27
7
+ data.tar.gz: 5428554cdb062d5f4540f9f684056b336ab528b86bb5bad83e3d8b2c26aaa2aba13a6c6484ce61a44efd0180d3ddea350ebc976843ef68db2ff94ac2cb8c651b
@@ -77,25 +77,36 @@ end
77
77
  def setup(file)
78
78
  #config_file file
79
79
 
80
- config = YAML.load_file(file)[ENV['RACK_ENV'] || 'development']
80
+ @config = YAML.load_file(file)[ENV['RACK_ENV'] || 'development']
81
+
82
+ if @config["etcd"] || ENV["ETCD"] then
83
+ etcd_cfg = etcd2config(@config["etcd"] || ENV["ETCD"])
84
+ onchange(@config["etcd"] || ENV["ETCD"]) do |newconfig|
85
+ newconfig.each {|k,v| @config[k] = v }
86
+ if defined? settings then
87
+ newconfig.each {|k,v| set k.to_sym,v }
88
+ end
89
+ end
90
+ etcd_cfg.each {|k,v| @config[k] = v }
91
+ end
81
92
 
82
- config.each {|ck,cv|
93
+ @config.each {|ck,cv|
83
94
  ENV.each {|ek,ev|
84
95
  if cv =~ /\$#{ek}/ then
85
- config[ck] = cv.gsub(/\$#{ek}/,ev)
96
+ @config[ck] = cv.gsub(/\$#{ek}/,ev)
86
97
  end
87
98
  }
88
99
  }
89
100
 
90
- ENV.each {|k,v| config[k]=v }
101
+ ENV.each {|k,v| @config[k]=v }
91
102
 
92
- if config["lang"] then
93
- config["strings"] = JSON.parse(File.read("src/locales/#{config["lang"]}.json", :encoding => "BINARY"))
103
+ if @config["lang"] then
104
+ @config["strings"] = JSON.parse(File.read("src/locales/#{@config["lang"]}.json", :encoding => "BINARY"))
94
105
  end
95
106
 
96
107
  if defined? settings then
97
- config.each {|k,v| set k.to_sym,v }
98
- set :config, config
108
+ @config.each {|k,v| set k.to_sym,v }
109
+ set :@config, @config
99
110
 
100
111
  use Rack::Session::Pool
101
112
 
@@ -103,9 +114,51 @@ def setup(file)
103
114
  set :views, 'src/views'
104
115
  end
105
116
 
106
- puts "Config loaded"
107
- puts config
117
+ puts "@config loaded"
118
+ puts @config
119
+
120
+ @config
121
+ end
122
+
123
+ def flatten(obj)
124
+ flat = {}
125
+ if obj["dir"] && obj["nodes"] then
126
+ obj["nodes"].each { |n|
127
+ flat = flat.merge(flatten(n))
128
+ }
129
+ else
130
+ key = obj["key"].gsub("/","_").gsub("-","_")
131
+ flat[key[1..key.length]]=obj["value"]
132
+ end
133
+ flat
134
+ end
108
135
 
109
- config
136
+ def etcd2config(server)
137
+ cfg = flatten( http_get("#{server}/v2/keys/?recursive=true")["node"] )
138
+ to_add={}
139
+ cfg.each {|k,v|
140
+ if k.match(/_port$/) then
141
+ name = /(\w+)_port/.match(k).captures[0]
142
+ ip = cfg["#{name}_networksettings_ipaddress"]
143
+ port = 80
144
+ cfg.each {|kk,vv|
145
+ if /^#{name}_networksettings/.match(kk) && vv == v then
146
+ port = /ports_(\d+)_tcp/.match(kk).captures[0]
147
+ end
148
+ }
149
+ to_add[name] = "http://#{ip}:#{port}"
150
+ end
151
+ }
152
+ to_add.each{|k,v| cfg[k]=v}
153
+ cfg
110
154
  end
111
155
 
156
+ def onchange(etcd)
157
+ Thread.new do
158
+ while true do
159
+ a = http_get("#{etcd}/v2/keys/?recursive=true&wait=true")
160
+ puts "etcd updated"
161
+ yield etcd2config(etcd)
162
+ end
163
+ end
164
+ end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cncflora_commons
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.32
5
- prerelease:
4
+ version: 0.0.33
6
5
  platform: ruby
7
6
  authors:
8
7
  - Diogo Silva
@@ -15,17 +14,15 @@ dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: rspec
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
- - - ! '>='
18
+ - - ">="
21
19
  - !ruby/object:Gem::Version
22
20
  version: '0'
23
21
  type: :development
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
- - - ! '>='
25
+ - - ">="
29
26
  - !ruby/object:Gem::Version
30
27
  version: '0'
31
28
  description: HTTP, etcd...
@@ -38,26 +35,25 @@ files:
38
35
  homepage: https://github.com/CNCFlora/cncflora-commons
39
36
  licenses:
40
37
  - Apache License 2.0
38
+ metadata: {}
41
39
  post_install_message:
42
40
  rdoc_options: []
43
41
  require_paths:
44
42
  - lib
45
43
  required_ruby_version: !ruby/object:Gem::Requirement
46
- none: false
47
44
  requirements:
48
- - - ! '>='
45
+ - - ">="
49
46
  - !ruby/object:Gem::Version
50
47
  version: '0'
51
48
  required_rubygems_version: !ruby/object:Gem::Requirement
52
- none: false
53
49
  requirements:
54
- - - ! '>='
50
+ - - ">="
55
51
  - !ruby/object:Gem::Version
56
52
  version: '0'
57
53
  requirements: []
58
54
  rubyforge_project:
59
- rubygems_version: 1.8.23
55
+ rubygems_version: 2.2.2
60
56
  signing_key:
61
- specification_version: 3
57
+ specification_version: 4
62
58
  summary: CNCFlora common functions
63
59
  test_files: []