classify_cluster 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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