rconf 0.7.8 → 0.7.9
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/rconf +1 -0
- data/lib/rconf/configurators/build_configurator.rb +10 -1
- data/lib/rconf/configurators/cassandra_configurator.rb +2 -1
- data/lib/rconf/configurators/execute_configurator.rb +10 -1
- data/lib/rconf/configurators/git_repo_configurator.rb +11 -1
- data/lib/rconf/language.rb +5 -1
- data/lib/rconf/progress_reporter.rb +1 -1
- data/lib/rconf/version.rb +1 -1
- data/spec/configurators/build_configurator_spec.rb +1 -6
- data/spec/configurators/bundler_configurator_spec.rb +1 -6
- data/spec/configurators/git_repo_configurator_spec.rb +7 -10
- data/spec/configurators/packages_configurator_spec.rb +1 -6
- data/spec/configurators/passenger_configurator_spec.rb +11 -16
- data/spec/configurators/ruby_configurator_spec.rb +30 -33
- data/spec/language_spec.rb +3 -3
- data/spec/spec_helper.rb +20 -0
- metadata +1 -1
data/bin/rconf
CHANGED
@@ -158,6 +158,7 @@ where [options] are:
|
|
158
158
|
begin
|
159
159
|
lang = Language.load(options[:config])
|
160
160
|
report_fatal("Validation of configuration file failed:\n -#{lang.validation_errors.join("\n -").map(&:red)}") unless lang.validation_errors.empty?
|
161
|
+
report_error(lang.warnings.join(', ').green) unless lang.warnings.empty?
|
161
162
|
aborted = false
|
162
163
|
Dir.chdir(File.dirname(options[:config])) do
|
163
164
|
lang.configurators.each do |c|
|
@@ -32,7 +32,7 @@ module RightConf
|
|
32
32
|
#
|
33
33
|
# === Return
|
34
34
|
# true:: Always return true
|
35
|
-
def
|
35
|
+
def run_linux
|
36
36
|
if only_if.nil? || instance_eval(only_if)
|
37
37
|
message("Building #{path}") if message.nil?
|
38
38
|
report_check message
|
@@ -51,6 +51,15 @@ module RightConf
|
|
51
51
|
end
|
52
52
|
true
|
53
53
|
end
|
54
|
+
alias :run_darwin :run_linux
|
55
|
+
|
56
|
+
# Run command line on Windows
|
57
|
+
#
|
58
|
+
# === Return
|
59
|
+
# true:: Always return true
|
60
|
+
def run_windows
|
61
|
+
true # TBD
|
62
|
+
end
|
54
63
|
|
55
64
|
protected
|
56
65
|
|
@@ -33,7 +33,7 @@ module RightConf
|
|
33
33
|
#
|
34
34
|
# === Return
|
35
35
|
# true:: Always return true
|
36
|
-
def
|
36
|
+
def run_linux
|
37
37
|
install_path(default_install_path) if install_path.nil?
|
38
38
|
abort_on_failure(false) if abort_on_failure.nil?
|
39
39
|
unless cassandra_installed
|
@@ -53,6 +53,7 @@ module RightConf
|
|
53
53
|
report_success
|
54
54
|
end
|
55
55
|
end
|
56
|
+
alias :run_darwin :run_linux
|
56
57
|
|
57
58
|
# Install Windows software
|
58
59
|
#
|
@@ -30,7 +30,7 @@ module RightConf
|
|
30
30
|
#
|
31
31
|
# === Return
|
32
32
|
# true:: Always return true
|
33
|
-
def
|
33
|
+
def run_linux
|
34
34
|
report_check message if message
|
35
35
|
args = command_line.split(' ')
|
36
36
|
args += [ { :abort_on_failure => abort_on_failure } ] if abort_on_failure
|
@@ -38,6 +38,15 @@ module RightConf
|
|
38
38
|
report_success if message
|
39
39
|
true
|
40
40
|
end
|
41
|
+
alias :run_darwin :run_linux
|
42
|
+
|
43
|
+
# Run command line on Windows
|
44
|
+
#
|
45
|
+
# === Return
|
46
|
+
# true:: Always return true
|
47
|
+
def run_windows
|
48
|
+
true # TBD
|
49
|
+
end
|
41
50
|
|
42
51
|
end
|
43
52
|
end
|
@@ -29,7 +29,7 @@ module RightConf
|
|
29
29
|
#
|
30
30
|
# === Return
|
31
31
|
# true:: Always return true
|
32
|
-
def
|
32
|
+
def run_linux
|
33
33
|
if File.exist?(path)
|
34
34
|
unless File.exist?(File.join(path, '.git'))
|
35
35
|
FileUtils.mv(path, "#{path}_old")
|
@@ -52,6 +52,16 @@ module RightConf
|
|
52
52
|
end
|
53
53
|
true
|
54
54
|
end
|
55
|
+
alias :run_darwin :run_linux
|
56
|
+
|
57
|
+
# Clone git repo and run build commands if given on Windows
|
58
|
+
#
|
59
|
+
# === Return
|
60
|
+
# true:: Always return true
|
61
|
+
def run_windows
|
62
|
+
true # TBD
|
63
|
+
end
|
64
|
+
|
55
65
|
|
56
66
|
end
|
57
67
|
end
|
data/lib/rconf/language.rb
CHANGED
@@ -20,6 +20,9 @@ module RightConf
|
|
20
20
|
# Errors generated by configurators validations if any
|
21
21
|
attr_reader :validation_errors
|
22
22
|
|
23
|
+
# Warnings
|
24
|
+
attr_reader :warnings
|
25
|
+
|
23
26
|
# Load given file and run content to retrieve configurators
|
24
27
|
#
|
25
28
|
# === Parameters
|
@@ -56,6 +59,7 @@ module RightConf
|
|
56
59
|
def initialize
|
57
60
|
@configurators = Array.new
|
58
61
|
@validation_errors = Array.new
|
62
|
+
@warnings = Array.new
|
59
63
|
end
|
60
64
|
|
61
65
|
# Each missing method should correspond to a configurator section.
|
@@ -79,7 +83,7 @@ module RightConf
|
|
79
83
|
@validation_errors << error if error
|
80
84
|
@configurators << configurator
|
81
85
|
else
|
82
|
-
@
|
86
|
+
@warnings << "Unknown configurator '#{meth}'"
|
83
87
|
end
|
84
88
|
else
|
85
89
|
@validation_errors << "Invalid syntax, expecting block after '#{meth}'"
|
@@ -22,7 +22,7 @@ module RightConf
|
|
22
22
|
def self.included(base)
|
23
23
|
@@reporters ||= []
|
24
24
|
[ :report_section, :report, :report_check, :report_success,
|
25
|
-
:report_failure, :report_fatal, :report_result ].each do |meth|
|
25
|
+
:report_failure, :report_error, :report_fatal, :report_result ].each do |meth|
|
26
26
|
meta_def(meth) { |*args| @@reporters.each { |r| r.__send__(meth, *args) } }
|
27
27
|
end
|
28
28
|
end
|
data/lib/rconf/version.rb
CHANGED
@@ -14,12 +14,7 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
|
14
14
|
describe RightConf::BuildConfigurator do
|
15
15
|
|
16
16
|
before(:each) do
|
17
|
-
|
18
|
-
@configurator = lang.configurators.first
|
19
|
-
[:report_check, :report_result, :report_success].each do |meth|
|
20
|
-
flexmock(@configurator).should_receive(meth)
|
21
|
-
end
|
22
|
-
flexmock(@configurator).should_receive(:report_fatal).and_return { |*args| raise args.join(' ') }
|
17
|
+
@configurator = create_configurator('build { path "../source" }')
|
23
18
|
end
|
24
19
|
|
25
20
|
it 'should build' do
|
@@ -18,12 +18,7 @@ describe RightConf::BundlerConfigurator do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
before(:each) do
|
21
|
-
|
22
|
-
@configurator = lang.configurators.first
|
23
|
-
[:report_check, :report_result, :report_success].each do |meth|
|
24
|
-
flexmock(@configurator).should_receive(meth)
|
25
|
-
end
|
26
|
-
flexmock(@configurator).should_receive(:report_fatal).and_return { |*args| raise args.join(' ') }
|
21
|
+
@configurator = create_configurator('bundler { version "0" }')
|
27
22
|
RightConf::Command.instance.instance_variable_set(:@rvm_prefix, 'r@g')
|
28
23
|
end
|
29
24
|
|
@@ -14,33 +14,30 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
|
14
14
|
describe RightConf::GitRepoConfigurator do
|
15
15
|
|
16
16
|
before(:each) do
|
17
|
-
|
18
|
-
@configurator = lang.configurators.first
|
19
|
-
[:report_check, :report_result, :report_success].each do |meth|
|
20
|
-
flexmock(@configurator).should_receive(meth)
|
21
|
-
end
|
22
|
-
flexmock(@configurator).should_receive(:report_fatal).and_return { |*args| raise args.join(' ') }
|
17
|
+
@configurator = create_configurator('git_repo { repo "git"; path "./git" }')
|
23
18
|
@abf = { :abort_on_failure => 'Failed to clone git into ./git' }
|
24
19
|
end
|
25
20
|
|
26
21
|
it 'should clone' do
|
22
|
+
flexmock(File).should_receive(:exist?).with('./git').and_return(false)
|
27
23
|
should_execute('git', 'clone', 'git', './git', @abf).once
|
28
|
-
@configurator.
|
24
|
+
@configurator.run_linux
|
29
25
|
end
|
30
26
|
|
31
27
|
it 'should checkout the right tag' do
|
28
|
+
flexmock(File).should_receive(:exist?).with('./git').and_return(false)
|
32
29
|
@configurator.instance_eval { tag('tag') }
|
33
30
|
should_execute('git', 'clone', 'git', './git', @abf).once
|
34
31
|
flexmock(Dir).should_receive(:chdir).with('./git', Proc).and_yield
|
35
32
|
should_execute('git', 'checkout', 'tag', {:abort_on_failure=>"Failed to checkout tag"}).once
|
36
|
-
@configurator.
|
33
|
+
@configurator.run_linux
|
37
34
|
end
|
38
35
|
|
39
36
|
it 'should skip checkout if directory already exists and contains a .git subdirectory' do
|
40
37
|
flexmock(File).should_receive(:exist?).with('./git').twice.and_return(true)
|
41
38
|
flexmock(File).should_receive(:exist?).with('./git/.git').once.and_return(true)
|
42
39
|
should_execute.and_return { raise 'Command.execute should not be called' }
|
43
|
-
@configurator.
|
40
|
+
@configurator.run_linux
|
44
41
|
end
|
45
42
|
|
46
43
|
it 'should move directory if already exists but not a git repo' do
|
@@ -49,7 +46,7 @@ describe RightConf::GitRepoConfigurator do
|
|
49
46
|
flexmock(File).should_receive(:exist?).with('./git').once.ordered.and_return(false)
|
50
47
|
flexmock(FileUtils).should_receive(:mv).once
|
51
48
|
should_execute('git', 'clone', 'git', './git', @abf).once
|
52
|
-
@configurator.
|
49
|
+
@configurator.run_linux
|
53
50
|
end
|
54
51
|
|
55
52
|
end
|
@@ -18,12 +18,7 @@ describe RightConf::PackagesConfigurator do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
before(:each) do
|
21
|
-
|
22
|
-
@configurator = lang.configurators.first
|
23
|
-
[:report_check, :report_result, :report_success].each do |meth|
|
24
|
-
flexmock(@configurator).should_receive(meth)
|
25
|
-
end
|
26
|
-
flexmock(@configurator).should_receive(:report_fatal).and_return { |*args| raise args.join(' ') }
|
21
|
+
@configurator = create_configurator('packages { debian %w(deb1 deb2); centos %w(cent1 cent2); darwin %w(mac1 mac2) }')
|
27
22
|
end
|
28
23
|
|
29
24
|
it 'should install packages on Ubuntu' do
|
@@ -14,15 +14,20 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
|
14
14
|
describe RightConf::PassengerConfigurator do
|
15
15
|
|
16
16
|
before(:each) do
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
flexmock(
|
17
|
+
@configurator = create_configurator('passenger {}')
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should default to /opt/nginx when possible' do
|
21
|
+
flexmock(File).should_receive(:exist?).with('/opt/nginx').once.and_return(true)
|
22
|
+
flexmock(File).should_receive(:exist?).with('/opt').once.and_return(true)
|
23
|
+
flexmock(File).should_receive(:writable?).with('/opt/nginx').once.and_return(true)
|
24
|
+
@configurator.__send__(:default_install_path).should == '/opt/nginx'
|
23
25
|
end
|
24
26
|
|
25
27
|
it 'should set defaults' do
|
28
|
+
flexmock(File).should_receive(:exist?).with('/opt/nginx').twice.and_return(true)
|
29
|
+
flexmock(File).should_receive(:exist?).with('/opt').twice.and_return(true)
|
30
|
+
flexmock(File).should_receive(:writable?).with('/opt/nginx').twice.and_return(true)
|
26
31
|
@configurator.__send__(:set_defaults)
|
27
32
|
@configurator.right_site_src_path.should == Dir.getwd
|
28
33
|
@configurator.library_src_path.should == File.expand_path(File.join(Dir.getwd, '..', 'library'))
|
@@ -31,15 +36,5 @@ describe RightConf::PassengerConfigurator do
|
|
31
36
|
@configurator.user.should == ENV['USER']
|
32
37
|
end
|
33
38
|
|
34
|
-
it 'should default to /opt/nginx when possible' do
|
35
|
-
to_check = File.exist?('/opt/nginx') ? '/opt/nginx' :
|
36
|
-
(File.exist?('/opt') ? '/opt' : '/')
|
37
|
-
if File.writable?(to_check)
|
38
|
-
@configurator.__send__(:default_install_path).should == '/opt/nginx'
|
39
|
-
else
|
40
|
-
pending '/opt/nginx not writable'
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
39
|
end
|
45
40
|
|
@@ -20,12 +20,8 @@ describe RightConf::RubyConfigurator do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
before(:each) do
|
23
|
-
|
24
|
-
|
25
|
-
[:report_check, :report_result, :report_success, :report].each do |meth|
|
26
|
-
flexmock(@configurator).should_receive(meth)
|
27
|
-
end
|
28
|
-
flexmock(@configurator).should_receive(:report_fatal).and_return { |*args| raise args.join(' ') }
|
23
|
+
@configurator = create_configurator('ruby { version "0"; rubygems "1" }')
|
24
|
+
flexmock(File).should_receive(:exist?).with('.rvmrc').and_return(true)
|
29
25
|
end
|
30
26
|
|
31
27
|
it 'should succeed on linux when rvm succeeds' do
|
@@ -61,32 +57,35 @@ describe RightConf::RubyConfigurator do
|
|
61
57
|
{:abort_on_failure=>'Failed to install rubygems'}).once.and_return(success_result)
|
62
58
|
@configurator.run_linux
|
63
59
|
end
|
60
|
+
end
|
64
61
|
|
65
|
-
|
62
|
+
describe 'bashrc update' do
|
66
63
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
64
|
+
before(:each) do
|
65
|
+
flexmock(File).should_receive(:exist?).with(File.join(ENV['HOME'], '.bashrc')).once.and_return(true)
|
66
|
+
flexmock(File).should_receive(:exist?).with('.rvmrc').and_return(true)
|
67
|
+
flexmock(FileUtils).should_receive(:mv).and_return(true)
|
68
|
+
f = flexmock('f')
|
69
|
+
f.should_receive(:puts).and_return { |c| @bashrc_content = c }
|
70
|
+
flexmock(File).should_receive(:open).and_yield(f)
|
71
|
+
@configurator = create_configurator('ruby { version "0"; rubygems "1" }', :enable_updater => true)
|
72
|
+
@rvm_bash_activation = @configurator.__send__(:rvm_bash_activation)
|
73
|
+
end
|
75
74
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
75
|
+
it 'should install rvm hook in bashrc when not present' do
|
76
|
+
flexmock(IO).should_receive(:read).and_return('test')
|
77
|
+
@configurator.__send__(:setup_bashrc)
|
78
|
+
@bashrc_content.should == "#{@rvm_bash_activation}\ntest"
|
79
|
+
end
|
81
80
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
81
|
+
it 'should not install rvm hook in bashrc when present' do
|
82
|
+
flexmock(IO).should_receive(:read).and_return('test' + @rvm_bash_activation)
|
83
|
+
@configurator.__send__(:setup_bashrc)
|
84
|
+
@bashrc_content.should be_nil
|
85
|
+
end
|
87
86
|
|
88
|
-
|
89
|
-
|
87
|
+
it 'should install rvm hook after path is set' do
|
88
|
+
flexmock(IO).should_receive(:read).and_return(<<-EOS
|
90
89
|
echo 'zobi la mouche'
|
91
90
|
radio killed the radio star
|
92
91
|
#PATH=something:should be fine
|
@@ -94,9 +93,9 @@ this should not:
|
|
94
93
|
PATH=something
|
95
94
|
AFTER
|
96
95
|
EOS
|
97
|
-
|
98
|
-
|
99
|
-
|
96
|
+
)
|
97
|
+
@configurator.__send__(:setup_bashrc)
|
98
|
+
@bashrc_content.should == <<-EOS
|
100
99
|
echo 'zobi la mouche'
|
101
100
|
radio killed the radio star
|
102
101
|
#PATH=something:should be fine
|
@@ -104,9 +103,7 @@ this should not:
|
|
104
103
|
PATH=something
|
105
104
|
#{@rvm_bash_activation}
|
106
105
|
AFTER
|
107
|
-
|
108
|
-
end
|
109
|
-
|
106
|
+
EOS
|
110
107
|
end
|
111
108
|
|
112
109
|
end
|
data/spec/language_spec.rb
CHANGED
@@ -19,10 +19,10 @@ describe RightConf::Language do
|
|
19
19
|
lang.validation_errors.first.should == "Invalid syntax, expecting block after 'toto'"
|
20
20
|
end
|
21
21
|
|
22
|
-
it 'should
|
22
|
+
it 'should warn about non-existent configurator' do
|
23
23
|
lang = RightConf::Language.parse('toto { 42 }')
|
24
|
-
lang.
|
25
|
-
lang.
|
24
|
+
lang.warnings.size.should == 1
|
25
|
+
lang.warnings.first.should == "Unknown configurator 'toto'"
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'should parse correctly' do
|
data/spec/spec_helper.rb
CHANGED
@@ -19,6 +19,26 @@ RSpec.configure do |c|
|
|
19
19
|
c.mock_with(:flexmock)
|
20
20
|
end
|
21
21
|
|
22
|
+
# Create configurator for testing and setup common mocks
|
23
|
+
#
|
24
|
+
# === Parameters
|
25
|
+
# code(String):: Code using rconf language syntax used to initialize configurator
|
26
|
+
# opts[:enable_updater](TrueClass|FalseClass):: Don't mock out environment updater if set
|
27
|
+
#
|
28
|
+
# === Return
|
29
|
+
# configurator(RightConf::Configurator):: Created configurator
|
30
|
+
def create_configurator(code, opts={})
|
31
|
+
lang = RightConf::Language.parse(code)
|
32
|
+
configurator = lang.configurators.first
|
33
|
+
[:report_check, :report_error, :report_result, :report_success].each do |meth|
|
34
|
+
flexmock(configurator).should_receive(meth)
|
35
|
+
end
|
36
|
+
flexmock(configurator).should_receive(:report_fatal).and_return { |*args| raise args.join(' ') }
|
37
|
+
flexmock(File).should_receive(:exist?).with(File.join(ENV['HOME'], '.rconf')).and_return(false)
|
38
|
+
flexmock(RightConf::EnvironmentUpdater).should_receive(:update) unless opts[:enable_updater]
|
39
|
+
configurator
|
40
|
+
end
|
41
|
+
|
22
42
|
# Helper method to mock Command.execute
|
23
43
|
#
|
24
44
|
# === Parameters
|