nucleon 0.1.0 → 0.1.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.
Files changed (62) hide show
  1. data/Gemfile +4 -8
  2. data/Gemfile.lock +0 -28
  3. data/README.rdoc +13 -5
  4. data/Rakefile +9 -1
  5. data/VERSION +1 -1
  6. data/bin/nucleon +55 -0
  7. data/lib/core/codes.rb +107 -0
  8. data/lib/core/config/collection.rb +57 -0
  9. data/lib/core/config/options.rb +70 -0
  10. data/lib/core/config.rb +342 -0
  11. data/lib/core/core.rb +54 -0
  12. data/lib/core/errors.rb +84 -0
  13. data/lib/core/facade.rb +283 -0
  14. data/lib/core/gems.rb +80 -0
  15. data/lib/core/manager.rb +594 -0
  16. data/lib/core/mixin/action/commit.rb +58 -0
  17. data/lib/core/mixin/action/project.rb +53 -0
  18. data/lib/core/mixin/action/push.rb +52 -0
  19. data/lib/core/mixin/config/collection.rb +53 -0
  20. data/lib/core/mixin/config/options.rb +39 -0
  21. data/lib/core/mixin/macro/object_interface.rb +361 -0
  22. data/lib/core/mixin/macro/plugin_interface.rb +380 -0
  23. data/lib/core/mixin/settings.rb +46 -0
  24. data/lib/core/mixin/sub_config.rb +148 -0
  25. data/lib/core/mod/hash.rb +29 -0
  26. data/lib/core/plugin/action.rb +371 -0
  27. data/lib/core/plugin/base.rb +313 -0
  28. data/lib/core/plugin/command.rb +98 -0
  29. data/lib/core/plugin/event.rb +53 -0
  30. data/lib/core/plugin/extension.rb +12 -0
  31. data/lib/core/plugin/project.rb +890 -0
  32. data/lib/core/plugin/template.rb +80 -0
  33. data/lib/core/plugin/translator.rb +38 -0
  34. data/lib/core/util/cli.rb +353 -0
  35. data/lib/core/util/console.rb +237 -0
  36. data/lib/core/util/data.rb +404 -0
  37. data/lib/core/util/disk.rb +114 -0
  38. data/lib/core/util/git.rb +43 -0
  39. data/lib/core/util/liquid.rb +17 -0
  40. data/lib/core/util/logger.rb +147 -0
  41. data/lib/core/util/package.rb +93 -0
  42. data/lib/core/util/shell.rb +239 -0
  43. data/lib/nucleon/action/add.rb +69 -0
  44. data/lib/nucleon/action/create.rb +52 -0
  45. data/lib/nucleon/action/extract.rb +49 -0
  46. data/lib/nucleon/action/remove.rb +51 -0
  47. data/lib/nucleon/action/save.rb +53 -0
  48. data/lib/nucleon/action/update.rb +37 -0
  49. data/lib/nucleon/command/bash.rb +146 -0
  50. data/lib/nucleon/event/regex.rb +52 -0
  51. data/lib/nucleon/project/git.rb +465 -0
  52. data/lib/nucleon/project/github.rb +108 -0
  53. data/lib/nucleon/template/json.rb +16 -0
  54. data/lib/nucleon/template/wrapper.rb +16 -0
  55. data/lib/nucleon/template/yaml.rb +16 -0
  56. data/lib/nucleon/translator/json.rb +27 -0
  57. data/lib/nucleon/translator/yaml.rb +27 -0
  58. data/lib/nucleon.rb +18 -15
  59. data/locales/en.yml +3 -132
  60. data/nucleon.gemspec +66 -27
  61. data/spec/core/util/console_spec.rb +489 -0
  62. metadata +109 -96
@@ -0,0 +1,108 @@
1
+
2
+ nucleon_require(File.dirname(__FILE__), :git)
3
+
4
+ #---
5
+
6
+ module Nucleon
7
+ module Project
8
+ class Github < Git
9
+
10
+ #-----------------------------------------------------------------------------
11
+ # Project plugin interface
12
+
13
+ def normalize
14
+ if reference = delete(:reference, nil)
15
+ myself.name = reference
16
+ else
17
+ if url = get(:url, nil)
18
+ myself.name = url
19
+ set(:url, myself.class.expand_url(url, get(:ssh, false)))
20
+ end
21
+ end
22
+ super
23
+ end
24
+
25
+ #---
26
+
27
+ def set_connection
28
+ require 'octokit'
29
+
30
+ @client = Octokit::Client.new :netrc => true
31
+ @client.login
32
+ end
33
+
34
+ #-----------------------------------------------------------------------------
35
+ # Property accessor / modifiers
36
+
37
+ def client
38
+ set_connection unless @client
39
+ @client
40
+ end
41
+
42
+ #-----------------------------------------------------------------------------
43
+ # Project operations
44
+
45
+ def init_auth
46
+ super do
47
+ key_id = ENV['USER'] + '@' + lookup(:ipaddress)
48
+ ssh_key = public_key_str
49
+
50
+ if private_key && ssh_key
51
+ begin
52
+ deploy_keys = client.deploy_keys(self.name)
53
+ github_id = nil
54
+ keys_match = true
55
+
56
+ deploy_keys.each do |key_resource|
57
+ if key_resource.title == key_id
58
+ github_id = key_resource.id
59
+ keys_match = false if key_resource.key != ssh_key
60
+ break
61
+ end
62
+ end
63
+
64
+ if github_id
65
+ unless keys_match
66
+ client.edit_deploy_key(self.name, github_id, { :key => ssh_key })
67
+ verify_key
68
+ end
69
+ else
70
+ client.add_deploy_key(self.name, key_id, ssh_key)
71
+ verify_key
72
+ end
73
+
74
+ rescue Exception => error
75
+ logger.error(error.inspect)
76
+ logger.error(error.message)
77
+ logger.error(Util::Data.to_yaml(error.backtrace))
78
+
79
+ ui.error(error.message, { :prefix => false }) if error.message
80
+ end
81
+ end
82
+ end
83
+ end
84
+
85
+ #-----------------------------------------------------------------------------
86
+ # Utilities
87
+
88
+ def self.expand_url(path, editable = false)
89
+ if editable
90
+ protocol = 'git@'
91
+ separator = ':'
92
+ else
93
+ protocol = 'https://'
94
+ separator = '/'
95
+ end
96
+ return "#{protocol}github.com#{separator}" + path + '.git'
97
+ end
98
+
99
+ #---
100
+
101
+ def verify_key
102
+ Util::SSH.init_session('github.com', 'git', 22, private_key)
103
+ Util::SSH.close('github.com', 'git')
104
+ end
105
+ protected :verify_key
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,16 @@
1
+
2
+ module Nucleon
3
+ module Template
4
+ class Json < Plugin::Template
5
+
6
+ #-----------------------------------------------------------------------------
7
+ # Renderers
8
+
9
+ def render_processed(data)
10
+ return super do
11
+ Util::Data.to_json(data)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+
2
+ module Nucleon
3
+ module Template
4
+ class Wrapper < Plugin::Template
5
+
6
+ #-----------------------------------------------------------------------------
7
+ # Renderers
8
+
9
+ def render_processed(data)
10
+ return super do
11
+ get(:template_prefix, '') + data.to_s + get(:template_suffix, '')
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+
2
+ module Nucleon
3
+ module Template
4
+ class Yaml < Plugin::Template
5
+
6
+ #-----------------------------------------------------------------------------
7
+ # Renderers
8
+
9
+ def render_processed(data)
10
+ return super do
11
+ Util::Data.to_yaml(data)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,27 @@
1
+
2
+ module Nucleon
3
+ module Translator
4
+ class Json < Plugin::Translator
5
+
6
+ #-----------------------------------------------------------------------------
7
+ # Translator operations
8
+
9
+ def parse(json_text)
10
+ return super do |properties|
11
+ if json_text && ! json_text.empty?
12
+ properties = Util::Data.parse_json(json_text)
13
+ end
14
+ properties
15
+ end
16
+ end
17
+
18
+ #---
19
+
20
+ def generate(properties)
21
+ return super do
22
+ Util::Data.to_json(properties, get(:pretty, true))
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+
2
+ module Nucleon
3
+ module Translator
4
+ class Yaml < Plugin::Translator
5
+
6
+ #-----------------------------------------------------------------------------
7
+ # Translator operations
8
+
9
+ def parse(yaml_text)
10
+ return super do |properties|
11
+ if yaml_text && ! yaml_text.empty?
12
+ properties = Util::Data.parse_yaml(yaml_text)
13
+ end
14
+ properties
15
+ end
16
+ end
17
+
18
+ #---
19
+
20
+ def generate(properties)
21
+ return super do
22
+ Util::Data.to_yaml(properties)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
data/lib/nucleon.rb CHANGED
@@ -60,10 +60,10 @@ module Kernel
60
60
  end
61
61
 
62
62
  #-------------------------------------------------------------------------------
63
- # Top level properties
63
+ # Load paths
64
64
 
65
65
  lib_dir = File.dirname(__FILE__)
66
- core_dir = File.join(lib_dir, 'nucleon')
66
+ core_dir = File.join(lib_dir, 'core')
67
67
  mixin_dir = File.join(core_dir, 'mixin')
68
68
  mixin_config_dir = File.join(mixin_dir, 'config')
69
69
  mixin_action_dir = File.join(mixin_dir, 'action')
@@ -75,25 +75,25 @@ plugin_dir = File.join(core_dir, 'plugin')
75
75
  #-------------------------------------------------------------------------------
76
76
  # Coral requirements
77
77
 
78
- git_location = nucleon_locate('git')
79
-
80
78
  $:.unshift(lib_dir) unless $:.include?(lib_dir) || $:.include?(File.expand_path(lib_dir))
81
79
 
82
80
  #---
83
81
 
84
82
  require 'rubygems'
85
83
 
84
+ require 'optparse'
86
85
  require 'pp'
87
86
  require 'i18n'
88
87
  require 'log4r'
89
88
  require 'log4r/configurator'
90
- require 'base64'
91
89
  require 'deep_merge'
92
- require 'facter'
90
+
91
+ require 'digest/sha1'
92
+ require 'base64'
93
+
93
94
  require 'yaml'
94
95
  require 'multi_json'
95
- require 'digest/sha1'
96
- require 'optparse'
96
+
97
97
  require 'thread' # Eventually depreciated
98
98
  require 'celluloid'
99
99
  require 'celluloid/autostart'
@@ -107,13 +107,18 @@ I18n.load_path << File.expand_path(File.join('..', 'locales', 'en.yml'), lib_dir
107
107
 
108
108
  #---
109
109
 
110
- if git_location
110
+ if nucleon_locate('git')
111
111
  require 'grit'
112
112
  nucleon_require(util_dir, :git)
113
113
  end
114
114
 
115
115
  #---
116
116
 
117
+ # Make sure logger is at the top of our load order priorities
118
+ nucleon_require(util_dir, :logger)
119
+
120
+ #---
121
+
117
122
  # Object modifications (100% pure monkey patches)
118
123
  Dir.glob(File.join(mod_dir, '*.rb')).each do |file|
119
124
  require file
@@ -142,7 +147,7 @@ nucleon_require(core_dir, :errors)
142
147
  nucleon_require(core_dir, :codes)
143
148
  nucleon_require(util_dir, :data)
144
149
  nucleon_require(core_dir, :config)
145
- nucleon_require(util_dir, :interface)
150
+ nucleon_require(util_dir, :console)
146
151
  nucleon_require(core_dir, :core)
147
152
 
148
153
  #---
@@ -157,7 +162,7 @@ nucleon_require(core_dir, :core)
157
162
  nucleon_require(util_dir, name)
158
163
  end
159
164
 
160
- # Include core systems
165
+ # Include plugin system
161
166
  nucleon_require(core_dir, :facade)
162
167
  nucleon_require(core_dir, :gems)
163
168
  nucleon_require(core_dir, :manager)
@@ -165,8 +170,6 @@ nucleon_require(plugin_dir, :base)
165
170
  nucleon_require(core_dir, :plugin)
166
171
 
167
172
  #-------------------------------------------------------------------------------
168
- # Basic information
173
+ # Nucleon initialization
169
174
 
170
- module Nucleon
171
- VERSION = File.read(File.join(File.dirname(__FILE__), '..', 'VERSION'))
172
- end
175
+ Nucleon.reload
data/locales/en.yml CHANGED
@@ -25,7 +25,7 @@ en:
25
25
  project:
26
26
  options:
27
27
  provider: |-
28
- Coral plugin provider to use for this project (default %{default_value})
28
+ Nucleon plugin provider to use for this project (default %{default_value})
29
29
  reference: |-
30
30
  Project URL or reference string to set as primary remote (default %{default_value})
31
31
  revision: |-
@@ -52,57 +52,6 @@ en:
52
52
  Remote name to push to (default %{default_value})
53
53
  revision: |-
54
54
  Branch to push (default %{default_value})
55
- node:
56
- options:
57
- parallel: |-
58
- Enable parallelism of node action execution (default %{default_value})
59
- net_provider: |-
60
- Coral network provider to use for managing cloud nodes (default %{default_value})
61
- node_provider: |-
62
- Default to using a specific node provider but individual node references can override (default %{default_value})
63
- nodes: |-
64
- Optional nodes on which to execute this action
65
- errors:
66
- network_provider: |-
67
- Network plugin provider %{value} is not loaded >> Pick from the following: %{choices}
68
- node_provider: |-
69
- Node plugin provider %{value} is not loaded >> Pick from the following: %{choices}
70
- nodes: |-
71
- Node reference %{value} failed to parse or provider %{provider} isn't loaded (%{name})
72
- keypair:
73
- options:
74
- private_key: |-
75
- Optional existing private SSH key to use for SSH communication (new keys are generated by default)
76
- require_password: |-
77
- Require and prompt for a password for generated keys (default %{default_value})
78
- key_type: |-
79
- Type of SSH key to generate (default %{default_value})
80
- key_bits: |-
81
- Strength of generated key encryption in bits (default %{default_value})
82
- key_comment: |-
83
- Optional key comment (attached at the end of the public key)
84
- errors:
85
- private_key_not_found: |-
86
- Private key %{value} not found
87
- private_key_parse_error: |-
88
- Private key %{value} failed to parse and can not be accepted as a valid private SSH key
89
- key_type: |-
90
- SSH key type %{value} not supported >> Pick from the following: %{choices}
91
- key_bits: |-
92
- Encryption strength must be greater than %{required} bits (%{value} specified)
93
- no_password: |-
94
- Password verification of private key was terminated (verification required to use encrypted SSH keys)
95
- exec:
96
- help:
97
- usage: |-
98
- Usage
99
- header: |-
100
- Available actions
101
- footer: |-
102
- For help on any individual action run `coral <action> -h`
103
- errors:
104
- missing_argument: |-
105
- Argument <%{name}> must be specified
106
55
  actions:
107
56
  extract:
108
57
  options:
@@ -128,7 +77,7 @@ en:
128
77
  add:
129
78
  options:
130
79
  sub_reference: |-
131
- Repository URL of Coral component (module or library) to include in the project
80
+ Repository URL of Nucleon component (module or library) to include in the project
132
81
  sub_path: |-
133
82
  Subproject path
134
83
  editable: |-
@@ -151,82 +100,4 @@ en:
151
100
  files: |-
152
101
  Optional space separated list of files to save
153
102
  start: |-
154
- Saving project changes with provider %{project_provider} (ref: %{reference} rev: %{revision})
155
- images:
156
- options:
157
- match_case: |-
158
- Match case on any search terms given when searching for images (default %{default_value})
159
- require_all: |-
160
- Require all search terms to be present in image descriptions to be included (default %{default_value})
161
- provider: |-
162
- Node provider to retrieve images for
163
- search: |-
164
- Optional array of search terms to filter image results
165
- start: |-
166
- Retrieving a list of defined images from %{node_provider}
167
- results: |-
168
- Total of %{images} images found
169
- machines:
170
- options:
171
- node_provider: |-
172
- Node provider to retrieve machine types
173
- start: |-
174
- Retrieving a list of available machines from %{node_provider}
175
- results: |-
176
- Total of %{machines} machine types found
177
- spawn:
178
- options:
179
- parallel: |-
180
- Enable or disable parallelism of node creation (default %{default_value})
181
- seed: |-
182
- Coral project reference with cloud project to seed new machines with (default %{default_value})
183
- region: |-
184
- Machine provider region in which to create the machines (defaults to first defined in provider)
185
- machine_type: |-
186
- Provider ID of machine type to create (defaults to first defined in provider - usually smallest)
187
- provider: |-
188
- Create machines with this node provider
189
- image: |-
190
- Provider ID of operating system image on which to initialize the new machines
191
- hostnames: |-
192
- Hostnames of machines to create on provider infrastructure
193
- start: |-
194
- Spawning new machines on %{provider}
195
- bootstrap:
196
- options:
197
- bootstrap_path: |-
198
- Bootstrap script top level local directory (default %{default_value})
199
- bootstrap_init: |-
200
- Gateway bootstrap script within the bootstrap project directory (default %{default_value})
201
- bootstrap_glob: |-
202
- Path glob to use in searching bootstrap scripts for remote execution (default %{default_value})
203
- auth_files: |-
204
- Any additional authorization or state files to pass to the node during bootstrap (relative to local home)
205
- home_env_var: |-
206
- Home directory environment variable on remote server (default %{default_value})
207
- home: |-
208
- Specified home directory on remote server (default %{default_value})
209
- bootstrap_nodes: |-
210
- Node references to bootstrap
211
- errors:
212
- bootstrap_path: |-
213
- Bootstrap path must be an existing directory
214
- auth_files: |-
215
- Authorization file %{value} does not exist on the local system
216
- bootstrap_nodes: |-
217
- Provider %{node_provider} node %{name} is not a valid node to bootstrap (%{value} given)
218
- start: |-
219
- Starting bootstrap of machine %{hostname} (%{id})
220
- success: |-
221
- Machine %{hostname} (%{id}) successfully bootstrapped
222
- exec:
223
- options:
224
- command: |-
225
- Command line executable and arguments to execute on machine
226
- seed:
227
- options:
228
- home: |-
229
- Home directory in which to initialize the deploy SSH keys (default %default_value})
230
- errors:
231
- project_reference: |-
232
- Project reference %{value} failed to parse or provider %{provider} isn't loaded >> Possible providers: %{choices}
103
+ Saving project changes with provider %{project_provider} (ref: %{reference} rev: %{revision})
data/nucleon.gemspec CHANGED
@@ -5,13 +5,14 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "nucleon"
8
- s.version = "0.1.0"
8
+ s.version = "0.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Adrian Webb"]
12
- s.date = "2014-02-19"
13
- s.description = "Framework that provides a simple foundation for building distributively configured, extremely pluggable and extendable, and easily parallel Ruby applications"
12
+ s.date = "2014-02-21"
13
+ s.description = "\nA framework that provides a simple foundation for building Ruby applications that are:\n\n* Highly configurable (with both distributed and persistent configurations)\n* Extremely pluggable and extendable\n* Easily parallel\n\nNote: This framework is still very early in development!\n"
14
14
  s.email = "adrian.webb@coralnexus.com"
15
+ s.executables = ["nucleon"]
15
16
  s.extra_rdoc_files = [
16
17
  "LICENSE.txt",
17
18
  "README.rdoc"
@@ -24,11 +25,64 @@ Gem::Specification.new do |s|
24
25
  "README.rdoc",
25
26
  "Rakefile",
26
27
  "VERSION",
28
+ "bin/nucleon",
29
+ "lib/core/codes.rb",
30
+ "lib/core/config.rb",
31
+ "lib/core/config/collection.rb",
32
+ "lib/core/config/options.rb",
33
+ "lib/core/core.rb",
34
+ "lib/core/errors.rb",
35
+ "lib/core/facade.rb",
36
+ "lib/core/gems.rb",
37
+ "lib/core/manager.rb",
38
+ "lib/core/mixin/action/commit.rb",
39
+ "lib/core/mixin/action/project.rb",
40
+ "lib/core/mixin/action/push.rb",
41
+ "lib/core/mixin/config/collection.rb",
42
+ "lib/core/mixin/config/options.rb",
43
+ "lib/core/mixin/macro/object_interface.rb",
44
+ "lib/core/mixin/macro/plugin_interface.rb",
45
+ "lib/core/mixin/settings.rb",
46
+ "lib/core/mixin/sub_config.rb",
47
+ "lib/core/mod/hash.rb",
48
+ "lib/core/plugin/action.rb",
49
+ "lib/core/plugin/base.rb",
50
+ "lib/core/plugin/command.rb",
51
+ "lib/core/plugin/event.rb",
52
+ "lib/core/plugin/extension.rb",
53
+ "lib/core/plugin/project.rb",
54
+ "lib/core/plugin/template.rb",
55
+ "lib/core/plugin/translator.rb",
56
+ "lib/core/util/cli.rb",
57
+ "lib/core/util/console.rb",
58
+ "lib/core/util/data.rb",
59
+ "lib/core/util/disk.rb",
60
+ "lib/core/util/git.rb",
61
+ "lib/core/util/liquid.rb",
62
+ "lib/core/util/logger.rb",
63
+ "lib/core/util/package.rb",
64
+ "lib/core/util/shell.rb",
27
65
  "lib/nucleon.rb",
66
+ "lib/nucleon/action/add.rb",
67
+ "lib/nucleon/action/create.rb",
68
+ "lib/nucleon/action/extract.rb",
69
+ "lib/nucleon/action/remove.rb",
70
+ "lib/nucleon/action/save.rb",
71
+ "lib/nucleon/action/update.rb",
72
+ "lib/nucleon/command/bash.rb",
73
+ "lib/nucleon/event/regex.rb",
74
+ "lib/nucleon/project/git.rb",
75
+ "lib/nucleon/project/github.rb",
76
+ "lib/nucleon/template/json.rb",
77
+ "lib/nucleon/template/wrapper.rb",
78
+ "lib/nucleon/template/yaml.rb",
79
+ "lib/nucleon/translator/json.rb",
80
+ "lib/nucleon/translator/yaml.rb",
28
81
  "locales/en.yml",
29
82
  "nucleon.gemspec",
30
83
  "spec/coral_mock_input.rb",
31
84
  "spec/coral_test_kernel.rb",
85
+ "spec/core/util/console_spec.rb",
32
86
  "spec/spec_helper.rb"
33
87
  ]
34
88
  s.homepage = "http://github.com/coralnexus/nucleon"
@@ -46,18 +100,13 @@ Gem::Specification.new do |s|
46
100
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
47
101
  s.add_runtime_dependency(%q<log4r>, ["~> 1.1"])
48
102
  s.add_runtime_dependency(%q<i18n>, ["~> 0.6"])
103
+ s.add_runtime_dependency(%q<rgen>, ["~> 0.6"])
104
+ s.add_runtime_dependency(%q<netrc>, ["~> 0.7"])
49
105
  s.add_runtime_dependency(%q<deep_merge>, ["~> 1.0"])
50
- s.add_runtime_dependency(%q<celluloid>, ["~> 0.15"])
51
- s.add_runtime_dependency(%q<sshkey>, ["~> 1.6"])
52
- s.add_runtime_dependency(%q<hiera>, ["~> 1.3"])
53
106
  s.add_runtime_dependency(%q<multi_json>, ["~> 1.7"])
54
107
  s.add_runtime_dependency(%q<grit>, ["~> 2.5"])
55
108
  s.add_runtime_dependency(%q<octokit>, ["~> 2.7"])
56
- s.add_runtime_dependency(%q<netrc>, ["~> 0.7"])
57
- s.add_runtime_dependency(%q<fog>, ["~> 1.20"])
58
- s.add_runtime_dependency(%q<rgen>, ["~> 0.6"])
59
- s.add_runtime_dependency(%q<facter>, ["~> 1.7"])
60
- s.add_runtime_dependency(%q<puppet>, ["~> 3.2"])
109
+ s.add_runtime_dependency(%q<celluloid>, ["~> 0.15"])
61
110
  s.add_development_dependency(%q<bundler>, ["~> 1.2"])
62
111
  s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
63
112
  s.add_development_dependency(%q<rspec>, ["~> 2.10"])
@@ -66,18 +115,13 @@ Gem::Specification.new do |s|
66
115
  else
67
116
  s.add_dependency(%q<log4r>, ["~> 1.1"])
68
117
  s.add_dependency(%q<i18n>, ["~> 0.6"])
118
+ s.add_dependency(%q<rgen>, ["~> 0.6"])
119
+ s.add_dependency(%q<netrc>, ["~> 0.7"])
69
120
  s.add_dependency(%q<deep_merge>, ["~> 1.0"])
70
- s.add_dependency(%q<celluloid>, ["~> 0.15"])
71
- s.add_dependency(%q<sshkey>, ["~> 1.6"])
72
- s.add_dependency(%q<hiera>, ["~> 1.3"])
73
121
  s.add_dependency(%q<multi_json>, ["~> 1.7"])
74
122
  s.add_dependency(%q<grit>, ["~> 2.5"])
75
123
  s.add_dependency(%q<octokit>, ["~> 2.7"])
76
- s.add_dependency(%q<netrc>, ["~> 0.7"])
77
- s.add_dependency(%q<fog>, ["~> 1.20"])
78
- s.add_dependency(%q<rgen>, ["~> 0.6"])
79
- s.add_dependency(%q<facter>, ["~> 1.7"])
80
- s.add_dependency(%q<puppet>, ["~> 3.2"])
124
+ s.add_dependency(%q<celluloid>, ["~> 0.15"])
81
125
  s.add_dependency(%q<bundler>, ["~> 1.2"])
82
126
  s.add_dependency(%q<jeweler>, ["~> 2.0"])
83
127
  s.add_dependency(%q<rspec>, ["~> 2.10"])
@@ -87,18 +131,13 @@ Gem::Specification.new do |s|
87
131
  else
88
132
  s.add_dependency(%q<log4r>, ["~> 1.1"])
89
133
  s.add_dependency(%q<i18n>, ["~> 0.6"])
134
+ s.add_dependency(%q<rgen>, ["~> 0.6"])
135
+ s.add_dependency(%q<netrc>, ["~> 0.7"])
90
136
  s.add_dependency(%q<deep_merge>, ["~> 1.0"])
91
- s.add_dependency(%q<celluloid>, ["~> 0.15"])
92
- s.add_dependency(%q<sshkey>, ["~> 1.6"])
93
- s.add_dependency(%q<hiera>, ["~> 1.3"])
94
137
  s.add_dependency(%q<multi_json>, ["~> 1.7"])
95
138
  s.add_dependency(%q<grit>, ["~> 2.5"])
96
139
  s.add_dependency(%q<octokit>, ["~> 2.7"])
97
- s.add_dependency(%q<netrc>, ["~> 0.7"])
98
- s.add_dependency(%q<fog>, ["~> 1.20"])
99
- s.add_dependency(%q<rgen>, ["~> 0.6"])
100
- s.add_dependency(%q<facter>, ["~> 1.7"])
101
- s.add_dependency(%q<puppet>, ["~> 3.2"])
140
+ s.add_dependency(%q<celluloid>, ["~> 0.15"])
102
141
  s.add_dependency(%q<bundler>, ["~> 1.2"])
103
142
  s.add_dependency(%q<jeweler>, ["~> 2.0"])
104
143
  s.add_dependency(%q<rspec>, ["~> 2.10"])