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,404 +0,0 @@
1
-
2
- module CORL
3
- module Util
4
- class Data
5
-
6
- #-----------------------------------------------------------------------------
7
- # Type checking
8
-
9
- def self.undef?(value)
10
- if value.nil? ||
11
- (value.is_a?(Symbol) && value == :undef || value == :undefined) ||
12
- (value.is_a?(String) && value.match(/^\s*(undef|UNDEF|Undef|nil|NIL|Nil)\s*$/))
13
- return true
14
- end
15
- return false
16
- end
17
-
18
- #---
19
-
20
- def self.true?(value)
21
- if value == true ||
22
- (value.is_a?(String) && value.match(/^\s*(true|TRUE|True)\s*$/))
23
- return true
24
- end
25
- return false
26
- end
27
-
28
- #---
29
-
30
- def self.false?(value)
31
- if value == false ||
32
- (value.is_a?(String) && value.match(/^\s*(false|FALSE|False)\s*$/))
33
- return true
34
- end
35
- return false
36
- end
37
-
38
- #---
39
-
40
- def self.empty?(value)
41
- if undef?(value) || false?(value) || (value.respond_to?('empty?') && value.empty?)
42
- return true
43
- end
44
- return false
45
- end
46
-
47
- #---
48
-
49
- def self.exists?(data, keys, check_empty = false)
50
- if keys.is_a?(String) || keys.is_a?(Symbol)
51
- keys = [ keys ]
52
- end
53
- key = keys.shift.to_sym
54
-
55
- if data.has_key?(key)
56
- value = data[key]
57
-
58
- if keys.empty?
59
- return false if check_empty && empty?(value)
60
- return true
61
- else
62
- return exists?(data[key], keys)
63
- end
64
- end
65
- return false
66
- end
67
-
68
- #-----------------------------------------------------------------------------
69
- # Translation
70
-
71
- def self.symbol_map(data)
72
- results = {}
73
- return data unless data
74
-
75
- case data
76
- when Hash
77
- data.each do |key, value|
78
- results[key.to_sym] = symbol_map(value)
79
- end
80
- else
81
- results = data
82
- end
83
- return results
84
- end
85
-
86
- #---
87
-
88
- def self.string_map(data)
89
- results = {}
90
- return data unless data
91
-
92
- case data
93
- when Hash
94
- data.each do |key, value|
95
- results[key.to_s] = string_map(value)
96
- end
97
- else
98
- results = data
99
- end
100
- return results
101
- end
102
-
103
- #---
104
-
105
- def self.parse_json(json_text)
106
- return MultiJson.load(json_text)
107
- end
108
-
109
- #---
110
-
111
- def self.to_json(data, pretty = true)
112
- return MultiJson.dump(data, :pretty => pretty)
113
- end
114
-
115
- #---
116
-
117
- def self.parse_yaml(yaml_text)
118
- return YAML.load(yaml_text)
119
- end
120
-
121
- #---
122
-
123
- def self.to_yaml(data)
124
- return YAML.dump(data)
125
- end
126
-
127
- #---
128
-
129
- def self.value(value)
130
- case value
131
- when String
132
- if undef?(value)
133
- value = nil
134
- elsif true?(value)
135
- value = true
136
- elsif false?(value)
137
- value = false
138
- end
139
-
140
- when Array
141
- value.each_with_index do |item, index|
142
- value[index] = value(item)
143
- end
144
-
145
- when Hash
146
- value.each do |key, data|
147
- value[key] = value(data)
148
- end
149
- end
150
- return value
151
- end
152
-
153
- #---
154
-
155
- def self.filter(data, method = false)
156
- if method && method.is_a?(Symbol) &&
157
- [ :array, :hash, :string, :symbol, :test ].include?(method.to_sym)
158
- return send(method, data)
159
- end
160
- return data
161
- end
162
-
163
- #---
164
-
165
- def self.array(data, default = [], split_string = false)
166
- result = default
167
- if data
168
- case data
169
- when Array
170
- result = data
171
- when String
172
- result = [ ( split_string ? data.split(/\s*,\s*/) : data ) ]
173
- else
174
- result = [ data ]
175
- end
176
- end
177
- return result
178
- end
179
-
180
- #---
181
-
182
- def self.hash(data, default = {})
183
- result = default
184
- if data
185
- case data
186
- when Hash
187
- result = data
188
- else
189
- result = {}
190
- end
191
- end
192
- return result
193
- end
194
-
195
- #---
196
-
197
- def self.string(data, default = '')
198
- result = default
199
- if data
200
- case data
201
- when String
202
- result = data
203
- else
204
- result = data.to_s
205
- end
206
- end
207
- return result
208
- end
209
-
210
- #---
211
-
212
- def self.symbol(data, default = :undefined)
213
- result = default
214
- if data
215
- case data
216
- when Symbol
217
- result = data
218
- when String
219
- result = data.to_sym
220
- else
221
- result = data.class.to_sym
222
- end
223
- end
224
- return result
225
- end
226
-
227
- #---
228
-
229
- def self.test(data)
230
- return false if Util::Data.empty?(data)
231
- return true
232
- end
233
-
234
- #-----------------------------------------------------------------------------
235
- # Operations
236
-
237
- def self.clean(data)
238
- data.keys.each do |key|
239
- data.delete(key) if data[key].nil?
240
- end
241
- data
242
- end
243
-
244
- #---
245
-
246
- def self.merge(data, force = true)
247
- value = data
248
-
249
- # Special case because this method is called from within Config.new so we
250
- # can not use Config.ensure, as that would cause an infinite loop.
251
- force = force.is_a?(CORL::Config) ? force.get(:force, true) : force
252
-
253
- if data.is_a?(Array)
254
- value = undef?(data[0]) ? nil : data.shift.clone
255
-
256
- data.each do |item|
257
- item = undef?(item) ? nil : item.clone
258
-
259
- case value
260
- when Hash
261
- begin
262
- require 'deep_merge'
263
- value = force ? value.deep_merge!(item) : value.deep_merge(item)
264
-
265
- rescue LoadError
266
- if item.is_a?(Hash) # Non recursive top level by default.
267
- value = value.merge(item)
268
- elsif force
269
- value = item
270
- end
271
- end
272
- when Array
273
- if item.is_a?(Array)
274
- value = value.concat(item).uniq
275
- elsif force
276
- value = item
277
- end
278
-
279
- else
280
- value = item if force || item.is_a?(String) || item.is_a?(Symbol)
281
- end
282
- end
283
- end
284
-
285
- return value
286
- end
287
-
288
- #---
289
-
290
- def self.interpolate(value, scope, options = {})
291
-
292
- pattern = ( options.has_key?(:pattern) ? options[:pattern] : '\$(\{)?([a-zA-Z0-9\_\-]+)(\})?' )
293
- group = ( options.has_key?(:var_group) ? options[:var_group] : 2 )
294
- flags = ( options.has_key?(:flags) ? options[:flags] : '' )
295
-
296
- if scope.is_a?(Hash)
297
- regexp = Regexp.new(pattern, flags.split(''))
298
-
299
- replace = lambda do |item|
300
- matches = item.match(regexp)
301
- result = nil
302
-
303
- #dbg(item, 'item')
304
- #dbg(matches, 'matches')
305
-
306
- unless matches.nil?
307
- replacement = scope.search(matches[group], options)
308
- result = item.gsub(matches[0], replacement) unless replacement.nil?
309
- end
310
- return result
311
- end
312
-
313
- case value
314
- when String
315
- #dbg(value, 'interpolate (string) -> init')
316
- while (temp = replace.call(value))
317
- #dbg(temp, 'interpolate (string) -> replacement')
318
- value = temp
319
- end
320
-
321
- when Hash
322
- #dbg(value, 'interpolate (hash) -> init')
323
- value.each do |key, data|
324
- #dbg(data, "interpolate (#{key}) -> data")
325
- value[key] = interpolate(data, scope, options)
326
- end
327
- end
328
- end
329
- #dbg(value, 'interpolate -> result')
330
- return value
331
- end
332
-
333
- #---
334
-
335
- def self.rm_keys(data, keys)
336
- keys = [ keys ] unless keys.is_a?(Array)
337
- keys.each do |key|
338
- data.delete(key)
339
- end
340
- data
341
- end
342
-
343
- #---
344
-
345
- def self.subset(data, keys)
346
- keys = [ keys ] unless keys.is_a?(Array)
347
- new_data = {}
348
- keys.each do |key|
349
- new_data[key] = data[key] if data.has_key?(key)
350
- end
351
- new_data
352
- end
353
-
354
- #-----------------------------------------------------------------------------
355
- # Utilities
356
-
357
- def self.prefix(prefix, data)
358
- result = nil
359
-
360
- unless prefix.is_a?(String) && ! empty?(prefix)
361
- prefix = ''
362
- end
363
-
364
- case data
365
- when String, Symbol
366
- result = ( prefix.empty? ? data.to_s : prefix + '_' + data.to_s )
367
-
368
- when Array
369
- result = []
370
- data.each do |value|
371
- result << prefix(prefix, value)
372
- end
373
-
374
- when Hash
375
- result = {}
376
- data.each do |key, value|
377
- result[prefix(prefix, key)] = value
378
- end
379
- end
380
- return result
381
- end
382
-
383
- #---
384
-
385
- def self.ensure(test, success_value = nil, failure_value = nil)
386
- success_value = (success_value ? success_value : test)
387
- failure_value = (failure_value ? failure_value : nil)
388
-
389
- if empty?(test)
390
- value = failure_value
391
- else
392
- value = success_value
393
- end
394
- return value
395
- end
396
-
397
- #---
398
-
399
- def self.ensure_value(value, failure_value = nil)
400
- return self.ensure(value, nil, failure_value)
401
- end
402
- end
403
- end
404
- end
@@ -1,114 +0,0 @@
1
-
2
- module CORL
3
- module Util
4
- class Disk
5
-
6
- #-----------------------------------------------------------------------------
7
- # Properties
8
-
9
- @@files = {}
10
-
11
- @@separator = false
12
- @@description = ''
13
-
14
- #-----------------------------------------------------------------------------
15
- # Utilities
16
-
17
- def self.exists?(file)
18
- return ::File.exists?(::File.expand_path(file))
19
- end
20
-
21
- #---
22
-
23
- def self.filename(file_name)
24
- return ( file_name.is_a?(Array) ? file_name.join(::File::SEPARATOR) : file_name.to_s )
25
- end
26
-
27
- #---
28
-
29
- def self.open(file_name, options = {}, reset = false)
30
- mode = options[:mode].to_s
31
-
32
- @@separator = ( options[:separator] ? options[:separator] : false )
33
- @@description = ( options[:description] ? options[:description] : '' )
34
-
35
- if @@files.has_key?(file_name) && ! reset
36
- reset = true if ! mode.empty? && mode != @@files[file_name][:mode]
37
- end
38
-
39
- if ! @@files.has_key?(file_name) || ! @@files[file_name][:file] || reset
40
- @@files[file_name][:file].close if @@files[file_name] && @@files[file_name][:file]
41
- unless mode.empty? || ( mode == 'r' && ! ::File.exists?(file_name) )
42
- @@files[file_name] = {
43
- :file => ::File.open(file_name, mode),
44
- :mode => mode,
45
- }
46
- end
47
- end
48
- return nil unless @@files[file_name]
49
- return @@files[file_name][:file]
50
- end
51
-
52
- #---
53
-
54
- def self.read(file_name, options = {})
55
- options[:mode] = ( options[:mode] ? options[:mode] : 'r' )
56
- file = open(file_name, options)
57
-
58
- if file
59
- file.pos = 0 if options[:mode] == 'r'
60
- return file.read
61
- end
62
- return nil
63
- end
64
-
65
- #---
66
-
67
- def self.write(file_name, data, options = {})
68
- options[:mode] = ( options[:mode] ? options[:mode] : 'w' )
69
- file = open(file_name, options)
70
-
71
- if file
72
- file.pos = 0 if options[:mode] == 'w'
73
- success = file.write(data)
74
- file.flush
75
- return success
76
- end
77
- return nil
78
- end
79
-
80
- #---
81
-
82
- def self.delete(file_path)
83
- return ::File.delete(file_path)
84
- end
85
-
86
- #---
87
-
88
- def self.log(data, options = {})
89
- reset = ( options[:file_name] || options[:mode] )
90
- file = open(( options[:file_name] ? options[:file_name] : 'log.txt' ), options, reset)
91
- if file
92
- file.write("--------------------------------------\n") if @@separator
93
- file.write("#{@@description}\n") if @@description
94
- file.write("#{data}\n")
95
- end
96
- end
97
-
98
- #---
99
-
100
- def self.close(file_names = [])
101
- file_names = @@files.keys unless file_names && ! file_names.empty?
102
-
103
- unless file_names.is_a?(Array)
104
- file_names = [ file_names ]
105
- end
106
-
107
- file_names.each do |file_name|
108
- @@files[file_name][:file].close if @@files[file_name] && @@files[file_name][:file]
109
- @@files.delete(file_name)
110
- end
111
- end
112
- end
113
- end
114
- end