coral_core 0.2.30 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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,29 +0,0 @@
1
-
2
- #-------------------------------------------------------------------------------
3
- # Hash data type alterations
4
-
5
- class Hash
6
- def search(search_key, options = {})
7
- config = Coral::Config.ensure(options)
8
- value = nil
9
-
10
- recurse = config.get(:recurse, false)
11
- recurse_level = config.get(:recurse_level, -1)
12
-
13
- self.each do |key, data|
14
- if key == search_key
15
- value = data
16
-
17
- elsif data.is_a?(Hash) &&
18
- recurse && (recurse_level == -1 || recurse_level > 0)
19
-
20
- recurse_level -= 1 unless recurse_level == -1
21
- value = value.search(search_key,
22
- Coral::Config.new(config).set(:recurse_level, recurse_level)
23
- )
24
- end
25
- break unless value.nil?
26
- end
27
- return value
28
- end
29
- end
@@ -1,63 +0,0 @@
1
- begin
2
- require 'hiera/backend'
3
-
4
- class Hiera
5
- module Backend
6
- #
7
- # NOTE: This function is overridden so we can collect accumulated hiera
8
- # parameters and their values on a particular puppet run for reporting
9
- # purposes.
10
- #
11
- # Calls out to all configured backends in the order they
12
- # were specified. The first one to answer will win.
13
- #
14
- # This lets you declare multiple backends, a possible
15
- # use case might be in Puppet where a Puppet module declares
16
- # default data using in-module data while users can override
17
- # using JSON/YAML etc. By layering the backends and putting
18
- # the Puppet one last you can override module author data
19
- # easily.
20
- #
21
- # Backend instances are cached so if you need to connect to any
22
- # databases then do so in your constructor, future calls to your
23
- # backend will not create new instances
24
- def lookup(key, default, scope, order_override, resolution_type)
25
- @backends ||= {}
26
- answer = nil
27
-
28
- Config[:backends].each do |backend|
29
- if constants.include?("#{backend.capitalize}_backend") || constants.include?("#{backend.capitalize}_backend".to_sym)
30
- @backends[backend] ||= Backend.const_get("#{backend.capitalize}_backend").new
31
- new_answer = @backends[backend].lookup(key, scope, order_override, resolution_type)
32
-
33
- if not new_answer.nil?
34
- case resolution_type
35
- when :array
36
- raise Exception, "Hiera type mismatch: expected Array and got #{new_answer.class}" unless new_answer.kind_of? Array or new_answer.kind_of? String
37
- answer ||= []
38
- answer << new_answer
39
- when :hash
40
- raise Exception, "Hiera type mismatch: expected Hash and got #{new_answer.class}" unless new_answer.kind_of? Hash
41
- answer ||= {}
42
- answer = merge_answer(new_answer,answer)
43
- else
44
- answer = new_answer
45
- break
46
- end
47
- end
48
- end
49
- end
50
-
51
- answer = resolve_answer(answer, resolution_type) unless answer.nil?
52
- answer = parse_string(default, scope) if answer.nil? and default.is_a?(String)
53
-
54
- answer = default if answer.nil?
55
-
56
- Coral::Config.set_property(key, answer) # This is why we override this function!!
57
- return answer
58
- end
59
- end
60
- end
61
-
62
- rescue LoadError
63
- end
@@ -1,95 +0,0 @@
1
-
2
- module Coral
3
- module Plugin
4
- class Command < Base
5
-
6
- #-----------------------------------------------------------------------------
7
- # Command plugin interface
8
-
9
- def to_s
10
- return build(export)
11
- end
12
-
13
- #-----------------------------------------------------------------------------
14
- # Property accessor / modifiers
15
-
16
- def command(default = '')
17
- return string(get(:command, default))
18
- end
19
-
20
- #---
21
-
22
- def command=command
23
- set(:command, string(command))
24
- end
25
-
26
- #---
27
-
28
- def args(default = [])
29
- return array(get(:args, default))
30
- end
31
-
32
- #---
33
-
34
- def args=args
35
- set(:args, array(args))
36
- end
37
-
38
- #---
39
-
40
- def flags(default = [])
41
- return array(get(:flags, default))
42
- end
43
-
44
- #---
45
-
46
- def flags=flags
47
- set(:flags, array(flags))
48
- end
49
-
50
- #---
51
-
52
- def data(default = {})
53
- return hash(get(:data, default))
54
- end
55
-
56
- #---
57
-
58
- def data=data
59
- set(:data, hash(data))
60
- end
61
-
62
- #---
63
-
64
- def subcommand=subcommand
65
- unless Util::Data.empty?(subcommand)
66
- set(:subcommand, new(hash(subcommand)))
67
- end
68
- end
69
-
70
- #-----------------------------------------------------------------------------
71
- # Plugin operations
72
-
73
-
74
- #-----------------------------------------------------------------------------
75
- # Command operations
76
-
77
- def build(components = {}, overrides = nil, override_key = false)
78
- return '' # Implement in sub classes
79
- end
80
-
81
- #---
82
-
83
- def exec!(options = {}, overrides = nil)
84
- # Implement in sub classes (don't forget the yield!)
85
- return true
86
- end
87
-
88
- #---
89
-
90
- def exec(options = {}, overrides = nil)
91
- return exec!(options, overrides)
92
- end
93
- end
94
- end
95
- end
@@ -1,152 +0,0 @@
1
-
2
- module Coral
3
- module Plugin
4
- class Machine < Base
5
-
6
- #-----------------------------------------------------------------------------
7
- # Machine plugin interface
8
-
9
-
10
- #-----------------------------------------------------------------------------
11
- # Checks
12
-
13
- def created?
14
- return false
15
- end
16
-
17
- #---
18
-
19
- def running?
20
- return ( created? && false )
21
- end
22
-
23
- #-----------------------------------------------------------------------------
24
- # Property accessors / modifiers
25
-
26
- def hostname
27
- return get(:hostname, '')
28
- end
29
-
30
- #---
31
-
32
- def state
33
- return get(:state, nil)
34
- end
35
-
36
- #---
37
-
38
- def public_ip
39
- return get(:public_ip, nil)
40
- end
41
-
42
- #---
43
-
44
- def private_ip
45
- return get(:private_ip, nil)
46
- end
47
-
48
- #-----------------------------------------------------------------------------
49
- # Management
50
-
51
- def create(options = {})
52
- unless created?
53
-
54
- end
55
- return true
56
- end
57
-
58
- #---
59
-
60
- def start(options = {})
61
- unless running?
62
-
63
- end
64
- return true
65
- end
66
-
67
- #---
68
-
69
- def stop(options = {})
70
- if running?
71
-
72
- end
73
- return true
74
- end
75
-
76
- #---
77
-
78
- def reload(options = {})
79
- if created?
80
-
81
- end
82
- return true
83
- end
84
-
85
- #---
86
-
87
- def destroy(options = {})
88
- if created?
89
-
90
- end
91
- return true
92
- end
93
-
94
- #---
95
-
96
- def exec(options = {})
97
- if running?
98
- config = Config.ensure(options)
99
- if commands = config.delete(:commands)
100
- commands.each do |command|
101
- Util::Shell.exec!(command, config) do |line|
102
- yield(line) if block_given?
103
- end
104
- end
105
- end
106
- end
107
- return true
108
- end
109
-
110
- #---
111
-
112
- def provision(options = {})
113
- if running?
114
- config = Config.ensure(options)
115
-
116
- # TODO: Abstract this out so it does not depend on Puppet functionality.
117
-
118
- puppet = config.delete(:puppet, :puppet) # puppet (community) or puppetlabs (enterprise)
119
- command = Coral.command({
120
- :command => :puppet,
121
- :flags => config.delete(:puppet_flags, ''),
122
- :subcommand => {
123
- :command => config.delete(:puppet_op, :apply),
124
- :flags => config.delete(:puppet_op_flags, ''),
125
- :data => config.delete(:puppet_op_data, {}).merge({
126
- 'modulepath=' => array(config.delete(:puppet_modules, "/etc/#{puppet}/modules")).join(':')
127
- }),
128
- :args => config.delete(:puppet_manifest, "/etc/#{puppet}/manifests/site.pp")
129
- }
130
- }, config.get(:provider, :shell))
131
-
132
- config[:commands] = [ command.to_s ]
133
- return exec(config)
134
- end
135
- return true
136
- end
137
-
138
- #---
139
-
140
- def create_image(options = {})
141
- if created?
142
-
143
- end
144
- return true
145
- end
146
-
147
- #-----------------------------------------------------------------------------
148
- # Utilities
149
-
150
- end
151
- end
152
- end
@@ -1,24 +0,0 @@
1
-
2
- module Coral
3
- module Plugin
4
- class Network < Base
5
-
6
- ensure_plugin_collection
7
-
8
- #-----------------------------------------------------------------------------
9
- # Cloud plugin interface
10
-
11
- def normalize
12
- @config = Config::Project.new(self._export)
13
- super
14
-
15
- init_nodes
16
- end
17
-
18
- #-----------------------------------------------------------------------------
19
- # Property accessors / modifiers
20
-
21
- plugin_collection :node
22
- end
23
- end
24
- end
@@ -1,184 +0,0 @@
1
-
2
- module Coral
3
- module Plugin
4
- class Node < Base
5
-
6
- #-----------------------------------------------------------------------------
7
- # Node plugin interface
8
-
9
- def normalize
10
- super
11
- end
12
-
13
- #-----------------------------------------------------------------------------
14
- # Checks
15
-
16
-
17
- #-----------------------------------------------------------------------------
18
- # Property accessors / modifiers
19
-
20
- def network
21
- return plugin_parent
22
- end
23
-
24
- #---
25
-
26
- def network=network
27
- self.plugin_parent = network
28
- end
29
-
30
- #---
31
-
32
- def setting(property, default = nil, format = false)
33
- return network.node_setting(plugin_provider, name, property, default, format)
34
- end
35
-
36
- #---
37
-
38
- def search(property, default = nil, format = false)
39
- return network.search_node(plugin_provider, name, property, default, format)
40
- end
41
-
42
- #---
43
-
44
- def set_setting(property, value = nil)
45
- network.set_node_setting(plugin_provider, name, property, value)
46
- return self
47
- end
48
-
49
- #---
50
-
51
- def delete_setting(property)
52
- network.delete_node_setting(plugin_provider, name, property)
53
- return self
54
- end
55
-
56
- #-----------------------------------------------------------------------------
57
-
58
- def machine
59
- return get(:machine, nil)
60
- end
61
-
62
- #---
63
-
64
- def machine=machine
65
- set(:machine, machine)
66
- end
67
-
68
- #---
69
-
70
- def create_machine(provider, options = {})
71
- if provider.is_a?(String) || provider.is_a?(Symbol)
72
- set(:machine, Coral.machine(options, provider))
73
- end
74
- return self
75
- end
76
-
77
- #---
78
-
79
- def public_ip # Must be set at machine level
80
- return machine.public_ip if machine
81
- return nil
82
- end
83
-
84
- #---
85
-
86
- def private_ip # Must be set at machine level
87
- return machine.private_ip if machine
88
- return nil
89
- end
90
-
91
- #---
92
-
93
- def hostname # Must be set at machine level
94
- return machine.hostname if machine
95
- return ''
96
- end
97
-
98
- #---
99
-
100
- def state # Must be set at machine level
101
- return machine.state if machine
102
- return nil
103
- end
104
-
105
- #-----------------------------------------------------------------------------
106
- # Machine operations
107
-
108
- def start(options = {})
109
- return true unless machine
110
- return machine.start(options)
111
- end
112
-
113
- #---
114
-
115
- def stop(options = {})
116
- return true unless machine && machine.running?
117
- return machine.stop(options)
118
- end
119
-
120
- #---
121
-
122
- def reload(options = {})
123
- return true unless machine && machine.created?
124
- return machine.reload(options)
125
- end
126
-
127
- #---
128
-
129
- def destroy(options = {})
130
- return true unless machine
131
-
132
- config = Config.ensure(options)
133
-
134
- if machine.created?
135
- run = false
136
-
137
- if config[:force]
138
- run = true
139
- else
140
- choice = nil
141
- begin
142
- choice = ui.ask("Are you sure you want to remove: #{name}?")
143
- run = choice.upcase == "Y"
144
- rescue Errors::UIExpectsTTY
145
- run = false
146
- end
147
- end
148
-
149
- if run
150
- return machine.destroy(config)
151
- end
152
- end
153
- return true
154
- end
155
-
156
- #---
157
-
158
- def exec(commands, options = {})
159
- return true unless machine && machine.running?
160
-
161
- config = Config.ensure(options)
162
- return machine.exec(config.import({ :commands => commands }))
163
- end
164
-
165
- #---
166
-
167
- def provision(options = {})
168
- return true unless machine && machine.running?
169
- return machine.provision(options)
170
- end
171
-
172
- #---
173
-
174
- def create_image(options = {})
175
- return true unless machine && machine.running?
176
- return machine.create_image(options)
177
- end
178
-
179
- #-----------------------------------------------------------------------------
180
- # Utilities
181
-
182
- end
183
- end
184
- end