coral_core 0.2.30 → 0.4.0

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.
Files changed (55) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +2 -8
  3. data/Gemfile.lock +15 -86
  4. data/Rakefile +1 -3
  5. data/VERSION +1 -1
  6. data/coral_core.gemspec +12 -102
  7. metadata +18 -239
  8. data/lib/coral/command/shell.rb +0 -140
  9. data/lib/coral/machine/fog.rb +0 -215
  10. data/lib/coral/network/default.rb +0 -26
  11. data/lib/coral/node/rackspace.rb +0 -23
  12. data/lib/coral_core/config/collection.rb +0 -57
  13. data/lib/coral_core/config/options.rb +0 -70
  14. data/lib/coral_core/config/project.rb +0 -225
  15. data/lib/coral_core/config.rb +0 -329
  16. data/lib/coral_core/core.rb +0 -58
  17. data/lib/coral_core/event/puppet_event.rb +0 -98
  18. data/lib/coral_core/event/regexp_event.rb +0 -55
  19. data/lib/coral_core/event.rb +0 -170
  20. data/lib/coral_core/mixin/config_collection.rb +0 -52
  21. data/lib/coral_core/mixin/config_ops.rb +0 -51
  22. data/lib/coral_core/mixin/config_options.rb +0 -38
  23. data/lib/coral_core/mixin/lookup.rb +0 -211
  24. data/lib/coral_core/mixin/macro/object_interface.rb +0 -292
  25. data/lib/coral_core/mixin/macro/plugin_interface.rb +0 -277
  26. data/lib/coral_core/mixin/settings.rb +0 -46
  27. data/lib/coral_core/mixin/sub_config.rb +0 -208
  28. data/lib/coral_core/mod/hash.rb +0 -29
  29. data/lib/coral_core/mod/hiera_backend.rb +0 -63
  30. data/lib/coral_core/plugin/command.rb +0 -95
  31. data/lib/coral_core/plugin/machine.rb +0 -152
  32. data/lib/coral_core/plugin/network.rb +0 -24
  33. data/lib/coral_core/plugin/node.rb +0 -184
  34. data/lib/coral_core/plugin.rb +0 -261
  35. data/lib/coral_core/plugin_base.rb +0 -147
  36. data/lib/coral_core/repository.rb +0 -553
  37. data/lib/coral_core/resource.rb +0 -243
  38. data/lib/coral_core/template/environment.rb +0 -72
  39. data/lib/coral_core/template/json.rb +0 -13
  40. data/lib/coral_core/template/wrapper.rb +0 -13
  41. data/lib/coral_core/template/yaml.rb +0 -13
  42. data/lib/coral_core/template.rb +0 -92
  43. data/lib/coral_core/util/cli.rb +0 -293
  44. data/lib/coral_core/util/data.rb +0 -389
  45. data/lib/coral_core/util/disk.rb +0 -105
  46. data/lib/coral_core/util/git.rb +0 -40
  47. data/lib/coral_core/util/interface.rb +0 -190
  48. data/lib/coral_core/util/process.rb +0 -43
  49. data/lib/coral_core/util/shell.rb +0 -183
  50. data/lib/coral_core.rb +0 -375
  51. data/locales/en.yml +0 -8
  52. data/spec/coral_core/interface_spec.rb +0 -489
  53. data/spec/coral_mock_input.rb +0 -29
  54. data/spec/coral_test_kernel.rb +0 -22
  55. data/spec/spec_helper.rb +0 -15
@@ -1,243 +0,0 @@
1
-
2
- module Coral
3
- module Resource
4
-
5
- #-----------------------------------------------------------------------------
6
- # Resource groups
7
-
8
- @@resource_groups = {}
9
-
10
- #---
11
-
12
- def self.groups
13
- return @@resource_groups
14
- end
15
-
16
- #---
17
-
18
- def self.clear_groups
19
- @@resource_groups = {}
20
- end
21
-
22
- #---
23
-
24
- def self.add_members(group_name, resource_names)
25
- @@resource_groups[group_name] = [] unless @@resource_groups[group_name].is_a?(Array)
26
-
27
- unless resource_names.is_a?(Array)
28
- resource_names = [ resource_names ]
29
- end
30
-
31
- resource_names.each do |name|
32
- unless @@resource_groups[group_name].include?(name)
33
- @@resource_groups[group_name] << name
34
- end
35
- end
36
- end
37
-
38
- #-----------------------------------------------------------------------------
39
- # Resource operations
40
-
41
- def self.normalize(type_name, resources, options)
42
- clear_groups
43
-
44
- config = Config.ensure(options)
45
- resources = Util::Data.value(resources)
46
-
47
- #dbg(resources, 'normalize -> init')
48
-
49
- unless Util::Data.empty?(resources)
50
- resources.keys.each do |name|
51
- #dbg(name, 'normalize -> name')
52
- if ! resources[name] || resources[name].empty? || ! resources[name].is_a?(Hash)
53
- resources.delete(name)
54
- else
55
- normalize = true
56
-
57
- namevar = namevar(type_name, name)
58
- if resources[name].has_key?(namevar)
59
- value = resources[name][namevar]
60
- if Util::Data.empty?(value)
61
- #dbg(value, "delete #{name}")
62
- resources.delete(name)
63
- normalize = false
64
-
65
- elsif value.is_a?(Array)
66
- value.each do |item|
67
- item_name = "#{name}_#{item}".gsub(/\-/, '_')
68
-
69
- new_resource = resources[name].clone
70
- new_resource[namevar] = item
71
-
72
- resources[item_name] = render(new_resource, config)
73
- add_members(name, item_name)
74
- end
75
- resources.delete(name)
76
- normalize = false
77
- end
78
- end
79
-
80
- #dbg(resources, 'normalize -> resources')
81
-
82
- if normalize
83
- resources[name] = render(resources[name], config)
84
- end
85
- end
86
- end
87
- end
88
- return resources
89
- end
90
-
91
- #---
92
-
93
- def self.render(resource, options = {})
94
- resource = Core.string_map(resource.clone)
95
- config = Config.ensure(options)
96
-
97
- resource.keys.each do |name|
98
- if match = name.match(/^(.+)_template$/)
99
- target = match.captures[0]
100
-
101
- #dbg(name, 'name')
102
- #dbg(target, 'target')
103
-
104
- config.set(:normalize_template, config.get("normalize_#{target}", true))
105
- config.set(:interpolate_template, config.get("interpolate_#{target}", true))
106
-
107
- resource[target] = Template.render(resource[name], resource[target], config)
108
- resource.delete(name)
109
- end
110
- end
111
-
112
- #dbg(resource, 'render exit')
113
- return resource
114
- end
115
-
116
- #---
117
-
118
- def self.translate(type_name, resources, options = {})
119
- config = Config.ensure(options)
120
- resources = Util::Data.value(resources)
121
- results = {}
122
-
123
- #dbg(resources, 'resources -> translate')
124
-
125
- prefix = config.get(:resource_prefix, '')
126
-
127
- name_map = {}
128
- resources.keys.each do |name|
129
- name_map[name] = true
130
- end
131
- config[:resource_names] = name_map
132
-
133
- resources.each do |name, data|
134
- #dbg(name, 'name')
135
- #dbg(data, 'data')
136
-
137
- resource = resources[name]
138
- resource['before'] = translate_resource_refs(type_name, data['before'], config) if data.has_key?('before')
139
- resource['notify'] = translate_resource_refs(type_name, data['notify'], config) if data.has_key?('notify')
140
- resource['require'] = translate_resource_refs(type_name, data['require'], config) if data.has_key?('require')
141
- resource['subscribe'] = translate_resource_refs(type_name, data['subscribe'], config) if data.has_key?('subscribe')
142
-
143
- unless prefix.empty?
144
- name = "#{prefix}_#{name}"
145
- end
146
- results[name] = resource
147
- end
148
- return results
149
- end
150
-
151
- #---
152
-
153
- def self.translate_resource_refs(type_name, resource_refs, options = {})
154
- return :undef if Util::Data.undef?(resource_refs)
155
-
156
- config = Config.ensure(options)
157
- resource_names = config.get(:resource_names, {})
158
- title_prefix = config.get(:title_prefix, '')
159
-
160
- title_pattern = config.get(:title_pattern, '^\s*([^\[\]]+)\s*$')
161
- title_group = config.get(:title_var_group, 1)
162
- title_flags = config.get(:title_flags, '')
163
- title_regexp = Regexp.new(title_pattern, title_flags.split(''))
164
-
165
- allow_single = config.get(:allow_single_return, true)
166
-
167
- type_name = type_name.sub(/^\@?\@/, '')
168
- values = []
169
-
170
- case resource_refs
171
- when String
172
- if resource_refs.empty?
173
- return :undef
174
- else
175
- resource_refs = resource_refs.split(/\s*,\s*/)
176
- end
177
-
178
- when Puppet::Resource
179
- resource_refs = [ resource_refs ]
180
- end
181
-
182
- resource_refs.collect! do |value|
183
- if value.is_a?(Puppet::Resource) || ! value.match(title_regexp)
184
- value
185
-
186
- elsif resource_names.has_key?(value)
187
- if ! title_prefix.empty?
188
- "#{title_prefix}_#{value}"
189
- else
190
- value
191
- end
192
-
193
- elsif groups.has_key?(value) && ! groups[value].empty?
194
- results = []
195
- groups[value].each do |resource_name|
196
- unless title_prefix.empty?
197
- resource_name = "#{title_prefix}_#{resource_name}"
198
- end
199
- results << resource_name
200
- end
201
- results
202
-
203
- else
204
- nil
205
- end
206
- end
207
-
208
- resource_refs.flatten.each do |ref|
209
- #dbg(ref, 'reference -> init')
210
- unless ref.nil?
211
- unless ref.is_a?(Puppet::Resource)
212
- ref = ref.match(title_regexp) ? Puppet::Resource.new(type_name, ref) : Puppet::Resource.new(ref)
213
- end
214
- #dbg(ref, 'reference -> final')
215
- values << ref unless ref.nil?
216
- end
217
- end
218
- return values[0] if allow_single && values.length == 1
219
- return values
220
- end
221
-
222
- #-----------------------------------------------------------------------------
223
- # Utilities
224
-
225
- def self.type_name(value) # Basically borrowed from Puppet (damn private methods!)
226
- return :main if value == :main
227
- return "Class" if value == "" or value.nil? or value.to_s.downcase == "component"
228
- return value.to_s.split("::").collect { |s| s.capitalize }.join("::")
229
- end
230
-
231
- #---
232
-
233
- def self.namevar(type_name, resource_name) # Basically borrowed from Puppet (damn private methods!)
234
- resource = Puppet::Resource.new(type_name.sub(/^\@?\@/, ''), resource_name)
235
-
236
- if resource.builtin_type? and type = resource.resource_type and type.key_attributes.length == 1
237
- return type.key_attributes.first.to_s
238
- else
239
- return 'name'
240
- end
241
- end
242
- end
243
- end
@@ -1,72 +0,0 @@
1
-
2
- module Coral
3
- module Template
4
- class Environment < Base
5
- #-----------------------------------------------------------------------------
6
- # Renderers
7
-
8
- def render(input)
9
- output = ''
10
-
11
- case input
12
- when Hash
13
- input.each do |name, value|
14
- output << render_assignment(name, value)
15
- end
16
- end
17
- return output
18
- end
19
-
20
- #-----------------------------------------------------------------------------
21
-
22
- def render_assignment(name, value)
23
- name = render_name(name)
24
- value = render_value(value)
25
-
26
- export = get(:export, true)
27
- export_text = export ? get(:export_text, 'export ') : ''
28
- operator = get(:operator, '=')
29
-
30
- return "#{export_text}#{name}#{operator}#{value}\n"
31
- end
32
-
33
- #---
34
-
35
- def render_name(name)
36
- prefix = get(:name_prefix, '')
37
- prefix_sep = prefix.empty? ? '' : get(:name_prefix_sep, '_')
38
-
39
- suffix = get(:name_suffix, '')
40
- suffix_sep = suffix.empty? ? '' : get(:name_suffix_sep, '')
41
-
42
- unless prefix.empty?
43
- name = "#{prefix}#{prefix_sep}#{name}#{suffix_sep}#{suffix}"
44
- end
45
- return name
46
- end
47
-
48
- #---
49
-
50
- def render_value(value)
51
- sep = get(:value_sep, ' ')
52
- quote = get(:quote, true)
53
-
54
- array_prefix = get(:array_prefix, '(')
55
- array_suffix = get(:array_suffix, ')')
56
-
57
- case value
58
- when Array
59
- values = []
60
- value.each do |item|
61
- values << quote ? "'#{item}'" : "#{item}"
62
- end
63
- value = "#{array_prefix}#{values.join(sep)}#{array_suffix}"
64
-
65
- when String
66
- value = quote ? "'#{value}'" : "#{value}"
67
- end
68
- return value
69
- end
70
- end
71
- end
72
- end
@@ -1,13 +0,0 @@
1
-
2
- module Coral
3
- module Template
4
- class JSON < Base
5
- #-----------------------------------------------------------------------------
6
- # Renderers
7
-
8
- def render(input)
9
- return Util::Data.to_json(input)
10
- end
11
- end
12
- end
13
- end
@@ -1,13 +0,0 @@
1
-
2
- module Coral
3
- module Template
4
- class Wrapper < Base
5
- #-----------------------------------------------------------------------------
6
- # Renderers
7
-
8
- def render(input)
9
- return get(:template_prefix, '') + input.to_s + get(:template_suffix, '')
10
- end
11
- end
12
- end
13
- end
@@ -1,13 +0,0 @@
1
-
2
- module Coral
3
- module Template
4
- class JSON < Base
5
- #-----------------------------------------------------------------------------
6
- # Renderers
7
-
8
- def render(input)
9
- return Util::Data.to_yaml(input)
10
- end
11
- end
12
- end
13
- end
@@ -1,92 +0,0 @@
1
-
2
- module Coral
3
- module Template
4
-
5
- #-----------------------------------------------------------------------------
6
- # General template utilities
7
-
8
- def self.instance(class_name, options = {}, defaults = {}, force = true)
9
- return Template::const_get(class_name).new(options, defaults, force)
10
- end
11
-
12
- #---
13
-
14
- def self.process(value)
15
- case value
16
- when String, Symbol
17
- return nil if Util::Data.undef?(value)
18
- return 'false' if value == false
19
- return 'true' if value == true
20
- return value.to_s if value.is_a?(Symbol)
21
-
22
- when Hash
23
- results = {}
24
- value.each do |key, item|
25
- result = process(item)
26
- unless result.nil?
27
- results[key] = result
28
- end
29
- value = results
30
- end
31
-
32
- when Array
33
- results = []
34
- value.each_with_index do |item, index|
35
- result = process(item)
36
- unless result.nil?
37
- results << result
38
- end
39
- end
40
- value = results
41
- end
42
- return value
43
- end
44
-
45
- #---
46
-
47
- def self.render(class_name, data, options = {})
48
- config = Config.ensure(options)
49
-
50
- normalize = config.get(:normalize_template, true)
51
- interpolate = config.get(:interpolate_template, true)
52
-
53
- #dbg(class_name, 'template engine name')
54
- #dbg(data, 'template data -> init')
55
-
56
- if normalize
57
- data = Config.normalize(data, nil, config)
58
- #dbg(data, 'template data -> post normalization')
59
- end
60
-
61
- if normalize && interpolate
62
- data = Util::Data.interpolate(data, data, config.options)
63
- #dbg(data, 'template data -> post interpolation')
64
- end
65
-
66
- engine = instance(class_name, config, {}, config.get(:force, true))
67
- #dbg(engine, 'template engine')
68
-
69
- output = engine.render(process(data))
70
- #dbg(output, 'template output')
71
-
72
- return output
73
- end
74
-
75
- #-----------------------------------------------------------------------------
76
- # Base template
77
-
78
- class Base < Config
79
- # All template classes should extend Base
80
-
81
- def intialize(options = {}, defaults = {}, force = true)
82
- super(options, defaults, force)
83
- end
84
-
85
- #---
86
-
87
- def render(input)
88
- return '' # Implement in sub classes!!
89
- end
90
- end
91
- end
92
- end