corl 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. data/Gemfile +5 -10
  2. data/Gemfile.lock +13 -11
  3. data/README.rdoc +1 -1
  4. data/Rakefile +3 -3
  5. data/VERSION +1 -1
  6. data/bin/corl +2 -54
  7. data/bootstrap/bootstrap.sh +91 -0
  8. data/bootstrap/lib/shell/LICENSE.txt +674 -0
  9. data/bootstrap/lib/shell/command.sh +214 -0
  10. data/bootstrap/lib/shell/filesystem.sh +139 -0
  11. data/bootstrap/lib/shell/load.sh +73 -0
  12. data/bootstrap/lib/shell/os.sh +67 -0
  13. data/bootstrap/lib/shell/script.sh +160 -0
  14. data/bootstrap/lib/shell/starter.sh +64 -0
  15. data/bootstrap/lib/shell/validators.sh +50 -0
  16. data/bootstrap/os/ubuntu/00_base.sh +5 -0
  17. data/bootstrap/os/ubuntu/01_git.sh +5 -0
  18. data/bootstrap/os/ubuntu/05_ruby.sh +7 -0
  19. data/bootstrap/os/ubuntu/06_puppet.sh +38 -0
  20. data/bootstrap/os/ubuntu/10_corl.sh +9 -0
  21. data/corl.gemspec +61 -124
  22. data/lib/{corl → CORL}/action/bootstrap.rb +13 -7
  23. data/lib/CORL/action/exec.rb +39 -0
  24. data/lib/CORL/action/image.rb +31 -0
  25. data/lib/{corl → CORL}/action/images.rb +1 -1
  26. data/lib/CORL/action/lookup.rb +34 -0
  27. data/lib/{corl → CORL}/action/machines.rb +1 -1
  28. data/lib/CORL/action/provision.rb +31 -0
  29. data/lib/{corl → CORL}/action/seed.rb +3 -3
  30. data/lib/{corl → CORL}/action/spawn.rb +2 -2
  31. data/lib/CORL/action/start.rb +31 -0
  32. data/lib/CORL/action/stop.rb +31 -0
  33. data/lib/{corl → CORL}/configuration/file.rb +1 -1
  34. data/lib/{corl → CORL}/event/puppet.rb +1 -1
  35. data/lib/{corl → CORL}/extension/puppetloader.rb +1 -1
  36. data/lib/{corl → CORL}/machine/fog.rb +3 -3
  37. data/lib/{corl → CORL}/machine/physical.rb +2 -2
  38. data/lib/{corl → CORL}/network/default.rb +1 -1
  39. data/lib/{corl → CORL}/node/aws.rb +0 -4
  40. data/lib/{corl → CORL}/node/google.rb +0 -4
  41. data/lib/{corl → CORL}/node/local.rb +1 -1
  42. data/lib/{corl → CORL}/node/rackspace.rb +0 -4
  43. data/lib/{corl → CORL}/provisioner/puppetnode.rb +1 -14
  44. data/lib/{corl → CORL}/provisioner/puppetnode/resource.rb +0 -0
  45. data/lib/{corl → CORL}/provisioner/puppetnode/resource_group.rb +0 -0
  46. data/lib/{corl → CORL}/template/environment.rb +1 -1
  47. data/lib/core/facade.rb +49 -0
  48. data/lib/{corl_core → core}/mixin/action/keypair.rb +10 -10
  49. data/lib/{corl_core → core}/mixin/lookup.rb +0 -0
  50. data/lib/{corl_core → core}/mod/hiera_backend.rb +0 -0
  51. data/lib/{corl_core/mixin/action/node.rb → core/plugin/action.rb} +66 -33
  52. data/lib/{corl_core → core}/plugin/configuration.rb +2 -2
  53. data/lib/{corl/node → core/plugin}/fog.rb +5 -1
  54. data/lib/{corl_core → core}/plugin/machine.rb +2 -2
  55. data/lib/{corl_core → core}/plugin/network.rb +4 -4
  56. data/lib/{corl_core → core}/plugin/node.rb +11 -9
  57. data/lib/{corl_core → core}/plugin/provisioner.rb +2 -2
  58. data/lib/{corl_core → core}/util/ssh.rb +1 -1
  59. data/lib/corl.rb +53 -112
  60. data/lib/puppet/parser/functions/ensure.rb +0 -4
  61. data/locales/en.yml +55 -148
  62. metadata +84 -222
  63. data/lib/corl/action/add.rb +0 -69
  64. data/lib/corl/action/clone.rb +0 -40
  65. data/lib/corl/action/create.rb +0 -55
  66. data/lib/corl/action/exec.rb +0 -41
  67. data/lib/corl/action/extract.rb +0 -49
  68. data/lib/corl/action/image.rb +0 -30
  69. data/lib/corl/action/lookup.rb +0 -35
  70. data/lib/corl/action/provision.rb +0 -37
  71. data/lib/corl/action/remove.rb +0 -51
  72. data/lib/corl/action/save.rb +0 -53
  73. data/lib/corl/action/start.rb +0 -37
  74. data/lib/corl/action/stop.rb +0 -30
  75. data/lib/corl/action/update.rb +0 -37
  76. data/lib/corl/command/shell.rb +0 -164
  77. data/lib/corl/event/regex.rb +0 -52
  78. data/lib/corl/project/git.rb +0 -465
  79. data/lib/corl/project/github.rb +0 -108
  80. data/lib/corl/template/json.rb +0 -16
  81. data/lib/corl/template/wrapper.rb +0 -16
  82. data/lib/corl/template/yaml.rb +0 -16
  83. data/lib/corl/translator/json.rb +0 -27
  84. data/lib/corl/translator/yaml.rb +0 -27
  85. data/lib/corl_core/codes.rb +0 -107
  86. data/lib/corl_core/config.rb +0 -337
  87. data/lib/corl_core/config/collection.rb +0 -57
  88. data/lib/corl_core/config/options.rb +0 -70
  89. data/lib/corl_core/core.rb +0 -59
  90. data/lib/corl_core/corl.rb +0 -254
  91. data/lib/corl_core/errors.rb +0 -84
  92. data/lib/corl_core/facade.rb +0 -126
  93. data/lib/corl_core/gems.rb +0 -72
  94. data/lib/corl_core/manager.rb +0 -425
  95. data/lib/corl_core/mixin/action/commit.rb +0 -58
  96. data/lib/corl_core/mixin/action/project.rb +0 -53
  97. data/lib/corl_core/mixin/action/push.rb +0 -52
  98. data/lib/corl_core/mixin/config/collection.rb +0 -53
  99. data/lib/corl_core/mixin/config/ops.rb +0 -53
  100. data/lib/corl_core/mixin/config/options.rb +0 -39
  101. data/lib/corl_core/mixin/macro/object_interface.rb +0 -361
  102. data/lib/corl_core/mixin/macro/plugin_interface.rb +0 -380
  103. data/lib/corl_core/mixin/settings.rb +0 -46
  104. data/lib/corl_core/mixin/sub_config.rb +0 -148
  105. data/lib/corl_core/mod/hash.rb +0 -29
  106. data/lib/corl_core/plugin/action.rb +0 -381
  107. data/lib/corl_core/plugin/base.rb +0 -374
  108. data/lib/corl_core/plugin/command.rb +0 -98
  109. data/lib/corl_core/plugin/event.rb +0 -53
  110. data/lib/corl_core/plugin/extension.rb +0 -12
  111. data/lib/corl_core/plugin/project.rb +0 -927
  112. data/lib/corl_core/plugin/template.rb +0 -80
  113. data/lib/corl_core/plugin/translator.rb +0 -38
  114. data/lib/corl_core/util/cli.rb +0 -352
  115. data/lib/corl_core/util/data.rb +0 -404
  116. data/lib/corl_core/util/disk.rb +0 -114
  117. data/lib/corl_core/util/git.rb +0 -47
  118. data/lib/corl_core/util/interface.rb +0 -319
  119. data/lib/corl_core/util/liquid.rb +0 -17
  120. data/lib/corl_core/util/package.rb +0 -93
  121. data/lib/corl_core/util/shell.rb +0 -239
  122. data/spec/corl_core/interface_spec.rb +0 -489
@@ -1,47 +0,0 @@
1
- module CORL
2
- module Util
3
- class Git < ::Grit::Repo
4
-
5
- #-----------------------------------------------------------------------------
6
- # Constructor / Destructor
7
-
8
- def initialize(path, options = {})
9
- epath = File.expand_path(path)
10
- git_dir = File.join(epath, '.git')
11
-
12
- @bare = (options[:is_bare] ? true : false)
13
-
14
- Grit.debug = true if CORL.log_level == :debug
15
-
16
- if File.exist?(git_dir)
17
- self.working_dir = epath
18
-
19
- if File.directory?(git_dir)
20
- self.path = git_dir
21
- else
22
- git_dir = Util::Disk.read(git_dir)
23
- unless git_dir.nil?
24
- git_dir = git_dir.gsub(/^gitdir\:\s*/, '').strip
25
- self.path = git_dir if File.directory?(git_dir)
26
- end
27
- end
28
-
29
- elsif File.directory?(epath) && (options[:is_bare] || (epath =~ /\.git$/ && File.exist?(File.join(epath, 'HEAD'))))
30
- self.path = epath
31
- @bare = true
32
-
33
- else
34
- self.path = git_dir
35
- end
36
-
37
- self.git = ::Grit::Git.new(self.path)
38
- self.git.work_tree = epath
39
-
40
- #unless File.directory?(epath) && self.git.exist?
41
- # FileUtils.mkdir_p(epath) unless File.directory?(epath)
42
- # self.git.init({ :bare => @bare })
43
- #end
44
- end
45
- end
46
- end
47
- end
@@ -1,319 +0,0 @@
1
-
2
- module CORL
3
- module Util
4
- class Interface
5
-
6
- #-----------------------------------------------------------------------------
7
- # Properties
8
-
9
- @@log_level = nil
10
- @@loggers = {}
11
-
12
- def self.log_level
13
- @@log_level
14
- end
15
-
16
- def self.log_level=level
17
- @@log_level = set_log_level(level)
18
- end
19
-
20
- #---
21
-
22
- def self.loggers
23
- @@loggers
24
- end
25
-
26
- def self.add_log_levels(*levels)
27
- levels = levels.flatten.collect do |level|
28
- level.to_s.upcase
29
- end
30
- Log4r::Configurator.custom_levels(*levels)
31
- end
32
-
33
- def self.add_logger(name, logger)
34
- logger.outputters = Log4r::StdoutOutputter.new('console')
35
-
36
- level = log_level.nil? ? 'off' : log_level
37
- set_log_level(level, logger)
38
-
39
- @@loggers[name] = logger
40
- end
41
-
42
- def self.set_log_level(level, logger = nil)
43
- level_sym = level.to_s.downcase.to_sym
44
- level_id = level.to_s.upcase
45
-
46
- if logger.nil?
47
- loggers.each do |name, registered_logger|
48
- @@loggers[name].level = Log4r.const_get(level_id)
49
- end
50
- else
51
- if logger.levels.include?(level_id)
52
- logger.level = Log4r.const_get(level_id)
53
- end
54
- end
55
- level_sym
56
- end
57
-
58
- #---
59
-
60
- # Initialize log levels
61
-
62
- add_log_levels :debug, :info, :warn, :error, :hook
63
-
64
- if ENV['CORL_LOG']
65
- Interface.log_level = ENV['CORL_LOG']
66
- end
67
-
68
- #---
69
-
70
- @@ui_lock = Mutex.new
71
-
72
- #---
73
-
74
- COLORS = {
75
- :clear => "\e[0m",
76
- :red => "\e[31m",
77
- :green => "\e[32m",
78
- :yellow => "\e[33m"
79
- }
80
-
81
- COLOR_MAP = {
82
- :warn => COLORS[:yellow],
83
- :error => COLORS[:red],
84
- :success => COLORS[:green]
85
- }
86
-
87
- #-----------------------------------------------------------------------------
88
- # Constructor
89
-
90
- def initialize(options = {})
91
- if options.is_a?(String)
92
- options = { :resource => options, :logger => options }
93
- end
94
- config = Config.ensure(options)
95
-
96
- @resource = config.get(:resource, '')
97
-
98
- if config.get(:logger, false)
99
- self.logger = config[:logger]
100
- else
101
- self.logger = Log4r::Logger.new(@resource)
102
- end
103
-
104
- @color = config.get(:color, true)
105
- @printer = config.get(:printer, :puts)
106
-
107
- @input = config.get(:input, $stdin)
108
- @output = config.get(:output, $stdout)
109
- @error = config.get(:error, $stderr)
110
-
111
- @delegate = config.get(:ui_delegate, nil)
112
- end
113
-
114
- #---
115
-
116
- def inspect
117
- "#<#{self.class}: #{@resource}>"
118
- end
119
-
120
- #-----------------------------------------------------------------------------
121
- # Accessors / Modifiers
122
-
123
- attr_reader :logger
124
- attr_accessor :resource, :color, :input, :output, :error, :delegate
125
-
126
- #---
127
-
128
- def logger=logger
129
- if logger.is_a?(String)
130
- @logger = Log4r::Logger.new(logger)
131
- else
132
- @logger = logger
133
- end
134
- self.class.add_logger(@resource, @logger)
135
- end
136
-
137
- #-----------------------------------------------------------------------------
138
- # UI functionality
139
-
140
- def say(type, message, options = {})
141
- return @delegate.say(type, message, options) if check_delegate('say')
142
-
143
- defaults = { :new_line => true, :prefix => true }
144
- options = defaults.merge(options)
145
- printer = options[:new_line] ? :puts : :print
146
- channel = type == :error || options[:channel] == :error ? @error : @output
147
-
148
- options[:sync] = true unless options.has_key?(:sync)
149
-
150
- render = lambda do
151
- safe_puts(format_message(type, message, options),
152
- :channel => channel, :printer => printer)
153
- end
154
-
155
- if options[:sync]
156
- @@ui_lock.synchronize do
157
- render.call
158
- end
159
- else
160
- render.call
161
- end
162
- end
163
-
164
- #---
165
-
166
- def ask(message, options = {})
167
- return @delegate.ask(message, options) if check_delegate('ask')
168
-
169
- options[:new_line] = false if ! options.has_key?(:new_line)
170
- options[:prefix] = false if ! options.has_key?(:prefix)
171
- options[:echo] = true if ! options.has_key?(:echo)
172
-
173
- options[:sync] = true unless options.has_key?(:sync)
174
-
175
- user_input = nil
176
-
177
- collect = lambda do
178
- say(:info, message, Config.ensure(options).import({ :sync => false }).export)
179
-
180
- if options[:echo]
181
- user_input = @input.gets.chomp
182
- else
183
- require 'io/console'
184
- user_input = @input.noecho(&:gets).chomp
185
- end
186
- safe_puts("\n")
187
- user_input
188
- end
189
-
190
- if options[:sync]
191
- @@ui_lock.synchronize do
192
- return collect.call
193
- end
194
- else
195
- return collect.call
196
- end
197
- end
198
-
199
- #---
200
-
201
- def password(type, options = {})
202
- return @delegate.password(type, options) if check_delegate('password')
203
-
204
- options[:sync] = true unless options.has_key?(:sync)
205
-
206
- collect = lambda do
207
- try_again = true
208
- password = nil
209
-
210
- while try_again
211
- # Get and check a password from the keyboard
212
- password = ask("Enter #{type} password: ", { :echo => false, :sync => false })
213
- confirmation_password = ask("Confirm #{type} password: ", { :echo => false, :sync => false })
214
-
215
- if password != confirmation_password
216
- choice = ask('Passwords do not match! Try again? (Y|N): ', { :sync => false })
217
- try_again = choice.upcase == "Y"
218
- password = nil unless try_again
219
- else
220
- try_again = false
221
- end
222
- end
223
- password
224
- end
225
-
226
- if options[:sync]
227
- @@ui_lock.synchronize do
228
- return collect.call
229
- end
230
- else
231
- return collect.call
232
- end
233
- end
234
-
235
- #-----------------------------------------------------------------------------
236
-
237
- def info(message, *args)
238
- @logger.info("info: #{message}")
239
-
240
- return @delegate.info(message, *args) if check_delegate('info')
241
- say(:info, message, *args)
242
- end
243
-
244
- #---
245
-
246
- def warn(message, *args)
247
- @logger.info("warn: #{message}")
248
-
249
- return @delegate.warn(message, *args) if check_delegate('warn')
250
- say(:warn, message, *args)
251
- end
252
-
253
- #---
254
-
255
- def error(message, *args)
256
- @logger.info("error: #{message}")
257
-
258
- return @delegate.error(message, *args) if check_delegate('error')
259
- say(:error, message, *args)
260
- end
261
-
262
- #---
263
-
264
- def success(message, *args)
265
- @logger.info("success: #{message}")
266
-
267
- return @delegate.success(message, *args) if check_delegate('success')
268
- say(:success, message, *args)
269
- end
270
-
271
- #-----------------------------------------------------------------------------
272
- # Utilities
273
-
274
- def format_message(type, message, options = {})
275
- return @delegate.format_message(type, message, options) if check_delegate('format_message')
276
- return '' if message.to_s.strip.empty?
277
-
278
- if @resource && ! @resource.empty? && options[:prefix]
279
- prefix = "[#{@resource}]"
280
- end
281
- message = "#{prefix} #{message}".lstrip.gsub(/\n+$/, '')
282
-
283
- if @color
284
- if options.has_key?(:color)
285
- color = COLORS[options[:color]]
286
- message = "#{color}#{message}#{COLORS[:clear]}"
287
- else
288
- message = "#{COLOR_MAP[type]}#{message}#{COLORS[:clear]}" if COLOR_MAP[type]
289
- end
290
- end
291
- return message
292
- end
293
-
294
- #---
295
-
296
- def safe_puts(message = nil, options = {})
297
- return @delegate.safe_puts(message, options) if check_delegate('safe_puts')
298
-
299
- message ||= ""
300
- options = {
301
- :channel => @output,
302
- :printer => @printer,
303
- }.merge(options)
304
-
305
- begin
306
- options[:channel].send(options[:printer], message)
307
- rescue Errno::EPIPE
308
- return
309
- end
310
- end
311
-
312
- #-----------------------------------------------------------------------------
313
-
314
- def check_delegate(method)
315
- return ( @delegate && @delegate.respond_to?(method.to_s) )
316
- end
317
- end
318
- end
319
- end
@@ -1,17 +0,0 @@
1
-
2
- module CORL
3
- module Util
4
- class Liquid
5
-
6
- def initialize(&code)
7
- @code = code
8
- end
9
-
10
- #---
11
-
12
- def method_missing(method, *args, &block)
13
- @code.call(method, args, block)
14
- end
15
- end
16
- end
17
- end
@@ -1,93 +0,0 @@
1
-
2
- module CORL
3
- module Util
4
- class Package
5
-
6
- #-----------------------------------------------------------------------------
7
- # Constructor / Destructor
8
-
9
- def initialize(options = {})
10
- if options.is_a?(String)
11
- @data = Config.new
12
- decode(options)
13
- else
14
- @data = Config.ensure(options)
15
- end
16
- end
17
-
18
- #-----------------------------------------------------------------------------
19
- # Property accessors / modifiers
20
-
21
- attr_reader :data
22
-
23
- #-----------------------------------------------------------------------------
24
- # Operations
25
-
26
- def encode
27
- Base64.encode64(Data.to_json(data.export, false))
28
- end
29
-
30
- def decode(encoded_string)
31
- data.import(Data.symbol_map(Data.parse_json(Base64.decode64(encoded_string))))
32
- end
33
-
34
- #---
35
-
36
- def add_file(file, target_path = nil, perm = 0600)
37
- target_path = file if target_path.nil?
38
- file = File.expand_path(file)
39
-
40
- if File.exists?(file)
41
- content = Disk.read(file)
42
- data.set([ :files, target_path ], { :perm => perm, :content => content }) if content
43
- end
44
- self
45
- end
46
-
47
- #---
48
-
49
- def add_files(base_path, file_glob, target_path = nil, perm = 0600)
50
- target_path = base_path if target_path.nil?
51
- curr_dir = Dir.pwd
52
-
53
- Dir.chdir(File.expand_path(base_path))
54
- Dir.glob(file_glob.gsub(/^[\/\\]+/, '')) do |file|
55
- content = Disk.read(file)
56
-
57
- if content
58
- data.set([ :dir, target_path, file ], { :perm => perm, :content => content })
59
- end
60
- end
61
- Dir.chdir(curr_dir)
62
- self
63
- end
64
-
65
- #---
66
-
67
- def extract(base_path)
68
- success = true
69
-
70
- data.get_hash(:files).each do |target_path, info|
71
- file = File.join(base_path.to_s, target_path.to_s)
72
- perm = info[:perm]
73
- content = info[:content]
74
-
75
- FileUtils.mkdir_p(File.dirname(file))
76
- success = false unless Disk.write(file, content) && File.chmod(perm, file)
77
- end
78
-
79
- data.get_hash(:dir).each do |target_path, files|
80
- files.each do |file, info|
81
- file = File.join(base_path.to_s, target_path.to_s, file.to_s)
82
- perm = info[:perm]
83
- content = info[:content]
84
-
85
- FileUtils.mkdir_p(File.dirname(file))
86
- success = false unless Disk.write(file, content) && File.chmod(perm, file)
87
- end
88
- end
89
- success
90
- end
91
- end
92
- end
93
- end