nucleon 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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"])