classify_cluster 0.1.3 → 0.2.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.
data/examples/cluster.rb CHANGED
@@ -74,15 +74,14 @@ cluster :"appliance-cluster" do |cluster|
74
74
 
75
75
  cluster.node 'node1.fqdn', '10.11.11.321' do |node|
76
76
 
77
- node.role :db, :primary => true
77
+ node.role :db, :primary => true do |role|
78
+ role.variable 'serverid', 1
79
+ end
78
80
  node.role :queue
79
81
  node.role :cron, :primary => true, :backup => true
80
82
  node.role :app
81
83
  node.role :worker
82
84
  node.role :munin, :node => true
83
-
84
- node.variable 'serverid', 1
85
-
86
85
  end
87
86
 
88
87
  cluster.node 'node2.fqdn', '10.11.11.123' do |node|
@@ -1,14 +1,6 @@
1
1
  module ClassifyCluster
2
2
  module Configurator
3
3
  class Cluster
4
- ROLE_2_VARIABLE_MAP = {
5
- 'app' => ['app_servers', []],
6
- 'db' => ['database_host', ''],
7
- 'queue' => ['queue_host', ''],
8
- 'push' => ['blow_server', ''],
9
- 'search' => ['solr_host', ''],
10
- 'munin' => ['munin_master', '']
11
- }
12
4
  attr_reader :nodes, :name, :classes, :variables, :resources, :hostnames
13
5
  def initialize(*args, &block)
14
6
  @nodes = {}
@@ -21,22 +13,6 @@ module ClassifyCluster
21
13
  @nodes.each_pair do |fqdn, node|
22
14
  @variables['hostnames'] = [] unless @variables['hostnames']
23
15
  @variables['hostnames'] << "#{fqdn}/#{node.private_ip}"
24
- node.roles.each do |role|
25
- next unless ROLE_2_VARIABLE_MAP.has_key?(role.type.to_s)
26
- if role.type.to_s == 'munin' && role.options.has_key?('master')
27
- @variables['munin_master'] = node.private_ip
28
- next
29
- end
30
- variable_name = ROLE_2_VARIABLE_MAP[role.type.to_s].first
31
- variable_initial_value = ROLE_2_VARIABLE_MAP[role.type.to_s][1]
32
- @variables[variable_name] = variable_initial_value unless @variables.has_key?(variable_name)
33
-
34
- if @variables[variable_name].is_a?(Array)
35
- @variables[variable_name] << node.private_ip
36
- else
37
- @variables[variable_name] = node.private_ip
38
- end
39
- end
40
16
  end
41
17
  @nodes.each_pair do |fqdn, node|
42
18
  node.resource do |resource|
@@ -57,7 +33,7 @@ module ClassifyCluster
57
33
  end
58
34
  def node(node_name, private_ip, &block)
59
35
  @hostnames[node_name] = private_ip
60
- @nodes[node_name] = ClassifyCluster::Configurator::Node.new(node_name, private_ip, &block)
36
+ @nodes[node_name] = ClassifyCluster::Configurator::Node.new(node_name, private_ip, self, &block)
61
37
  end
62
38
  def variable(name, value)
63
39
  @variables[name] = value
@@ -1,20 +1,9 @@
1
1
  module ClassifyCluster
2
2
  module Configurator
3
3
  class Node
4
- ROLE_2_KLASS_MAP = {
5
- 'db' => { 'primary' => 'databaseserver::onpremise', 'backup' => 'databasereplicationserver::onpremise'},
6
- 'queue' => 'queueserver::onpremise',
7
- 'app' => 'appserver::onpremise',
8
- 'worker' => 'workerserver::onpremise',
9
- 'web' => 'webserver::onpremise',
10
- 'puppet_master' => 'puppetmaster::onpremise',
11
- 'munin' => { 'master' => 'munin::master::onpremise', 'node' => 'munin::node::onpremise' },
12
- 'push' => 'pushserver::onpremise',
13
- 'cache' => 'memcached',
14
- 'search' => 'searchserver::onpremise'
15
- }
16
- attr_reader :fqdn, :variables, :resources, :classes, :private_ip, :public_ip, :roles, :default
4
+ attr_reader :cluster, :fqdn, :variables, :resources, :classes, :private_ip, :public_ip, :roles, :default
17
5
  def initialize(*args, &block)
6
+ @cluster = args[2]
18
7
  @variables = {}
19
8
  @resources = []
20
9
  @classes = []
@@ -22,18 +11,7 @@ module ClassifyCluster
22
11
  @fqdn = (args.first.to_s == 'default' ? '' : args.first)
23
12
  @private_ip = (args[1].to_s == 'default' ? '' : args[1])
24
13
  @default = args.first.to_s == 'default'
25
- returned = block.call(self)
26
- @roles.each do |role|
27
- if ROLE_2_KLASS_MAP.has_key?(role.type.to_s)
28
- if role.options.size > 0
29
- role.options.each_pair do |key, value|
30
- @classes << ROLE_2_KLASS_MAP[role.type.to_s][key.to_s]
31
- end
32
- else
33
- @classes << ROLE_2_KLASS_MAP[role.type.to_s]
34
- end
35
- end
36
- end
14
+ block.call(self)
37
15
  end
38
16
  def default?
39
17
  return @default
@@ -50,8 +28,8 @@ module ClassifyCluster
50
28
  return (@public_ip || @private_ip) unless value
51
29
  @public_ip = value
52
30
  end
53
- def role(type, options={})
54
- @roles << ClassifyCluster::Configurator::Role.new(type, options)
31
+ def role(type='', options={}, &block)
32
+ @roles << ClassifyCluster::Configurator::Role.new(self, type, options, &block)
55
33
  end
56
34
  def variable(name, value)
57
35
  @variables[name] = value
@@ -1,10 +1,14 @@
1
1
  module ClassifyCluster
2
2
  module Configurator
3
3
  class Role
4
- attr_reader :type, :options
5
- def initialize(type, options={})
4
+ attr_reader :type, :options, :node, :variables
5
+ def initialize(node, type, options={}, &block)
6
6
  @type = type
7
- @options = options
7
+ @options = options.symbolize_keys
8
+ @node = node
9
+ @variables = {}
10
+ block.call(self) if block_given?
11
+ self.send("after_#{@type}_role_assignment".to_sym)
8
12
  end
9
13
  def type(value = nil)
10
14
  return @type unless value
@@ -14,6 +18,58 @@ module ClassifyCluster
14
18
  return @options unless value
15
19
  @options = value
16
20
  end
21
+ def variable(name, value)
22
+ @variables[name] = value
23
+ @node.variable name, value
24
+ end
25
+ private
26
+ def add_klass_from_role
27
+ case @type.to_s
28
+ when "db"
29
+ @node.klass "databaseserver::onpremise" if @options.has_key?(:primary)
30
+ @node.klass "databasereplicationserver::onpremise" if @options.has_key?(:backup)
31
+ when "puppet_master"
32
+ @node.klass "puppet_master::onpremise"
33
+ when "munin"
34
+ @node.klass "munin::master::onpremise" if @options.has_key?(:master)
35
+ @node.klass "munin::node::onpremise" if @options.has_key?(:node)
36
+ when "cache"
37
+ @node.klass "memcached"
38
+ when "queue"
39
+ @node.klass "#{@type.to_s}server::onpremise"
40
+ when "app"
41
+ @node.klass "#{@type.to_s}server::onpremise"
42
+ when "worker"
43
+ @node.klass "#{@type.to_s}server::onpremise"
44
+ when "web"
45
+ @node.klass "#{@type.to_s}server::onpremise"
46
+ when "push"
47
+ @node.klass "#{@type.to_s}server::onpremise"
48
+ when "search"
49
+ @node.klass "#{@type.to_s}server::onpremise"
50
+ end
51
+ end
52
+ def add_variable_from_role
53
+ case @type.to_s
54
+ when 'app'
55
+ @node.cluster.variables['app_servers'] ||= []
56
+ @node.cluster.variables['app_servers'] << @node.private_ip
57
+ when 'db'
58
+ @node.cluster.variable('database_host', @node.private_ip) if @options.has_key?(:primary)
59
+ when 'queue'
60
+ @node.cluster.variable 'queue_host', @node.private_ip
61
+ when 'push'
62
+ @node.cluster.variable 'blow_server', @node.private_ip
63
+ when 'search'
64
+ @node.cluster.variable 'solr_host', @node.private_ip
65
+ when 'munin'
66
+ @node.cluster.variable('munin_master', @node.private_ip) if @options.has_key?(:master)
67
+ end
68
+ end
69
+ def method_missing(method_name, *args)
70
+ add_klass_from_role
71
+ add_variable_from_role
72
+ end
17
73
  end
18
74
  end
19
75
  end
@@ -1,3 +1,3 @@
1
1
  module ClassifyCluster
2
- VERSION = "0.1.3"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: classify_cluster
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 3
10
- version: 0.1.3
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Sean Cashin
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-09 00:00:00 -08:00
18
+ date: 2010-11-10 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency