classify_cluster 0.4.10 → 0.4.11
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/bin/classify +12 -28
- data/classify_cluster.gemspec +3 -3
- data/lib/classify_cluster/readers.rb +0 -1
- data/lib/classify_cluster/version.rb +1 -1
- data/lib/classify_cluster/writers.rb +1 -2
- metadata +14 -18
- data/lib/classify_cluster/readers/cli.rb +0 -114
- data/lib/classify_cluster/writers/classify.rb +0 -25
data/bin/classify
CHANGED
@@ -1,36 +1,20 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require "
|
3
|
+
require 'rubygems'
|
4
|
+
require 'thor'
|
5
|
+
require File.join(File.dirname(__FILE__), '..', 'lib', "classify_cluster")
|
6
6
|
require 'yaml'
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
c.option '--config STRING', String, 'Location to config file.'
|
17
|
-
c.option '--export STRING', String, 'Location to output puppet cluster config'
|
18
|
-
c.action do |args, options|
|
19
|
-
options.default :config => ClassifyCluster::Base.default_config_file, :export => ENV['HOME']
|
20
|
-
ClassifyCluster::Writers::Puppet.export!(options.export, :cluster => args[0], :config_file => options.config)
|
8
|
+
class Classify < Thor
|
9
|
+
default_task :puppet
|
10
|
+
|
11
|
+
desc 'puppet CLUSTER_NAME', 'Generates configurations for different aspects of the cluster based off of one configuration.'
|
12
|
+
method_option :config, :desc => 'Location to config file', :type => :string, :default => ClassifyCluster::Base.default_config_file
|
13
|
+
method_option :export, :desc => 'Location to output puppet cluster config', :type => :string, :default => ENV['HOME']
|
14
|
+
def puppet(cluster_name=nil)
|
15
|
+
ClassifyCluster::Writers::Puppet.export!(options.export, :cluster => cluster_name, :config_file => options.config)
|
21
16
|
say("Success!")
|
22
17
|
end
|
23
18
|
end
|
24
19
|
|
25
|
-
|
26
|
-
c.syntax = 'classify config <clustername> [options]'
|
27
|
-
c.description = 'Runs an interactive script to generate a cluster configuration'
|
28
|
-
c.option '--export STRING', String, 'Location to output cluster configuration'
|
29
|
-
c.option '--cluster STRING', String, 'Cluster being created'
|
30
|
-
c.option '--defaults STRING', String, 'Location to load cluster defaults'
|
31
|
-
c.option '--variables STRING', String, 'Location to load cluster variables'
|
32
|
-
c.action do |args, options|
|
33
|
-
options.default :export => ClassifyCluster::Base.default_config_file, :defaults => '', :variables => ''
|
34
|
-
ClassifyCluster::Writers::Classify.export!(ClassifyCluster::Readers::Cli.start!(options.cluster, options.defaults, options.variables))
|
35
|
-
end
|
36
|
-
end
|
20
|
+
Classify.start(ARGV, :shell => Thor::Shell::Basic.new)
|
data/classify_cluster.gemspec
CHANGED
@@ -11,9 +11,9 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.homepage = "http://rubygems.org/gems/classify_cluster"
|
12
12
|
s.summary = %q{Contains several binaries for generating capistrano and puppet configurations}
|
13
13
|
s.description = %q{Reading from a YAML file will allow for consistent configuration between capistrano and puppet}
|
14
|
-
s.add_dependency(%q<
|
15
|
-
s.add_dependency(%q<
|
16
|
-
s.add_dependency(%q<activesupport>, [">=
|
14
|
+
s.add_dependency(%q<thor>, ["~> 0.14.6"])
|
15
|
+
s.add_dependency(%q<i18n>, [">= 0"])
|
16
|
+
s.add_dependency(%q<activesupport>, [">= 3.0.0"])
|
17
17
|
|
18
18
|
s.rubyforge_project = "classify_cluster"
|
19
19
|
|
@@ -1 +0,0 @@
|
|
1
|
-
require 'classify_cluster/readers/cli'
|
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:
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 4
|
9
|
-
-
|
10
|
-
version: 0.4.
|
9
|
+
- 11
|
10
|
+
version: 0.4.11
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Sean Cashin
|
@@ -19,23 +19,23 @@ date: 2011-12-08 00:00:00 -08:00
|
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
22
|
+
name: thor
|
23
23
|
prerelease: false
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
hash:
|
29
|
+
hash: 43
|
30
30
|
segments:
|
31
|
-
- 4
|
32
31
|
- 0
|
33
|
-
-
|
34
|
-
|
32
|
+
- 14
|
33
|
+
- 6
|
34
|
+
version: 0.14.6
|
35
35
|
type: :runtime
|
36
36
|
version_requirements: *id001
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
|
-
name:
|
38
|
+
name: i18n
|
39
39
|
prerelease: false
|
40
40
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
@@ -44,10 +44,8 @@ dependencies:
|
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
hash: 3
|
46
46
|
segments:
|
47
|
-
- 1
|
48
|
-
- 5
|
49
47
|
- 0
|
50
|
-
version:
|
48
|
+
version: "0"
|
51
49
|
type: :runtime
|
52
50
|
version_requirements: *id002
|
53
51
|
- !ruby/object:Gem::Dependency
|
@@ -58,12 +56,12 @@ dependencies:
|
|
58
56
|
requirements:
|
59
57
|
- - ">="
|
60
58
|
- !ruby/object:Gem::Version
|
61
|
-
hash:
|
59
|
+
hash: 7
|
62
60
|
segments:
|
63
|
-
- 2
|
64
61
|
- 3
|
65
|
-
-
|
66
|
-
|
62
|
+
- 0
|
63
|
+
- 0
|
64
|
+
version: 3.0.0
|
67
65
|
type: :runtime
|
68
66
|
version_requirements: *id003
|
69
67
|
description: Reading from a YAML file will allow for consistent configuration between capistrano and puppet
|
@@ -95,11 +93,9 @@ files:
|
|
95
93
|
- lib/classify_cluster/configurator/resource.rb
|
96
94
|
- lib/classify_cluster/configurator/role.rb
|
97
95
|
- lib/classify_cluster/readers.rb
|
98
|
-
- lib/classify_cluster/readers/cli.rb
|
99
96
|
- lib/classify_cluster/version.rb
|
100
97
|
- lib/classify_cluster/writers.rb
|
101
98
|
- lib/classify_cluster/writers/capistrano.rb
|
102
|
-
- lib/classify_cluster/writers/classify.rb
|
103
99
|
- lib/classify_cluster/writers/puppet.rb
|
104
100
|
has_rdoc: true
|
105
101
|
homepage: http://rubygems.org/gems/classify_cluster
|
@@ -1,114 +0,0 @@
|
|
1
|
-
require 'highline/import'
|
2
|
-
|
3
|
-
module ClassifyCluster
|
4
|
-
module Readers
|
5
|
-
class Cli
|
6
|
-
def self.start!(cluster_name, defaults_path='', variables_path='')
|
7
|
-
say("Welcome to classify cluster cli configurator!")
|
8
|
-
|
9
|
-
defaults={}
|
10
|
-
variables={}
|
11
|
-
File.open(defaults_path, 'r') do |file|
|
12
|
-
defaults = eval(file.read)
|
13
|
-
end if File.exists?(defaults_path)
|
14
|
-
|
15
|
-
File.open(variables_path, 'r') do |file|
|
16
|
-
variables = eval(file.read)
|
17
|
-
end if File.exists?(variables_path)
|
18
|
-
say "Configure cluster wide"
|
19
|
-
cluster_config = gather_cluster_info(cluster_name, defaults, variables)
|
20
|
-
say "Configure nodes"
|
21
|
-
nodes = []
|
22
|
-
ask("How many nodes: ", Integer).times do |i|
|
23
|
-
gather_node_info!(cluster_config)
|
24
|
-
end
|
25
|
-
puts cluster_config.inspect
|
26
|
-
cluster_config
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.gather_value(key, value, indent=0)
|
30
|
-
case value
|
31
|
-
when Array
|
32
|
-
answers = []
|
33
|
-
ask("#{"\t"*indent}How many #{key.to_s}: ", Integer).times do |i|
|
34
|
-
answers << gather_value(key, value.first, 1)
|
35
|
-
say "Configured #{i+1} #{key.to_s}"
|
36
|
-
end
|
37
|
-
answers
|
38
|
-
when Hash
|
39
|
-
ask("#{"\t"*indent}<%= @key %>: ", lambda {|ans| ans =~ /^\{\s*['|:].+$/ ? eval(ans) : ans}) do |q|
|
40
|
-
q.gather = value
|
41
|
-
end
|
42
|
-
when Integer
|
43
|
-
ask("#{"\t"*indent}#{key.to_s}: ", Integer)
|
44
|
-
else
|
45
|
-
ask("#{"\t"*indent}#{key.to_s}: ")
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def self.gather_node_info!(cluster_config)
|
50
|
-
hostname = ask("Hostname: ")
|
51
|
-
ip = ask("Ip: ")
|
52
|
-
role_names = ClassifyCluster::Configurator::ROLES.map { |k| k.is_a?(Hash) ? k.keys.first : k }
|
53
|
-
|
54
|
-
cluster_config.node(hostname, ip) do |node|
|
55
|
-
more_roles = true
|
56
|
-
while more_roles
|
57
|
-
types = {}
|
58
|
-
role_name = ask("Role [#{role_names.join(', ')}]: ", role_names)
|
59
|
-
if ClassifyCluster::Configurator::ROLES.reject { |k| !k.is_a?(Hash) }.map(&:keys).flatten.include?(role_name)
|
60
|
-
possible_types = ClassifyCluster::Configurator::ROLES.reject { |k| !k.is_a?(Hash) || !k.has_key?(role_name)}[0][role_name]
|
61
|
-
more_types = true
|
62
|
-
while more_types
|
63
|
-
type = ask("Type [#{possible_types.join(', ')}]: ", possible_types)
|
64
|
-
possible_types -= [type]
|
65
|
-
types[type] = true
|
66
|
-
more_types = possible_types.size > 0 && agree("More types? ")
|
67
|
-
end
|
68
|
-
end
|
69
|
-
node.role role_name.to_sym, types do |role|
|
70
|
-
while agree("Role variables?")
|
71
|
-
name = ask("name: ")
|
72
|
-
value = ask("value: ")
|
73
|
-
role.variable name, value
|
74
|
-
end
|
75
|
-
end
|
76
|
-
role_names -= [role_name]
|
77
|
-
more_roles = role_names.size > 0 && agree("More roles? ")
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
def self.gather_cluster_info(cluster_name, defaults={}, variables={})
|
83
|
-
cluster_name = ask("Cluster Name (no spaces): ") do |q|
|
84
|
-
q.validate = /^\w.*/
|
85
|
-
end unless cluster_name
|
86
|
-
|
87
|
-
ClassifyCluster::Configurator::Cluster.new(cluster_name) do |cluster_config|
|
88
|
-
file_path = ask("Ssl pem path: ") do |q|
|
89
|
-
q.validate{ |a| File.exists?(a) }
|
90
|
-
q.default = ClassifyCluster::Configurator::Cluster::SSLPEM_FILEPATH
|
91
|
-
end
|
92
|
-
module_name = ask("Puppet module to move it to: ") do |q|
|
93
|
-
q.default = ClassifyCluster::Configurator::Cluster::SSLPEM_MODULE
|
94
|
-
end
|
95
|
-
cluster_config.ssl_pem(file_path, module_name)
|
96
|
-
|
97
|
-
defaults.each_pair do |key, value|
|
98
|
-
cluster_config.variable key, value
|
99
|
-
end
|
100
|
-
variables.each_pair do |key, value|
|
101
|
-
cluster_config.variable key, gather_value(key, value)
|
102
|
-
end
|
103
|
-
|
104
|
-
klasses = ask("Classes: (q to stop)") do |q|
|
105
|
-
q.gather = 'q'
|
106
|
-
end
|
107
|
-
klasses.delete_if {|klass| klass.nil? || klass.empty?}.each do |klass|
|
108
|
-
cluster_config.klass klass
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
module ClassifyCluster
|
2
|
-
module Writers
|
3
|
-
class Classify
|
4
|
-
def self.export!(classify_configurator)
|
5
|
-
File.open('/etc/cluster.rb', 'w') do |file|
|
6
|
-
output file, "# Autogenerated on #{Time.now.to_s}"
|
7
|
-
output file, "cluster :\"#{classify_configurator.name}\" do |cluster|"
|
8
|
-
|
9
|
-
classify_configurator.classes.each do |klass|
|
10
|
-
output file, "cluster.klass #{klass.inspect}", 1
|
11
|
-
end
|
12
|
-
classify_configurator.variables.each_pair do |key, variable|
|
13
|
-
output file, "cluster.variable #{key.inspect}, #{variable.inspect}", 1
|
14
|
-
end
|
15
|
-
|
16
|
-
output file, "end"
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.output(file, str, indent=0)
|
21
|
-
file.write("#{"\s"*(indent*4)}#{str}\n")
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|