rconf 0.5.9 → 0.6.1
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/README.rdoc
CHANGED
@@ -10,39 +10,38 @@ for each application is becoming increasingly complex and switching from one
|
|
10
10
|
application to another for development in particular is quickly becoming
|
11
11
|
close to impossible.
|
12
12
|
|
13
|
-
|
13
|
+
rconf aims at addressing some of these difficulties by providing a uniform
|
14
14
|
and consistent mechanism for applications developed at RightScale to
|
15
|
-
declaratively specify the tools they depend on
|
16
|
-
|
17
|
-
|
15
|
+
declaratively specify the tools they depend on various platforms (linux, darwin
|
16
|
+
and potentially windows).
|
17
|
+
|
18
|
+
rconf uses a DSL close to Chef recipes for defining an application configuration.
|
18
19
|
Each application must be equipped with a definition that must reside at the top
|
19
|
-
level directory of the application and
|
20
|
-
|
21
|
-
|
22
|
-
the "script/bootstrap_environment" script provided in the "script" directory
|
23
|
-
("script/bootstrap_environment.bat" on windows).
|
20
|
+
level directory of the application and use the '.rc' file extension. When run
|
21
|
+
for the first time rconf sets up a .rvmrc file which gets invoked and sets up
|
22
|
+
the environment each time the application directory gets 'cd-ed' into.
|
24
23
|
|
25
|
-
Internally
|
24
|
+
Internally rconf relies on 'configurators' to configure the machine
|
26
25
|
appropriately. There is one configurator per tool that needs configuration.
|
27
|
-
Each configurator is dynamically instantiated by
|
26
|
+
Each configurator is dynamically instantiated by rconf as it reads the
|
28
27
|
application configuration file. This makes for an extensible system where new
|
29
28
|
configurator may be added to configure new tools that new applications may
|
30
|
-
rely on.
|
29
|
+
rely on.
|
31
30
|
|
32
31
|
== REQUIREMENTS
|
33
32
|
|
34
33
|
=== Running
|
35
34
|
|
36
|
-
|
35
|
+
==== Linux and Mac OS X
|
37
36
|
|
38
|
-
|
39
|
-
|
40
|
-
|
37
|
+
- ruby >= 1.8.6
|
38
|
+
- curl
|
39
|
+
- tar
|
41
40
|
|
42
|
-
|
41
|
+
==== Windows
|
43
42
|
|
44
|
-
|
45
|
-
|
43
|
+
- ruby >= 1.8.6
|
44
|
+
- Win32API gem
|
46
45
|
|
47
46
|
=== Unit testing
|
48
47
|
|
@@ -54,3 +53,50 @@ Then the build can be tested with
|
|
54
53
|
|
55
54
|
rake spec
|
56
55
|
|
56
|
+
== WRITING RCONF CONFIGURATION FILES
|
57
|
+
|
58
|
+
rconf uses a ruby DSL for configuration files (.rc). Each configurator is
|
59
|
+
associated with a keyword. The configuration for a given configurator then
|
60
|
+
lists each configurator setting it needs to set and the associated value as in:
|
61
|
+
|
62
|
+
ruby do
|
63
|
+
version 'ruby-1.9.2-p136'
|
64
|
+
end
|
65
|
+
|
66
|
+
The configuration file consists of a sequence of these configurator sections
|
67
|
+
executed in order. For a complete list of available configurators run:
|
68
|
+
|
69
|
+
rconf --configurators
|
70
|
+
|
71
|
+
The same configurator can appear multiple times in a configuration file.
|
72
|
+
|
73
|
+
== EXTENDING RCONF WITH NEW CONFIGURATORS
|
74
|
+
|
75
|
+
Writing a configurator consists of writing a ruby class which includes the
|
76
|
+
+RightConf::Configurator+ module and uses the class methods define there to
|
77
|
+
register, provide a description and list its settings.
|
78
|
+
|
79
|
+
The exact methods are:
|
80
|
+
|
81
|
+
- +register+: Takes one argument which is the keyword associated with the configurator in configuration files.
|
82
|
+
- +description+: Associates the description with the configurator used in the help.
|
83
|
+
- +settings+: The value should be a hash where the keys are the settings names (ruby symbols) and the value is the setting description.
|
84
|
+
- +validate_has_settings+: An array of settings names (symbols) for all settings that must be set for a configuration to be valid when using that configurator.
|
85
|
+
|
86
|
+
The configurator class then needs to implement the +run+ method which gets
|
87
|
+
called whenever rconf executes a configuration section using the configurator.
|
88
|
+
|
89
|
+
Alternatively the configurator class may implement +run_<platform>+ where
|
90
|
+
+<platform>+ can take the values 'darwin', 'linux' or 'windows' if the
|
91
|
+
implementation needs to be platform specific.
|
92
|
+
|
93
|
+
The configurator can also provide distribution specific implementations by
|
94
|
+
implementing +run_<platform>_<flavor>+ where +<flavor>+ depends on the
|
95
|
+
platform and can take the values 'ubuntu', 'centos' etc. (linux).
|
96
|
+
|
97
|
+
Finally the +run+ method can also be implemented using the full specification
|
98
|
+
for a platform including the release number (e.g. +run_linux_ubuntu_10_10+). In
|
99
|
+
each case rconf will use the most specific implementation (so if both
|
100
|
+
+run_linux+ and +run_linux_ubuntu+ are provided and the configurator is
|
101
|
+
running on Ubuntu then rconf will call the +run_linux_ubuntu+ implementation).
|
102
|
+
|
data/bin/rconf
CHANGED
@@ -37,7 +37,7 @@ where [options] are:
|
|
37
37
|
opt :output, 'Output file (output to STDOUT by default)', :type => :string
|
38
38
|
opt :verbose, 'Print debug output'
|
39
39
|
end
|
40
|
-
if opts[:config].nil?
|
40
|
+
if opts[:config].nil? && !opts[:configurators]
|
41
41
|
opts[:config] = Dir['./*.rc']
|
42
42
|
if opts[:config].empty?
|
43
43
|
Trollop::die :config, "not used and could not find a '.rc' file in the working directory"
|
@@ -74,7 +74,8 @@ where [options] are:
|
|
74
74
|
configurator.all_settings.each do |name, desc|
|
75
75
|
num_spaces = max_size - name.to_s.size + 1
|
76
76
|
print " - #{name.to_s.blue}:#{' ' * num_spaces}#{desc}"
|
77
|
-
|
77
|
+
required_settings = configurator.required_settings || []
|
78
|
+
if required_settings.include?(name)
|
78
79
|
puts ' [required]'.green
|
79
80
|
else
|
80
81
|
puts
|
@@ -22,7 +22,8 @@ module RightConf
|
|
22
22
|
settings :debian => 'Packages to be installed on Debian based Linux',
|
23
23
|
:centos => 'Packages to be installed on RedHat / Centos',
|
24
24
|
:windows => 'Softwared to be downloaded and installed on Windows',
|
25
|
-
:mac => 'Brew packages to be installed on Mac OS X (https://github.com/mxcl/homebrew)'
|
25
|
+
:mac => 'Brew packages to be installed on Mac OS X (https://github.com/mxcl/homebrew)',
|
26
|
+
:abort_on_failure => 'Whether to abort if packages failed to install (false by default)'
|
26
27
|
|
27
28
|
# Install debian packages
|
28
29
|
#
|
@@ -31,7 +32,8 @@ module RightConf
|
|
31
32
|
def run_linux_ubuntu
|
32
33
|
return if debian.nil?
|
33
34
|
report_check("Installing the following packages:\n#{debian.join(' ')}\nThis could take a while")
|
34
|
-
opts = debian
|
35
|
+
opts = debian.dup
|
36
|
+
opts << { :abort_on_failure => 'Failed to install packages' } if abort_on_failure
|
35
37
|
Command.execute('sudo', 'aptitude', 'install', *opts)
|
36
38
|
report_success
|
37
39
|
end
|
@@ -44,7 +46,8 @@ module RightConf
|
|
44
46
|
def run_linux_centos
|
45
47
|
return if centos.nil?
|
46
48
|
report_check("Installing the following packages:\n#{centos.join(' ')}\nThis could take a while")
|
47
|
-
opts = centos
|
49
|
+
opts = centos.dup
|
50
|
+
opts << { :abort_on_failure => 'Failed to install packages' } if abort_on_failure
|
48
51
|
Command.execute('sudo', 'yum', 'install', '-y', *opts)
|
49
52
|
report_success
|
50
53
|
end
|
data/lib/rconf/version.rb
CHANGED
@@ -39,7 +39,7 @@ describe RightConf::BundlerConfigurator do
|
|
39
39
|
flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
|
40
40
|
'bundle', 'install', {:abort_on_failure=>"Failed to install gems"}).and_return(success_result)
|
41
41
|
flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
|
42
|
-
'gem', 'uninstall', 'bundler', '-a', '-x'
|
42
|
+
'gem', 'uninstall', 'bundler', '-a', '-x').and_return(success_result)
|
43
43
|
flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
|
44
44
|
'gem', 'install',
|
45
45
|
File.join(RightConf::BundlerConfigurator::DEFAULT_GEM_PATH, 'bundler-0.gem'),
|
@@ -27,15 +27,13 @@ describe RightConf::PackagesConfigurator do
|
|
27
27
|
|
28
28
|
it 'should install packages on Ubuntu' do
|
29
29
|
flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
|
30
|
-
'sudo', 'aptitude', 'install', 'deb1', 'deb2'
|
31
|
-
{:abort_on_failure=>"Failed to install packages"}).and_return(success_result)
|
30
|
+
'sudo', 'aptitude', 'install', 'deb1', 'deb2').and_return(success_result)
|
32
31
|
@configurator.run_linux_ubuntu
|
33
32
|
end
|
34
33
|
|
35
34
|
it 'should install packages on Centos' do
|
36
35
|
flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
|
37
|
-
'sudo', 'yum', 'install', '-y', 'cent1', 'cent2'
|
38
|
-
{:abort_on_failure=>"Failed to install packages"}).and_return(success_result)
|
36
|
+
'sudo', 'yum', 'install', '-y', 'cent1', 'cent2').and_return(success_result)
|
39
37
|
@configurator.run_linux_centos
|
40
38
|
end
|
41
39
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: rconf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.6.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Raphael Simon
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-03-
|
13
|
+
date: 2011-03-08 00:00:00 -08:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|