guignol 0.3.0 → 0.3.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.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- guignol (0.3.0)
4
+ guignol (0.3.1)
5
5
  active_support
6
6
  fog (~> 1.6.0)
7
7
  parallel (~> 0.5.14)
data/README.md CHANGED
@@ -149,6 +149,23 @@ Note that Guignol does not delete volumes when tearing down instances.
149
149
 
150
150
 
151
151
 
152
+ ## "User data" boot script
153
+
154
+ EC2 instances will run the script passed as `user_data` at boot time, letting you perform one-time setup.
155
+
156
+ Guignol parses this setting through ERB, and lets your access the configuration hash.
157
+ Possible use case:
158
+
159
+ # ~/.guignol.yml
160
+ ---
161
+ hello-world:
162
+ :uuid: AF123799-3F55-4F0B-8E58-87C67A5977BA
163
+ :domain: example.com
164
+ :user_data: |
165
+ #!/bin/sh
166
+ echo "<%= name %>.<%= domain %>" > /etc/hostname
167
+
168
+
152
169
  ## Managing existing instances
153
170
 
154
171
 
@@ -1,4 +1,4 @@
1
-
1
+ require 'erb'
2
2
  require 'yaml'
3
3
  require 'fog'
4
4
  require 'active_support/core_ext/hash/slice'
@@ -6,13 +6,22 @@ require 'guignol'
6
6
  require 'guignol/models/base'
7
7
  require 'guignol/models/volume'
8
8
 
9
- require 'pry'
10
-
11
9
  module Guignol::Models
12
10
  class Instance < Base
13
11
  class Error < Exception; end
14
12
 
13
+ class HashERB < OpenStruct
14
+ def parse(data)
15
+ ERB.new(data).result(binding)
16
+ end
17
+ end
18
+
15
19
  def initialize(name, options)
20
+ if options[:user_data]
21
+ options[:name] = name
22
+ options[:user_data] = HashERB.new(options).parse(options[:user_data])
23
+ end
24
+
16
25
  super
17
26
  subject.username = options[:username] if options[:username] && exists?
18
27
  end
@@ -24,7 +33,7 @@ module Guignol::Models
24
33
 
25
34
  def create
26
35
  log "server already exists" and return self if exist?
27
-
36
+
28
37
  create_options = Guignol::DefaultServerOptions.merge options.slice(:image_id, :flavor_id, :key_name, :security_group_ids, :user_data, :username)
29
38
 
30
39
  # check for pre-existing volume(s). if any exist, add their AZ to the server's options
@@ -1,4 +1,4 @@
1
1
 
2
2
  module Guignol
3
- VERSION = "0.3.0"
3
+ VERSION = "0.3.1"
4
4
  end
@@ -7,7 +7,7 @@ describe Guignol::Configuration do
7
7
  let(:result) { subject.configuration }
8
8
 
9
9
  before do
10
- ENV['GUIGNOL_YML'] = test_path
10
+ ENV['GUIGNOL_YML'] = test_path.to_s
11
11
  test_path.open('w') do |io|
12
12
  io.write config_data
13
13
  end
@@ -28,6 +28,12 @@ describe Guignol::Models::Instance do
28
28
  it 'should pass with minimal options' do
29
29
  subject
30
30
  end
31
+
32
+ it 'parses ERB in user data' do
33
+ options[:foo] = 'bar'
34
+ options[:user_data] = "foo=<%= foo %>,<%= name %>"
35
+ subject.options[:user_data].should == 'foo=bar,foobar'
36
+ end
31
37
  end
32
38
 
33
39
 
data/spec/spec_helper.rb CHANGED
@@ -8,5 +8,7 @@ ENV['GUIGNOL_ENV'] = 'test'
8
8
  ENV['GUIGNOL_LOG'] = '/dev/null'
9
9
 
10
10
  RSpec.configure do |config|
11
- # nib
11
+ config.before do
12
+ Fog::Mock.reset
13
+ end
12
14
  end
metadata CHANGED
@@ -1,181 +1,185 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: guignol
3
- version: !ruby/object:Gem::Version
4
- hash: 19
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.1
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 3
9
- - 0
10
- version: 0.3.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Julien Letessier
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-09-30 00:00:00 +01:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- requirement: &id001 !ruby/object:Gem::Requirement
12
+ date: 2012-10-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
23
17
  none: false
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- hash: 23
28
- segments:
29
- - 1
30
- - 0
31
- - 0
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
32
21
  version: 1.0.0
33
- prerelease: false
34
- name: bundler
35
22
  type: :development
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- requirement: &id002 !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.0.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
39
33
  none: false
40
- requirements:
34
+ requirements:
41
35
  - - ~>
42
- - !ruby/object:Gem::Version
43
- hash: 31
44
- segments:
45
- - 2
46
- - 4
47
- - 0
36
+ - !ruby/object:Gem::Version
48
37
  version: 2.4.0
49
- prerelease: false
50
- name: rspec
51
38
  type: :development
52
- version_requirements: *id002
53
- - !ruby/object:Gem::Dependency
54
- requirement: &id003 !ruby/object:Gem::Requirement
55
- none: false
56
- requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- hash: 3
60
- segments:
61
- - 0
62
- version: "0"
63
39
  prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 2.4.0
46
+ - !ruby/object:Gem::Dependency
64
47
  name: rake
65
- type: :development
66
- version_requirements: *id003
67
- - !ruby/object:Gem::Dependency
68
- requirement: &id004 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
69
49
  none: false
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- hash: 3
74
- segments:
75
- - 0
76
- version: "0"
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
77
55
  prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
78
63
  name: pry
79
- type: :development
80
- version_requirements: *id004
81
- - !ruby/object:Gem::Dependency
82
- requirement: &id005 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
83
65
  none: false
84
- requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- hash: 3
88
- segments:
89
- - 0
90
- version: "0"
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
91
71
  prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
92
79
  name: pry-nav
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
93
86
  type: :development
94
- version_requirements: *id005
95
- - !ruby/object:Gem::Dependency
96
- requirement: &id006 !ruby/object:Gem::Requirement
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: fog
96
+ requirement: !ruby/object:Gem::Requirement
97
97
  none: false
98
- requirements:
98
+ requirements:
99
99
  - - ~>
100
- - !ruby/object:Gem::Version
101
- hash: 15
102
- segments:
103
- - 1
104
- - 6
105
- - 0
100
+ - !ruby/object:Gem::Version
106
101
  version: 1.6.0
107
- prerelease: false
108
- name: fog
109
102
  type: :runtime
110
- version_requirements: *id006
111
- - !ruby/object:Gem::Dependency
112
- requirement: &id007 !ruby/object:Gem::Requirement
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
113
105
  none: false
114
- requirements:
106
+ requirements:
115
107
  - - ~>
116
- - !ruby/object:Gem::Version
117
- hash: 23
118
- segments:
119
- - 0
120
- - 5
121
- - 14
122
- version: 0.5.14
123
- prerelease: false
108
+ - !ruby/object:Gem::Version
109
+ version: 1.6.0
110
+ - !ruby/object:Gem::Dependency
124
111
  name: parallel
125
- type: :runtime
126
- version_requirements: *id007
127
- - !ruby/object:Gem::Dependency
128
- requirement: &id008 !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
129
113
  none: false
130
- requirements:
131
- - - ">="
132
- - !ruby/object:Gem::Version
133
- hash: 3
134
- segments:
135
- - 0
136
- version: "0"
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 0.5.14
118
+ type: :runtime
137
119
  prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: 0.5.14
126
+ - !ruby/object:Gem::Dependency
138
127
  name: active_support
139
- type: :runtime
140
- version_requirements: *id008
141
- - !ruby/object:Gem::Dependency
142
- requirement: &id009 !ruby/object:Gem::Requirement
128
+ requirement: !ruby/object:Gem::Requirement
143
129
  none: false
144
- requirements:
145
- - - ">="
146
- - !ruby/object:Gem::Version
147
- hash: 3
148
- segments:
149
- - 0
150
- version: "0"
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :runtime
151
135
  prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ - !ruby/object:Gem::Dependency
152
143
  name: uuidtools
153
- type: :runtime
154
- version_requirements: *id009
155
- - !ruby/object:Gem::Dependency
156
- requirement: &id010 !ruby/object:Gem::Requirement
144
+ requirement: !ruby/object:Gem::Requirement
157
145
  none: false
158
- requirements:
159
- - - ">="
160
- - !ruby/object:Gem::Version
161
- hash: 3
162
- segments:
163
- - 0
164
- version: "0"
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :runtime
165
151
  prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ - !ruby/object:Gem::Dependency
166
159
  name: thor
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
167
166
  type: :runtime
168
- version_requirements: *id010
169
- description: "\n Create, start, stop, destroy instances from the command line\n based on a YAML description of your instances.\n "
170
- email:
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ description: ! "\n Create, start, stop, destroy instances from the command line\n
175
+ \ based on a YAML description of your instances.\n "
176
+ email:
171
177
  - julien.letessier@gmail.com
172
- executables:
178
+ executables:
173
179
  - guignol
174
180
  extensions: []
175
-
176
181
  extra_rdoc_files: []
177
-
178
- files:
182
+ files:
179
183
  - .gitignore
180
184
  - .rspec
181
185
  - Gemfile
@@ -214,43 +218,34 @@ files:
214
218
  - spec/spec.opts
215
219
  - spec/spec_helper.rb
216
220
  - tmp/.keepme
217
- has_rdoc: true
218
221
  homepage: https://github.com/mezis/guignol
219
222
  licenses: []
220
-
221
223
  post_install_message:
222
224
  rdoc_options: []
223
-
224
- require_paths:
225
+ require_paths:
225
226
  - lib
226
- required_ruby_version: !ruby/object:Gem::Requirement
227
+ required_ruby_version: !ruby/object:Gem::Requirement
227
228
  none: false
228
- requirements:
229
- - - ">="
230
- - !ruby/object:Gem::Version
231
- hash: 3
232
- segments:
229
+ requirements:
230
+ - - ! '>='
231
+ - !ruby/object:Gem::Version
232
+ version: '0'
233
+ segments:
233
234
  - 0
234
- version: "0"
235
- required_rubygems_version: !ruby/object:Gem::Requirement
235
+ hash: 2633968983297838480
236
+ required_rubygems_version: !ruby/object:Gem::Requirement
236
237
  none: false
237
- requirements:
238
- - - ">="
239
- - !ruby/object:Gem::Version
240
- hash: 23
241
- segments:
242
- - 1
243
- - 3
244
- - 6
238
+ requirements:
239
+ - - ! '>='
240
+ - !ruby/object:Gem::Version
245
241
  version: 1.3.6
246
242
  requirements: []
247
-
248
243
  rubyforge_project:
249
- rubygems_version: 1.3.9.5
244
+ rubygems_version: 1.8.23
250
245
  signing_key:
251
246
  specification_version: 3
252
247
  summary: Manipulate Amazon EC2 instances
253
- test_files:
248
+ test_files:
254
249
  - spec/guignol/configuration_spec.rb
255
250
  - spec/guignol/instance_spec.rb
256
251
  - spec/guignol/volume_spec.rb