odania 0.0.16 → 0.0.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +63 -21
  3. data/Guardfile +31 -0
  4. data/Rakefile +1 -0
  5. data/config/varnish_config.json +4 -2
  6. data/lib/odania/{plugin_config/models → config}/backend.rb +1 -1
  7. data/lib/odania/{plugin_config/models → config}/backend_group.rb +7 -2
  8. data/lib/odania/config/domain.rb +55 -0
  9. data/lib/odania/config/duplicates.rb +28 -0
  10. data/lib/odania/config/global_config.rb +154 -0
  11. data/lib/odania/config/internal.rb +48 -0
  12. data/lib/odania/config/layout.rb +35 -0
  13. data/lib/odania/config/page.rb +28 -0
  14. data/lib/odania/config/plugin_config.rb +51 -0
  15. data/lib/odania/config/style.rb +60 -0
  16. data/lib/odania/config/sub_domain.rb +125 -0
  17. data/lib/odania/config.rb +16 -0
  18. data/lib/odania/consul.rb +6 -2
  19. data/lib/odania/erb.rb +154 -0
  20. data/lib/odania/plugin.rb +12 -5
  21. data/lib/odania/plugin_config/{plugin_config.rb → base.rb} +26 -31
  22. data/lib/odania/varnish/generators/generate_backend_vcl.rb +12 -0
  23. data/lib/odania/varnish/generators/generate_site_vcl.rb +16 -0
  24. data/lib/odania/varnish/generators/generate_sites_vcl.rb +0 -4
  25. data/lib/odania/varnish.rb +11 -12
  26. data/lib/odania/version.rb +1 -1
  27. data/lib/odania.rb +7 -1
  28. data/odania.gemspec +3 -0
  29. data/spec/fixtures/global_config.json +142 -0
  30. data/spec/fixtures/plugin_config_1.json +93 -0
  31. data/spec/lib/odania/config/global_config_spec.rb +67 -0
  32. data/spec/lib/odania/config/plugin_config_spec.rb +28 -0
  33. data/spec/lib/odania/erb_spec.rb +16 -0
  34. data/spec/lib/odania/plugin_spec.rb +25 -0
  35. data/spec/lib/odania/varnish_spec.rb +37 -0
  36. data/spec/spec_helper.rb +15 -0
  37. data/spec/support/consul_mock.rb +116 -0
  38. data/tasks/odania.rake +1 -5
  39. data/templates/varnish/backend.vcl.erb +7 -1
  40. data/templates/varnish/catch_all.vcl.erb +1 -0
  41. data/templates/varnish/default.vcl.erb +1 -0
  42. data/templates/varnish/general.vcl.erb +29 -13
  43. data/templates/varnish/general_site.vcl.erb +33 -0
  44. data/templates/varnish/redirects.vcl.erb +1 -0
  45. data/templates/varnish/site.vcl.erb +18 -8
  46. data/templates/varnish/sites.vcl.erb +1 -1
  47. data/templates/varnish/websocker.vcl.erb +1 -0
  48. metadata +79 -19
  49. data/lib/odania/plugin_config/models/domain.rb +0 -38
  50. data/lib/odania/plugin_config/models/layout.rb +0 -31
  51. data/lib/odania/plugin_config/models/page.rb +0 -23
  52. data/lib/odania/plugin_config/models/redirect.rb +0 -20
  53. data/lib/odania/plugin_config/models/sub_domain.rb +0 -99
  54. data/lib/odania/template/asset.rb +0 -15
  55. data/lib/odania/template/config.rb +0 -15
  56. data/lib/odania/template/page.rb +0 -16
  57. data/lib/odania/template.rb +0 -8
  58. data/lib/odania/varnish/generators/generate_site_assets_vcl.rb +0 -27
  59. data/templates/varnish/site_assets.vcl.erb +0 -24
  60. /data/spec/{odania → lib}/odania_spec.rb +0 -0
@@ -0,0 +1,125 @@
1
+ module Odania
2
+ module Config
3
+ class SubDomain
4
+ attr_accessor :name, :config, :direct, :dynamic, :internal, :from_plugin, :redirects
5
+
6
+ def initialize(name)
7
+ self.name = name
8
+ reset
9
+ end
10
+
11
+ def set_config(config_data, group_name)
12
+ errors = []
13
+ return errors if config_data.nil?
14
+
15
+ config_data.each_pair do |key, val|
16
+ from_plugin[:config][key] << group_name
17
+ errors << {:type => :config, :plugins => from_plugin[:config][key], :key => key} unless config[key].nil?
18
+ config[key] = val
19
+ end
20
+ errors
21
+ end
22
+
23
+ def add_page(type, web_url, group_name, url_data, plugin_name)
24
+ result = true
25
+ result = false unless self.pages[type].key? web_url
26
+ self.pages[type][web_url].group_name = group_name
27
+ self.pages[type][web_url].plugin_url = url_data['plugin_url']
28
+ self.pages[type][web_url].cacheable = url_data['cacheable'] unless url_data['cacheable'].nil?
29
+ self.pages[type][web_url].expires = url_data['expires'] unless url_data['expires'].nil?
30
+ @plugins[:page]["#{type}-#{web_url}"] << plugin_name
31
+ result
32
+ end
33
+
34
+ def add_internal(web_url, group_name, plugin_url, plugin_name)
35
+ result = true
36
+ result = false unless self.assets.key? web_url
37
+ self.assets[web_url].group_name = group_name
38
+ self.assets[web_url].plugin_url = plugin_url
39
+ @plugins[:asset][web_url] << plugin_name
40
+ result
41
+ end
42
+
43
+ def get_redirects
44
+ return {} if self.config.nil?
45
+ return {} if self.config['redirects'].nil?
46
+ self.config['redirects']
47
+ end
48
+
49
+ def plugins(type, key)
50
+ @plugins[type][key]
51
+ end
52
+
53
+ def dump
54
+ direct_data = {}
55
+ direct.each_pair do |web_url, page|
56
+ direct_data[web_url] = page.dump
57
+ end
58
+
59
+ dynamic_data = {}
60
+ dynamic.each_pair do |web_url, page|
61
+ dynamic_data[web_url] = page.dump
62
+ end
63
+
64
+ {
65
+ 'redirects' => self.redirects,
66
+ 'config' => self.config,
67
+ 'direct' => direct_data,
68
+ 'dynamic' => dynamic_data,
69
+ 'internal' => self.internal.dump
70
+ }
71
+ end
72
+
73
+ def load(data)
74
+ reset
75
+ self.add(data)
76
+ end
77
+
78
+ def add(data, group_name=nil)
79
+ self.config = data['config'] unless data['config'].nil?
80
+ duplicates = Hash.new { |hash, key| hash[key] = [] }
81
+
82
+ unless data['direct'].nil?
83
+ data['direct'].each_pair do |name, data|
84
+ duplicates[:direct] << name if self.direct.key? name
85
+ self.direct[name].load(data, group_name)
86
+ end
87
+ end
88
+
89
+ unless data['dynamic'].nil?
90
+ data['dynamic'].each_pair do |name, data|
91
+ duplicates[:dynamic] << name if self.direct.key? name
92
+ self.dynamic[name].load(data, group_name)
93
+ end
94
+ end
95
+
96
+ self.internal.load(data['internal']) unless data['internal'].nil?
97
+ unless data['redirects'].nil?
98
+ data['redirects'].each_pair do |src_url, target_url|
99
+ duplicates[:redirect] << src_url if self.redirects.key? src_url
100
+ self.redirects[src_url] = target_url
101
+ end
102
+ end
103
+
104
+ duplicates
105
+ end
106
+
107
+ def [](type)
108
+ return self.direct if 'direct'.eql? type.to_s
109
+ self.dynamic
110
+ end
111
+
112
+ private
113
+
114
+ def reset
115
+ self.config = {}
116
+ self.from_plugin = {:config => Hash.new { |hash, key| hash[key] = [] }}
117
+ self.direct = Hash.new { |hash, key| hash[key] = Page.new }
118
+ self.dynamic = Hash.new { |hash, key| hash[key] = Page.new }
119
+ self.redirects = {}
120
+ self.internal = Internal.new
121
+ @plugins = {:direct => Hash.new { |hash, key| hash[key] = [] }, :dynamic => Hash.new { |hash, key| hash[key] = [] }}
122
+ end
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,16 @@
1
+ require_relative 'config/internal'
2
+ require_relative 'config/domain'
3
+ require_relative 'config/duplicates'
4
+ require_relative 'config/layout'
5
+ require_relative 'config/page'
6
+ require_relative 'config/plugin_config'
7
+ require_relative 'config/global_config'
8
+ require_relative 'config/sub_domain'
9
+ require_relative 'config/style'
10
+ require_relative 'config/backend'
11
+ require_relative 'config/backend_group'
12
+
13
+ module Odania
14
+ module Config
15
+ end
16
+ end
data/lib/odania/consul.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Odania
2
2
  class Consul
3
- attr_accessor :service, :config, :event, :health
3
+ attr_reader :service, :config, :event, :health
4
4
 
5
5
  def initialize(consul_url)
6
6
  consul_url = "http://#{ENV['CONSUL_PORT_8500_TCP_ADDR']}:#{ENV['CONSUL_PORT_8500_TCP_PORT']}" if consul_url.nil?
@@ -63,7 +63,11 @@ module Odania
63
63
  end
64
64
 
65
65
  def get_all_for(plugin_name)
66
- instances = get(plugin_name, :all)
66
+ begin
67
+ instances = get(plugin_name, :all)
68
+ rescue
69
+ instances = []
70
+ end
67
71
  instances.is_a?(Array) ? instances : [instances]
68
72
  end
69
73
 
data/lib/odania/erb.rb ADDED
@@ -0,0 +1,154 @@
1
+ module Odania
2
+ class Erb
3
+ attr_accessor :variables, :config, :page, :asset
4
+
5
+ def initialize(template, domain, partials, group_name, req_host)
6
+ @template = template
7
+
8
+ self.variables = Variables.new(template, domain, partials, group_name, req_host)
9
+ self.config = Config.new self.variables
10
+ self.page = Page.new self.variables
11
+ self.asset = Asset.new self.variables
12
+
13
+ if LOCAL_TEST_MODE
14
+ data = "\n<!-- Domain: #{domain} -->"
15
+ data += "\n<!-- Group Name: #{group_name} -->"
16
+ data += "\n<!-- Request Host: #{req_host} -->"
17
+ data += "\n<!-- Base Domain: #{self.variables.base_domain} -->"
18
+ data += "\n<!-- Partials: #{JSON.pretty_generate(self.variables.partials)} -->"
19
+ data += "\n<!-- Config: #{JSON.pretty_generate(self.variables.config)} -->"
20
+ data += "\n<!-- SubDomain Config: #{JSON.pretty_generate(self.variables.subdomain_config)} -->"
21
+ #data += "\n<!-- Global Config: #{JSON.pretty_generate(self.variables.global_config)} -->"
22
+ @template += data.html_safe
23
+ end
24
+ end
25
+
26
+ def render
27
+ ERB.new(@template).result(binding)
28
+ end
29
+
30
+ class Variables
31
+ attr_accessor :template, :config, :subdomain_config, :global_config, :domain
32
+ attr_accessor :base_domain, :partials, :group_name, :req_host
33
+
34
+ def initialize(template, domain, partials, group_name, req_host)
35
+ self.template = template
36
+ self.global_config = Odania.plugin.get_global_config
37
+
38
+ domain_info = PublicSuffix.parse(domain)
39
+ self.config, self.base_domain = Odania.plugin.get_domain_config_for domain_info.domain, self.global_config
40
+ self.subdomain_config = self.config[domain_info.trd] unless domain_info.trd.nil?
41
+ self.subdomain_config = self.config['_general'] if self.subdomain_config.nil?
42
+ self.subdomain_config = {} if self.subdomain_config.nil?
43
+
44
+ self.domain = domain
45
+ self.partials = partials
46
+ self.group_name = group_name
47
+ self.req_host = req_host
48
+ end
49
+
50
+ def get_partial(page)
51
+ get_specific %w(internal partials), page
52
+ end
53
+
54
+ def get_config_key(key)
55
+ get_specific %w(config), key
56
+ end
57
+
58
+ def notify_error_async(type, key, data)
59
+ data = {
60
+ domain: self.domain,
61
+ base_domain: self.base_domain,
62
+ group_name: self.group_name,
63
+ req_host: self.req_host,
64
+ type: type,
65
+ key: key,
66
+ data: data
67
+ }
68
+ ProcessErrorJob.perform_later data
69
+ end
70
+
71
+ private
72
+
73
+ def get_specific(part, page)
74
+ subdomain = req_host.gsub(".#{domain}", '')
75
+
76
+ # subdomain specific layouts
77
+ result = retrieve_hash_path global_config, ['domains', domain, subdomain] + part + [page]
78
+ return result unless result.nil?
79
+
80
+ # domain specific layouts
81
+ result = retrieve_hash_path global_config, ['domains', domain, '_general'] + part + [page]
82
+ return result unless result.nil?
83
+
84
+ # general layouts
85
+ result = retrieve_hash_path global_config, %w(domains _general _general) + part + [page]
86
+ return result unless result.nil?
87
+
88
+ nil
89
+ end
90
+
91
+ def retrieve_hash_path(hash, path)
92
+ key = path.shift
93
+
94
+ return nil until hash.has_key? key
95
+ return hash[key] if path.empty?
96
+ retrieve_hash_path hash[key], path
97
+ end
98
+ end
99
+
100
+ class Config
101
+ def initialize(variables)
102
+ @variables = variables
103
+ end
104
+
105
+ def get(key)
106
+ val = @variables.get_config_key(key)
107
+ return val unless val.nil?
108
+ "--- Config Key Not found: #{key} ---"
109
+
110
+ @variables.notify_error_async :config, 'Key not found', key
111
+ end
112
+ end
113
+
114
+ class Page
115
+ def initialize(variables)
116
+ @variables = variables
117
+ end
118
+
119
+ def get(page)
120
+ if not @variables.partials[page].nil?
121
+ "<!-- Page: #{page} -->\n<esi:include src=\"#{@variables.partials[page]}\"/>\n<!-- End Page: #{page} -->"
122
+ else
123
+ partial = @variables.get_partial(page)
124
+
125
+ if partial.nil?
126
+ #"<!-- Page: #{page} -->\n<esi:include src=\"http://internal.core/template/partial/#{page}?domain=#{@variables.domain}&group_name=#{@variables.group_name}\"/>\n<!-- End Page: #{page} -->"
127
+ "\n\n\n<pre>UNHANDLED PAGE: #{page} !!!!!!!!!!!!!!!!!!!!</pre>\n\n\n"
128
+ else
129
+ "<!-- Page: #{page} -->\n<esi:include src=\"http://internal.core/template/partial/#{page}?domain=#{@variables.domain}&group_name=#{@variables.group_name}&plugin_url=#{partial['plugin_url']}&req_host=#{@variables.req_host}\"/>\n<!-- End Page: #{page} -->"
130
+ end
131
+ end
132
+ end
133
+ end
134
+
135
+ class Asset
136
+ def initialize(variables)
137
+ @variables = variables
138
+ end
139
+
140
+ def get(asset)
141
+ asset_url = get_asset_url(@variables.domain)
142
+ asset_url = "//#{asset_url}" unless asset_url.include? '//'
143
+ "#{asset_url}/#{asset}"
144
+ end
145
+
146
+ private
147
+
148
+ def get_asset_url(domain)
149
+ return @variables.subdomain_config['asset_url'] unless @variables.subdomain_config['asset_url'].nil?
150
+ domain
151
+ end
152
+ end
153
+ end
154
+ end
data/lib/odania/plugin.rb CHANGED
@@ -1,26 +1,25 @@
1
- require_relative 'plugin_config/plugin_config'
2
-
3
1
  module Odania
4
2
  class Plugin
5
3
  INSTANCE_FILES_PATH = '/tmp/plugin_instance_name_'
6
4
 
7
5
  def initialize(consul)
8
6
  @consul = consul
9
- @plugin_config = PluginConfig::Base.new
7
+ @plugin_config = Config::GlobalConfig.new
10
8
  end
11
9
 
12
10
  def register(plugin_instance_name, plugin_config)
13
- plugin_name = plugin_config['name']
11
+ plugin_name = plugin_config['plugin-config']['name']
14
12
 
15
13
  # Write configuration of the plugin
16
14
  @consul.config.set(get_plugin_config_path_for(plugin_name), plugin_config)
17
15
 
18
16
  # Register service
19
- consul_config = @consul.service.build_config(plugin_name, plugin_instance_name, plugin_config['ip'], plugin_config['tags'], plugin_config['port'])
17
+ consul_config = @consul.service.build_config(plugin_name, plugin_instance_name, plugin_config['plugin-config']['ip'], plugin_config['plugin-config']['tags'], plugin_config['plugin-config']['port'])
20
18
  @consul.service.register(consul_config)
21
19
 
22
20
  # Fire event
23
21
  @consul.event.fire 'service-registered', "#{plugin_name}|#{plugin_instance_name}"
22
+ "#{plugin_name}|#{plugin_instance_name}"
24
23
  end
25
24
 
26
25
  def deregister(plugin_instance_name)
@@ -61,6 +60,14 @@ module Odania
61
60
  @consul.config.get get_global_plugin_config_path
62
61
  end
63
62
 
63
+ def get_domain_config_for(domain, global_config=nil)
64
+ global_config = get_global_config if global_config.nil?
65
+
66
+ domain_info = PublicSuffix.parse(domain)
67
+ return global_config['domains'][domain_info.domain], domain unless global_config['domains'][domain_info.domain].nil?
68
+ return false, nil
69
+ end
70
+
64
71
  def health
65
72
  @consul.health
66
73
  end
@@ -1,25 +1,20 @@
1
1
  # Generate a joined configuration for all available plugins
2
2
 
3
+ require_relative 'duplicates'
3
4
  require_relative 'models/backend'
4
5
  require_relative 'models/backend_group'
5
6
  require_relative 'models/domain'
6
7
  require_relative 'models/layout'
7
8
  require_relative 'models/page'
9
+ require_relative 'models/partial'
8
10
  require_relative 'models/redirect'
9
11
  require_relative 'models/sub_domain'
10
12
 
11
13
  module Odania
12
14
  module PluginConfig
13
- class Base
15
+ class Base22
14
16
  def initialize
15
- @default_backend_groups = []
16
- @backend_groups = Hash.new { |hash, key| hash[key] = BackendGroup.new(key) }
17
- @redirects = Hash.new { |hash, key| hash[key] = Redirect.new(key) }
18
- @domains = Hash.new { |hash, key| hash[key] = Domain.new(key) }
19
- @default_subdomains = {}
20
- @layouts = Hash.new { |hash, key| hash[key] = Layout.new }
21
-
22
- @duplicates = Duplicates.new
17
+ reset
23
18
  end
24
19
 
25
20
  def load_from_consul
@@ -53,6 +48,7 @@ module Odania
53
48
  end
54
49
  end
55
50
 
51
+
56
52
  unless config['redirects'].nil?
57
53
  config['redirects'].each_pair do |src, target|
58
54
  @redirects[src].target = target
@@ -71,6 +67,12 @@ module Odania
71
67
  end
72
68
  end
73
69
 
70
+ unless config['partials'].nil?
71
+ config['partials'].each_pair do |name, data|
72
+ @partials[name].load(data)
73
+ end
74
+ end
75
+
74
76
  self
75
77
  end
76
78
 
@@ -140,6 +142,14 @@ module Odania
140
142
  end
141
143
  end
142
144
 
145
+ unless config['partials'].nil?
146
+ config['partials'].each_pair do |name, partial_file|
147
+ unless @partials[name].load(name, partial_file, group_name)
148
+ @duplicates.add(group_name, :partial, name, @partials[name].plugins)
149
+ end
150
+ end
151
+ end
152
+
143
153
  @default_subdomains = config['default_subdomains'] unless config['default_subdomains'].nil?
144
154
  end
145
155
 
@@ -163,7 +173,8 @@ module Odania
163
173
  'backends' => {},
164
174
  'redirects' => {},
165
175
  'domains' => {},
166
- 'layouts' => {}
176
+ 'layouts' => {},
177
+ 'partials' => {}
167
178
  }
168
179
 
169
180
  @backend_groups.each_pair do |group_name, instance|
@@ -182,6 +193,10 @@ module Odania
182
193
  config['layouts'][name] = layout.dump
183
194
  end
184
195
 
196
+ @partials.each_pair do |name, partial|
197
+ config['partials'][name] = partial.dump
198
+ end
199
+
185
200
  puts JSON.pretty_generate config if $debug
186
201
  Odania.plugin.set_global_config config
187
202
  end
@@ -218,30 +233,10 @@ module Odania
218
233
  @domains = Hash.new { |hash, key| hash[key] = Domain.new(key) }
219
234
  @default_subdomains = {}
220
235
  @layouts = Hash.new { |hash, key| hash[key] = Layout.new }
236
+ @partials = Hash.new { |hash, key| hash[key] = Partial.new }
221
237
 
222
238
  @duplicates = Duplicates.new
223
239
  end
224
240
  end
225
-
226
- class Duplicates
227
- def initialize
228
- @duplicates = Hash.new { |hash, key| hash[key] = Hash.new { |hash, key| hash[key] = Duplicate.new } }
229
- end
230
-
231
- def add(group, type, key, plugin_info)
232
- @duplicates[group][type].add(key, plugin_info)
233
- end
234
-
235
- class Duplicate
236
- def initialize
237
- @duplicate = {}
238
- end
239
-
240
- def add(key, plugin_info)
241
- @duplicate[key] = [] if @duplicate[key].nil?
242
- @duplicate[key] += plugin_info
243
- end
244
- end
245
- end
246
241
  end
247
242
  end
@@ -8,6 +8,18 @@ module Odania
8
8
  self.template = File.new("#{BASE_DIR}/templates/varnish/backend.vcl.erb").read
9
9
  end
10
10
 
11
+ def core_backends
12
+ core_backends = []
13
+ self.backend_groups.each_pair do |group_name, backend_group|
14
+ if backend_group.core_backend
15
+ backend_group.backends.each do |backend|
16
+ core_backends << "#{Odania.varnish_sanitize(group_name)}_#{Odania.varnish_sanitize(backend.instance_name)}"
17
+ end
18
+ end
19
+ end
20
+ core_backends
21
+ end
22
+
11
23
  def render
12
24
  Erubis::Eruby.new(self.template).result(binding)
13
25
  end
@@ -8,10 +8,26 @@ module Odania
8
8
  'www'
9
9
  end
10
10
 
11
+ def template_url_for(domain, page)
12
+ "&domain=#{domain.name}"+
13
+ "&plugin_url=#{page.plugin_url.nil? ? '/' : page.plugin_url}"+
14
+ "&group_name=#{Odania.varnish_sanitize(page.group_name)}"
15
+ end
16
+
17
+ def prepare_url(url)
18
+ return "/#{url}" unless '/'.eql? url[0]
19
+ url
20
+ end
21
+
22
+ def general_subdomain
23
+ self.domain['_general']
24
+ end
25
+
11
26
  def initialize(domain, default_subdomains)
12
27
  self.domain = domain
13
28
  self.default_subdomains = default_subdomains
14
29
  self.template = File.new("#{BASE_DIR}/templates/varnish/site.vcl.erb").read
30
+ self.template = File.new("#{BASE_DIR}/templates/varnish/general_site.vcl.erb").read if '_general'.eql? domain.name
15
31
  end
16
32
 
17
33
  def render
@@ -1,5 +1,4 @@
1
1
  require_relative 'generate_site_vcl'
2
- require_relative 'generate_site_assets_vcl'
3
2
 
4
3
  module Odania
5
4
  class GenerateSitesVcl
@@ -22,9 +21,6 @@ module Odania
22
21
  self.domains.each_pair do |domain_name, domain|
23
22
  out = GenerateSiteVcl.new(domain, default_subdomains)
24
23
  out.write out_dir
25
-
26
- out = GenerateSiteAssetsVcl.new(domain)
27
- out.write out_dir
28
24
  end
29
25
  end
30
26
  end
@@ -9,16 +9,16 @@ module Odania
9
9
  class Varnish
10
10
  def generate(out_dir='/etc/varnish')
11
11
  FileUtils.mkdir_p out_dir unless File.directory? out_dir
12
- global_config = Odania.plugin.get_global_config
13
- plugin_config = Odania.plugin.plugin_config.load_global_config global_config
12
+ global_config_json = Odania.plugin.get_global_config
13
+ global_config = Odania.plugin.plugin_config.load_global_config global_config_json
14
14
 
15
15
  # Backend config
16
- backend_groups = plugin_config.backend_groups
17
- default_backend = plugin_config.default_backend
16
+ backend_groups = global_config.backend_groups
17
+ default_backend = global_config.default_backend
18
18
 
19
19
  # Domain information config
20
- domains = plugin_config.domains
21
- default_subdomains = plugin_config.default_subdomains
20
+ domains = global_config.domains
21
+ default_subdomains = global_config.default_subdomains
22
22
 
23
23
  # Generate catch all vcl
24
24
  gen = GenerateCatchAllVcl.new
@@ -37,7 +37,7 @@ module Odania
37
37
  gen.write(out_dir)
38
38
 
39
39
  # Generate global redirects
40
- gen = GenerateRedirectsVcl.new(plugin_config.redirects)
40
+ gen = GenerateRedirectsVcl.new(global_config.default_redirects)
41
41
  gen.write(out_dir)
42
42
 
43
43
  # Generate main vcl
@@ -47,7 +47,6 @@ module Odania
47
47
  puts
48
48
  puts 'Registering internal varnish plugin'
49
49
  register_plugin
50
- puts
51
50
  end
52
51
 
53
52
  def reload_config
@@ -71,10 +70,10 @@ module Odania
71
70
  plugin_config = JSON.parse File.read "#{BASE_DIR}/config/varnish_config.json"
72
71
 
73
72
  ips = Odania.ips
74
- plugin_config['ips'] = ips
75
- plugin_config['ip'] = ips.first
76
- plugin_config['port'] = 80
77
- plugin_config['tags'] = ["plugin-#{get_plugin_name}"]
73
+ plugin_config['plugin-config']['ips'] = ips
74
+ plugin_config['plugin-config']['ip'] = ips.first
75
+ plugin_config['plugin-config']['port'] = 80
76
+ plugin_config['plugin-config']['tags'] = ["plugin-#{get_plugin_name}"]
78
77
  puts JSON.pretty_generate plugin_config if $debug
79
78
 
80
79
  plugin_instance_name = Odania.plugin.get_plugin_instance_name get_plugin_name
@@ -1,3 +1,3 @@
1
1
  module Odania
2
- VERSION = '0.0.16'
2
+ VERSION = '0.0.17'
3
3
  end
data/lib/odania.rb CHANGED
@@ -4,16 +4,21 @@ require 'erubis'
4
4
  require 'fileutils'
5
5
  require 'uri/http'
6
6
  require 'public_suffix'
7
+ require 'deep_merge'
8
+ require 'json'
9
+ require 'socket'
7
10
 
8
11
  BASE_DIR = File.absolute_path File.join File.dirname(__FILE__), '..'
9
12
  ENVIRONMENT = ENV['ENVIRONMENT'].nil? ? 'development' : ENV['ENVIRONMENT']
13
+ LOCAL_TEST_MODE = 'development'.eql?(ENVIRONMENT)
10
14
 
11
15
  module Odania
12
16
  CORE_PLUGIN_NAME = 'odania-core'
13
17
 
18
+ autoload :Config, 'odania/config'
14
19
  autoload :Consul, 'odania/consul'
20
+ autoload :Erb, 'odania/erb'
15
21
  autoload :Plugin, 'odania/plugin'
16
- autoload :Template, 'odania/template'
17
22
  autoload :Varnish, 'odania/varnish'
18
23
 
19
24
  def self.plugin
@@ -42,6 +47,7 @@ module Odania
42
47
  end
43
48
 
44
49
  def self.varnish_sanitize(name)
50
+ raise 'Could not sanitize varnish name!!' if name.nil?
45
51
  name.gsub(/[^0-9a-zA-Z_]/, '_')
46
52
  end
47
53
  end
data/odania.gemspec CHANGED
@@ -22,8 +22,11 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency 'rake'
23
23
  spec.add_development_dependency 'rspec'
24
24
  spec.add_development_dependency 'cucumber'
25
+ spec.add_development_dependency 'guard'
26
+ spec.add_development_dependency 'guard-rspec'
25
27
 
26
28
  spec.add_dependency 'diplomat'
27
29
  spec.add_dependency 'erubis'
28
30
  spec.add_dependency 'public_suffix'
31
+ spec.add_dependency 'deep_merge'
29
32
  end