odania 0.0.16 → 0.0.17

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 (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