consul-templaterb 1.18.1 → 1.18.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c712ffce37a55a53211be4109f089fa8d08a8bd7cab7a3f9afe14a0407f6274f
4
- data.tar.gz: 564ead3a1e81267424e4d1d00df38a3752c6a23d7b0af6ef34ddb077c16d076f
3
+ metadata.gz: d79f747c0b0378a3526f63fd7a4638f2cfe432da043821749c89f8b302a6489a
4
+ data.tar.gz: 69f3d665fda37542cc4496daeb77f2d300514d9708afb0eef363aebf1a5a74ad
5
5
  SHA512:
6
- metadata.gz: 58a722c9eb468a9e843dbd991841bb494e80e194fcd79c66773e36e792e897adf99db9cb11aaab4d125673cf474f4d61e741d4b226aee4577b68e911d34ed574
7
- data.tar.gz: 90b2aad7e64e949da07a803e48e76d1cf45b27df81cf01d353b596c2583235298c9df43fd2961739fcb3f7fe1e2e3dfe9413a1ce2f6a8c72aca9fda67c7350ba
6
+ metadata.gz: e6e24033378a8bc9abd18c6e57da606e45aac7bf20ea8f295d33ea668f2d44b9abf4395099ecf0dbc804e50a0467426807f587ba2f07fc2149361b568ce5b791
7
+ data.tar.gz: 4a5c613be0aee5f4c7646286b699ab3d17cf4af3b26f6e227884f14c79648d6ea3086777d547de162bd5906e161877a1c3e5f7d19c2a5ecc8d1c94a072eebcb3
data/CHANGELOG.md CHANGED
@@ -2,9 +2,25 @@
2
2
 
3
3
  ## (UNRELEASED)
4
4
 
5
+ ## 1.18.2 (August 28, 2019)
6
+
7
+ BUGFIX:
8
+
9
+ * In Consul UI, showing data from KV with markup was not properly handled
10
+
11
+ NEW FEATURES:
12
+
13
+ Support any request method for remote_resource.as_json (#41)
14
+
15
+ - support post and other request methods
16
+ - accept any 2xx result (instead of just 200). This is a semi-breaking
17
+ change.
18
+ - accept body passed for non GET requests
19
+ - allow to add headers (such as Authorization)
20
+
5
21
  ## 1.18.1 (July 27, 2019)
6
22
 
7
- BUFIX:
23
+ BUGFIX:
8
24
 
9
25
  Fixed wrong lazy initialization in `remote_resource.as_json` that
10
26
  cause too many connections to be opened.
data/Dockerfile ADDED
@@ -0,0 +1,15 @@
1
+ FROM ruby:2.5
2
+
3
+ WORKDIR /usr/src/app
4
+ COPY . .
5
+
6
+ RUN apt-get update -qq && apt-get install -y build-essential nginx-light
7
+
8
+ RUN bundle install
9
+
10
+ EXPOSE 80
11
+ ENV LANG C.UTF-8
12
+ ENV CONSUL_HTTP_ADDR http://consul-relay.service.consul.preprod.crto.in:8500
13
+
14
+ ENTRYPOINT ["/usr/local/bin/bundle", "exec", "consul-templaterb"]
15
+ CMD ["--template", "samples/consul-ui/consul-keys-ui.html.erb", "--template", "samples/consul-ui/consul-nodes-ui.html.erb", "--template", "samples/consul-ui/consul-services-ui.html.erb", "--template", "samples/consul-ui/consul-timeline-ui.html.erb", "--template", "samples/consul-ui/consul_keys.json.erb", "--template", "samples/consul-ui/consul_nodes.json.erb", "--template", "samples/consul-ui/consul_services.json.erb", "--template", "samples/consul-ui/timeline.json.erb", "--template", "samples/consul-ui/consul-services-ui.html.erb:samples/consul-ui/index.html:touch samples/consul-ui/ready", "--sig-reload=NONE", "--exec=nginx -c /usr/src/app/docker-nginx-conf/nginx.conf"]
data/README.md CHANGED
@@ -117,6 +117,13 @@ https://github.com/oneclick/rubyinstaller2/issues/96#issuecomment-434619796
117
117
  gem install eventmachine consul-templaterb --platform ruby
118
118
  ```
119
119
 
120
+ ### Run it with Docker
121
+
122
+ An Docker image is also available https://hub.docker.com/r/discoverycriteo/consul-templaterb
123
+ and allows to quickly have a working
124
+ [Consul-UI](https://github.com/criteo/consul-templaterb/blob/master/samples/consul-ui/README.md)
125
+ that will server the UI to explore your Consul Cluster.
126
+
120
127
  ### Playing with the samples templates
121
128
 
122
129
  Samples are installed with the GEM, you can either
data/TemplateAPI.md CHANGED
@@ -439,12 +439,23 @@ secret('secret/foo', [force_ttl: intInSecond])
439
439
  ### as_json(url, default_value, [refresh_delay_secs: intInSecond])
440
440
 
441
441
  Fetch json data from any url. This allows to create templates with consul/vault data mixed in with data coming from other services/api.
442
- Polling interval can be controlled with refresh_delay_secs.
442
+ Polling interval can be controlled with `refresh_delay_secs` option.
443
+ Request method (`GET`, `POST`, ...) can be controlled with `request_method` option.
443
444
 
444
445
  ```erb
445
446
  remote_resource.as_json('http://my-api.dev/fridge/list.json', [])
446
447
  ```
447
448
 
449
+ Example with post (json_body will be applied `to_json` automatically):
450
+ ```erb
451
+ remote_resource.as_json('http://my-api.dev/fridge', [], request_method: :post, json_body: {brand: 'any'})
452
+ ```
453
+
454
+ Basic authentication can be done passing `headers` option.
455
+ ```erb
456
+ remote_resource.as_json('http://my-api.dev/fridge/list.json', [], headers: { Authorization: [user, password]})
457
+ ```
458
+
448
459
  Full example: [samples/list_ruby_versions_from_rubygems.txt.erb](samples/list_ruby_versions_from_rubygems.txt.erb)
449
460
 
450
461
  ## template_info()
@@ -0,0 +1,27 @@
1
+ daemon off;
2
+ worker_processes 2;
3
+
4
+ error_log /usr/src/app/error.log info;
5
+
6
+ events {
7
+ worker_connections 128;
8
+ }
9
+
10
+ http {
11
+ server_tokens off;
12
+ include /etc/nginx/mime.types;
13
+ charset utf-8;
14
+
15
+ access_log /usr/src/app/access.log combined;
16
+
17
+ server {
18
+ server_name localhost;
19
+ listen 0.0.0.0:80;
20
+ root /usr/src/app/samples/consul-ui;
21
+ sendfile on;
22
+
23
+ error_page 500 502 503 504 /50x.html;
24
+
25
+ }
26
+
27
+ }
@@ -26,8 +26,8 @@ module Consul
26
26
  @endp_manager = endpoints_manager
27
27
  end
28
28
 
29
- def as_json(url, default_value, refresh_delay_secs: 10)
30
- conf = JSONConfiguration.new(url: url, min_duration: refresh_delay_secs, retry_on_non_diff: refresh_delay_secs)
29
+ def as_json(url, default_value, refresh_delay_secs: 10, **opts)
30
+ conf = JSONConfiguration.new(url: url, min_duration: refresh_delay_secs, retry_on_non_diff: refresh_delay_secs, **opts)
31
31
  @endp_manager.create_if_missing(url, {}) do
32
32
  if default_value.is_a?(Array)
33
33
  ConsulTemplateJSONArray.new(JSONEndpoint.new(conf, url, default_value))
@@ -7,12 +7,16 @@ module Consul
7
7
  module Async
8
8
  class JSONConfiguration
9
9
  attr_reader :url, :retry_duration, :min_duration, :retry_on_non_diff,
10
- :debug, :enable_gzip_compression
10
+ :debug, :enable_gzip_compression, :request_method, :json_body,
11
+ :headers
11
12
  def initialize(url:,
12
13
  debug: { network: false },
13
14
  retry_duration: 10,
14
15
  min_duration: 10,
15
16
  retry_on_non_diff: 10,
17
+ request_method: :get,
18
+ json_body: nil,
19
+ headers: {},
16
20
  enable_gzip_compression: true)
17
21
  @url = url
18
22
  @debug = debug
@@ -20,6 +24,9 @@ module Consul
20
24
  @retry_duration = retry_duration
21
25
  @min_duration = min_duration
22
26
  @retry_on_non_diff = retry_on_non_diff
27
+ @request_method = request_method
28
+ @json_body = json_body
29
+ @headers = headers
23
30
  end
24
31
 
25
32
  def create(_url)
@@ -135,7 +142,14 @@ module Consul
135
142
  keepalive: true,
136
143
  callback: method(:on_response)
137
144
  }
145
+ if conf.json_body
146
+ res[:body] = conf.json_body.to_json
147
+ res[:head]['Content-Type'] = 'application/json'
148
+ end
138
149
  res[:head]['accept-encoding'] = 'identity' unless conf.enable_gzip_compression
150
+ conf.headers.map do |k, v|
151
+ res[:head][k] = v
152
+ end
139
153
  @query_params.each_pair do |k, v|
140
154
  res[:query][k] = v
141
155
  end
@@ -167,9 +181,10 @@ module Consul
167
181
  conn: EventMachine::HttpRequest.new(conf.url, options)
168
182
  }
169
183
  cb = proc do
170
- http = connection[:conn].get(build_request)
184
+ request_method = conf.request_method.to_sym
185
+ http = connection[:conn].send(request_method, build_request)
171
186
  http.callback do
172
- if enforce_json_200 && http.response_header.status != 200 && http.response_header['Content-Type'] != 'application/json'
187
+ if enforce_json_200 && !(200..299).cover?(http.response_header.status) && http.response_header['Content-Type'] != 'application/json'
173
188
  _handle_error(http) do
174
189
  warn "[RETRY][#{url}] (#{@consecutive_errors} errors)" if (@consecutive_errors % 10) == 1
175
190
  end
@@ -1,5 +1,5 @@
1
1
  module Consul
2
2
  module Async
3
- VERSION = '1.18.1'.freeze
3
+ VERSION = '1.18.2'.freeze
4
4
  end
5
5
  end
@@ -12,6 +12,13 @@ meaning that it can be scaled horizontally without any troubles with Consul.
12
12
  * List all nodes
13
13
  * List datacenters
14
14
 
15
+ ## Quick install with Docker
16
+
17
+ An Docker image is also available https://hub.docker.com/r/discoverycriteo/consul-templaterb
18
+ and allows to quickly have a working
19
+ [Consul-UI](https://github.com/criteo/consul-templaterb/blob/master/samples/consul-ui/README.md)
20
+ that will server the UI to explore your Consul Cluster.
21
+
15
22
  ## Is it prod ready?
16
23
 
17
24
  This application is used for several months within Criteo to replace Consul native interface and
@@ -115,7 +115,7 @@ class ConsulKeys {
115
115
  var dataToDisplay = 'NO DATA';
116
116
  }
117
117
 
118
- $("#kv-data").html(dataToDisplay);
118
+ $("#kv-data").text(dataToDisplay);
119
119
  $("#kv-data").removeClass();
120
120
 
121
121
  $('pre code').each(function(i, block) {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: consul-templaterb
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.18.1
4
+ version: 1.18.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - SRE Core Services
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-29 00:00:00.000000000 Z
11
+ date: 2019-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: em-http-request
@@ -170,6 +170,7 @@ files:
170
170
  - CHANGELOG.md
171
171
  - CODE_OF_CONDUCT.md
172
172
  - CONTRIBUTING.md
173
+ - Dockerfile
173
174
  - Gemfile
174
175
  - LICENSE.txt
175
176
  - README.md
@@ -177,6 +178,7 @@ files:
177
178
  - TemplateAPI.md
178
179
  - bin/consul-templaterb
179
180
  - consul-templaterb.gemspec
181
+ - docker-nginx-conf/nginx.conf
180
182
  - docs/images/consul-ui_001.png
181
183
  - lib/consul/async/consul_endpoint.rb
182
184
  - lib/consul/async/consul_template.rb